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 chciałbym poprosić o pomoc/podpowiedź czy konfiguracja firewalla jest poprawna;
#!/bin/sh clear iptables -F iptables -X iptables -t nat -F iptables -t nat -X iptables -t nat -X iptables -t mangle -F iptables -t mangle -X iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT iptables -t raw -F iptables -t raw -X iptables -A INPUT -i lo -j ACCEPT iptables -I INPUT -s 0.0.0.0 -j ACCEPT iptables -I INPUT -s 127.0.0.1 -j ACCEPT iptables -I INPUT -s 87.98.238.145 -j ACCEPT iptables -I INPUT -s xxx -j ACCEPT iptables -I INPUT -s 94.23.95.124 -j ACCEPT iptables -A INPUT -p tcp -d xxx -m multiport --dports 3306,25588,25565,80,59640 -j DROP iptables -A INPUT -p tcp -m tcp -i eth0 -d 87.98.238.145 -m multiport ! --dports 25565,80,59640 -j DROP iptables -A INPUT -p udp -m udp -i eth0 -d 87.98.238.145 -j DROP iptables -A INPUT -p tcp -m tcp -m state --state NEW -m recent --set --name TCP --rsource iptables -A INPUT -p tcp -m tcp -m state --state NEW -m recent --update --seconds 1 --hitcount 5 --rttl --name TCP --rsource -j DROP iptables -I INPUT -p tcp --dport 80 -m geoip ! --src-cc PL -m limit --limit 3/s --limit-burst 1 -j DROP iptables -A INPUT -p tcp --dport 25565 -m connlimit --connlimit-above 2 -j DROP iptables -A INPUT -p tcp --dport 59640 -m connlimit --connlimit-above 1 -j DROP iptables -t nat -A PREROUTING -p tcp -i eth0 -d 87.98.238.145 -m geoip ! --src-cc PL --dport 25565 -j REDIRECT --to-port 59640 echo "Done!"
Teraz w skrócie co chcę osiągnąć:
- Zablokować poszczególne porty TCP do xxx - JEST OK
- Zablokować UDP do 87.98.238.145 - JEST OK
- Wylimitować trochę pakiety (SSyN i ogólny spam TCP dla obu adresów) - JEST OK
- Jeśli na porcie 80 jest więcej połączeń niż 3/s z poza Polski to DROP - NIE JESTEM PEWIEN CZY DOBRZE
- Wylimitować max połączenia online do 1 i 2 na poszczególne porty - NIE JESTEM PEWIEN CZY DOBRZE
- Przekierować cały ruch z poza Polski z portu 25565 na port 59640 - NIE JESTEM PEWIEN CZY DOBRZE
Geoip zainstalowane poprawnie i działa, serwer mam w soyoustart więc blokowanie portów w panelu odpada bo nie ma tam takiej opcji.
xxx - główny adres serwera - eth0
87.98.238.145 - dodatkowy adres failover eth0:0 (skonfigurowany i działa poprawnie)
Co do przekierowania ruchu na inny port, działa ale swego czasu miałem tak że karta sieciowa się "resetowała" bo były jakieś błędy aktualnie ich nie mam bo występowało to przy większej ilości połączeń aktualnie ilość połączeń jest bardzo znikoma.
Dość chaotycznie się tutaj rozpisałem i za to z góry przepraszam, ale czy moglibyście podpowiedzieć co dodać lub zmienić a także czy w przypadku portów 25565 i 59640 dodać gdzieś ACCEPT dla ESTABLISHED i czy ogólnie kolejność reguł jest poprawna.
--
Z góry dziękuję i pozdrawiam.
Offline
yy..a nie lepiej domyślnie ustawić DROP na wszystko a to co potrzeba puszczać? Mniej przeoczenia będzie mi się wydaje
Offline
iptables -P INPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT #odblokuje se ruch na lokalhoście
iptables -I INPUT -s 127.0.0.1 -j ACCEPT #i dla pewności jeszcze raz :P
iptables -I INPUT -s 0.0.0.0 -j ACCEPT # co autor miał na myśli? XD[/quote]
Niechlujstwo, bałagan i bezsęs :P
Jak słuszne zauważył [b]stepien86[/b], polityki ustawić na DROP,mniej grzebania z regułami dropowania.
Zaneguj swoją logikę odnośnie firewalla i masz gotowy pomysł do wdrożenia ;)
Przekierowanie masz zrobione dobrze, pamiętaj tylko że jak łańcuch FORWARD jest na drop to musisz dopisać właśnie ACCEPT dla reguły z przekierowaniem. I wlączyć forwarding w kernelu :P
najlepiej na etapie pisania: dopisz swój adres IP z ktorego dzwonisz na maszynę na samą górę wszystkich regul jako ACCEPT, na łańcuchów zastosuj -j LOG i rób syntetyczne testy czy netcat na port 25565 przypadkiem nie pojawia się na 59640
Offline
[quote=lis6502]
iptables -P INPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT #odblokuje se ruch na lokalhoście
iptables -I INPUT -s 127.0.0.1 -j ACCEPT #i dla pewności jeszcze raz :P
iptables -I INPUT -s 0.0.0.0 -j ACCEPT # co autor miał na myśli? XD[/quote]
Niechlujstwo, bałagan i bezsęs :P
Jak słuszne zauważył [b]stepien86[/b], polityki ustawić na DROP,mniej grzebania z regułami dropowania.
Zaneguj swoją logikę odnośnie firewalla i masz gotowy pomysł do wdrożenia ;)
Przekierowanie masz zrobione dobrze, pamiętaj tylko że jak łańcuch FORWARD jest na drop to musisz dopisać właśnie ACCEPT dla reguły z przekierowaniem. I wlączyć forwarding w kernelu :P
najlepiej na etapie pisania: dopisz swój adres IP z ktorego dzwonisz na maszynę na samą górę wszystkich regul jako ACCEPT, na łańcuchów zastosuj -j LOG i rób syntetyczne testy czy netcat na port 25565 przypadkiem nie pojawia się na 59640[/quote]
A jak wygląda sytuacja w przypadku kolejności reguł?
DROP ALL TCP, ACCEPT 25565, REGUŁA OD LIMITÓW SSYN
Reguła od limitu ma DROP i nie pogryzie się to z wcześniejszym ACCEPT?Ostatnio edytowany przez Maniec (2017-05-25 20:27:26)
Offline
Łancuchy procesowane są z góry do dołu. Możesz dopieścić firewalla, a na końcu wrzucić [tt]-I INPUT -j DROP[/tt] i żaden pakiet Ci nie przyjdzie.
[url=https://www.youtube.com/watch?v=wkPqV-SCA8U]Zajrzyj tutaj[/url] xD. Przyjmijmy dla uproszczenia że każdy z tych ziomeczków to jedna regula w łańcuchu FORWARD.
Reguły nie są zbyt wyszukane bo wszędzie po kolei masz -j ACCEPT, ale gdyby powiedzmy trzeci od początku był na DROP to kolejne ACCEPTy nie mają znaczenia dla nadchodzących ananasów xD
Polecam postawić sobie wirtualke i na niej męczyć reguły, z logowaniem włącznie. W celach edukacyjnych nawet zapuśc sobie [tt]gufw[/tt], taki klikacz dla konsolofobów, może w ten sposób zasadza działania iptables będzie bardziej namacalna ;)
Ostatnio edytowany przez lis6502 (2017-05-25 22:50:37)
Offline
[quote=lis6502]Łancuchy procesowane są z góry do dołu. Możesz dopieścić firewalla, a na końcu wrzucić [tt]-I INPUT -j DROP[/tt] i żaden pakiet Ci nie przyjdzie.
[url=https://www.youtube.com/watch?v=wkPqV-SCA8U]Zajrzyj tutaj[/url] xD. Przyjmijmy dla uproszczenia że każdy z tych ziomeczków to jedna regula w łańcuchu FORWARD.
Reguły nie są zbyt wyszukane bo wszędzie po kolei masz -j ACCEPT, ale gdyby powiedzmy trzeci od początku był na DROP to kolejne ACCEPTy nie mają znaczenia dla nadchodzących ananasów xD
Polecam postawić sobie wirtualke i na niej męczyć reguły, z logowaniem włącznie. W celach edukacyjnych nawet zapuśc sobie [tt]gufw[/tt], taki klikacz dla konsolofobów, może w ten sposób zasadza działania iptables będzie bardziej namacalna ;)[/quote]
iptables -P INPUT DROP - #DROPIE ALL iptables -A INPUT -i lo -j ACCEPT - #ACCEPT LOCALA iptables -A INPUT -p tcp -s xxx --dport 59640 -j ACCEPT iptables -A INPUT -p tcp -s 87.98.238.145 --dport 25565 -j ACCEPT - #ACCEPT PORTU 25565 i portu SSH (59640) iptables -A INPUT -p tcp -m state --state NEW -m recent --set --name TCP --rsource iptables -A INPUT -p tcp -m state --state NEW -m recent --update --seconds 1 --hitcount 5 --rttl --name TCP --rsource -j DROP - #LIMIT W RAZIE SPAMU
Zawsze wydawało się że jeśli jest ACCEPT to po tym "kod" zatrzymuje jak return;
Czyli jak zrobię coś jak wyżej to reguła od spamu zadziała?
Offline
Time (s) | Query |
---|---|
0.00014 | SET CHARSET latin2 |
0.00011 | SET NAMES latin2 |
0.00202 | 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.145.82.191' WHERE u.id=1 |
0.00069 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.145.82.191', 1730420112) |
0.00054 | SELECT * FROM punbb_online WHERE logged<1730419812 |
0.00109 | SELECT topic_id FROM punbb_posts WHERE id=310943 |
0.00006 | SELECT id FROM punbb_posts WHERE topic_id=29604 ORDER BY posted |
0.00068 | 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=29604 AND t.moved_to IS NULL |
0.00008 | SELECT search_for, replace_with FROM punbb_censoring |
0.00141 | 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=29604 ORDER BY p.id LIMIT 0,25 |
0.00107 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=29604 |
Total query time: 0.00789 s |