Iptables 是用于设置、维护和检查 Linux 内核中的 IPv4 和 IPv6 包过滤规则表和网络地址转换的一个命令行工具,位于用户空间。
Netfilter 才是真正起作用的内核模块,位于内核空间。
1、链表的概念
在了解链表概念之前,先看下面报文在主机中的流向图。
假设我们要访问主机中的web服务,那么我们的请求经过网卡后,流向内核空间,先经过PREROUTING链,再经过INPUT链,到达用户空间的web服务。
web服务回答我们的请求,则先经过OUTPUT链,再经过POSTROUTING链到达我们。
1.1、表(table)的概念
表名 | 作用 |
filter | 负责过滤功能,防火墙 |
nat | network address translation,网络地址转换功能 |
mangle | 拆解报文,做出修改,并重新封装 的功能 |
raw | 关闭nat表上启用的连接追踪机制 |
1.2、链(chain)的概念
链名 | 解释 | 可以包含的表(优先级由前到后) |
PREROUTING | 路由前 | raw,mangle,nat |
INPUT | 输入 | mangle,nat,filter |
OUTPUT | 输出 | raw,mangle,nat,filter |
FORWARD | 转发 | mangle,filter |
POSTROUTING | 路由后 | mangle,nat |
1.3、处理动作(target)
ACCEPT:允许数据包通过。
DROP:直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。
REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。
SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题。
MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。
DNAT:目标地址转换。
REDIRECT:在本机做端口映射。
LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配。
2、匹配条件
2.1、规则查询
- 查看对应表的所有规则,-t选项指定要操作的表,省略"-t 表名"时,默认表示操作filter表,-L表示列出规则,即查看规则。
iptables -t 表名 -L
- 查看指定表的指定链中的规则。
iptables -t 表名 -L 链名
- 查看指定表的所有规则,并且显示更详细的信息(更多字段),-v表示verbose,表示详细的,冗长的,当使用-v选项时,会显示出"计数器"的信息,由于上例中使用的选项都是短选项,所以一般简写为iptables -t 表名 -vL
iptables -t 表名 -v -L
- 表示查看表的所有规则,并且在显示规则时,不对规则中的IP或者端口进行名称反解,-n选项表示不解析IP地址。
iptables -t 表名 -n -L
- 表示查看表的所有规则,并且显示规则的序号,--line-numbers选项表示显示规则的序号,注意,此选项为长选项,不能与其他短选项合并,不过此选项可以简写为--line,注意,简写后仍然是两条横杠,仍然是长选项。
iptables --line-numbers -t 表名 -L
- 表示查看表中的所有规则,并且显示更详细的信息(-v选项),不过,计数器中的信息显示为精确的计数值,而不是显示为经过可读优化的计数值,-x选项表示显示计数器的精确值。
iptables --line -t filter -nvxL
2.2、规则管理
2.2.1、添加规则
我的这篇文章汇总了一些常见的匹配条件,iptables之匹配条件。
- 在指定表的指定链的尾部添加一条规则,-A选项表示在对应链的末尾添加规则,省略-t选项时,表示默认操作filter表中的规则
命令语法:iptables -t 表名 -A 链名 匹配条件 -j 动作 示例:iptables -t filter -A INPUT -s 192.168.1.146 -j DROP
- 在指定表的指定链的首部添加一条规则,-I选型表示在对应链的开头添加规则
命令语法:iptables -t 表名 -I 链名 匹配条件 -j 动作 示例:iptables -t filter -I INPUT -s 192.168.1.146 -j ACCEPT
- 在指定表的指定链的指定位置添加一条规则
命令语法:iptables -t 表名 -I 链名 规则序号 匹配条件 -j 动作 示例:iptables -t filter -I INPUT 5 -s 192.168.1.146 -j REJECT
- 设置指定表的指定链的默认策略(默认动作)
命令语法:iptables -t 表名 -P 链名 动作
示例:iptables -t filter -P FORWARD ACCEPT
2.2.2、删除规则
- 按照规则序号删除规则,删除指定表的指定链的指定规则,-D选项表示删除对应链中的规则。
命令语法:iptables -t 表名 -D 链名 规则序号 示例:iptables -t filter -D INPUT 3
- 按照具体的匹配条件与动作删除规则,删除指定表的指定链的指定规则。
命令语法:iptables -t 表名 -D 链名 匹配条件 -j 动作 示例:iptables -t filter -D INPUT -s 192.168.1.146 -j DROP
- 删除指定表的指定链中的所有规则,-F选项表示清空对应链中的规则
命令语法:iptables -t 表名 -F 链名
示例:iptables -t filter -F INPUT
- 删除指定表中的所有规则
命令语法:iptables -t 表名 -F
示例:iptables -t filter -F
2.2.3、修改规则
2.2.4、保存规则
service iptables save
3、自定义链
- 创建自定义链
#示例:在filter表中创建IN_WEB自定义链
iptables -t filter -N IN_WEB
- 引用自定义链
#示例:在INPUT链中引用刚才创建的自定义链 iptables -t filter -I INPUT -p tcp --dport 80 -j IN_WEB
- 重命名自定义链
#示例:将IN_WEB自定义链重命名为WEB
iptables -E IN_WEB WEB
- 删除自定义链
删除自定义链需要满足两个条件:
1、自定义链没有被引用
2、自定义链中没有任何规则
#示例:将IN_WEB自定义链重命名为WEB
iptables -E IN_WEB WEB
备注:本文总结自朱双印博客,博客地址:http://www.zsythink.net/archives/tag/iptables/