文章作者:Goldberg [安全矩阵](www.smatrix.org) 信息来源:邪恶八进制信息安全团队(www.eviloctal.com)
注意:此文首发于邪恶八进制(www.eviloctal.com)
今天下午给自己的工作机器(redhat linux9 内核2.4.20-8)编写了一个简单的防火墙脚本,我的机器双网卡(eth0联内网 eth1联外网)并有个固定的IP:221.226.x.x WWW,DNS,DHCP,MIAL等服务都做起来了 于是组了个小局域网 带几台机器 防火墙脚本在 /etc/rc.d/init.d/firewall 边编写防火墙脚本边听这个歌曲:那些花儿,嘿,感觉真好,一会就写好了,嘎嘎. 规则写的比较少 也比较简单 让各位大牛们见笑了 有兴趣的可以跟帖讨论一下 具体脚本如下:
echo "firewall start! let us go!" echo 0 > /proc/sys/net/ipv4/ip_forward echo 0 > /proc/sys/net/ipv4/ip_dynaddr echo 1 > /proc/sys/net/ipv4/tcp_ecn echo 0 > /proc/sys/net/ipv4/tcp_syncookies echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
#start kernel modules /sbin/modprobe ip_tables /sbin/modprobe iptable_nat /sbin/modprobe iptable_filter /sbin/modprobe ip_conntrack /sbin/modprobe ip_conntrack_ftp /sbin/modprobe ip_nat_ftp /sbin/modprobe ipt_MASQUERADE /sbin/modprobe ipt_state /sbin/modprobe ipt_multiport
#clear chains rules /sbin/iptables -F /sbin/iptables -t nat -F
#clear packets counts /sbin/iptables -Z /sbin/iptables -t nat -Z
#set default methods:DROP #/sbin/iptables -P INPUT DROP #/sbin/iptables -P FORWARD DROP #/sbin/iptables -P OUTPUT DROP
#allow local connect /sbin/iptables -A INPUT -i lo -j ACCEPT /sbin/iptables -A OUTPUT -o lo -j ACCEPT
#allow ping proxy /sbin/iptables -A INPUT -p icmp --icmp-tye echo-request -m limit --limit 1/s --limit-burst 10 -j ACCEPT /sbin/iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
#allow DNS /sbin/iptables -A OUTPUT --dport 53 -j ACCEPT /sbin/iptables -A INPUT --sport 53 -j ACCEPT
#let us begin forward rules /sbin/iptables -A FORWARD -p tcp -m multiport --dport 135,137,138,139,445 -j ACCEPT /sbin/iptables -A FORWARD -i eth0 -j ACCEPT /sbin/iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT /sbin/iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 120 -j ACCEPT
#let us begin NAT rules #NAT for HTTP /sbin/iptables -t nat -A PREROUTING -p tcp -i eth1 -d 221.226.x.x --dport 80-j DNAT --to-destination 192.168.5.16:80 /sbin/iptables -t nat -A POSTROUTING -p tcp -o eth1 -s 192.168.5.16 --sport 80-j SNAT --to-source 221.226.x.x
#NAT for FTP /sbin/iptables -t nat -A PREROUTING -p tcp -i eth1 -d 221.226.x.x --dport 21 -j DNAT --to-destination 192.168.5.16:21 /sbin/iptables -t nat -A POSTROUTING -p tcp -o eth1 -s 192.168.5.16 --sport 21-j SNAT --to-source 221.226.x.x:21 /sbin/iptables -t nat -A PREROUTING -p tcp -i eth1 -d 221.226.x.x --dport 20-j DNAT --to-destination 192.168.5.16:20 /sbin/iptables -t nat -A POSTROUTING -p tcp -o eth1 -s 192.168.5.16 --sport 20-j SNAT --to-source 221.226.x.x:20
#NAT for HTTPS /sbin/iptables -t nat -A PREROUTING -p tcp -i eth1 -d 221.226.x.x --dport 443 -j DNAT --to-destination 192.168.5.16:443 /sbin/iptables -t nat -A POSTROUTING -p tcp -o eth1 -s 192.168.5.16 --dport 443 -j SNAT --to-source 221.226.x.x:443
#NAT for SMTP and POP3 /sbin/iptables -t nat -A PREROUTING -p tcp -i eth1 -d 221.226.x.x --dport 25-j --to-destination 192.168.5.16:25 /sbin/iptables -t nat -A POSTROUTING -p tcp -o eth1 -s 192.168.5.16 --sport 25-j --to-source 221.226.x.x:25 /sbin/iptables -t nat -A PREROUTING -p tcp -i eth1 -d 221.226.x.x --dport 110 -j --to-destination 192.168.5.16:110 /sbin/iptables -t nat -A POSTROUTING -p tcp -o eth1 -s 192.168.5.16 --sport 110 -j --to-source 221.226.x.x:110 /sbin/iptables -t nat -A PREROUTING -p tcp -i eth1 -d 221.226.x.x --dport 143 -j --to-destination 192.168.5.16:143 /sbin/iptables -t nat -A POSTROUTING -p tcp -o eth1 -s 192.168.5.16 --sport 143 -j --to-source 221.226.x.x:143
#NAT for TELNET /sbin/iptables -t nat -A PREROUTING -p tcp -i eth1 -d 221.226.x.x --dport 23-j --to-destination 192.168.5.16:23 /sbin/iptables -t nat -A POSTROUTING -p tcp -o eth1 -s 192.168.5.16 --sport 23-j --to-source 221.226.x.x:23
#NAT for SSH /sbin/iptables -t nat -A PREROUTING -p tcp -i eth1 -d 221.226.x.x --dport 23-j --to-destination 192.168.5.16:22 /sbin/iptables -t nat -A POSTROUTING -p tcp -o eth1 -s 192.168.5.16 --sport 22-j --to-source 221.226.x.x:22
#IP MASQUERADE /sbin/iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE |