|  | 
 
| #!/bin/bash # 飘飘的风于2003年7月26日修改,端口影射成功。
 
 ###--------------------------------------------------------------------###
 #以下是定义变数
 ###--------------------------------------------------------------------###
 
 PATH=/sbin:/usr/sbin:/bin:/usr/bin
 RC_SQUID=/etc/rc.d/init.d/squid
 EXT_IF=etAJGE#外网接口,确定网卡,如果是拨号就用ppp0
 INT_IF=eth0
 LAN_IPRT="25="192.168.0.0/24"
 STATIC_IP="81.33.20.80"
 TRUSTED_TCP_PORT="c} 53 80 110 143 443 993 995 3389"
 TRUSTED_UDP_PORT="53 3389"
 ALLOWED_ICMP="0 3 3/4 4 11 12 14 16 18"
 
 
 ###--------------------------------------------------------------------###
 #确定iptables安装情况
 ###--------------------------------------------------------------------###
 
 which iptables &>/dev/null || {
 echo
 echo "$(basename $0): iptables程序没有找到"
 echo "请先安装好这个程序."
 echo
 exit 1
 }
 
 ###--------------------------------------------------------------------###
 #废掉ipchains,这是针对redhat以前的版本,新版已经把iptables嵌到内核里了
 ###--------------------------------------------------------------------###
 
 lsmod | grep ipchains &>/dev/null && {
 echo "正在废掉ipchains服务........."
 rmmod ipchains----
 
 ###--------------------------------------------------------------------###
 #装载模块modules
 ###--------------------------------------------------------------------###
 
 echo "模块正在载人......"
 modprobe ip_tables &>/dev/null || {
 echo -n "$(basename $0): ip_tables模块载人失败"
 echo "请检查"
 exit 3
 }
 for file in /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/ip_conntrack_*.o
 do
 module=$(basename $file)
 modprobe ${module%.*} &>/dev/null
 done
 for file in /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/ip_nat_*.o
 do
 module=$(basename $file)
 modprobe ${module%.*} &>/dev/null
 done
 
 # ------------- 端口开启 ------------
 echo "开启所要的端口...."
 iptables -N services
 for PORT in $TRUSTED_TCP_PORT; do
 iptables -A services -i $EXT_IF -p tcp --dport $PORT -j ACCEPT
 done
 for PORT in $TRUSTED_UDP_PORT; do
 iptables -A services -i $EXT_IF -p udp --dport $PORT -j ACCEPT
 done
 
 
 
 #----ipforwarding--------
 echo "打开foward功能"
 echo "1" > /proc/sys/net/ipv4/ip_forward
 
 #动态ip使用
 #
 #echo "1" > /proc/sys/net/ipv4/ip_dynaddr
 #这里是动态ip实现nat共享必改之处
 
 ###---------------------------------------------------###
 #清除先前的设定
 ###---------------------------------------------------###
 echo "正在清除先前的设定......."
 #清除预定表filter中,所有规则链中的规则
 iptables -F
 #清除预定表filter中,使用者自定链中的规则
 iptables -X
 
 #清除预定表mangle中,所有规则链中的规则
 iptables -F -t mangle
 #清除预定表mangle中,使用者自定链中的规则
 iptables -X -t mangle
 
 #清除nat表中的规则
 iptables -F -t nat
 iptables -X -t nat
 iptables -Z -t nat
 
 ###---------------------------------------------------###
 #设定预设规则
 ###---------------------------------------------------###
 #预设规则要么为全部丢弃,要么为全部接受
 #本列为全部丢弃,然后逐步开放,这是安全系数很高的设法
 #若目标为DROP,则policy设为ACCEPT;若目标为ACCEPT,则policy设为DROP
 
 iptables -P INPUT DROP
 iptables -P OUTPUT DROP
 iptables -P FORWARD DROP
 
 #TCP的设定
 #
 #我们丢弃坏的TCP包
 #
 
 iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j LOG --log-prefix "New not syn:"
 iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP
 
 #局域网共享的实现
 #iptables -t nat -A POSTROUTING -o $EXT_IF -s $LAN_IP_RANGE -j SNAT --to-source $STATIC_IP
 iptables -t nat -A POSTROUTING -o $EXT_IF -j MASQUERADE
 echo "局域网共享的已实现,请试用局P:网机器"
 
 #这一步实现局域网内部机对外部网开放
 #凡对$STATICETING )d线者,则转址到192.168.0.100:80
 iptables -t nat -A PRERO192.168. 81.33.20.80 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.100:80
 iptables -A FORWARD -p tcp -d 192.168.0.100 --dport 80 -j ACCEPT
 iptables -t nat -I POSTROUTING -s 192.168.0.0/255.255.255.0 -p tcp -d 192.168.0.100 --dport 80 -j SNAT --to 192.168.0.1
 #192.168.0.250装有win2003,提供远程桌面服务
 iptables -t nat -A PREROUTING -d 81.33.20.80 -p tcp --dport 3389 -j DNAT --to-destination 192.168.0.250:3389
 iptables -A FORWARD -p tcp -d 192.168.0.250 --dport 3389 -j ACCEPT
 #允许内网机使用外网机的IP访问内网机,把内网机的IP转换成网关IP
 iptables -t nat -I POSTROUTING -s 192.168.0.0/255.255.255.0 -p tcp -d 192.168.0.250 --dport 3389 -j SNAT --to 192.168.0.1
 
 
 #允许要转向的包
 iptables -A FORWARD -i $INT_IF -j ACCEPT
 iptables -A FORWARD -mdptatem
 | 
 |