# definitions. ipt=`which iptables` mod=`which modprobe` ext="eth1" ext_ip="201.12.35.x1" ext_ipsec="201.12.35.x3" int="eth0" int_net="192.168.1.0/24" int_ip="192.168.1.1" odin_ext="201.12.35.x2" odin_int="192.168.1.134" sicredi_ip="201.77.95.x0" sicredi_net="172.16.0.0/12" # sysctl. echo 1 > /proc/sys/net/ipv4/tcp_syncookies echo 0 > /proc/sys/net/ipv4/ip_forward # modules. $mod ip_conntrack_ftp # policy. $ipt -P INPUT DROP $ipt -P FORWARD DROP $ipt -P OUTPUT ACCEPT # flush. $ipt -F $ipt -F -t nat $ipt -Z $ipt -Z -t nat ############## # PREROUTING # ############## # squid. $ipt -t nat -A PREROUTING -i $int -s $int_net -p tcp --dport 80 -j REDIRECT --to-port 3128 # odin. $ipt -t nat -A PREROUTING -i $odin_ext -p tcp --dport 80 -j DNAT --to-dest $odin_int $ipt -t nat -A PREROUTING -i $odin_ext -p tcp --dport 21 -j DNAT --to-dest $odin_int ######### # INPUT # ######### # accept loopback. $ipt -A INPUT -i lo -j ACCEPT # basic input accept. $ipt -I INPUT -i $ext -m state --state ESTABLISHED,RELATED -j ACCEPT # accept everything from network. $ipt -A INPUT -i $int -s $int_net -j ACCEPT # block scans. $ipt -A INPUT -i $ext -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP $ipt -A INPUT -i $ext -p tcp -m tcp --tcp-flags SYN,FIN SYN,FIN -j DROP $ipt -A INPUT -i $ext -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP $ipt -A INPUT -i $ext -p tcp -m tcp --tcp-flags FIN,RST FIN,RST -j DROP $ipt -A INPUT -i $ext -p tcp -m tcp --tcp-flags ACK,FIN FIN -j DROP $ipt -A INPUT -i $ext -p tcp -m tcp --tcp-flags ACK,URG URG -j DROP # accept pptp. $ipt -A INPUT -i $ext -p tcp --dport 1723 -j ACCEPT $ipt -A INPUT -i $ext -p 47 -j ACCEPT # accept dns. $ipt -A INPUT -i $ext -p udp --dport 53 -j ACCEPT # accept ping, but limit it. $ipt -A INPUT -i $ext -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT # accept ipsec. $ipt -A INPUT -i $ext_ipsec -p 50 -s $sicredi_ip -j ACCEPT $ipt -A INPUT -i $ext_ipsec -p 51 -s $sicredi_ip -j ACCEPT $ipt -A INPUT -i $ext_ipsec -p udp --dport 500 -s $sicredi_ip -j ACCEPT # drop identd quickly. $ipt -A INPUT -p tcp -i $ext --dport 113 -j REJECT --reject-with tcp-reset ########### # FORWARD # ########### # forward network traffic. $ipt -A FORWARD -i $int -o $ext -j ACCEPT $ipt -A FORWARD -i $ext -o $int -m state --state ESTABLISHED,RELATED -j ACCEPT # block msn to all, but not for us :). $ipt -A FORWARD -o $ext -p tcp --dport 1863 -m iprange ! --src-range 192.168.1.120-192.168.1.123 -j DROP # block orkut to all, but not for us :). $ipt -A FORWARD -o $ext -p tcp -d orkut.com -m iprange ! --src-range 192.168.1.120-192.168.1.123 -j DROP # forward ftp to odin. $ipt -A FORWARD -p tcp --sport 21 -m state --state ESTABLISHED -d $odin_int -j ACCEPT $ipt -A FORWARD -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -d $odin_int -j ACCEPT $ipt -A FORWARD -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED -d $odin_int -j ACCEPT # forward http to odin. $ipt -A FORWARD -p tcp -m state --state NEW -d $odin_int --dport 80 -j ACCEPT # forward ipsec. $ipt -A FORWARD -i $int -o ipsec+ -j ACCEPT $ipt -A FORWARD -i ipsec+ -o $int -j ACCEPT ########## # OUTPUT # ########## ############### # POSTROUTING # ############### # nat for network. $ipt -A POSTROUTING -t nat -s 192.168.1.0/24 -p tcp -o $ext -j SNAT --to-source $ext_ip:20 $ipt -A POSTROUTING -t nat -s 192.168.1.0/24 -p tcp -o $ext -j SNAT --to-source $ext_ip:21 $ipt -A POSTROUTING -t nat -s 192.168.1.0/24 -p tcp -o $ext -j SNAT --to-source $ext_ip:25 $ipt -A POSTROUTING -t nat -s 192.168.1.0/24 -p tcp -o $ext -j SNAT --to-source $ext_ip:110 $ipt -A POSTROUTING -t nat -s 192.168.1.0/24 -p tcp -o $ext -j SNAT --to-source $ext_ip:443 $ipt -A POSTROUTING -t nat -s 192.168.1.0/24 -p tcp -o $ext -j SNAT --to-source $ext_ip:1863 # nat for odin. $ipt -A POSTROUTING -t nat -s $odin_int -o $ext -j SNAT --to-source $odin_ext # now enable ip-forward. echo 1 > /proc/sys/net/ipv4/ip_forward echo "Firewall Enabled."