Ansible iptables 模块说明
Iptables 用于设置、维护和检查 Linux 内核中的 IP 包过滤规则的表。此模块不处理保存和/或加载规则,而是仅处理存在于内存中的当前规则。这与该模块在内部使用的'iptables'和'ip6tables'命令的行为相同。
参数说明
| 参数 | 是否必需 | 默认值 | 选项 | 说明 |
|---|---|---|---|---|
| action | no | append | append, insert | 规则是应附加在底部还是插入在顶部。如果规则已经存在,则不会修改链。 |
| chain | no | - | INPUT, FORWARD, OUTPUT, PREROUTING, POSTROUTING, SECMARK, CONNSECMARK | 链操作。此选项可以是用户定义链的名称或任何内置链。 |
| comment | no | - | - | 指定将添加到规则的注释。 |
| ctstate | no | - | INVALID, NEW, ESTABLISHED, RELATED, UNTRACKED, SNAT, DNAT | conntrack 模块中要匹配的连接状态的列表。 |
| destination | no | - | - | 目标规范。地址可以是网络名称、主机名、网络 IP 地址(带有/ mask)或纯 IP 地址。 |
| destination_port | no | - | - | 目标端口或端口范围规范。这可以是服务名称或端口号。 |
| flush | no | - | - | 刷新所有规则的指定表和链。如果未指定链,则清除整个表。 |
| fragment | no | - | - | 这意味着规则仅指分段分组的第二和另外的片段。 |
| goto | no | - | - | 指定处理应在用户指定的链中继续。 |
| icmp_type | no | - | - | 允许指定 ICMP 类型,其可以是数字 ICMP 类型、类型/代码对或 ICMP 类型名称之一。 |
| in_interface | no | - | - | 接收数据包的接口名称(仅适用于进入 INPUT, FORWARD 和 PREROUTING 链的数据包)。 |
| ip_version | no | ipv4 | ipv4, ipv6 | 该规则应适用于哪个版本的 IP 协议。 |
| jump | no | - | - | 指定规则的目标;即如果分组匹配它要做什么。 |
| limit | no | - | - | 指定每秒允许的最大匹配平均数。 |
| limit_burst | no | - | - | 指定在上述限制开始之前的最大突发数。 |
| match | no | - | - | 指定要使用的匹配,即测试特定属性的扩展模块。 |
| out_interface | no | - | - | 将要发送数据包的接口的名称。 |
| policy | no | - | ACCEPT, DROP, QUEUE, RETURN | 将链的策略设置为给定目标。 |
| protocol | no | - | tcp, udp, udplite, icmp, esp, ah, sctp, all | 要检查的规则或数据包的协议。 |
| reject_with | no | - | - | 指定拒绝时返回的错误包类型。 |
| set_counters | - | - | - | 使管理员能够初始化规则的数据包和字节计数器。 |
| set_dscp_mark | no | - | - | 允许指定要添加到数据包的 DSCP 标记。 |
| set_dscp_mark_class | no | - | - | 允许指定将被转换为相应的 DSCP 标记的预定义 DiffServ 类。 |
| source | no | - | - | 源规范。地址可以是网络名称、主机名、网络 IP 地址(带有/ mask)或纯 IP 地址。 |
| source_port | no | - | - | 源端口或端口范围规范。 |
| state | no | present | present, absent | 规则是否缺失或存在。 |
| table | no | filter | filter, nat, mangle, raw, security | 此选项指定命令应操作的数据包匹配表。 |
| to_destination | no | - | - | 指定了与 DNAT 一起使用的目标地址。 |
| to_ports | no | - | - | 指定要使用的目标端口或端口范围。 |
| to_source | no | - | - | 指定了与 SNAT 一起使用的源地址。 |
| uid_owner | no | - | - | 指定在所有者规则匹配时使用的 UID 或用户名。 |
使用示例
1. 添加一条规则,来自 10.1.1.2 的请求都 DROP 掉
ansible dbserver -m iptables -a "chain=INPUT source=10.1.1.2 jump=DROP"
执行结果:
{
"chain": "INPUT",
"changed": true,
"failed": false,
"flush": false,
"ip_version": "ipv4",
"rule": "-s 10.1.1.2 -j DROP",
"state": "present",
"table": "filter"
}
查看结果:
iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- 10.1.1.2 0.0.0.0/0
2. 添加一条规则,通过 ens33 进入的请求本地 80 端口转发到 8600
ansible dbserver -m iptables -a "table=nat chain=PREROUTING in_interface=ens33 protocol=tcp match=tcp destination_port=80 jump=REDIRECT to_ports=8600"
执行结果:
{
"chain": "PREROUTING",
"changed": true,
"failed": false,
"flush": false,
"ip_version": "ipv4",
"rule": "-p tcp -m tcp -j REDIRECT -i ens33 --destination-port 80 --to-ports 8600",
"state": "present",
"table": "nat"
}
查看结果:
iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
REDIRECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 redir ports 8600
3. 添加一条规则,所以状态为 RELATED,ESTABLISHED 放行
ansible dbserver -m iptables -a "chain=INPUT ctstate='ESTABLISHED,RELATED' jump=ACCEPT"
执行结果:
{
"chain": "INPUT",
"changed": true,
"failed": false,
"flush": false,
"ip_version": "ipv4",
"rule": "-j ACCEPT -m state --state ESTABLISHED,RELATED",
"state": "present",
"table": "filter"
}
查看结果:
iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
4. 来自 110.112.11.1 请求的目标端口为 8080 限速为 5/s
ansible dbserver -m iptables -a "chain=INPUT protocol=tcp match=tcp destination_port=8080 source=110.112.11.1 limit=5/s jump=ACCEPT"
执行结果:
{
"chain": "INPUT",
"changed": true,
"failed": false,
"flush": false,
"ip_version": "ipv4",
"rule": "-p tcp -s 110.112.11.1 -m tcp -j ACCEPT --destination-port 8080 -m limit --limit 5/s",
"state": "present",
"table": "filter"
}
查看结果:
iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
ACCEPT tcp -- 110.112.11.1 0.0.0.0/0 tcp dpt:8080 limit: avg 5/sec burst 5

