moj firewall na iptables - poprawcie mnie prosze..
pszemaz WP
pszemaz w wp.pl
Pon, 4 Wrz 2006, 01:58:11 CEST
Witam!
Powertowalem troszke stronek itd i sklecilem sobie firewalla, niby
powinno byc OK, na poczatek wszystko blokuje, potep przepuszczam
wyjatki, ale po zainicjowaniu, wszystko jest blokowane, a nic nie
przechodzi, nawet maskarada nie dziala..
Firewall:
#!/bin/sh
##########################################
# Definicje stalych #
##########################################
IPT="/usr/sbin/iptables"
M="/sbin/modprobe"
EXT0="eth0"
INT1="eth1"
INT2="eth2"
IFETH0="111.222.333.444/28"
IFETH1="192.168.1.1/24"
IFETH2="192.168.10.1/24"
# Logowanie datagramów nie przepuszczanych
LOGGING=1
# Ladujemy modul niezbedne dla RELATED
$M ip_tables
$M iptable_nat
$M ip_conntrack
$M ip_conntrack_ftp
$M ip_conntrack_irc
$M ip_nat_ftp
$M ip_nat_irc
$M ipt_LOG
$M ipt_MASQUERADE
$M ipt_REJECT
$M ipt_state
$M ipt_limit
$M ipt_multiport
case "$1" in
"start")
# ip FORWARDing must be enabled in order to masquerade
/bin/echo "1" > /proc/sys/net/ipv4/ip_forward
/bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all
/bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route
/bin/echo "0" > /proc/sys/net/ipv4/conf/all/ACCEPT_redirects
/bin/echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
/bin/echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
/bin/echo "1" > /proc/sys/net/ipv4/conf/all/log_martians
/bin/echo "1" > /proc/sys/net/ipv4/tcp_ecn
/bin/echo "128" > /proc/sys/net/ipv4/ip_default_ttl
# czyszczenie reguł [Opcja -F oznacza Flush, czyli wyczyszczenie tablic]
echo -n "Starting Firewall... "
echo "Czyszczenie reguł..."
$IPT -F
$IPT -X
$IPT -F INPUT
$IPT -F OUTPUT
$IPT -F FORWARD
$IPT -t nat -F
# Dla lancucha INPUT dobrze jest przyjac zasade,
# ze co nie jest dozwolone, jest zabronione.
# Polityki zmieniamy opcja -P
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
echo "Ustawianie domyslnej polityki dla lo,eth0,eth1..."
# Odblokowanie loopback [przepuszczanie lokalnie generowanych pakietow]
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
$IPT -A FORWARD -o lo -j ACCEPT
# Przepuszczamy wszystko co idzie z naszej sieci lokalnej
# (a raczej wszystko co nie idzie z internetu czyli eth0)
$IPT -A INPUT -i ! $EXT0 -j ACCEPT
# Zezwolenie na polaczenia nawiazane i powiazane
# Zezwolenie na polaczenia zainicjowane z serwera
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
##########################################
# Uslugi serwerowe - odblokowanie portow #
##########################################
echo "Odblokowanie portow uslug serwerowych..."
# Zezwolenie na nowe polaczenia na FTP na port 20 i 21 + passive FTP
$IPT -A INPUT -i $EXT0 -p tcp --dport ftp-data -m state --state NEW -j
ACCEPT
$IPT -A INPUT -i $EXT0 -p tcp --dport ftp -m state --state NEW -j ACCEPT
$IPT -A INPUT -i $EXT0 -p tcp --dport 51000:51999 -m state --state NEW
-j ACCEPT
# Zezwolenie na nowe polaczenia na SSH na port 22
$IPT -A INPUT -i $EXT0 -p tcp --dport ssh -m state --state NEW -j ACCEPT
# Zezwolenie na nowe polaczenia na SMTP
$IPT -A INPUT -i $EXT0 -p tcp --dport smtp -m state --state NEW -j ACCEPT
# Zezwolenie dla DNS na tcp i udp
$IPT -A INPUT -i $EXT0 -p tcp --dport domain -m state --state NEW -j ACCEPT
$IPT -A INPUT -i $EXT0 -p udp --dport domain -m state --state NEW -j ACCEPT
# Zezwolenie dla HTTP & HTTPS
$IPT -A INPUT -i $EXT0 -p tcp --dport http -m state --state NEW -j ACCEPT
$IPT -A INPUT -i $EXT0 -p tcp --dport https -m state --state NEW -j ACCEPT
# Zezwolenie na nowe polaczenia na POP3
$IPT -A INPUT -i $EXT0 -p tcp --dport pop3 -m state --state NEW -j ACCEPT
# Zezwolenie na nowe polaczenia na IMAP
$IPT -A INPUT -i $EXT0 -p tcp --dport imap -m state --state NEW -j ACCEPT
# Zezwolenie na nowe polaczenia na IMAPS
$IPT -A INPUT -i $EXT0 -p tcp --dport imaps -m state --state NEW -j ACCEPT
# Zezwolenie na nowe polaczenia na POP3S
$IPT -A INPUT -i $EXT0 -p tcp --dport pop3s -m state --state NEW -j ACCEPT
# Zezwolenie na nowe polaczenia na WEBMIN
$IPT -A INPUT -i $EXT0 -p tcp --dport 10000 -m state --state NEW -j ACCEPT
##########################################
# Serwery Gier - odblokowanie portow #
##########################################
echo "Odblokowanie portow serwerow GIER..."
# Americas Army
$IPT -A INPUT -i $EXT0 -p udp --dport 1716 -m state --state NEW -j ACCEPT
# Quake II
$IPT -A INPUT -i $EXT0 -p udp --dport 27910 -m state --state NEW -j ACCEPT
# Enemy Territory
$IPT -A INPUT -i $EXT0 -p udp --dport 27960 -m state --state NEW -j ACCEPT
# CODUO Glowny
$IPT -A INPUT -i $EXT0 -p udp --dport 28960 -m state --state NEW -j ACCEPT
# CODUO Testowy
$IPT -A INPUT -i $EXT0 -p udp --dport 28961 -m state --state NEW -j ACCEPT
# COD2
$IPT -A INPUT -i $EXT0 -p udp --dport 28962 -m state --state NEW -j ACCEPT
# CODUO Glowny PB Web Panel
$IPT -A INPUT -i $EXT0 -p tcp --dport 28965 -m state --state NEW -j ACCEPT
# CODUO Test PB Web Panel
$IPT -A INPUT -i $EXT0 -p tcp --dport 28966 -m state --state NEW -j ACCEPT
##########################################
# Serwery Mowy - odblokowanie portow #
##########################################
echo "Odlokowanie portow serwerow MOWY..."
# Team Speak2 Panel WWW
$IPT -A INPUT -i $EXT0 -p tcp --dport 14534 -m state --state NEW -j ACCEPT
# Team Speak2 Serwer
$IPT -A INPUT -i $EXT0 -p udp --dport 8767 -m state --state NEW -j ACCEPT
##########################################
# IRC + psyBNC #
##########################################
echo "Odlokowanie portow IRC..."
# psyBNC
$IPT -A INPUT -i $EXT0 -p tcp --dport 31332 -m state --state NEW -j ACCEPT
$IPT -A INPUT -i $EXT0 -p udp --dport 31332 -m state --state NEW -j ACCEPT
# Eggdrop - zarzadzanie
$IPT -A INPUT -i $EXT0 -p tcp --dport 3336 -m state --state NEW -j ACCEPT
$IPT -A INPUT -i $EXT0 -p tcp --dport 3337 -m state --state NEW -j ACCEPT
# Eggdrop DCC portrange
$IPT -A INPUT -i $EXT0 -p tcp --dport 2010:2020 -m state --state NEW -j
ACCEPT
##########################################
# Forwardowanie portow #
##########################################
# Otwarcie portow do Forwardu
echo "Otwieranie portow do Forwardu..."
TCP_F="4661,5900"
UDP_F="4671"
$IPT -t nat -A PREROUTING -p tcp -d 111.222.333.444 --dport $TCP_F -j
DNAT --to 192.168.1.2:4661
$IPT -t nat -A PREROUTING -p udp -d 111.222.333.444 --dport $UDP_F -j
DNAT --to 192.168.1.2:4671
# DC
#$IPT -t nat -A PREROUTING -p tcp -d 111.222.333.444 --dport 1980 -j
DNAT --to 192.168.1.2:1980
#$IPT -t nat -A PREROUTING -p udp -d 111.222.333.444 --dport 1981 -j
DNAT --to 192.168.1.2:1981
echo "Ustawienia ZABEZPIECZEN!..."
# Zabezpieczenie przed DoS, SynFlood
$IPT -N syn-flood
$IPT -A INPUT -i $EXT0 -p tcp --syn -j syn-flood
$IPT -A syn-flood -m limit --limit 5/s --limit-burst 4 -j RETURN
$IPT -A syn-flood -m limit --limit 5/s --limit-burst 10 -j LOG
--log-level debug --log-prefix "IPT SYN-FLOOD: "
$IPT -A syn-flood -j DROP
#Zezwol na pingowanie serwera z sieci lokalnej
$IPT -A INPUT -i $INT1 -p icmp -j ACCEPT
# Zezwolenie na pingowanie sie [limit przychodzacych pingow 1 na 5 sekund]
$IPT -A INPUT -i $EXT0 -p icmp --icmp-type echo-request -m limit --limit
12/minute -j ACCEPT
# {EXT0} - zewn interfejs, wiec jesli pojawi si na nim pakiet pochodzacy
z puli
# adresow nierutowalnych (w naszym przypadku dla przejrzystosci
sprawdzamy tylko
# klase 192.168.x.x), to jest to ewidentna podpucha i nie nalezy
podejmowac dyskusji
$IPT -A FORWARD -s 192.168.0.0/16 -i $EXT0 -j DROP
# podobnie jak wyzej, ale w druga strone
$IPT -A FORWARD -s ! 192.168.1.0/24 -i $INT1 -j DROP
# komputer odpowiada na standardowy "TCP reset" i "ICMP port-unreachable
response"
$IPT -A INPUT -i $EXT0 -p tcp -j REJECT --reject-with tcp-reset
$IPT -A INPUT -i $EXT0 -p udp -j REJECT --reject-with icmp-port-unreachable
# Przy nawiazaniu polaczen FTP jawna blokada IDENTa [odrzuc polaczenia
na port 113]
$IPT -A INPUT -p tcp --dport 113 -j REJECT --reject-with
icmp-port-unreachable
# Odrzucanie SOCKS
$IPT -A INPUT -p tcp --dport 1080 -j REJECT --reject-with
icmp-port-unreachable
# Logujemy pakiety odrzucone
echo "Wlaczenie logowania pakietow odrzuconych..."
$IPT -A INPUT -j LOG -m limit --limit 10/hour
$IPT -A OUTPUT -j LOG -m limit --limit 10/hour
$IPT -A FORWARD -j LOG -m limit --limit 10/hour
# MASQUERADE dla lacza ze stalym IP
echo "Wlaczenie MASKARADY..."
$IPT -t nat -A POSTROUTING -s $IFETH1 -o $EXT0 -j SNAT --to-source
111.222.333.444
$IPT -t nat -A POSTROUTING -s $IFETH2 -o $EXT0 -j SNAT --to-source
111.222.333.444
$IPT -t mangle -A POSTROUTING -o $EXT0 -j TTL --ttl-set 128
### Zablokujmy userowi dostep do www.google.pl
#$IPTABLES -A FORWARD -i $INTIF -o $EXTIF -s 192.168.1.4/32 -d
www.google.pl -j REJECT
echo "Firewall zainicjowany!"
;;
"stop")
# flush the ruleset
echo -n "Zatrzymuje Firewall: "
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
iptables -F
iptables -t mangle -F
iptables -X
echo "0" > /proc/sys/net/ipv4/ip_forward
echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo "Zatrzymane!"
;;
*)
echo "Uzycie: $0 start|stop"
exit 1
;;
esac
exit 0
--------------
Oczywiscie kluczowe jest:
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
Jak sobie zamianie na:
$IPT -P INPUT ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD ACCEPT
to wsio lata, no ale przeciez kompletnie nie o to chodzi, nie wiem czemu
wyjatkow nie zalapuje..
# iptables -L
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere state
RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp
dpt:ftp-data state NEW
ACCEPT tcp -- anywhere anywhere tcp dpt:ftp
state NEW
ACCEPT tcp -- anywhere anywhere tcp
dpts:51000:51999 state NEW
ACCEPT tcp -- anywhere anywhere tcp
dpt:telnet state NEW
ACCEPT tcp -- anywhere anywhere tcp
dpt:smtp state NEW
ACCEPT tcp -- anywhere anywhere tcp
dpt:domain state NEW
ACCEPT udp -- anywhere anywhere udp
dpt:domain state NEW
ACCEPT tcp -- anywhere anywhere tcp
dpt:http state NEW
ACCEPT tcp -- anywhere anywhere tcp
dpt:https state NEW
ACCEPT tcp -- anywhere anywhere tcp
dpt:pop3 state NEW
ACCEPT tcp -- anywhere anywhere tcp
dpt:imap state NEW
ACCEPT tcp -- anywhere anywhere tcp
dpt:imaps state NEW
ACCEPT tcp -- anywhere anywhere tcp
dpt:pop3s state NEW
ACCEPT tcp -- anywhere anywhere tcp
dpt:ndmp state NEW
ACCEPT udp -- anywhere anywhere udp
dpt:xmsg state NEW
ACCEPT udp -- anywhere anywhere udp
dpt:27910 state NEW
ACCEPT udp -- anywhere anywhere udp
dpt:27960 state NEW
ACCEPT udp -- anywhere anywhere udp
dpt:28960 state NEW
ACCEPT udp -- anywhere anywhere udp
dpt:28961 state NEW
ACCEPT udp -- anywhere anywhere udp
dpt:28962 state NEW
ACCEPT tcp -- anywhere anywhere tcp
dpt:28965 state NEW
ACCEPT tcp -- anywhere anywhere tcp
dpt:28966 state NEW
ACCEPT tcp -- anywhere anywhere tcp
dpt:14534 state NEW
ACCEPT udp -- anywhere anywhere udp
dpt:8767 state NEW
ACCEPT tcp -- anywhere anywhere tcp
dpt:31332 state NEW
ACCEPT udp -- anywhere anywhere udp
dpt:31332 state NEW
ACCEPT tcp -- anywhere anywhere tcp
dpt:directv-tick state NEW
ACCEPT tcp -- anywhere anywhere tcp
dpt:directv-catlg state NEW
ACCEPT tcp -- anywhere anywhere tcp
dpts:search:xinupageserver state NEW
syn-flood tcp -- anywhere anywhere tcp
flags:FIN,SYN,RST,ACK/SYN
ACCEPT icmp -- anywhere anywhere
ACCEPT icmp -- anywhere anywhere icmp
echo-request limit: avg 12/min burst 5
REJECT tcp -- anywhere anywhere reject-with
tcp-reset
REJECT udp -- anywhere anywhere reject-with
icmp-port-unreachable
REJECT tcp -- anywhere anywhere tcp
dpt:auth reject-with icmp-port-unreachable
REJECT tcp -- anywhere anywhere tcp
dpt:socks reject-with icmp-port-unreachable
LOG all -- anywhere anywhere limit: avg
10/hour burst 5 LOG level warning
Chain FORWARD (policy DROP)
target prot opt source destination
ACCEPT all -- anywhere anywhere
DROP all -- 192.168.0.0/16 anywhere
DROP all -- !192.168.1.0/24 anywhere
LOG all -- anywhere anywhere limit: avg
10/hour burst 5 LOG level warning
Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT all -- anywhere anywhere
LOG all -- anywhere anywhere limit: avg
10/hour burst 5 LOG level warning
Chain syn-flood (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere limit: avg
5/sec burst 4
LOG all -- anywhere anywhere limit: avg
5/sec burst 10 LOG level debug prefix `IPT SYN-FLOOD: '
DROP all -- anywhere anywhere
Z gory dziekuje za wskazowki!
pszemaz
Więcej informacji o liście dyskusyjnej pld-users-pl