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_IPZ góry dzięki :)
Pozdrawiam serdecznie.
c3d
Offline

Użytkownik


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







Podobno człowiek...;)








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