1 概述
iptables,俗称为linux下的网络防火墙,可是,它的功能远不止是防火墙,还能做网络包的NAT转发,透明代理,流量控制等各种各样的功能
2 基础
2.1 包处理操作
iptables将根据包的处理操作分为三个表
- filter表,负责控制包的接受和丢弃
- nat表,负责修改包的源地址或目标地址的转换
- mangle表,负责修改包的其他字段,如打Mark标记
2.2 包处理时机
然后,iptables根据在不同时机的触发,将三个表进一步细分
- filter表,划分为INPUT,FORWARD与OUTPUT三个时机
- nat表,划分为PREROUTING,OUTPUT,POSTROUTING三个时机
- mangle表,划分为PREROUTING,INPUT,OUTPUT,FORWARD,POSTROUTING五个时机
注意,这五个时机的对应含义为
- PREROUTING,包从网卡刚进来,还没进入路由前,有确定的来源网卡
- INPUT,包经过路由后,判断为本机处理,但本机处理该包前
- OUTPUT,包经过路由后,判断为本机处理,但本机处理该包后
- FORWARD,包经过路由后,判断为透传到其他网卡,有确定的来源网卡和目标网卡
- POSTROUTING,包准备从网卡抛出时,有确定的目标网卡
2.3 例子
- 包从eth0网卡进入到本机的80端口
PREROUTING->INPUT
- 包从本机的浏览器访问远程的服务器80端口
OUTPUT->POSTROUTING
- 包从eth0网卡路由到wlan0网卡
PREROUTING->FORWARD->POSTROUTING
3 命令
3.1 查看规则
iptables -t filter -L
查看filter表的所有规则
3.2 添加规则
iptables -t filter -A INPUT -s 192.168.0.0/16 -j REJECT
添加对192.168.0.0来源IP的拒绝规则
iptables -t filter -A INPUT 1 -s 192.168.0.0/16 -j REJECT
添加对192.168.0.0来源IP的拒绝规则,并且该条规则放在规则列表的位置1的地方
3.3 删除规则
iptables -t filter -D INPUT 1
删除filter表INPUT时机的第1条规则
3.4 清空规则
iptables -t filter -F INPUT
删除filter表INPUT时机的第1条规则
3.5 自定义规则
iptables -t filter -N fishrule
创建filter表中fishrule规则
iptables -t filter -A fishrule-d 0.0.0.0 -j RETURN
iptables -t filter -A fishrule-d 192.168.0.0/12 -j REJECT
写入fishrule的具体规则
sudo iptables -t filter -A INPUT -j fishrule
对filter的INPUT时机应用fishrule规则
5 FAQ
5.1 PREROUTING与POSTROUTING新规则不生效
注意,PREROUTING与POSTROUTING时机的nat表有个特殊的准则,如果这个包经过PREROUTING是路由到A地址的,那么这个包的后续包都会自动路由到A地址,即使这时的nat表规则更新为路由到B地址。
这是因为PREROUTING的路由处理在第一次匹配nat规则后,就会缓存到内核中,后续的包直接在内核中选用相同规则,这样速度很快。
但是,会造成我们很头疼,改了nat表的PREROUTING规则,但仍然走原规则,解决办法是,改了nat的PREROUTING或POSTROUTING规则后就得重启服务器,不然不生效
6 总结
iptables的概念如此简单就能实现一整套包处理规则,非常方便。但要注意nat表的PREROUTING或POSTROUTING规则首次匹配原则,不然会有很奇怪的实验结果
- 本文作者: fishedee
- 版权声明: 本博客所有文章均采用 CC BY-NC-SA 3.0 CN 许可协议,转载必须注明出处!