Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Chciałbym wykonać w Cronie takie zadanie: codziennie od poniedziałku do piątku o godz. 19.01 ma być wyłączany dostęp do internetu określonej puli adresów.
Kolejne zadanie to: codziennie od poniedziałku do piątku o godz. 8.01 włączanie dostępu do internetu określonej puli adresów.
Sytuacja podobna w sobotę: dostęp do internetu miałby być włączony w godzinach 9.01 - 15.01 (w niedzielę niedostępny)
Podsumowywując chcę, aby użytkownicy mieli dostęp do internetu od poniedziałku do piątku w godzinach od 8.01 do 19.01, w sobotę w godzinach od 8.01 do 15.01, w niedzielę niedostępny.
Wymyśliłem takie zapisy w cronie, czy moglibyście je sprawdzić pod kątem poprawności?
1 19 * * 1-5 iptables -I FORWARD -s 10.0.1.0/24 -j DROP 1 8 * * 1-5 iptables -I FORWARD -s 10.0.1.0/24 -j ACCEPT 1 8 * * 6 iptables -I FORWARD -s 10.0.1.0/24 -j ACCEPT 1 15 * * 6 iptables -I FORWARD -s 10.0.1.0/24 -j DROP
Ostatnio edytowany przez Luc3k (2013-03-22 12:45:52)
Offline
Kasowania starych reguł brakuje na pewno, po jakimś czasie będziesz miał niezłą litanie :)
Offline
Napisz skrypt z potrzebnymi regułkami iptables (kasowanie starych reguł, ustawianie nowych, itp.) i go wywołuj z crona...
Offline
zerknij na moduł time w iptables
https://pl.wikibooks.org/wiki/Sieci_w_Linuksie/Netfilter/iptables/dopasowania#-m_time
http://www.cyberciti.biz/tips/iptables-for-restricting-access-by-time-of-day.html
Offline
[quote=andreq]Napisz skrypt z potrzebnymi regułkami iptables (kasowanie starych reguł, ustawianie nowych, itp.) i go wywołuj z crona...[/quote]
Idee takiego skryptu mam w głowie, tylko jak przedstawić go w formie skryptu? Możesz coś podpowiedzieć?
A gdyby podczas uruchamiania systemu uruchomić takie regulki (pomijając tym samym uruchamianie ich w Cronie):
iptables -I FORWARD -s 10.0.1.0/24 -j DROP iptables -I FORWARD -s 10.0.1.0/24 -m time --timestart 08:00 --timestop 19:00 --days Mon,Tue,Wed,Thu,Fri -j ACCEPT iptables -I FORWARD -s 10.0.1.0/24 -m time --timestart 08:00 --timestop 15:00 --days Sat -j ACCEPT
I tylko w tych godzinach jest dostęp do Internetu. Pytanie tylko czy tak skonstruowane reguły odetną dostęp po godzinie 19ej i po godzinie 15ej?
Ostatnio edytowany przez Luc3k (2013-03-26 12:48:08)
Offline
Może wystarczy skorzystać ze standardowego [tt]iptables-restore[/tt], który by ustawiał firewall przez /etc/network/if-pre-up.d/ wraz z podnoszeniem interfejsu + to co napisał svL
Ostatnio edytowany przez yossarian (2013-03-26 13:53:02)
Offline
Wymyśliłem jeszcze coś prostszego lecz z sugestią usuwania wpisów:
1 19 * * 1-5 iptables -I FORWARD -s 10.0.1.0/24 -j DROP 1 8 * * 1-6 iptables -D FORWARD -s 10.0.1.0/24 -j DROP 1 15 * * 6 iptables -I FORWARD -s 10.0.1.0/24 -j DROP
Offline
Alleeee lama, aleeeee lama, lama, lama, alleeee lama. ;)
Zamiast rzeźbić w Cronie, przestań się lepiej ośmieszać, i zajrzyj do mana iptables.
RTFM:
man iptables iptables -m time --help
[url]http://pl.wikibooks.org/wiki/Sieci:Linux/Netfilter/iptables/dopasowania[/url]
Moduł time firewalla jest dokładnie do tego, co próbujesz wyrzeźbić w Cronie.
I 5 razy latwiej go ustawić, niż przez Crona.
Tutaj dobrze zacząłeś:
http://forum.dug.net.pl/viewtopic.php?pid=228749#p228749
i po prostu to popraw i dokończ.
To by było na tyle
;-)
Ostatnio edytowany przez Jacekalex (2013-03-27 08:31:38)
Offline
Nie zmierzam nikogo obrażać, ale sklonić do myślenia.
Być może trochę zbyt dosadnie, to możliwe, przepraszam.
Poza tym nuciłem jedną z ulubionych [url=https://www.youtube.com/watch?v=AIgMYiKEyUg]melodii[/url]. :D
Ostatnio edytowany przez Jacekalex (2013-03-27 08:42:14)
Offline
Ktoś mnie wołał? :-D
Offline
Po co czekać? Możesz Wheezy'ego teraz zainstalować.
Offline
Już ostatnie szlify. Są dystrybucje, które przyklejają napis „stabilny” do zdecydowanie niedopracowanych wydań i nikt z tego powodu afery nie robi.
Na tym etapie wydawania Wheezy'ego można już go spokojnie instalować.
IMHO nie opłaca się teraz instalować Squeeze by za chwilę i tak aktualizować
Offline
[quote=Luc3k]Hmm... Jak to? Przecież jeszcze nie ma oficjalnej wersji stabilnej (?)[/quote]
No, normalnie… Z instalatora testinga.
Offline
Serwer przywrócony więc mogę wrócić do tematu.
Niestety nadal nie mogę uzyskać pożądanego efektu. Póki co wszystkie kombinacje testuję na jednym komputerze o adresie 10.0.1.104.
Konfiguracja firewalla dla tego komputera wygląda następująco:
iptables -t nat -A POSTROUTING -s 10.0.1.104/32 -j MASQUERADE iptables -A FORWARD -s 10.0.1.104/32 -j ACCEPT
Po uruchomieniu serwera, tablica dla tego komputera wygląda tak:
root@Alpha:/etc/init.d# iptables -nvL | grep 10.0.1.104 1 60 ACCEPT all -- * * 10.0.1.104 0.0.0.0/0
Wykonywałem różne kombinacje:
1.
iptables -A FORWARD -s 10.0.1.104 -m time --timestart 10:00 --timestop 10:15 --weekdays Mon,Tue,Wed,Thu,Fri -j DROP
root@Alpha:/etc/init.d# iptables -nvL | grep 10.0.1.104 1 60 ACCEPT all -- * * 10.0.1.104 0.0.0.0/0 0 0 DROP all -- * * 10.0.1.104 0.0.0.0/0 TIME from 10:00:00 to 10:15:00 on Mon,Tue,Wed,Thu,Fri
2.
iptables -A FORWARD -s 10.0.1.104 -j DROP
iptables -A FORWARD -s 10.0.1.104 -m time --timestart 10:00 --timestop 10:15 --weekdays Mon,Tue,Wed,Thu,Fri -j ACCEPT
niestety bez efektu, na podanym komputerze cały czas był dostęp do internetu. Gdzie popełniam błąd?
Ostatnio edytowany przez Luc3k (2013-04-22 10:42:13)
Offline
Wklej cały skrypt, chyba nie wpisujesz poleceń "z palca"?!
Offline
Z palca nie wpisuję reguł firewalla. Te zawarte są w /etc/init.d/firewall
Po uruchomieniu serwera stan iptables wygląda następująco: http://79.189.44.186/~kzgrzeblak/ip
Dopiero później - testując te i inne rozwiązania
iptables -A/I FORWARD -s 10.0.1.104 -j DROP iptables -A/I FORWARD -s 10.0.1.104 -m time --timestart 10:00 --timestop 10:15 --weekdays Mon,Tue,Wed,Thu,Fri -j ACCEPT
klepię różne kombinacje reguł z konsoli i obserwuję na docelowym komputerze efekty.
Tak wygląda /etc/init.d/firewall: http://79.189.44.186/~kzgrzeblak/firewall
Ostatnio edytowany przez Luc3k (2013-04-23 19:01:38)
Offline
Jak napisał Jacekalex dobrze zacząłeś ale potem się pogubiłeś...
Na początku czyścisz reguły, potem ustawiasz domyślną politykę INPUT i FORWARD na DROP, a OUTPUT na ACCEPT, potem puszczasz interfejs loopback i zezwalasz na połączenia nawiązane w łańcuchu INPUT, a dopiero potem zezwalaj na połączenia przy pomocy modułu time i puść maskaradę.
Poczytaj http://zsk.wsti.pl/publikacje/iptables_przystepnie.htm#c4_2 i http://www.gentoo.org/doc/pl/articles/linux-24-stateful-fw-design.xml Zwróć uwagę na to w jakiej kolejności wykonywane są reguły i gdzie trafiają poszczególne pakiety.
Offline
[quote=andreq]Poczytaj http://zsk.wsti.pl/publikacje/iptables_przystepnie.htm#c4_2 i http://www.gentoo.org/doc/pl/articles/linux-24-stateful-fw-design.xml[/quote]
Rewelacyjne są te artykuły, zapoznając się z nimi można udoskonalić swoją zaporę.
Mam jeszcze tylko jedno pytanie dotyczące dokumentu z artykułu pierwszego ("iptables - przystepnie"):
Konkretnie chodzi o samą maskaradę/nat, za pomocą której mogę udostępnić innym komputerom w sieci dostęp do internetu.
Do tej pory wykonywałem to w następujący sposób:
iptables -t nat -A POSTROUTING -s 10.0.0.2/32 -j MASQUERADE iptables -A FORWARD -s 10.0.0.2/32 -j ACCEPT . . . iptables -t nat -A POSTROUTING -s 10.0.0.100/32 -j MASQUERADE iptables -A FORWARD -s 10.0.0.100/32 -j ACCEPT
Czyli dla każdego z komputerów znajdujących się w sieci są utworzone takie wpisy, aby dostęp do internetu miały tylko komputery o konkretnych adresach ip.
W tym artykule można wyczytać, że jeżeli router ma stałe, niezmieniające się ip (a w moim przypadku tak właśnie jest, ponieważ mam DSL-a) to zamiast MASQUERADE należy użyć SNAT
przykład:
iptables -t nat -A POSTROUTING -s 10.0.0.2 -d 0.0.0.0/0 -j SNAT --to-source nasz_stały_adres_ip //adres 0.0.0.0/0 podany jako przeznaczenie pakietu oznacza w praktyce jakikolwiek adres IP
Jak należy rozumieć "-s 10.0.0.2" "-d 0.0.0.0/0" "--to-source nasz_stały_adres_ip"
Czy adres 10.0.0.2 to jest docelowy adres komputera w sieci, któremu udostępniamy internet i ten zapis należy powtórzyć dla każdego z komputerów w sieci?
Nie za bardzo rozumiem tego -d 0.0.0.0/0 jaką ten wpis spełnia funkcję w tej regule?
Czy "--to-source nasz_stały_adres_ip" to stały adres serwera w sieci lokalnej eth1_10.0.0.1 czy jest to może stały adres serwera eth0_79.189.44.186?
Jeżeli przebrnę przez ten etap to już powinienem sobie poradzić z modułem time.
Ostatnio edytowany przez Luc3k (2013-04-25 08:39:00)
Offline
[quote=Luc3k]Nie za bardzo rozumiem tego -d 0.0.0.0/0 jaką ten wpis spełnia funkcję w tej regule?[/quote]
Możesz to rozumieć jako "do wszystkich sieci". Czyli z komputera o adresie 10.0.0.2 ( -s jest od source czyli źródła) pakiety będą kierowane do wszystkich sieci ( -d od destination czyli cel).
Stały adres rozum jako adres publiczny, widziany na zewnątrz. Musisz rozróżniać jakie adresy są [url=http://pl.wikipedia.org/wiki/Adres_prywatny]adresami prywatnymi[/url] , a jakie publicznymi.
Ostatnio edytowany przez ba10 (2013-04-25 09:25:35)
Offline
Czyli jak testowo wykonam:
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -d 0.0.0.0/0 -j SNAT --to-source 79.189.44.186
to dostęp do internetu będzie dla całej sieci (10.0.0.0 oraz 10.0.1.0)? Czy może powinienem zastosować maskę /16?
Ostatnio edytowany przez Luc3k (2013-04-25 09:35:23)
Offline
Ciężkie pytanie bo byś musiał przebrnąć przez wykład o adresowaniu, daj maskę /8 taka jest domyślna dla 10.0.0.0 tylko ile masz tych komputerów, że chcesz używać zakresu adresowego 10.0.0.0, czy 192.168.0.0/24 nie wystarczy ( 256 adresów) ?
Offline
Time (s) | Query |
---|---|
0.00009 | SET CHARSET latin2 |
0.00004 | SET NAMES latin2 |
0.00089 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.144.233.141' WHERE u.id=1 |
0.00073 | UPDATE punbb_online SET logged=1733971068 WHERE ident='3.144.233.141' |
0.00022 | SELECT * FROM punbb_online WHERE logged<1733970768 |
0.00039 | SELECT topic_id FROM punbb_posts WHERE id=228502 |
0.00024 | SELECT id FROM punbb_posts WHERE topic_id=23195 ORDER BY posted |
0.00028 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=23195 AND t.moved_to IS NULL |
0.00029 | SELECT search_for, replace_with FROM punbb_censoring |
0.00089 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=23195 ORDER BY p.id LIMIT 0,25 |
0.00080 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=23195 |
Total query time: 0.00486 s |