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/.
Ostatnio postawiłem sobie w szkole serwer, więc napisałem prostego firewalla:
#!/bin/sh case "$1" in start) ipt="/sbin/iptables" /bin/echo "Uruchamiam Firewalla." # Kasowanie reguł $ipt -F $ipt -X # Domyślna polityka - dropujemy wszystko $ipt -P INPUT DROP $ipt -P OUTPUT DROP $ipt -P FORWARD DROP # Puszczenie lo $ipt -A INPUT -i lo -j ACCEPT $ipt -A OUTPUT -o lo -j ACCEPT # WWW - pakiety tylko z i do naszego serwera www $ipt -A INPUT -p tcp --dport www -j ACCEPT $ipt -A OUTPUT -p tcp --sport www -j ACCEPT # FTP - pozwalamy na łączenie się z serwerami ftp oraz na lokalny ftpd $ipt -A INPUT -p tcp --sport ftp-data -j ACCEPT $ipt -A OUTPUT -p tcp --dport ftp-data -j ACCEPT $ipt -A INPUT -p tcp --sport ftp -j ACCEPT $ipt -A OUTPUT -p tcp --dport ftp -j ACCEPT $ipt -A INPUT -p tcp --dport ftp-data -j ACCEPT $ipt -A OUTPUT -p tcp --sport ftp-data -j ACCEPT $ipt -A INPUT -p tcp --dport ftp -j ACCEPT $ipt -A OUTPUT -p tcp --sport ftp -j ACCEPT # SSH $ipt -A INPUT -p tcp --dport ssh -j ACCEPT $ipt -A OUTPUT -p tcp --sport ssh -j ACCEPT # DNS (nie lokalny) $ipt -A INPUT -p udp --sport domain -j ACCEPT $ipt -A OUTPUT -p udp --dport domain -j ACCEPT # IRC $ipt -A INPUT -p tcp --sport 6667:6669 -j ACCEPT $ipt -A OUTPUT -p tcp --dport 6667:6669 -j ACCEPT ;; stop) /bin/echo "Zatrzymuję Firewalla." # Wyłączenie firewalla /sbin/iptables -F /sbin/iptables -X /sbin/iptables -P INPUT ACCEPT /sbin/iptables -P OUTPUT ACCEPT ;; *) /bin/echo "Użycie: /etc/init.d/firewall {start|stop}" exit 1 ;; esac exit 0
I mam odnośnie niego kilka pytań:
1) Tak ogólnie to dobrze jest napisany? Co polecacie zmienić?
2) Chociaż teoretycznie odblokowałem ftp, to jednak nie da się połączyć z ftpd serwera, ani nie mogę będąc zalogowany na serwerze połączyć się z innymi serwerami ftp (np. repozytoriami). Dlaczego tak się dzieje?
3) Te regułki o blokowaniu ssh po iluśtam nieudanych próbach (te z FAQ) mam po prostu dopisać do tego skryptu, czy zamienić regułki ssh, które napisałem?
4) Jakie dodatkowe oprogramowanie polecacie do zabezpiecznia serwera?
Offline
Te repozytoria dałem po http (odblokowując przy tym http) i działają ok. Ale problem z ftp dalej pozostał, łącząc się z domu mój klient zatrzymuje się na pobieraniu nazw plików.
EDIT:
OK, trochę pozmieniałem i teraz skrypt wygląda tak:
#!/bin/sh case "$1" in start) ipt="/sbin/iptables" /bin/echo "Uruchamiam Firewalla." # Kasowanie reguł $ipt -F $ipt -X # Domyślna polityka - dropujemy wszystko $ipt -P INPUT DROP $ipt -P OUTPUT DROP $ipt -P FORWARD DROP # Puszczenie lo $ipt -A INPUT -i lo -j ACCEPT $ipt -A OUTPUT -o lo -j ACCEPT # Apache $ipt -A INPUT -p tcp --dport www -j ACCEPT $ipt -A OUTPUT -p tcp --sport www -j ACCEPT # WWW $ipt -A INPUT -p tcp --sport www -j ACCEPT $ipt -A OUTPUT -p tcp --dport www -j ACCEPT # vsftpd $ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT $ipt -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT $ipt -A INPUT -p tcp --dport 20:21 -j ACCEPT $ipt -A OUTPUT -p tcp --sport 20:21 -j ACCEPT # SSH $ipt -A INPUT -p tcp --dport ssh -j ACCEPT $ipt -A OUTPUT -p tcp --sport ssh -j ACCEPT # DNS (nie lokalny) $ipt -A INPUT -p udp --sport 53 -j ACCEPT $ipt -A OUTPUT -p udp --dport 53 -j ACCEPT # IRC $ipt -A INPUT -p tcp --sport ircd -j ACCEPT $ipt -A OUTPUT -p tcp --dport ircd -j ACCEPT # Ping $ipt -A OUTPUT -p icmp -j ACCEPT $ipt -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT ;; stop) /bin/echo "Zatrzymuję Firewalla." # Wyłączenie firewalla /sbin/iptables -F /sbin/iptables -X /sbin/iptables -P INPUT ACCEPT /sbin/iptables -P OUTPUT ACCEPT ;; *) /bin/echo "Użycie: /etc/init.d/firewall {start|stop}" exit 1 ;; esac exit 0
Co należałoby zmienić? :)
Offline
co do icmp to umiescilbym :
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT
i tylko te dwa typy
a codo problemu z ftp uzyj trybu pasywnego :)
Pozdrawiam
Offline
Z ftp już sobie poradziłem (użyłem ip_conntrack_ftp). A co z tym SSH?
Offline
Do blokowania danego ip po ilus tam nieudanych połączeniach na ssh dobrym narzędziem jest [b]denyhosts[/b]
Co do samego skryptu. Niektórzy radza zapisywanie regól w oddzielnych plikach i używanie iptables-save iptables-restore - ale jak ja widze takie skrypty to stwierdzam, żem głupi ;-).
Ja korzystam z takich na [url=http://fatcat.ftj.agh.edu.pl/~przyboro/other/iptables]desktopach[/url] i na [url=http://fatcat.ftj.agh.edu.pl/~przyboro/other/iptables2]routerze[/url] :-)
Offline
Time (s) | Query |
---|---|
0.00014 | SET CHARSET latin2 |
0.00005 | SET NAMES latin2 |
0.00100 | 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.117.166.52' WHERE u.id=1 |
0.00068 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '18.117.166.52', 1732748644) |
0.00048 | SELECT * FROM punbb_online WHERE logged<1732748344 |
0.00081 | SELECT topic_id FROM punbb_posts WHERE id=41585 |
0.00116 | SELECT id FROM punbb_posts WHERE topic_id=5355 ORDER BY posted |
0.00075 | 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=5355 AND t.moved_to IS NULL |
0.00018 | SELECT search_for, replace_with FROM punbb_censoring |
0.00081 | 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=5355 ORDER BY p.id LIMIT 0,25 |
0.00084 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=5355 |
Total query time: 0.0069 s |