iptables的使用

2016-12-02 fishedee 后端

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 例子

  1. 包从eth0网卡进入到本机的80端口

PREROUTING->INPUT

  1. 包从本机的浏览器访问远程的服务器80端口

OUTPUT->POSTROUTING

  1. 包从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规则首次匹配原则,不然会有很奇怪的实验结果

相关文章