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