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/.
Strony: 1
Witam :)
Parę dni temu sklepałem w skrypcie ogniomurka opartego o iptables, prosiłbym żeby ludzie mający większe pojęcie o tym ode mnie się wypowiedzieli. Chodzi tu głównie o ewentualne błędy co poprawić, co dopisać etc..
Oto kod :
#!/bin/sh IPT="/sbin/iptables" LPX="IPT#" # Wewnętrzna sieć : A-P-D-Lan INT_LAN_IP="192.168.0.1" INT_LAN_NETMASK="255.255.255.0" INT_LAN_NETWORK="192.168.0.0" INT_LAN_BCAST="192.168.0.255" INT_LAN_IFACE="eth0" # Wewnętrzna sieć : A-P-D-Pub_Lan INT_PUBLAN_IP="192.168.1.1" INT_PUBLAN_NETMASK="255.255.255.0" INT_PUBLAN_NETWORK="192.168.1.0" INT_PUBLAN_BCAST="192.168.1.255" INT_PUBLAN_IFACE="eth1" # Zewnętrzna sieć : EXT_LAN_IP="10.0.0.67" EXT_LAN_NETMASK="255.255.255.0" EXT_LAN_NETWORK="10.0.0.0" EXT_LAN_BCAST="10.0.1.255" EXT_LAN_IFACE="eth2" /sbin/modprobe ip_tables /sbin/modprobe ip_conntrack echo "1" > /proc/sys/net/ipv4/ip_forward echo "1" > /proc/sys/net/ipv4/tcp_syncookies echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route echo "1" > /proc/sys/net/ipv4/conf/all/secure_redirects echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter echo "1" > /proc/sys/net/ipv4/conf/all/log_martians if [ "$1" = "stop" ] then echo "Wyłączanie firewall'a w toku..." echo "Czyszczenie reguł łańcuchów w tabelach standardowych..." # Czyszczenie reguł łańcuchów tabeli FILTER : $IPT -F # Czyszczenie reguł łańcuchów tabeli NAT : $IPT -t nat -F # Czyszczenie reguł łańcuchów tabeli MANGLE : $IPT -t mangle -F echo " [OK!]" echo "Zmiana domyślnej polityki łancuchów na ACCEPT..." # Zmiana polityki łańcuchów tabeli FILTER na ACCEPT : $IPT -P INPUT ACCEPT $IPT -P FORWARD ACCEPT $IPT -P OUTPUT ACCEPT # Zmiana polityki łańcuchów tablei NAT na ACCEPT : $IPT -t nat -P PREROUTING ACCEPT $IPT -t nat -P OUTPUT ACCEPT $IPT -t nat -P POSTROUTING ACCEPT # Zmiana polityki łańcuchów tabeli MANGLE na ACCEPT : $IPT -t mangle -P PREROUTING ACCEPT $IPT -t mangle -P INPUT ACCEPT $IPT -t mangle -P FORWARD ACCEPT $IPT -t mangle -P OUTPUT ACCEPT $IPT -t mangle -P POSTROUTING ACCEPT echo " [OK!]" echo "Firewall został wyłączony..." exit 0 fi # Ustawianie domyślnej polityki w tabeli FILTER na DROP : $IPT -P INPUT DROP $IPT -P FORWARD DROP $IPT -P OUTPUT DROP # Reguły dla łańcucha INPUT w tabeli FILTER : # Reguły dla błędnych pakietów TCP : # Logowanie a następnie odrzucanie pakietów innych niż SYN : $IPT -A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "$LPX : Error_TCP " $IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP # Logowanie a następnie odrzucanie pakietów TCP z flagami NONE,ALL,FIN,URG,PSH,RST,SYN,ACK : $IPT -A INPUT -p tcp --tcp-flags ALL NONE -j LOG --log-prefix "$LPX : Error_TCP " $IPT -A INPUT -p tcp --tcp-flags ALL NONE -j DROP $IPT -A INPUT -p tcp --tcp-flags ALL ALL -j LOG --log-prefix "$LPX : Error_TCP " $IPT -A INPUT -p tcp --tcp-flags ALL ALL -j DROP $IPT -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j LOG --log-prefix "$LPX : Error_TCP " $IPT -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP $IPT -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j LOG --log-prefix "$LPX : Error_TCP " $IPT -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP $IPT -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j LOG --log-prefix "$LPX : Error_TCP " $IPT -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP $IPT -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j LOG --log-prefix "$LPX : Error_TCP " $IPT -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP # Reguły dla błędnych pakietów : # Logowanie innych błędnych pakietów : $IPT -A INPUT -p all -m state --state INVALID -j LOG --log-prefix "$LPX : error_packets " $IPT -A INPUT -p all -m state --state INVALID -j DROP # Reguły dla łańcucha pakietów ICMP : # Logowanie a następnie odrzucanie pofragmentowanych pakietów ICMP : $IPT -A INPUT --fragment -p icmp -j LOG --log-prefix "$LPX : Fragmenty_ICMP " $IPT -A INPUT --fragment -p icmp -j DROP # Przepuszczanie pinga do serwera : $IPT -A INPUT -p icmp -s 0/0 --icmp-type 8 -j LOG --log-prefix "$LPX : Pingi " $IPT -A INPUT -p icmp -s 0/0 --icmp-type 8 -j ACCEPT # Przepuszczanie pakietów z przekroczonym terminem : $IPT -A INPUT -p icmp -s 0/0 --icmp-type 11 -j ACCEPT # Przepuszczanie połączeń ICMP już nawiązanych : $IPT -A INPUT -p icmp -j ACCEPT -m state --state ESTABLISHED,RELATED # Reguły dla połączeń przychodzących na wskazanych portach TCP : # Akceptowane porty : # SSH : # Blokowanie danego IP po 2 Próbach logowania : $IPT -A INPUT -p tcp -s 0/0 --dport 22 -m state --state NEW -m recent --set $IPT -A INPUT -p tcp -s 0/0 --dport 22 -m state --state NEW -m recent --update --seconds 3600 --hitcount 6 -j REJECT $IPT -A INPUT -p tcp -s 0/0 --dport 22 -m state --state NEW -j ACCEPT # Autoryzacja VMWARE : $IPT -A INPUT -p tcp -s 0/0 --dport 902 -m state --state NEW -j ACCEPT # Interfejs VMWARE : $IPT -A INPUT -p tcp -s 0/0 --dport 10001 -m state --state NEW -j ACCEPT $IPT -A INPUT -p udp -s 0/0 --dport 10001 -m state --state NEW -j ACCEPT # Reguły dla połączeń przychodzących na wskazanych portach UDP : # Odrzucenia wywołań net bios $IPT -A INPUT -p udp -s 0/0 --dport 137 -j DROP $IPT -A INPUT -p udp -s 0/0 --dport 138 -j DROP # Reguły dla usług dedykowanych danej sieci : # Akceptowanie połączenia z sieci A-P-D-Lan do serwera baz danych FIREBIRD : # TCP : $IPT -A INPUT -p tcp -s $INT_LAN_NETWORK/24 -i $INT_LAN_IFACE --dport 3050 -m state --state NEW -j ACCEPT # UDP : $IPT -A INPUT -p udp -s $INT_LAN_NETWORK/24 -i $INT_LAN_IFACE --dport 3050 -m state --state NEW -j ACCEPT # Akceptowanie ruchu przychodzącego na interfejsie lokalnym : $IPT -A INPUT -p all -i lo -j ACCEPT # Wpuszczenie ruchu z sieci A-P-D-Lan do serwera i na broadcast : $IPT -A INPUT -p all -i $INT_LAN_IFACE -s $INT_LAN_IP -j ACCEPT $IPT -A INPUT -p all -i $INT_LAN_IFACE -d $INT_LAN_BCAST -j ACCEPT # Wpuszczenie ruchu z sieci A-P-D-Pub_Lan do serwera i na broadcast : $IPT -A INPUT -p all -i $INT_PUBLAN_IFACE -s $INT_PUBLAN_IP -j ACCEPT $IPT -A INPUT -p all -i $INT_PUBLAN_IFACE -s $INT_PUBLAN_BCAST -j ACCEPT # DHCP dla sieci A-P-D-Lan : $IPT -A INPUT -p udp -i $INT_LAN_IFACE --source-port 68 --destination-port 67 -j ACCEPT # DHCP dla sieci A-P-D-Pub_Lan : $IPT -A INPUT -p udp -i $INT_PUBLAN_IFACE --source-port 68 --destination-port 67 -j ACCEPT # Przepuszczanie ustanowionych połączeń : # Z sieci A-P-D-Lan : $IPT -A INPUT -p all -s $INT_LAN_NETWORK/24 -i $INT_LAN_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT # Z sieci A-P-D-Pub_Lan : $IPT -A INPUT -p all -s $INT_PUBLAN_NETWORK/24 -i $INT_PUBLAN_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT # Z sieci zewnętrznej : $IPT -A INPUT -p all -i $EXT_LAN_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT # Odrzucanie niepasujących pakietów adresowanych na broadcast : $IPT -A INPUT -p all -d 255.255.255.255 -j DROP # Logowanie niepasujących pakietów : $IPT -A INPUT -j LOG --log-prefix "$LPX : INPUT " # Reguły dla łańcucha FORWARD w tabeli FILTER : # Reguły blokujące ruch przeznaczony dla sieci wewnętrznych : # Blokowanie portów TCP dla użytkowników sieci : # Przykład : $IPT -A FORWARD -p tcp --dport x -j REJECT --reject-witch tcp-reset # Blokowanie portów UDP dla użytkowników sieci : # Przykład : $IPT -A FORWARD -p udp --dport x -j REJECT --reject-with icmp-port-unreachable # Blokowanie stron WWW dla użytkowników sieci : # Przykład : $IPT -A FORWARD -p tcp -s SKĄD-SIEĆ -d BLOKOWANY_HOST --dport 80 -j REJECT --reject-witch tcp-reset # Blokowanie konkretnego hosta : # Przykład : $IPT -A FORWARD -s SKĄD-SIEĆ -d BLOKOWANY_HOST -j REJECT # Blokowanie konkretnej podsieci : # Przykład : $IPT -A FORWARD -s SKĄD-SIEĆ -d BLOKOWANY_HOST/32 -j REJECT # Wpuszczanie ruchu z sieci zewnętrznej do sieci A-P-D-Lan i A-P-D-Pub_Lan : $IPT -A FORWARD -i $EXT_LAN_IFACE -d $INT_LAN_NETWORK/24 -o $INT_LAN_IFACE -j ACCEPT $IPT -A FORWARD -i $EXT_LAN_IFACE -d $INT_PUBLAN_NETWORK/24 -o $INT_PUBLAN_IFACE -j ACCEPT # Wypuszczenie ruchu z sieci A-P-D-Lan i A-P-D-Pub_Lan do sieci zewnętrznej : $IPT -A FORWARD -s $INT_LAN_NETWORK/24 -i $INT_LAN_IFACE -o $EXT_LAN_IFACE -j ACCEPT $IPT -A FORWARD -s $INT_PUBLAN_NETWORK/24 -i $INT_PUBLAN_IFACE -o $EXT_LAN_IFACE -j ACCEPT # Wpuszczanie ruchu z sieci A-P-D-Lan do A-P-D-Pub_Lan : $IPT -A FORWARD -s $INT_LAN_NETWORK/24 -i $INT_LAN_IFACE -d $INT_PUBLAN_NETWORK/24 -o $INT_PUBLAN_IFACE -j ACCEPT # Przekazywanie ruchu z sieci publicznej do wewnetrznej : tymczasowo dostępne $IPT -A FORWARD -s 192.168.1.0/24 -i eth1 -d 192.168.0.0/24 -o eth0 -p all -j ACCEPT # Przekazywanie nawiązanych już połączeń : # Sieć A-P-D-Lan : $IPT -A FORWARD -p all -s $INT_LAN_NETWORK/24 -i $INT_LAN_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT # Sieć A-P-D-Pub_Lan : $IPT -A FORWARD -p all -s $INT_PUBLAN_NETWORK/24 -i $INT_PUBLAN_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT # Zewnętrzna sieć : $IPT -A FORWARD -p all -s $EXT_LAN_NETWORK/24 -i $EXT_LAN_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT # Logowanie niepasujących pakietów : $IPT -A FORWARD -j LOG --log-prefix "$LPX : FORWARD " # Reguły dla łańcucha OUTPUT w tabeli FILTER : # Reguły dla połączeń wychodzących z fizycznego servera : # Połączenia wychodzące TCP : # Przykład : $IPT -A OUTPUT -p tcp -s 0/0 --destination-port x -j REJECT --reject-with tcp-reset # Połączenia wychodzące UDP : # Przykład : $IPT -A OUTPUT -p udp -s 0/0 --destination-port x -j REJECT --reject-with icmp-port-unreachable # Odrzucanie nieprawidłowych pakietów icmp : $IPT -A OUTPUT -m state -p icmp --state INVALID -j DROP # Akceptowanie ruchu wychodzącego na interfejsie lokalnym : $IPT -A OUTPUT -p all -o lo -j ACCEPT $IPT -A OUTPUT -p all -o eth0 -j ACCEPT # Akceptowanie niepasujących połączeń : $IPT -A OUTPUT -p all -s 0/0 -j ACCEPT # Logowanie niepasujących pakietów : $IPT -A OUTPUT -j LOG --log-prefix "$LPX OUTPUT : " # Reguły dla łańcucha PREROUTING w tabeli NAT : # Przekierowanie ruchu na porcie 80 do servera LAMP z sieci zewnętrznej : $IPT -t nat -A PREROUTING -p tcp -i eth2 --dport 80 -j DNAT --to-destination 192.168.1.102:80 # Reguły dla łańcucha POSTROUTING w tabeli NAT : # Maskowanie adresów z sieci A-P-D-Lan i A-P-D-Pub_Lan $IPT -t nat -A POSTROUTING -o $EXT_LAN_IFACE -j SNAT --to $EXT_LAN_IP
Z góry dzięki :)
Pozdrawiam serdecznie.
c3d
Offline
Ja polece Ci tylko:
Arno's IPTABLES Firewall
Dostępne w repozytoriach.
Ja wyciagnałem z tego reguły iptables i na tej podstawie napisalem własnego firewall.
Offline
Ja radziłbym następujące zmiany:
Dla usług dostepnych z internetu - lub od userów - którym nie można całkowicie ufać (mam na myśli trojany w Win$ komputerach) ustawić limit nowych/równoczesnych połączeń - odpowiednie dla faktycznej wytrzymałości demonów - obsługujących daną usługę.
Ponadto - limitowanie przepustowości dla poszczególnych usług serwera - tak - aby jeden user nie mógł 'zajechać' serwera ilością wysyłanych/pobieranych danych - która to ilość mogłaby uszkodzić lub zakłocić działanie demona odp. za usługę.
Coś takiego można osiągnąć czasami w samym demonie - np. moduły evasive i security w Apachu, ale jeśli można coś załatwić na etapie firewall - to lepiej niech tą robotę zostawić na firewallu - jest znacznie odporniejszy od np. Postfixa czy Nginxa.
I znacznie żadziej zdarzają się luki w modułach kernela odpowiedzialnych za firewall - niż w aplikacjach.
Bardzo fajne efekty możesz osiągnąć stosując połączenie iptables + ifb/imq +htb/cbq/...itp. - czyli dla każdego usera ustawić w dostępie do demona pasmo maksymalne - od i do usługi.
Trochę roboty - ale wielu kłopotów można uniknąć.
I jeszcze jedno - postaraj się o przejrzysty zestaw reguł w łańcuchach - żebyś na pierwszy rzut oka wiedział - co jest grane - bo to co dałeś u góry zbyt czytelne już nie jest, natomiast jak jeszcze urośnie - może sprawić trochę kłopotu.
Sugestia - w głównych łańcuchach tworzysz reguły wspólne dla całego systemu, natomiast te - które dotyczą poszczególnych usług - czy chociażby forwardu - wrzuć do osobnych łańcuchów - żeby firewall nie porównywał każdego pakietu z regułą - która i tak nie będzie go dotyczyć z racji innego przeznaczenia tej reguły/pakietu.
Pozdrawiam
I jeszcze jedna rada - na zewnątrz firewalla nessus-daemon, openvas-daemon i nmap, z drugiej strony snort, openvas-client, nessus-client i (psad+fwsnort) + godzina/dwie - na testy - i masz całkiem niezły obraz sytuacji.
Pozdr.
Ostatnio edytowany przez Jacekalex (2009-12-08 15:31:50)
Offline
Strony: 1
Time (s) | Query |
---|---|
0.00010 | SET CHARSET latin2 |
0.00004 | SET NAMES latin2 |
0.00093 | 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.222.121.24' WHERE u.id=1 |
0.00094 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '18.222.121.24', 1732470285) |
0.00047 | SELECT * FROM punbb_online WHERE logged<1732469985 |
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=15429 AND t.moved_to IS NULL |
0.00009 | SELECT search_for, replace_with FROM punbb_censoring |
0.00195 | 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=15429 ORDER BY p.id LIMIT 0,25 |
0.00080 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=15429 |
Total query time: 0.006 s |