Ansible `iptables` 模块

Ansible iptables 模块

一、简介

  • 功能iptables 模块用于管理 Linux 系统上的防火墙规则。通过这个模块,可以添加、删除和修改 iptables 规则,以控制进出系统的网络流量。
  • 使用场景:适用于需要管理防火墙规则的场景,如限制特定端口的访问、允许特定 IP 的连接、配置 NAT 等。

二、基本用法

2.1 语法

使用 iptables 模块的基本命令格式:

ansible <pattern> -m iptables -a "chain=<chain> protocol=<protocol> source=<source> destination=<destination> jump=<target> state=<state>"
  • <pattern>: 指定要操作的主机或主机组,例如 allwebservers
  • -m iptables: 指定使用 iptables 模块。
  • -a "...": 提供模块的参数,如链、协议、源地址、目标地址、跳转目标、状态等。

2.2 示例

  • 添加一条规则以允许 HTTP 流量

    ansible all -m iptables -a "chain=INPUT protocol=tcp destination_port=80 jump=ACCEPT state=present"
    
    • 解释:在所有主机上添加一条 iptables 规则,允许所有 TCP 80 端口的流量(通常用于 HTTP)。
  • 删除特定的规则

    ansible all -m iptables -a "chain=INPUT protocol=tcp destination_port=22 jump=ACCEPT state=absent"
    
    • 解释:在所有主机上删除一条 iptables 规则,删除允许 TCP 22 端口(通常用于 SSH)的流量规则。
  • 添加一条规则以阻止特定 IP 的访问

    ansible all -m iptables -a "chain=INPUT source=192.168.1.100 jump=DROP state=present"
    
    • 解释:在所有主机上添加一条规则,阻止来自 192.168.1.100 的所有流量。

三、输出结果

执行 iptables 模块后的典型输出示例:

localhost | CHANGED => {
    "changed": true,
    "cmd": "/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT",
    "invocation": {
        "module_args": {
            "chain": "INPUT",
            "protocol": "tcp",
            "destination_port": "80",
            "jump": "ACCEPT",
            "state": "present"
        }
    }
}
  • CHANGED:表示 iptables 规则发生了变化。
  • changed: 为 true 表示规则已被修改或添加。
  • cmd:显示实际执行的 iptables 命令。
  • invocation:显示模块的参数。

如果没有变化(例如规则已存在或要删除的规则不存在),输出将类似于:

localhost | SUCCESS => {
    "changed": false,
    "msg": "rule is already present"
}
  • SUCCESS: 表示操作成功。
  • changed: 为 false 表示规则未被修改。

四、常见选项

4.1 chain

  • 功能:指定要操作的 iptables 链。常用的链包括 INPUTOUTPUTFORWARD 等。

  • 用法

    ansible all -m iptables -a "chain=INPUT protocol=tcp destination_port=443 jump=ACCEPT state=present"
    
    • 解释:在所有主机的 INPUT 链上,添加允许 TCP 443 端口(HTTPS)的流量规则。

4.2 protocol

  • 功能:指定要匹配的协议。可以是 tcpudpicmp 等。

  • 用法

    ansible all -m iptables -a "chain=INPUT protocol=udp source_port=53 jump=ACCEPT state=present"
    
    • 解释:在所有主机上添加一条规则,允许 UDP 53 端口(通常用于 DNS)的流量。

4.3 sourcedestination

  • 功能:指定源地址和目标地址。可以使用 IP 地址、CIDR 子网或 any

  • 用法

    ansible all -m iptables -a "chain=INPUT source=192.168.1.0/24 destination=any jump=ACCEPT state=present"
    
    • 解释:在所有主机上添加一条规则,允许来自 192.168.1.0/24 网络的所有流量。

4.4 jump

  • 功能:指定跳转目标。常用的目标包括 ACCEPTDROPREJECTLOG 等。

  • 用法

    ansible all -m iptables -a "chain=INPUT jump=DROP state=present"
    
    • 解释:在所有主机的 INPUT 链上添加一条规则,阻止所有流量。

4.5 state

  • 功能:指定规则的状态。可以是 present(添加或更新规则)或 absent(删除规则)。

  • 用法

    ansible all -m iptables -a "chain=INPUT protocol=tcp destination_port=22 jump=ACCEPT state=absent"
    
    • 解释:在所有主机上删除允许 TCP 22 端口(SSH)的流量规则。

五、注意事项

  • 权限要求:更改 iptables 规则需要具有适当的权限(通常是 root 权限),确保 Ansible 用户具备相应的 sudo 权限。
  • 持久化规则iptables 规则默认情况下在系统重启后不会自动保存。确保在修改规则后使用适当的命令(如 service iptables saveiptables-save)来保存规则,以便在重启后应用。
  • 规则顺序iptables 规则是按顺序匹配的,新的规则会插入到链的开头或结尾,具体取决于执行的命令。要注意规则的顺序,确保预期的流量控制。
  • 测试新规则:在添加新规则或更改现有规则时,建议首先测试规则,以避免意外阻止合法流量,尤其是在远程管理服务器时,防止自身被锁定。
  • 16
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟生啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值