iptables nt
占位...
扩展
1、其实匹配扩展中,还有需要加-m引用模块的显示扩展,默认是隐含扩展,不要使用 -m
状态检测的包过滤
-m state
--state {NEW,ESTATBLISHED,INVALID,RELATED} 指定检测那种状态
-m multiport 指定多端口号
--sport
--dport
--ports
-m iprange 指定IP段
--src-range ip-ip
--dst-range ip-ip
-m connlimit 连接限定
--comlimit-above # 限定大连接个数
-m limit 现在连接速率,也就是限定匹配数据包的个数
--limit 指定速率
--limit-burst # 峰值速率,最大限定
-m string 按字符串限定
--algo bm|kmp 指定算法bm或kmp
--string "STRING" 指定字符串本身
iptables -A INPUT -p tcp -m multiport --dports 110,80,25,445,1863,5222 -j ACCEPT
iptables -A INPUT -p tcp -s 172.16.0.0/16 --dport 139 -j ACCEPT
#允许dns解析通过,如果内网配置了DNS服务器(转发器),那只允许转发器那个IP能过,请自行修改,(-s ip)
iptables -A INPUT -i eth1 -p udp -m multiport --dports 53 -j ACCEPT
# iptables -A INPUT -s 0.0.0.0/0.0.0.0 -d 192.168.80.139 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
允许任何主机状态为NEW,ESTABLISHED的状态连接,这里要注意当写成0.0.0.0/0.0.0.0 表示任意地址的时候是可以省略的,如下即可:
# iptables -A INPUT -d 192.168.80.140 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
允许本机的ESTABLISHED状态出去,为了防止有反弹时木马,让服务器主动向外发起请求
# iptables -A OUTPUT -s 192.168.80.140 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
之后再修改默认权限为拒绝即可
# iptables -P INPUT DROP
# iptables -P OUTPUT DROP
现在在本机ping 127.0.0.1,发现时不同的,所以要允许本机,下面在写一个:
# iptables -I INPUT 1 -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
# iptables -I OUTPUT 1 -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
如果要限制80端口的话,那在就在写一条,现在写在一条里,为了节省查询时间
之前的--sport或--dport 后面可以添加连续的如 --sport 22:80 表示从22到80的所有端口,不符合现在的条件,所以我们用第二个显示扩展:
# iptables -A INPUT -d 192.168.80.140 -p tcp -m multiport --dport 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT
这样就把22,80 和在一起的,OUTPUT同理但注意源端口目标端口,之后再删除原来的即可
(注意:有SSH的话一定要先添加在删除)
这里需要知道一点,从本机出去的ESTABLISHED都是现请求进来的,所以可以写成如下:
# iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
表示所有客户端NEW请求进来服务器返回ESTABLISHED的状态全部允许
也可以添加在INPUT中,提高查询速度
# iptables -I INPUT 1 -m state --state ESTABLISHED -j ACCEPT
这里的原理是,当NEW请的时候匹配他自己的那条规则,当建立连接后直接就匹配这条规则,提高效率
例如:第一条是允许ESTABISHED 的,第二条是22,的NEW,ESTABLISHED的规则,这样当用户请求22的时候先匹配22的NEW,之后的ESTABLISHED状态时直接匹配第一条,不用在去匹配第二条的规则了,这样当我们有许多条目的时候大大提高了效率
# iptables -A INPUT -d 192.168.80.140 -m iprange --src-range 192.168.80.130-192.168.80.150 -p tcp --dport 23 -m state --state NEW -j ACCEPT
指定192.168.80.130-192.168.80.150 可以访问本机的23端口
# iptables -I INPUT 2 -d 192.168.80.140 -p tcp --dport 22 -m state --state NEW -m connlimit ! --connlimit-above 2 -j ACCEPT
这里connlimit ! --connlimit-above 2 -j ACCEPT 表示只允许SSH本机2次,connlimit --connlimit-above 2 -j DROP 表示超过2次后拒绝,这里因为默认权限是拒绝的所以用!取反,而且前面有写允许22端口的,这里不匹配后就会先下匹配那条,将匹配22允许的更改即可。
# iptables -A INPUT -d 192.168.80.140 -p tcp --dport 80 -m state --state NEW -m limit --limit 1/second --limit-burst 3 -j ACCEPT
表示对web服务的新连接请求,平均每秒只允许1个,最多一次进3个
# iptables -I OUTPUT 1 -m string --algo kmp --string "peace" -j DROP
表示本机响应当中包含“peace”字符串的机拒绝
-----------------------------------------------------------------------------------------------
本文转自:http://www.liusuping.com/ubuntu-linux/iptables-firewall-setting.html
ptables简介
iptables是基于内核的防火墙,功能非常强大,iptables内置了filter,nat和mangle三张表。
filter负责过滤数据包,包括的规则链有,input,output和forward;
nat则涉及到网络地址转换,包括的规则链有,prerouting,postrouting和output;
mangle表则主要应用在修改数据包内容上,用来做流量整形的,默认的规则链有:INPUT,OUTPUT,NAT,POSTROUTING,PREROUTING;
input匹配目的IP是本机的数据包,forward匹配流经本机的数据包,prerouting用来修改目的地址用来做DNAT,postrouting用来修改源地址用来做SNAT。
iptables主要参数
-A 向规则链中添加一条规则,默认被添加到末尾
-T指定要操作的表,默认是filter
-D从规则链中删除规则,可以指定序号或者匹配的规则来删除
-R进行规则替换
-I插入一条规则,默认被插入到首部
-F清空所选的链,重启后恢复
-N新建用户自定义的规则链
-X删除用户自定义的规则链
-p用来指定协议可以是tcp,udp,icmp等也可以是数字的协议号,
-s指定源地址
-d指定目的地址
-i进入接口
-o流出接口
-j采取的动作,accept,drop,snat,dnat,masquerade
--sport源端口
--dport目的端口,端口必须和协议一起来配合使用
注意:所有链名必须大写,表明必须小写,动作必须大写,匹配必须小写
iptable配置实例
iptable基本操作
iptables -L 列出iptables规则
iptables -F 清除iptables内置规则
iptables -X 清除iptables自定义规则
设定默认规则
在iptables规则中没有匹配到规则则使用默认规则进行处理
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
配置SSH规则
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT 如果你把OUTPUT 设置成DROP,就需要加上这个规则,否则SSH还是不能登录,因为SSH服务职能进不能出。
只允许192.168.0.3的机器进行SSH连接
iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT
如果要允许,或限制一段IP地址可用 192.168.0.0/24 表示192.168.0.1-255端的所有IP.
允许loopback回环通信
IPTABLES -A INPUT -i lo -p all -j ACCEPT
IPTABLES -A OUTPUT -o lo -p all -j ACCEPT
目的地址转换,映射内部地址
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dprot 81 -j DNAT --to 192.168.0.2:80
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dprot 81 -j DNAT --to 192.168.0.1-192.168.0.10
源地址转换,隐藏内部地址
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1-1.1.1.10
地址伪装,动态ip的NAT
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
masquerade和snat的主要区别在于,snat是把源地址转换为固定的IP地址或者是地址池,而masquerade在adsl等方式拨号上网时候非常有用,因为是拨号上网所以网卡的外网IP经常变化,这样在进行地址转换的时候就要在每次都要修改转换策略里面的ip,使用masquerade就很好的解决了这个问题,他会自己去探测外网卡获得的ip地址然后自动进行地址转换,这样就算外网获得的ip经常变化也不用人工干预了。
开启转发功能
iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT 只允许已建连接及相关链接对内转发
ptables -A FORWARD -i eth1 -o eh0 -j ACCEPT 允许对外转发
过滤某个MAC
iptables -A FORWARD -m mac --mac -source MAC地址 -j DROP
报文经过路由后,数据包中原有的MAC信息会被替换,所以在路由后的iptables中使用mac匹配没有意义。
数据包整流
iptables -A FORWARD -d 192.168.0.1 -m limit --limit 50/s -j ACCEPT
iptables -A FORWARD -d 192.168.0.1 -j DROP
多端口匹配
用以一次匹配多个端口
iptables -A INPUT -p tcp -m muliport --dport s 21,22,25,80,110 -j ACCEPT
丢弃非法连接
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP
iptables-A FORWARD -m state --state INVALID -j DROP
存储于恢复iptables规则
iptables-save > somefile
iptables-restore < somefile
---------------------------------------------------
http://www.cnblogs.com/JemBai/archive/2009/03/19/1416364.html
Chain INPUT (policy ACCEPT)
target prot opt source destination
target prot opt source destination
target prot opt source destination
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 255
ACCEPT esp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT ah -- 0.0.0.0/0 0.0.0.0/0
ACCEPT udp -- 0.0.0.0/0 224.0.0.251 udp dpt:5353
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:631
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:25
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
可以看出我在安装linux时,选择了有防火墙,并且开放了22,80,25端口.
Chain INPUT (policy ACCEPT)
target prot opt source destination
target prot opt source destination
target prot opt source destination
[root@tp ~]# iptables -X 清除预设表filter中使用者自定链中的规则
Chain INPUT (policy ACCEPT)
target prot opt source destination
target prot opt source destination
target prot opt source destination
上面的意思是,当超出了IPTABLES里filter表里的两个链规则(INPUT,FORWARD)时,不在这两个规则里的数据包怎么处理呢,那就是DROP(放弃).应该说这样配置是很安全的.我们要控制流入数据包
如果做了邮件服务器,开启25,110端口.
[root@tp ~]# iptables -A INPUT -p tcp --dport 25 -j ACCEPT
如果做了FTP服务器,开启21端口
IPTABLES -A OUTPUT -o lo -p all -j ACCEPT(如果是OUTPUT DROP)
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
target prot opt source destination
SNAT all -- 192.168.0.0/24 anywhere to:211.101.46.235
target prot opt source destination
[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP
[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP
如果我们想,比如阻止MSN,QQ,BT等的话,需要找到它们所用的端口或者IP,(个人认为没有太大必要)
[root@tp ~]# iptables -A INPUT -m state --state INVALID -j DROP
[root@tp ~]# iptables -A OUTPUT -m state --state INVALID -j DROP
[root@tp ~]# iptables-A FORWARD -m state --state INVALID -j DROP
允许所有已经建立的和相关的连接
[root@tp ~]# iptables-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@tp ~]# iptables-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@tp ~]# /etc/rc.d/init.d/iptables save
这样就可以写到/etc/sysconfig/iptables文件里了.写入后记得把防火墙重起一下,才能起作用.
[root@tp ~]# service iptables restart
delete
iptables -D INPUT 1
save
iptables-save
__________________________________________________________
NAT
(一)Iptables 的使用语法
在使用iptables的NAT功能时,我们必须在每一条规则中使用"-t nat"显示的指明使用nat表。然后使用以下的选项::
1. 对规则的操作
加入(append) 一个新规则到一个链 (-A)的最后。
在链内某个位置插入(insert) 一个新规则(-I),通常是插在最前面。
在链内某个位置替换(replace) 一条规则 (-R)。
在链内某个位置删除(delete) 一条规则 (-D)。
删除(delete) 链内第一条规则 (-D)。
2. 指定源地址和目的地址
通过--source/--src/-s来指定源地址(这里的/表示或者的意思,下同),通过--destination/--dst/-s来指定目的地址。可以使用以下四中方法来指定ip地址:
a. 使用完整的域名,如“www.linuxaid.com.cn”;
b. 使用ip地址,如“192.168.1.1”;
c. 用x.x.x.x/x.x.x.x指定一个网络地址,如“192.168.1.0/255.255.255.0”;
d. 用x.x.x.x/x指定一个网络地址,如“192.168.1.0/24”这里的24表明了子网掩码的有效位数,这是 UNIX环境中通常使用的表示方法。
缺省的子网掩码数是32,也就是说指定192.168.1.1等效于192.168.1.1/32。
3. 指定网络接口
可以使用--in-interface/-i或--out-interface/-o来指定网络接口。从NAT的原理可以看出,对于PREROUTING链,我们只能用-i指定进来的网络接口;而对于POSTROUTING和OUTPUT我们只能用-o指定出去的网络接口。
4. 指定协议及端口
可以通过--protocol/-p选项来指定协议,如果是udp和tcp协议,还可--source-port/--sport和 --destination-port/--dport来指明端口。
(二)iptabls的使用实例:
假如有一个广域网的ip地址为a.b.c.d 网关a.b.c.x 掩码 255.255.255.252
局域网ip地址为192.168.0.1-192.168.0.255 网关 192.168.0.1
软件环境为:Linux7.2 选择server安装
指定eth0:a.b.c.d eth1:192.168.0.1
添加路油表
vi /etc/sysconfig/static-routes
etho net a.b.c.d netmask 255.255.255.252 gw a.b.c.x
eth1 net 192.168.0.1netmask 255.255.255.0 gw 192.168.0.1
指定网关
vi /etc/sysconfig/network
NETWORKING=yes
GATEWAYDEV=eth0
GATEWAY=a.b.c.x
HOSTNAME=(主机名字)
起用路油
vi /etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv4.conf.default.rp_filter=1
kernel.core_uses_pid=1
kernel.sysrq=0
配置iptables的脚本
建立rc.fw
#for this to run iptables firewall
!/bin/sh
/sbin/modprobe ip_tables
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_conntrack_ftp
/sbin/iptables -F
/sbin/iptables -F -t nat
/sbin/iptables -X
/sbin/iptables -Z
echo"1">/proc/sys/net/ipv4/ip_forward
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables -P OUTPUT ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -s 0/0 -d 0/0 -j ACCEPT
上面这些是没有任何限制的iptables要想有些安全限制可以自行
新的联接
(三)端口的转发
假如内部有一个www 服务器 一个ftp服务器
地址分别是192.168.0.8(www)
192.168.0.9(ftp)
在上面的脚本里最后添加
iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 –j DNAT --to 192.168.0.8:80
iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 21 -j DNAT --to 192.168.0.9:21
附录:
-p 指定协议(--protocol)
--dport 指明端口(--source-port/--sport和 --destination-port)
-i 或者-o 指定网络接口(PREROUTING链用-i POSTROUTING 用-o)
-s 指明源地址(--source/--src/源地址destination/--dst/目的地址)
-A 加入一个新规则到一个链(一般写到最后面)(append)
-I 在链内某个位置插入(insert)一般最后面
-R 在链内某个位置替换一条规则
-D 删除链内第一条规则(delete)
-d 指明目的地址
——————————————————————————————————————
下面是一个iptable的脚本没有安全性能
touch /var/lock/subsys/local
#for this to run iptables firewall
!/bin/sh
/sbin/modprobe ip_tables
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_conntrack_ftp
/sbin/iptables -F
/sbin/iptables -F -t nat
/sbin/iptables -X
/sbin/iptables -Z
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables -P OUTPUT ACCEPT
echo"1">/proc/sys/net/ipv4/ip_forward
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
/sbin/iptables -A FORWARD -s 0/0 -d 0/0 -j ACCEPT
————————————————————————————————————————
iptables 过滤规则
# 过滤表规则
*filter
# 默认彻略
:FORWARD DROP [ ]
:INPUT DROP [ ]
:OUTPUT ACCEPT [ ]
# 定义新链
-N ICMP_FORWARD
-N TCP_FORWARD
-N UDP_FORWARD
-N ICMP_INPUT
-N TCP_INPUT
-N UDP_INPUT
# Fix a bug
-A OUTPUT -p icmp -m state --state INVALID -j DROP
# 以下是FORWARD链的规则
# 若是ICMP协议则跳到 ICMP_FORWARD
-A FORWARD -p icmp -j ICMP_FORWARD
# 若是TCP协议则跳到 TCP_FORWARD
-A FORWARD -p tcp -j TCP_FORWARD
# 若是UDP协议则跳到 UDP_FORWARD
-A FORWARD -p udp -j UDP_FORWARD
# 允许碎片通过的速率200个/s,从200开始计数
-A FORWARD -f -m limit --limit 200/s --limit-burst 200 -j ACCEPT
# 不匹配FORWARD链的所有规则,丢弃数据包,结束FORWARD链
-A FORWARD -j DROP
# 以下是FORWARD链中针对ICMP协议的规则
# 从内网到外网的放行
-A ICMP_FORWARD -p icmp -s 192.168.0.0/24 -i eth0 -o ppp+ -j ACCEPT
# 从外网进来的回应包放行
-A ICMP_FORWARD -p icmp -m state --state ESTABLISHED,RELATED -i ppp+ -j ACCEPT
# 丢弃所有不匹配的ICMP数据包,结束FORWARD链
-A ICMP_FORWARD -p icmp -j DROP
# 以下是FORWARD链中针对TCP协议的规则
# 允许内网1024以上的端口连接外网
-A TCP_FORWARD -p tcp -s 192.168.0.0/24 -m tcp --sport 1024: -i eth0 -o ppp+ -j ACCEPT
# 允许内网进行主动式的FTP
-A TCP_FORWARD -p tcp -m tcp --sport 21 --dport 1024: -m state --state ESTABLISHED -i ppp+ -j ACCEPT
-A TCP_FORWARD -p tcp -m tcp --sport 20 --dport 1024: -m state --state ESTABLISHED,RELATED -i ppp+ -j ACCEPT
# 允许外网进来的回应包通过
-A TCP_FORWARD -p tcp -m state --state ESTABLISHED -m tcp --dport 1024: -i ppp+ -j ACCEPT
# 丢弃所有不匹配的TCP数据包,结束FORWARD链
-A TCP_FORWARD -p tcp -j DROP
# 以下是FORWARD链中针对UDP协议的规则
# 允许内网1024以上的端口连接外网
-A UDP_FORWARD -p udp -s 192.168.0.0/24 -m udp --sport 1024: -i eth0 -o ppp+ -j ACCEPT
# 允许外网中指明的DNS服务器进行域名解析
-A UDP_FORWARD -p udp -s 202.96.96.68 -m udp --sport 53 --dport 1024: -i ppp+ -j ACCEPT
-A UDP_FORWARD -p udp -s 202.96.*.* -m udp --sport 53 --dport 1024: -i ppp+ -j ACCEPT
# 开放IRC OICQ 端口
-A UDP_FORWARD -p udp -m multiport --source-port 4000,8000 -m udp --dport 1024: -i ppp+ -j ACCEPT
# 允许从外网进来的UDP回应包通行
-A UDP_FORWARD -p udp -m state --state ESTABLISHED,RELATED -m udp --dport 1024: -i ppp+ -j ACCEPT
# 丢弃所有不匹配的UDP数据包,结束FORWARD链
-A UDP_FORWARD -p udp -j DROP
# 以下开始是对网关服务器的匹配规则
# 允许数据包进入本地回环接口
-A INPUT -p all -i lo -j ACCEPT
# 若是ICMP协议则跳到ICMP_INPUT进行规则匹配
-A INPUT -p icmp -j ICMP_INPUT
# 若是TCP协议则跳到TCP_INPUT进行规则匹配
-A INPUT -p tcp -j TCP_INPUT
# 若是UDP协议则跳到UDP_INPUT进行规则匹配
-A INPUT -p udp -j UDP_INPUT
# 允许碎片通过的速率200个/s,从200开始计数
-A INPUT -f -m limit --limit 200/s --limit-burst 200 -j ACCEPT
# 不匹配INPUT链的所有规则,丢弃数据包,结束INPUT链
-A INPUT -j DROP
# 以下是INPUT链中针对ICMP协议的规则
# 允许从内网来的ICMP数据包
-A ICMP_INPUT -p icmp -i eth0 -j ACCEPT
# 允许从外网来的ICMP回应包通行
-A ICMP_INPUT -p icmp -m state --state ESTABLISHED,RELATED -i ppp+ -j ACCEPT
# 丢弃所有不匹配的ICMP数据包,结束INPUT链
-A ICMP_INPUT -p icmp -j DROP
# 以下是INPUT链中针对TCP协议的规则
# 对内网机器提供 http https 网上邻居 透明代理服务
-A TCP_INPUT -p tcp -s 192.168.0.0/24 -m multiport --destination-port 80,443,137,138,139,8080 -i eth0 -j ACCEPT
# 允许服务器以主动方式连接外网的FTP服务器
-A TCP_INPUT -p tcp -m tcp --sport 21 --dport 1024: -m state --state ESTABLISHED -i ppp+ -j ACCEPT
-A TCP_INPUT -p tcp -m tcp --sport 20 --dport 1024: -m state --state ESTABLISHED,RELATED -i ppp+ -j ACCEPT
# 提供 ssh smtp pop3 http https 服务
-A TCP_INPUT -p tcp -m multiport --destination-port 22,25,110,80,443 -j ACCEPT
# 拒绝外网主动连接本服务器
-A TCP_INPUT -p tcp -m tcp --syn -i ppp+ -j DROP
# 允许进来的回应包通过
-A TCP_INPUT -p tcp -m state --state ESTABLISHED -m tcp --dport 1024: -j ACCEPT
# 丢弃所有不匹配的TCP数据包,结束INPUT链
-A TCP_INPUT -p tcp -j DROP
# 以下是INPUT链中针对UDP协议的规则
# 允许外网中指明的DNS服务器进行域名解析
-A UDP_INPUT -p udp -s 202.96.96.68 -m udp --sport 53 --dport 1024: -i ppp+ -j ACCEPT
-A UDP_INPUT -p udp -s 202.96.*.* -m udp --sport 53 --dport 1024: -i ppp+ -j ACCEPT
# 为内网的机器提供DNS和SAMBA服务
-A UDP_INPUT -p udp -s 192.168.0.0/24 -m multiport --destination-port 53,137,138,139 -i eth0 -j ACCEPT
# 允许服务器作为samba client
-A UDP_INPUT -p udp -s 192.168.0.0/24 -m udp --sport 137:139 --dport 1024: -i eth0 -j ACCEPT
# 允许进来的回应包通过
-A UDP_INPUT -p udp -m state --state ESTABLISHED,RELATED -m udp --dport 1024: -j ACCEPT
# 为内网的机器提供DHCP服务
-A UDP_INPUT -p udp -m udp --sport 68 --dport 67 -i eth0 -j ACCEPT
# 丢弃所有不匹配的UDP数据包,结束INPUT链
-A UDP_INPUT -p udp -j DROP
COMMIT
# 路由表规则
*nat
# 默认彻略
:PREROUTING ACCEPT [ ]
:POSTROUTING ACCEPT [ ]
:OUTPUT ACCEPT [ ]
# 为内网机器使用squid透明代理进行端口重定向
-A PREROUTING -i eth0 -p tcp -d ! 192.168.0.1 -m tcp --dport 80 -j REDIRECT --to-ports 8080
# 对内网机器应用IP伪装
-A POSTROUTING -o ppp+ -j MASQUERADE
COMMIT