#!/bin/bash
IPT=/sbin/iptables
#echo "1" > /proc/sys/net/ipv4/ip_forward
#echo "1" > /proc/sys/net/ipv4/tcp_syncookies
#echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
$IPT -F
$IPT -X
$IPT -Z
$IPT -t nat -F
$IPT -t nat -X
$IPT -t nat -Z
$IPT -t mangle -F
$IPT -t mangle -X
$IPT -t mangle -Z
$IPT -P INPUT DROP
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD DROP
/sbin/depmod -a
/sbin/modprobe ip_tables
/sbin/modprobe iptable_nat
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ipt_LOG
#$IPT -A INPUT -i lo -j ACCEPT
#$IPT -A OUTPUT -o lo -j ACCEPT
#$IPT -A INPUT -s 192.168.1.138 -m mac --mac-source 00:0C:29:A6:7E:B0 -p tcp --dport 22 -j ACCEPT
#$IPT -A INPUT -p tcp -s 192.168.1.138 -m mac --mac-source 00:0C:29:A6:7E:B0 --dport 22 -j ACCEPT
$IPT -A INPUT -s 192.168.1.138 -p tcp --dport 22 -j ACCEPT
########### release   WEB #######################
$IPT -t nat -A PREROUTING -d 192.168.1.238 -p tcp  --dport 8686 -j DNAT --to-destination 192.168.1.150:80
$IPT -t nat -A PREROUTING -p tcp -d 192.168.1.238 --dport 80 -j DNAT --to-destination 192.168.1.1-192.168.1.5
########### access ftp ###################
$IPT -A INPUT -s 192.168.1.50 -p tcp --dport 21 -j ACCEPT
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
##########  public  network #####################
$IPT -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source 234.56.78.9
########### drop ip access WEB  ###################
$IPT -A FORWARD -p tcp -s 192.168.1.15 -m mac --mac-source 00:0C:29:A6:7E:B0 --dport 80 -j DROP
以上结果是外部主机ping 不通本机,是因为没有允许协议icmp进来的数据包
########### Ping  setup ###################
$IPT -A INPUT -s 192.168.1.52 -p icmp -j ACCEPT
########### Security Setup ################
$IPT -A INPUT -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
$IPT -A INPUT -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
$IPT -A INPUT -m limit --limit 100/s --limit-burst 100 -j ACCEPT
 
--limit 在一定时间内匹配包数目的最大值
--limit-burst 应用限制前初始匹配包数目的最大值
 
一、对adsl拔号上网脚本
#!/bin/bash
echo "Starting iptables ........"
##### adsl
adsl-stop
adsl-start
route add default ppp0
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
 
IPT=/sbin/iptables
$IPT -F
$IPT -X
$IPT -Z
$IPT -t nat -F
$IPT -t nat -X
$IPT -t nat -Z
$IPT -t mangle -F
$IPT -t mangle -X
$IPT -t mangle -Z
$IPT -P INPUT DROP
$IPT -P OUTPUT ACCEPT

$IPT -P FORWARD DROP
 
/sbin/depmod -a
/sbin/modprobe ip_tables
/sbin/modprobe iptable_nat
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ipt_LOG
 
##### lo network
#$IPT -A INPUT -i lo -j ACCEPT
#$IPT -A OUTPUT -o lo -j ACCEPT
 
 
$IPT -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
#$IPT -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 19.16.15.16
 
注:与猫相连接的网卡配置
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=no
 
 
二、工作实例
网关配置环境为三块网卡 eth0(外网)、eth1、eth2
iptables   默认策略为INPUT和FORWARD  DROP 其他的策略是ACCEPT
当需要将一台内网mail机 25、110、80(webmail)发布到公网上,做以下设置
iptables -A FORWARD  -p tcp -m multiport --destination-port 25,110,80   -j ACCEPT
iptables -A FORWARD -o eth0 -p tcp   -s 192.168.0.125  -m state  --state ESTABLISHED -j ACCEPT
iptables -t nat -A PREROUTING  -i eth0 -p tcp -d 公网IP --dport 25 -j DNAT --to-destination 192.168.0.125
iptables -t nat -A PREROUTING  -i eth0 -p tcp -d 公网IP --dport 110 -j DNAT --to-destination 192.168.0.125
iptables -t nat -A PREROUTING  -i eth0 -p tcp -d 公网IP --dport 80 -j DNAT --to-destination 192.168.0.125
 
 
80端口数据流
iptables -t nat -A PREROUTING -i eth0 -p tcp -d 123.456  --dport 80 -j DNAT --to-destination 192.168.0
 
iptables -A FORWARD  -p tcp  -m  multiport  --destination-port  25,110,995,465,80 -j ACCEPT
 
iptables -A  FORWARD  -o eth0 -p tcp -s 192.168.0  -m state  --state  ESTABLISHED -j ACCEPT
 
iptables -t nat -A POSTROUTING -s 192.168.0  -o eth0  -j SNAT --to-source 123.456
 
 
22
 
iptables -t nat -A PREROUTING -i eth0  -p tcp d 123.456.  --dport 22 -j DNAT --to-destination 192.168.0
 
iptables -A FORWARD -o tcp -m multiport  --destination-port 8080,22 -j ACCEPT