iptables
参考文献
iptables
-
iptables
有一个很重要的设置概念就是5表5链 -
一个
filter
表,一个nat
表,一个mangle
表,一个raw
表,一个security
.它们分别作用于不同的方向,-
filter
表: 此表用于数据包过滤.它有三个内置链:INPUT
(用于本地传递的数据包),FORWARD
(用于通过系统路由的数据包)和OUTPUT
(用于本地生成的数据包)- 内核模块:
iptable_filter
- 内核模块:
-
nat
表network address translation
,网络地址转换功能;- 此表用于网络地址转换(
nat
).它有三个内置链:PREROUTING
(用于到达网络接口的数据包),INPUT
(用于本地生成的数据包)和OUTPUT
(用于离开网络接口的数据包) - 内核模块:
iptable_nat
NAT
又分为SNAT(Source NAT)
和DNAT(Destination NAT)
SNAT
解决的是内网地址访问外部网络的问题,它是通过在POSTROUTING
里修改来源IP来实现.DNAT
解决的是内网的服务要能够被外部访问到的问题,它通过修改PREROUTING
修改目标IP实现.
- 此表用于网络地址转换(
-
mangle
表拆解报文,做出修改,并重新封装的功能;- 此表用于专门的数据包修改.它有五个内置链:
PREROUTING
(用于到达网络接口的数据包),INPUT
(用于本地传递的数据包),FORWARD
(用于通过系统路由的数据包),OUTPUT
(用于本地生成的数据包)和POSTROUTING
(用于离开网络接口的数据包) iptable_mangle
- 此表用于专门的数据包修改.它有五个内置链:
-
raw
表关闭nat
表上启用的连接追踪机制;- 此表处理在其他任何表之前处理的数据包.它有两个内置链:
PREROUTING
(用于到达网络接口的数据包)和OUTPUT
(用于本地生成的数据包) iptable_raw
- 此表处理在其他任何表之前处理的数据包.它有两个内置链:
-
security
表用于强制访问控制网络规则INPUT
(用于本地传递的数据包),FORWARD
(用于通过系统路由的数据包),OUTPUT
(用于本地生成的数据包)
-
-
5链分别是
INPUT
链,OUTPUT
链,FORWARD
链,PREROUTING
链和POSTROUTING
链.这5条链分别也对应不同的一些设置规则.INPUT
链: 进来的数据包应用此规则链中的规则;INPUT
的规则可以存在于: mangle表,filter表
OUTPUT
链: 外出的数据包应用此规则链中的规则;OUTPUT
的规则可以存在于: raw表,mangle表,nat表,filter表.
FORWARD
链: 转发数据包时应用此规则链中的规则;FORWARD
的规则可以存在于: mangle表,filter表.
PREROUTING
链: 对数据包作路由选择前应用此链中的规则;PREROUTING
的规则可以存在于: raw表,mangle表,nat表
POSTROUTING
链: 对数据包作路由选择后应用此链中的规则.POSTROUTING
的规则可以存在于: mangle表,nat表.
-
报文的流向
- 到本机某进程的报文:
PREROUTING –> INPUT
- 由本机转发的报文:
PREROUTING –> FORWARD –> POSTROUTING
- 由本机的某进程发出报文(通常为响应报文):
OUTPUT –> POSTROUTING
- 到本机某进程的报文:
表 | 链 |
---|---|
raw |
PREROUTING,OUTPUT |
mangle |
PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING |
nat |
PREROUTING,OUTPUT,POSTROUTING |
filter |
INPUT,FORWARD,OUTPUT |
security |
INPUT,FORWARD,OUTPUT |
链 | 表 |
---|---|
PREROUTING |
raw,mangle,nat |
INPUT |
mangle,filter |
FORWARD |
mangle,filter |
OUTPUT |
raw,mangle,nat,filter |
POSTROUTING |
mangle,nat |
-
iptables
定义了4张”表”,当他们处于同一条”链”时,执行的优先级如下1
raw –> mangle –> nat –> filter
iptables
简化网络数据包流程图
1 | XXXXXXXXXXXXXXXXXX |
iptables
的规则
- 规则: 根据指定的匹配条件来尝试匹配每个流经此处的报文,一旦匹配成功,则由规则后面指定的处理动作进行处理;
- 规则由匹配条件和处理动作组成.
匹配条件
- 匹配条件分为基本匹配条件与扩展匹配条件
基本匹配条件
- 源地址
Source IP
,目标地址Destination IP
处理动作
- 处理动作在
iptables
中被称为target
- 动作也可以分为基本动作和扩展动作
target | 含义 |
---|---|
ACCEPT |
直接允许数据包通过 |
DROP |
直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应 |
REJECT |
拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息 |
SNAT |
源地址转换,解决内网用户用同一个公网地址上网的问题 |
MASQUERADE |
(伪装)将src ip 改写为网卡 ip ,和 SNAT 的区别是它会自动读取网卡 ip .路由设备必备 |
DNAT |
目标地址转换 |
REDIRECT |
在本机做端口映射 |
LOG |
在/var/log/messages 文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配 |
iptables
命令规则设置的常见选项
1 | iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作 |
1 | ~$ iptables -h |
iptables
配置文件
1 | /etc/sysconfig/iptables |
INPUT
表
1 | # iptables -vL INPUT |
属性 | 含义 |
---|---|
pkts |
对应规则匹配到的报文的个数 |
bytes |
对应匹配到的报文包的大小总和 |
target |
规则对应的target,往往表示规则对应的”动作”,即规则匹配成功后需要采取的措施 |
prot |
表示规则对应的协议,是否只针对某些协议应用此规则 |
opt |
表示规则对应的选项 |
in |
表示数据包由哪个接口(网卡)流入,即从哪个网卡来 |
out |
表示数据包将由哪个接口(网卡)流出,即到哪个网卡去 |
source |
表示规则对应的源头地址,可以是一个IP,也可以是一个网段 |
destination |
表示规则对应的目标地址。可以是一个IP,也可以是一个网段 |
示例
服务管理
1 | # service iptables start|stop|restart|status |
显示当前规则
1 | iptables -nvL |
重置规则
1 | # 不带参数的 -F 命令刷新其当前表中的所有链 |
规则管理命令
1 | iptables -A:在规则链的末尾加入新规则 |
链管理命令
1 | iptables -F:清空规则链 |
通用匹配参数
1 | -t |
扩展参数
1 | -sport 源端口 |
添加规则
1 | # 开启SSH服务端口 |
删除规则
1 | # 显示INPUT链规则的行号 |
只允许某台主机或某个网段进行SSH连接
1 | # 只允许192.168.11.60的机器进行SSH连接 |
开启转发功能
- 在做NAT网络配置时,FORWARD默认规则是DROP时,必须开启数据包转发功能
1 | [root@tp ~]# iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT |
白名单
1 | # 允许机房内网机器可以访问 |
黑名单
1 | # 屏蔽单个 IP |
防止 SYN 洪水攻击
1 | $ iptables -A INPUT -p tcp --syn -m limit --limit 5/second -j ACCEPT |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 HoleLin's Blog!