iptables基础
Iptables为用户空间,Netfilter为内核空间。iptables工具操作netfilter数据包过滤表/规则集。
创建一条iptables规则的语法:
iptables [-t table] command [match] [target]
规则表有3个:filter, nat, mangle。默认为filter。
-
filter 过滤
包含3个内建的规则链Chain
:INPUT, FORWARD, OUTPUT.
处理动作是过滤,如DROP, LOG, ACCEPT, REJECT等 -
nat IP地址转换
处理遇到了产生新的连接的包,3个内置规则链:PREROUTING, OUTPUT, POSROUTING.
PREROUTING是把访问重定向到其他机器上,即改变目的地址。 -
mangle 修改IP业务标志
改变包的TOS, TTL, MARK等特性。使用率不高。
内建的规则链,和我新建的规则链有什么不同呢?
当然是有不同的,我觉得默认的规则链是与路由相连的,从名字上就可以理解他们与路由的关系。
command
用来操作规则,比如插入/添加(-Insert -Append)、删除(-Del -Replace -Flush)、查看规则(-List)、新建规则链(-New)等。
如:
-D INPUT 1 (规则从1开始数起,不是从0开始)
match
用来定义匹配的特征,比如源、目的地址,协议等。
如:
-A INPUT ! -i eth0 -j DROP (本机ping自己eth0的IP也不通的,其他机器可以ping通)
-A INPUT ! -s 192.168.109.4 -p tcp --dport 80 -j REJECT
用非!逻辑运算符时,要放在匹配表达式的最前面。看一下:
Chain INPUT (policy ACCEPT 981 packets, 168K bytes)
pkts bytes target prot opt in out source destination
12 1008 DROP all -- !eth0 * 0.0.0.0/0 0.0.0.0/0
0 0 REJECT tcp -- * * !192.168.109.4 0.0.0.0/0 tcp dpt:80 reject-with icmp-port-unreachable
我们经常可以看到下面这样的配置。
它的作用是为了抵御来自外网的网络连接(可能的攻击),所以会丢弃NEW和INVALID状态的包,
但是并不禁止内部发起的连接和后续的通信。
-A INPUT -i eth0 -m state -state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -i eth0 -j DROP
target是执行的动作,用-j指定。如ACCEPT, REJECT, DROP, REDIRECT, MASQUERADE, LOG等。
比如ACCEPT是将封包放行,不再匹配本链中其他规则,跳往下一个规则链。
来看一下数据流动时,netfilter的处理过程。
在IPv4中定义有5个HOOK,位置如下:
- NF-IP-PRE-ROUTING 刚刚进入网络层的数据包通过这里,源地址转换在这里进行
- NF-IP-LOCAL-IN 经过路由查找后,送往本机的数据包通过这里。filter > INPUT链在这里进行匹配过滤
- NF-IP-FORWARD 经过路由查找后,要转发的数据包通过这里。filter > FORWARD链在这里进行匹配过滤
- NF-IP-POST-ROUTING 所有马上要通过网络设备出去的数据包经过这里。内置的源地址转换功能(包括地址伪装)在这里进行。
- NF-IP-LOCAL-OUT 本机进程发出的数据包通过这里。filter > OUTPUT链在这里进行匹配过滤
可以看到,5在4之前,同时注意2次ROUTE(路由处理)的位置。
(参考 <网络运维与管理 2014> 管理局域网流量)
这个图有链名称,更清晰一点:
还有这个,加上了对应的表和链:
查看当前规则,可以用:iptables -L
其输出比较简单,有时候有些细节没有展示,会觉得规则难以理解,需要展示详细信息,并且直接展示端口号:iptables -L -n -v
。这样的话会展示in out
的网络接口,有些规则可能指定了只在某些接口上生效,比如lo
,还有规则匹配到的封包数、字节数这些流量信息也有展示。
iptables-save可以保存当前系统中生效的规则。
-P选项可以设置Policy,即默认规则,只能是ACCEPT或DROP。
比如iptables -P INPUT DROP 表示默认不接收任何流入的数据包。
再比如 -I
INPUT -p tcp -m tcp --dport 22 -j ACCEPT 用的 -I 会插入作为第一条规则。
iptables can use extended packet matching modules
with the -m or --match options, followed by the matching module name.
iptables-extensions
— list of extensions in the standard iptables distribution
set
This module matches IP sets which can be defined by ipset
.
- 点赞
- 收藏
- 关注作者
评论(0)