跳到主要内容 Ansible iptables 模块参数详解与实战示例 | 极客日志
Shell / Bash
Ansible iptables 模块参数详解与实战示例 Ansible iptables 模块用于管理 Linux 内核 IP 包过滤规则。文章详细列举了 action、chain、source、destination 等关键参数的含义及用法,并通过四个实战案例演示了如何添加 DROP 规则、配置端口转发、放行 ESTABLISHED 状态连接以及设置访问限速。内容涵盖模块基础概念、参数列表及具体命令执行结果分析,适用于系统管理员进行网络策略自动化配置。
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 - -
相关免费在线工具 Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
Markdown转HTML 将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
HTML转Markdown 将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
JSON 压缩 通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
JSON美化和格式化 将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online
icmp_type no - - 允许指定 ICMP 类型,其可以是数字 ICMP 类型、类型/代码对或 ICMP 类型名称之一。
in_interface no - - 接收数据包的接口名称(仅适用于进入 INPUT, FORWARD 和 PREROUTING 链的数据包)。
ip_version no ipv4 ipv4, ipv6 该规则应适用于哪个版本的 IP 协议。
jump 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