adsl.iptalbes.fw
时间:2005-03-12 来源:gowl
#!bin/bash
echo""
echo""
echo""
echo""
echo " Welcome uses GOWLFirewall System"
echo""
echo""
/sbin/modprobe ip_tables
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_conntrack_ftp
echo""
echo""
echo " 1. Clear IPTABLES ..... [OK]"
/sbin/iptables -F INPUT
/sbin/iptables -F OUTPUT
/sbin/iptables -F POSTROUTING -t nat
/sbin/iptables -F FORWARD
/sbin/iptables -A INPUT -i eth1 -j ACCEPT
/sbin/iptables -A INPUT -i ppp0 -j ACCEPT
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
echo""
echo""
echo""
echo " 2. Open Eth0.1.ppp0 ...... [OK] "
echo 1 >/proc/sys/net/ipv4/ip_forward
echo""
echo""
echo""
echo " 3. Open Ip_Forward ..... [OK] "
/sbin/iptables -A FORWARD -s 192.168.0.1/255.255.255.0 -j ACCEPT
echo""
echo""
echo""
echo " 4. Open Forward OK ..... [OK] "
/sbin/iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.1/255.255.255.0 -j MASQUERADE
/sbin/iptables -t nat -A POSTROUTING -o ppp0 -d 192.168.0.1/255.255.255.0 -j MASQUERADE
echo""
echo""
echo""
echo""
echo " 5. Open ftp..... [OK] "
/sbin/iptables -t nat -A PREROUTING -d 61.150.15.69 -p tcp --dport 21 -j DNAT --to 192.168.0.2
#/sbin/iptables -t nat -A PREROUTING -d 61.134.9.145 -p tcp --dport 80 -j DNAT --to 192.168.0.2
/sbin/iptables -t nat -A POSTROUTING -d 192.168.0.2 -s 192.168.0.0/24 -p tcp --dport 21 -j SNAT --to 192.168.0.1
#/sbin/iptables -t nat -A POSTROUTING -d 192.168.0.2 -s 192.168.0.0/24 -p tcp --dport 80 -j SNAT --to 192.168.0.1
echo""
echo""
echo""
echo " 6. Open Firewall ..... [OK] "
/sbin/iptables -A INPUT -p tcp -i ppp0 -j REJECT --reject-with tcp-reset
/sbin/iptables -A INPUT -p udp -i ppp0 -j REJECT --reject-with icmp-port-unreachable
#fangping
#echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
#/sbin/iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
#/sbin/iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
#/sbin/iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
# ip ping boob firewall
#/sbin/iptables -A INPUT -p icmp -m limit --limit 6/m --limit-burst 5 -j ACCEPT
#/sbin/iptables -P INPUT DROP
echo""
echo""
echo""
echo " QQ47162298 "
在详述端口转发之前,先讲一下我日前遇到的一件事情。
本人是搞测试的,有一厂家拿了一个服务器软件叫我测试。基于win2k的,端口号为881,服务器直接连接外部网络,客户端通过服务器ip来访问,而他们没有基于linux的服务器软件,照他们意思就必须将服务器换成windows的。作为一个linux爱好者,我想大家都明白这种痛苦。我翻了一下资料,发现iptables的端口转发功能可以解决,折腾了一下午,终于完成任务。下面将我的方法讲一下:
思想:利用端口转发,当服务器接收到881端口请求以后,将其转到 10.10.2.200:881上,10.10.2.200再将数据返回给请求连接者。
Eth0:连接ADSL,即ppp0接口
Eth1:连接内部网络,ip为10.10.1.1
10.10.2.200为win2k服务器,其端口881提供网络服务。
a.b.c.dàppp0:881à eth1à10.10.2.200:881 ;数据进来时的路线
10.10.2.200:881àeth1àppp0:881àa.b.c.d ;数据出去时的路线
iptbles脚本:
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 881 -j DNAT --to-destination 10.10.2.200:881 ;将881请求转发至10.10.2.00:881端口
iptables -t nat -A POSTROUTING -s 10.10.0.0/16 -d 10.10.2.200 -p tcp -m tcp --dport 881 -j SNAT --to-source 10.10.1.1 ;返回a.b.b.d时数据源来自同一子网,就将其源地址更改为10.10.1.1,从eth0发出,并在连接跟踪表中查出a.b.c.d是从ppp0进来的,又由ppp0将此数据发出。
当然不要忘了加一条允许881端口访问的语句。
iptables –A INPUT –p tcp –dport 881 –i ppp0 –j ACCEPT
可不可把服务器放在局域内,用端口转发来实现呢?答案当然是肯定的,既然能把881端口转发,那么21,80这些个端口更不在话下,而且很多服务器软件都可以自定义端口,那就在得玩了,只要有合适的端口,即使给局域网每一个用户开一个ftp服务器也是可以的。你想要实现什么服务都可以,当然是基于端口转发的。
局域网内10.10.2.101是win2k,提供www服务,端口为800
通过服务器http://serverip:800 进行访问。
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 800 -j DNAT --to-destination 10.10.2.101:800
iptables -t nat -A POSTROUTING -s 10.10.0.0/16 -d 10.10.2.101 -p tcp -m tcp --dport 800 -j SNAT --to-source 10.10.1.1
iptables –A INPUT –p tcp –dport 800 –i ppp0 –j ACCEPT
由于是基于端口转发实现的,所以服务器上只需装个iptables来转发数据就行了,一切服务由内部服务器完成,这样的话,我想linux服务器才真正的算是个防火墙。