首页 > 系统相关 >Ansible `iptables` 模块

Ansible `iptables` 模块

时间:2024-08-27 14:26:42浏览次数:7  
标签:iptables chain jump state Ansible 模块 规则 INPUT

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 规则是按顺序匹配的,新的规则会插入到链的开头或结尾,具体取决于执行的命令。要注意规则的顺序,确保预期的流量控制。
  • 测试新规则:在添加新规则或更改现有规则时,建议首先测试规则,以避免意外阻止合法流量,尤其是在远程管理服务器时,防止自身被锁定。

标签:iptables,chain,jump,state,Ansible,模块,规则,INPUT
From: https://blog.csdn.net/wushengT/article/details/141593859

相关文章

  • Ansible `replace` 模块
    Ansiblereplace模块一、简介功能:replace模块用于在远程主机上的文件中替换匹配的文本。它通过正则表达式查找文件中的特定模式,并将其替换为指定的内容。这对于修改配置文件、脚本或其他需要批量文本替换的场景非常有用。使用场景:适用于需要精确匹配和替换文件内容的情......
  • Ansible `firewalld` 模块
    Ansiblefirewalld模块一、简介功能:firewalld模块用于管理Linux系统上的firewalld防火墙服务。firewalld是一种动态管理防火墙的工具,它提供了对网络流量的更细粒度控制,支持区域(zones)和丰富的规则管理。使用场景:适用于需要动态管理防火墙规则的场景,如开放或关闭特定......
  • Python中configparser模块的基本用法
    configparser是Python标准库中的一个模块,用于处理配置文件。配置文件通常用于存储应用程序的配置信息,如数据库连接参数、日志级别设置等。configparser模块支持读取、写入和修改配置文件,这些文件通常采用类似INI格式的结构。配置文件格式配置文件一般以'.ini'作为扩展名......
  • 【python3.8安装报错】lmportError: DLL load failed while importing ft2font: 找不
    客户需求背景:安装python3.8无法运行,报错lmportError:DLLloadfailedwhileimportingft2font:找不到指定的模块 考虑兼容性问题这个问题首先需要考虑的是是否是python版本太高了,因为python3.9不支持win7,而python3.8版本对win7的兼容性也有一定的限制。解决:首先考......
  • 【Node】【6】模块系统
    Node.js的模块系统基于CommonJS规范,其中每个文件被视为一个独立的模块,可以通过require函数引入其他模块,也可以通过module.exports将模块的功能暴露给外部。CommonJS规范:使用require()函数来导入模块,使用module.exports或exports对象来导出模块。ESModules:使用i......
  • Node.Js基础——安装及模块
    一、什么是Node.Js?Node.js是一个开源和跨平台的JavaScript运行时环境。它让JavaScript可以脱离浏览器端,在服务器端运行,让javaScript可以开发后端程序,实现了大部分其他后端语言的功能。 Node.js建立在GoogleChromeV8JavaScript引擎之上,主要用于创建网络服务器-但......
  • 前端模块自动导入的插件
    前言开发中通常会有很多导入语句,如何确保一些通用的api和hook无需每次手动导入即可使用。<scriptsetuplang="ts">import{ref,reactive}from"vue"import{useRoute,useRouter}from"vue-router"import{login}from"./api/user"constcount=r......
  • 蓝桥杯单片机入门(6)—LED灯模块
    这回我们讲,蓝桥杯中LED模块1.点亮一颗LED灯    在写代码之前我们必须要先明确自己的目的,然后根据需求去写对应的代码功能。首先我们要实现点亮一颗LED灯,在此之前我们要先了解一下LED灯的工作原理,    首先我们看一下,LED灯的原理图,图中写LED1的地方就是LED灯,......
  • Ansible-playbook 应用梳理
    前面已经介绍过Ansible的安装配置及常见模块的使用--《Linux下使用Ansible处理批量操作》Palybook简介palybook是由一个或多个paly组成的列表,play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色。从根本上来讲,所谓task无非是调用ansible......
  • 什么是前端模块化
    面试中,关于打包工具的相关知识是非常常见的考题,无可避免的可能会被问到,为什么需要使用到打包工具、或前端工程化的实现,而要回答这些问题前,需要先了解的就是前端模块化。所以在本篇笔记中,会让大家了解前端模块化的演进和功用。文末有我帮助500多人拿到前端offer的文章!!!什么......