比较好的iptable实例

转载 xxxxx

以前公司用的一个例子,写成一个脚本,放在rc.local开机运行即可: https://files.cnblogs.com/derekchen/iptables.rar

service iptables stop   

service iptables stop    //停止先停止防火墙

INET_IP=`ifconfig | grep 'inet ' | grep -v '127.0.0.1' | awk -F ' ' '{print $2}'| awk -F':' '{print $2}'`    //获取本机IP

LO_IFACE="lo"
LO_IP="127.0.0.1"

IPTABLES="/sbin/iptables"     //定义iptables路径

/sbin/depmod -a     //以下几项为开启iptables的各种模块
/sbin/modprobe ip_tables
/sbin/modprobe ip_conntrack
/sbin/modprobe iptable_filter
/sbin/modprobe iptable_mangle
/sbin/modprobe ipt_state

$IPTABLES -P INPUT ACCEPT      //定于INPUT为开放状态
$IPTABLES -P OUTPUT ACCEPT     //定于OUTPUT为开放状态
$IPTABLES -P FORWARD ACCEPT    //定于FORWARD为开放状态

$IPTABLES -N bad_tcp_packets   //自定义一个 bad_tcp_packets组    以下同
$IPTABLES -N allowed
$IPTABLES -N tcp_packets
$IPTABLES -N udp_packets
$IPTABLES -N icmp_packets

$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset    //丢弃坏包
$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP     //丢弃坏包

$IPTABLES -A allowed -p TCP --syn -j ACCEPT      //这3条顺序很重要      允许初始连接通过
$IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT   //允许ESTABLISHED,RELATED状态的包通过
$IPTABLES -A allowed -p TCP -j DROP   拒绝所有包

$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 80 -j allowed   //允许TCP 80 通过,下同,根据自己环境添加相关端口
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 5166 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 3301 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 813 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 2213 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 33885 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0  -j DROP


$IPTABLES -A udp_packets -p UDP -s 0/0 --destination-port 161 -j ACCEPT   //允许UDP 161端口 通过,根据自己环境添加相关端口
$IPTABLES -A udp_packets -p UDP -s 0/0 -j DROP

$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT      //ICMP的相关项,各个数字代表什么可以google下
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT 
$IPTABLES -A icmp_packets -p ICMP -s 0/0 -j DROP

$IPTABLES -A INPUT -p TCP -j bad_tcp_packets    //一个连接包新进来先通过bad_tcp_packets检测判断是否为坏包
$IPTABLES -A INPUT -p ALL -m state --state ESTABLISHED,RELATED -j ACCEPT    //状态为ESTABLISHED,RELATED 的包则通过
$IPTABLES -A INPUT -p TCP -m tcp --dport 30000:50000 --syn -j ACCEPT   //3W-5W的端口可以通过,这个是为了配合FTP的,可以不要
$IPTABLES -A INPUT -p TCP  -j tcp_packets    //最后用过 tcp_packets 这个组来判断是否让包通过

$IPTABLES -A INPUT -p ALL -i $LO_IFACE  -j ACCEPT    //lo本地的全部通过
$IPTABLES -A INPUT -p UDP  -j  tcp_packets      //UDP包发送到 tcp_packets 组检测
$IPTABLES -A INPUT -p ICMP -j icmp_packets    //ICMP 发送到 icmp_packets  组检测

$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT   

$IPTABLES -A OUTPUT -p tcp -j bad_tcp_packets    //OUTPUT出去的包先通过bad_tcp_packets判断是否为坏包
$IPTABLES -A OUTPUT -p ALL -s $LO_IP -j ACCEPT   //LO出去的全部通过
$IPTABLES -A OUTPUT -p ALL  -j ACCEPT    //不是坏包就允许出去

posted on 2012-12-21 00:01  晓风残梦  阅读(337)  评论(0编辑  收藏  举报

导航