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/.
Witam
Chcę zrobić wyjątek w iptables ale jakoś mi się w regółki nie łapie.
w iptables mam wpisy:
$ipt -t nat -A PREROUTING -p tcp -m set --match-set $ipsetname src -m multiport --dport 80 -j DNAT --to 10.10.232.30:88 $ipt -I FORWARD -m set --match-set $ipsetname src ! -d 10.10.232.0/25 -j DROP $ipt -I FORWARD -m set --match-set $ipsetname src -p udp --dport 53 -j ACCEPT
co daje ładny efekt
Chain FORWARD (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 match-set blokowani src udp dpt:53 0 0 DROP all -- * * 0.0.0.0/0 !10.10.232.0/25 match-set blokowani src 64M 23G DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcpflags:! 0x17/0x02 state NEW 0 0 DROP all -f * * 0.0.0.0/0 0.0.0.0/0 814M 70G DROP all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID 8262M 428G TCPMSS tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcpflags: 0x06/0x02 TCPMSS clamp to PMTU 547G 464T ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 17743 1038K DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 match-set bports src,dst 10M 859M DROP udp -- * * 0.0.0.0/0 0.0.0.0/0 match-set bports src,dst 522K 31M ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:25 match-set smtp src 2225K 131M ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:25 match-set smtp dst 31M 1521M DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:25 recent: UPDATE seconds: 60 name: SMTP side: source 138K 6490K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:25 recent: SET name: SMTP side: source 12G 1144G ACCEPT all -- ppp+ bond1 0.0.0.0/0 0.0.0.0/0 4956M 463G ACCEPT all -- bond1 ppp+ 0.0.0.0/0 0.0.0.0/0 2169K 120M ACCEPT all -- ppp+ ppp+ 0.0.0.0/0 0.0.0.0/0
na adresie .232.30 stoi sobie serwerek z informacją o blokadzie. chciałem by nie były blokowane adresy docelowe .232.0/25 bo w tej sieci stoi również panel użytkownika w którym to user może zobaczyć wielkość zaległości itp. (docelowo chciałem też do wyjątków dodać banki).
regółki te ładnie blokują i wyświetlają stronkę ale wszystko, nawet te z wyjątkiem !10.10.232.0/25 :/.
W którym miejscu popełniam błąd?
Offline
Jeżeli coś ma być otwarte, to umieszczasz to przed blokadami, wtedy na pewno będzie chodzić.
Tutaj kolejność reguł ma kluczowe znaczenie.
Poza tym pokazuj na przyszłość, jak reguły wpadają doi FW, poleceniem:
iptables -t {tablica} -S
dużo bardziej wyrazisty wynik wychodzi.
Do tego polecam moją ulubioną zabaweczkę, miód-malinka:
iptables -t raw -S | grep wypad -A PREROUTING -m set --match-set wypad src -j SET --add-set wypad src --exist --timeout 86400 -A PREROUTING ! -i lo -p tcp -m multiport --dports 22,113,445,1433,1512,2175,2176,3306,5432 -j SET --add-set wypad src -A PREROUTING -m set --match-set wypad src -j DROP
Powód?
uptime 14:47:08 up 41 min, 4 users, load average: 0,13, 0,24, 0,31
ipset list wypad Name: wypad Type: hash:net Revision: 4 Header: family inet hashsize 1024 maxelem 65536 timeout 3600 Size in memory: 20000 References: 4 Members: 115.239.228.16/45 timeout 1517 115.239.228.16/38 timeout 84312 115.239.228.34/58 timeout 85912 115.239.228.34/55 timeout 3109 115.239.228.16/41 timeout 1514 115.239.228.34/61 timeout 3114 115.239.228.16/47 timeout 1519 115.239.228.34/56 timeout 85910 115.239.228.16/39 timeout 1512 115.239.228.16/43 timeout 1516 115.239.228.34/50 timeout 85905 115.239.228.34/51 timeout 3105 115.239.228.34/59 timeout 3112 115.239.228.16/44 timeout 84317 115.239.228.16/40 timeout 84314 115.239.228.34/57 timeout 3110 115.239.228.16/37 timeout 1511 115.239.228.16/33 timeout 1507 115.239.228.16/35 timeout 1509 117.21.176.107/48 timeout 2995 115.239.228.34/53 timeout 3107 115.239.228.34/54 timeout 85909 115.239.228.34/62 timeout 85915 115.239.228.16/46 timeout 84319 115.239.228.34/64 timeout 85917 186.96.81.56 timeout 1402 115.239.228.34/52 timeout 85907 115.239.228.16/34 timeout 84309 115.239.228.34/63 timeout 3115 115.239.228.16/36 timeout 84311 115.239.228.34/60 timeout 85914 115.239.228.34/49 timeout 3104 115.239.228.34/65 timeout 3117 115.239.228.16/42 timeout 84316
Taki wynik widzę pierwszy raz w życiu, bez takiej zabaweczki chyba z każdym serwerem czy routerem byłoby kiepsko. xD
Pozdro
;-)
Ostatnio edytowany przez Jacekalex (2015-03-16 14:49:59)
Offline
oki.
to teraz będzie lepiej
-P INPUT DROP -P FORWARD DROP -P OUTPUT ACCEPT -N fail2ban-ssh -A INPUT -p tcp -m multiport --dports 22,60022 -j fail2ban-ssh -A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP -A INPUT -f -j DROP -A INPUT -m state --state INVALID -j DROP -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -i bond1 -p ospf -j ACCEPT -A INPUT -p tcp -m set --match-set goodports dst -j ACCEPT -A INPUT -p udp -m set --match-set goodports dst -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 8 -m length --length 28:4096 -j ACCEPT -A INPUT -p icmp -j ACCEPT -A FORWARD -p udp -m set --match-set blokowani src -m udp --dport 53 -j ACCEPT -A FORWARD ! -d 10.10.232.0/25 -m set --match-set blokowani src -j DROP -A FORWARD -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP -A FORWARD -f -j DROP -A FORWARD -m state --state INVALID -j DROP -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT -A FORWARD -p tcp -m set --match-set bports src,dst -j DROP -A FORWARD -p udp -m set --match-set bports src,dst -j DROP -A FORWARD -p tcp -m tcp --dport 25 -m set --match-set smtp src -j ACCEPT -A FORWARD -p tcp -m tcp --dport 25 -m set --match-set smtp dst -j ACCEPT -A FORWARD -p tcp -m tcp --dport 25 -m recent --update --seconds 60 --name SMTP --rsource -j DROP -A FORWARD -p tcp -m tcp --dport 25 -m recent --set --name SMTP --rsource -j ACCEPT -A FORWARD -i ppp+ -o bond1 -j ACCEPT -A FORWARD -i bond1 -o ppp+ -j ACCEPT -A FORWARD -i ppp+ -o ppp+ -j ACCEPT -A fail2ban-ssh -j RETURN -P PREROUTING ACCEPT -P INPUT ACCEPT -P OUTPUT ACCEPT -P POSTROUTING ACCEPT -A PREROUTING -p tcp -m set --match-set blokowani src -m multiport --dports 80 -j DNAT --to-destination 10.10.232.30:88
to podążając za regółą z ipset blokowani.
w pierwszej rególe acceptowane są dnsy (ale coś mi mówi, że to nie potrzebne bo i po co, ale o tym później)
druga regóła powinna mi wszystkich blokowanych zdropować z wyjątkiem jeśli nie dobijają się do sieci 10.10.232.0/25 ale niestety blokuje wszystko :/
Ostatnio edytowany przez Nicram (2015-03-16 19:54:43)
Offline
A która regułka to ubija?
Weź zapuść debugowanie FW przez moduł TRACE w tablicy RAW, wtedy Ci wypisze, w logu, która regułka blokuje, i będziesz wiedział na 100%, czego szukać, co i dlaczego bruździ.
Sznurek:
http://backreference.org/2010/06/11/iptables-debugging/
Względnie ja bym tą regułkę:
-A FORWARD ! -d 10.10.232.0/25 -m set --match-set blokowani src -j DROP
rozbił na dwie:
-I FORWARD -d 10.10.232.0/25 - j ACCEPT
(na początku FORWARDÓW - pierwsza reguła), żeby inne filtry się nią nie zajmowały, a w środku dał na obecnym miejscu
-A FORWARD --match-set blokowani src -j DROP
będziesz miał ten sam efekt, ale pójdzie na 1500%, i ipset na pewno nie dopasuje seta blokowani, bo połączenie do 10.10.232.0/25 zostanie przepuszczone wcześniej, zanim ipset je w ogóle zobaczy.
Cele ACCEPT, DROP i REJECT kończą przetwarzanie pakietu, o tym też trzeba pamiętać.
Ostatnio edytowany przez Jacekalex (2015-03-16 15:12:22)
Offline
[quote=Jacekalex]A która regułka to ubija?[/quote]
ubija pewnie ta
-A FORWARD ! -d 10.10.232.0/25 -m set --match-set blokowani src -j DROP
bo po wrzuceniu do seta ipka net nie działa ale prerouting z portu 80 na 88 działa wyśmienicie. Jeśli wpiszę w przeglądarce np www.wp.pl to widzę ładne przekierowanko na stronę z infem o blokadzie.
wiem, że rozdzielenie regułek pomoże, ale to nie jest rozwiązanie, to tylko ominięcie problemu. zgodznie z "książką" w taką regułkę nie powiny załapać się pakiety do sieci 10.10.232.0/25 i powinno zapiąć się na dalszych regułkach.
Ostatnio edytowany przez Nicram (2015-03-16 20:02:28)
Offline
Proponuję nie pisać "pewnie ta" tylko na pewno ta, po to właśnie jest debugowanie FW.
Bez szczegółowych logów debugowania nie dowiesz się nawet, czemu te regułka dopasowuje inaczej, ni by wynikało z podręcznika.
Wygląda na to, że set blokowani dopasowuje każde połączenie, również na adresy 10.10.232.0/25, które regułka ma wyłączone z dopasowania, na Twoim miejscu nie chciało by mi się kombinować, czy to bug czy feature, tylko po prostu bym rozwiązał problem najprostszym możliwym sposobem.
To jest w tablicy NAT, prawda?
-A PREROUTING -p tcp -m set --match-set blokowani src -m multiport --dports 80 -j DNAT --to-destination 10.10.232.30:88
To rozdzielenie regułki rozwiąże wszystkie twoje problemy.
Sugerowałbym też wyrzucanie przypomnienia nie za każdym połączeniem, tylko raz na 5 minut, albo wyłączyć z tego ograniczenia banki, bo jak komuś przypominasz, że nie zapłacił, to daj mu chociaż prawo zalogowania się do banku celem posłania przelewu.
To w Twoim dobrze pojętym interesie jest ważniejsze, niż problem, czy w FW będzie jedna regułka więcej. xD
Pozdro
;-)
Ostatnio edytowany przez Jacekalex (2015-03-17 02:46:54)
Offline
W sumie i racja. Po co zastanawiać się nad tym, czemu to nie działa a powinno.
Zrobie sobie nowy łańcuch do którego będę wrzucał sety i w łańcuchu całą resztę. Osiągnę tym to, iż "prawidłowe" pakiety nie będą musiały przechodzić przez wszystki z blokadami :)
Dzięki
Offline
Dodałbym tylko, że jak coś wpuszczasz, to lepiej na początku, zeby nie leciało przez 50 reguł blokujących różne śmiecie, bo każda musi sprawdzić wszystkie dopasowania, a FW ma być szybki i wydajny.
Dlatego też lepiej sobie podzielić robotę FW na łańcuchy, żeby też te drabinki dopasowań nie były za długie.
Offline
[quote=Jacekalex]Dodałbym tylko, że jak coś wpuszczasz, to lepiej na początku, zeby nie leciało przez 50 reguł blokujących różne śmiecie, bo każda musi sprawdzić wszystkie dopasowania, a FW ma być szybki i wydajny.
Dlatego też lepiej sobie podzielić robotę FW na łańcuchy, żeby też te drabinki dopasowań nie były za długie.[/quote]
Taki mam zamiar :)
dlatego też "upierałem" się przy jednej regółce zamiast dwóch, bo zaraz do wyjątków dojdą jeszcze banki i z dwóch zrobi się 20 a ucierpi tylko na tym kernel :)
Offline
Z bankami może być niezła jazda, jak chcesz je odblokować, bo to jest (banki stacjonarne, Skoki, Spółdzielcze i internetowe) razem z kilkadziesiąt stron, a każda, to może być nawet kilkanaście adresów IP, które czasem też się będą zmieniać.
Dlatego ja bym raczej proponował, żeby po np 10 minutach w sieci było kilka minut komunikatu, a potem znowu dostęp do sieci przez 10 minut.
Regułkami time FW możesz sprawę ogarnąć dużo prościej, niż whitelistowaniem banków, i poza tym do wysłania przelewu spokojnie wystarczy 512 kbit.
Offline
[quote=Jacekalex]Z bankami może być niezła jazda, jak chcesz je odblokować, bo to jest (banki stacjonarne, Skoki, Spółdzielcze i internetowe) razem z kilkadziesiąt stron, a każda, to może być nawet kilkanaście adresów IP, które czasem też się będą zmieniać.
Dlatego ja bym raczej proponował, żeby po np 10 minutach w sieci było kilka minut komunikatu, a potem znowu dostęp do sieci przez 10 minut.
Regułkami time FW możesz sprawę ogarnąć dużo prościej, niż whitelistowaniem banków, i poza tym do wysłania przelewu spokojnie wystarczy 512 kbit.[/quote]
Jeśli chodzi o powiadamianie to wysyłamy smsy do ludzi - bardziej skutkuje.
Tu chodzi o całkowitą blokadę.
--------EDITED--------
Qrde, popełniałem szkolny błąd. Przepuszczałem forward tylko w jedną stronę :/ po dodaniu regółki forwardującej z drugiej strony zadziałało :)
# iptables -S -P INPUT DROP -P FORWARD DROP -P OUTPUT ACCEPT -N blokada -N fail2ban-ssh -A INPUT -p tcp -m multiport --dports 22,60022 -j fail2ban-ssh -A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP -A INPUT -f -j DROP -A INPUT -m state --state INVALID -j DROP -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -i bond1 -p ospf -j ACCEPT -A INPUT -p tcp -m set --match-set goodports dst -j ACCEPT -A INPUT -p udp -m set --match-set goodports dst -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 8 -m length --length 28:4096 -j ACCEPT -A INPUT -p icmp -j ACCEPT -A FORWARD -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP -A FORWARD -f -j DROP -A FORWARD -m state --state INVALID -j DROP -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu -A FORWARD -m set --match-set blokowani src -j blokada -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT -A FORWARD -p tcp -m set --match-set bports src,dst -j DROP -A FORWARD -p udp -m set --match-set bports src,dst -j DROP -A FORWARD -p tcp -m tcp --dport 25 -m set --match-set smtp src -j ACCEPT -A FORWARD -p tcp -m tcp --dport 25 -m set --match-set smtp dst -j ACCEPT -A FORWARD -p tcp -m tcp --dport 25 -m recent --update --seconds 60 --name SMTP --rsource -j DROP -A FORWARD -p tcp -m tcp --dport 25 -m recent --set --name SMTP --rsource -j ACCEPT -A FORWARD -i ppp+ -o bond1 -j ACCEPT -A FORWARD -i bond1 -o ppp+ -j ACCEPT -A FORWARD -i ppp+ -o ppp+ -j ACCEPT -A blokada -p udp -m udp --dport 53 -j ACCEPT -A blokada -d 10.10.232.0/25 -j ACCEPT -A blokada -s 10.10.232.0/25 -j ACCEPT -A blokada -j DROP -A fail2ban-ssh -j RETURN # iptables -S -t nat -P PREROUTING ACCEPT -P INPUT ACCEPT -P OUTPUT ACCEPT -P POSTROUTING ACCEPT -A PREROUTING ! -d 10.10.232.0/25 -p tcp -m set --match-set blokowani src -m multiport --dports 80,443 -j DNAT --to-destination 10.10.232.30:88
do tego jeszcze musiałem zrobić wyjątek w prerouting i vuala :)
ps. powstał tylko problem z https :/
Ostatnio edytowany przez Nicram (2015-03-18 08:57:23)
Offline
Time (s) | Query |
---|---|
0.00010 | SET CHARSET latin2 |
0.00004 | SET NAMES latin2 |
0.00146 | 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='18.219.207.11' WHERE u.id=1 |
0.00107 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '18.219.207.11', 1732744595) |
0.00040 | SELECT * FROM punbb_online WHERE logged<1732744295 |
0.00092 | DELETE FROM punbb_online WHERE ident='3.149.254.25' |
0.00095 | 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=27178 AND t.moved_to IS NULL |
0.00022 | SELECT search_for, replace_with FROM punbb_censoring |
0.00233 | 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=27178 ORDER BY p.id LIMIT 0,25 |
0.00104 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=27178 |
Total query time: 0.00853 s |