ansible常用模块之 -- iptables模块 – 修改iptables规则

ansible常用模块之 -- iptables模块 – 修改iptables规则

iptables模块 – 修改iptables规则

一、摘要

  • iptables用于Linux内核中IP包过滤规则表的建立、维护和检查。
  • 该模块不处理规则的保存和/或加载,而只是操作当前存在于内存中的规则。这与本模块内部使用的iptables和ip6tables命令的行为相同

二、参数

参数选项/默认值描述
action
string
· append ←
· insert
规则是应该在底部追加还是插入顶部。
如果规则已经存在,则不会修改链。
chain
string
指定要修改的iptables链。
这可以是一个用户定义的链或者一个标准iptables链,比如 INPUT FORWARD OUTPUT PREROUTING POSTROUTING SECMARK CONNSECMARK
comment
string
这指定了要添加到规则中的注释。
ctstate
list
Default:[]这指定了要添加到规则中的注释。
destination
string
目的规范。
地址可以是网络名称、主机名、网络IP地址(带/掩码)或普通IP地址。
在将规则提交给内核之前,主机名将只解析一次。请注意,指定要通过远程查询(如DNS)解析的任何名称是一个非常糟糕的主意。
掩码可以是网络掩码,也可以是普通数字,在网络掩码左侧指定1的数量。因此,掩码24相当于255.255.255.0。一个!参数将反转地址的含义。
destination_port
string
目的端口或端口范围规范。这可以是服务名或端口号。还可以使用first:last格式指定包含范围。如果省略了第一个端口,则假定为’0’;如果省略最后一个,则假定为’65535’。如果第一个端口大于第二个端口,它们将被交换。只有当该规则还指定了以下协议之一时,该规则才有效:tcp、udp、dccp或sctp。
dst_range
string
指定在iprange模块中要匹配的目的IP范围
flush
boolean
· no
· yes
刷新所有规则的指定表和链。
如果没有指定链,则清除整个表。
忽略所有其他参数。
fragment
string
这意味着该规则只引用分片数据包的第二个和更多的片段。
因为没有办法告诉这样一个包的源端口或目的端口(或ICMP类型),这样一个包将不匹配指定它们的任何规则。
当"!"参数在fragment参数之前时,规则将只匹配头分片或未分片的数据包。
gateway
string
指定要发送克隆数据包的主机的IP地址。
此选项仅在jump设置为TEE时有效。
gid_owner
string
指定匹配中使用的GID或组。
goto
string
这指定处理应该在用户指定的链中继续进行。
与跳转参数不同,return不会在这个链中继续处理,而是在通过跳转调用我们的链中继续处理。
icmp_type
string
这允许指定ICMP类型,它可以是数字ICMP类型、类型/代码对或命令’iptables -p ICMP -h’显示的ICMP类型名称之一。
in_interface
string
接收报文的接口名称(仅针对进入INPUT、FORWARD和PREROUTING链的报文)。
当!参数在接口名称之前使用,含义颠倒。
如果接口名称以+结尾,则任何以该名称开头的接口都将匹配。
如果省略此选项,则将匹配任何接口名称。
ip_version
string
· ipv4 ←
· ipv6
该规则应该应用于IP协议的哪个版本
jump
string
这指定了规则的目标;也就是说,如果数据包与它匹配该怎么办。
目标可以是一个用户定义的链(而不是这个规则所在的链),一个特殊的内置目标,它可以立即决定包的命运,或者一个扩展(参见下面的扩展)。
如果在规则中省略了这个选项(并且没有使用goto参数),那么匹配规则将对包的命运没有影响,但规则上的计数器将增加。
limit
string
指定每秒允许的最大平均匹配数。
数字可以显式地指定单位,使用“/秒”、“/分钟”、“/小时”或“/天”或它们的一部分(因此“5/秒”等同于“5/秒”)。
limit_burst
string
指定在上述限制生效之前的最大爆发。
log_level
string
· 0
· 1
· 2
· 3
· 4
· 5
· 6
· 7
· emerg
· alert
· crit
· error
· warning
· notice
· info
· debug
根据syslog定义的优先级设置日志级别。
取值为1 ~ 8之间的字符串或数字。
该参数仅在“jump”设置为“LOG”时有效。
log_prefix
string
指定规则的日志文本。只有LOG跳跃才有意义
match
list
Default:[]指定要使用的匹配项,即测试特定属性的扩展模块。
匹配集构成了调用目标的条件。
如果指定为数组,则从第一个到最后计算匹配项,并以短路方式工作,即如果一个扩展产生false,则计算将停止。
out_interface
string
发送数据包的接口名称(用于进入FORWARD、OUTPUT和POSTROUTING链的数据包)。
当!参数在接口名称之前使用,含义颠倒。
如果接口名称以+结尾,则任何以该名称开头的接口都将匹配。
如果省略此选项,则将匹配任何接口名称。
policy
string
· ACCEPT
· DROP
· QUEUE
· RETURN
将链的策略设置为给定的目标。
只有内置链才能有策略。
该参数需要chain参数。
忽略所有其他参数。
protocol
string
规则或要检查的数据包的协议。
指定的协议可以是tcp、udp、udplite、icmp、esp、ah、sctp或特殊关键字all中的一个,也可以是一个数值,表示这些协议中的一个或另一个。
也允许使用/etc/protocols中的协议名。
一个!参数在协议将测试颠倒之前。
数字零等于所有。
All将与所有协议匹配,当省略此选项时将作为默认值。
reject_with
string
指定拒绝时要返回的错误包类型。它意味着“跳:拒绝”
rule_num
string
插入规则作为给定的规则号。
这只适用于action=insert。
set_counters
string
这使管理员能够初始化规则的包计数器和字节计数器(在INSERT、APPEND和REPLACE操作期间)。
set_dscp_mark
string
这允许指定一个DSCP标记添加到报文中。它接受整数或十六进制值。
与set_dscp_mark_class互斥。
set_dscp_mark_class
string
这允许指定一个预定义的DiffServ类,该类将被转换为相应的DSCP标记。
与set_dscp_mark互斥。
source
string
源规范。
地址可以是网络名称、主机名、网络IP地址(带/掩码)或普通IP地址。
在将规则提交给内核之前,主机名将只解析一次。请注意,指定要通过远程查询(如DNS)解析的任何名称是一个非常糟糕的主意。
掩码可以是网络掩码,也可以是普通数字,在网络掩码左侧指定1的数量。因此,掩码24相当于255.255.255.0。一个!参数将反转地址的含义。
source_port
string
源端口或端口范围规范。
这可以是服务名或端口号。
还可以使用first:last格式指定包含范围。
如果省略第一个端口,则假定为0;如果省略最后一个,则假定为65535。
如果第一个端口大于第二个端口,它们将被交换。
src_range
string
指定在iprange模块中要匹配的源IP范围
state
string
· present ←
· absent
规则应该缺席还是应该出现。
syn
string
· ignore←
· match
· negate
这允许匹配的数据包设置了SYN位而不设置ACK和RST位。
当被否定时,它将匹配所有设置了RST或ACK位的数据包。
table
string
· filter←
· nat
· mangle
· raw
· security
该选项指定命令应该操作的数据包匹配表。
如果内核配置了自动模块加载,则会尝试为该表加载适当的模块(如果该表还不存在的话)。
tcp_flags
dictionary
Default:{}TCP标志规范。
tcp_flags需要一个字典,其中包含两个键flags和flags_set。
flags
list
要检查的标志列表
flags_set
list
要设置的标志。
to_destination
string
这指定了与DNAT一起使用的目的地址。
没有这个,目的地址永远不会改变。
to_ports
string
它指定要使用的目标端口或端口范围,如果没有它,目标端口将永远不会被更改。
只有当规则还指定了tcp、udp、dccp或sctp协议之一时,该规则才有效。
to_source
string
这指定与SNAT一起使用的源地址。
如果不这样做,源地址就不会改变。
uid_owner
string
指定在“由所有者匹配”规则中使用的UID或用户名。
从Ansible 2.6当!参数是前置的,那么它将反转规则以应用于除指定的用户之外的所有用户。

三、示例

# 阻止特定的IP
- name: Block specific IP
  iptables:
    chain: INPUT
    source: 8.8.8.8
    jump: DROP
  become: yes

# 转发端口80至8600
- name: Forward port 80 to 8600
  iptables:
    table: nat
    chain: PREROUTING
    in_interface: eth0
    protocol: tcp
    match: tcp
    destination_port: 80
    jump: REDIRECT
    to_ports: 8600
    comment: Redirect web traffic to port 8600
  become: yes

# 允许相关的和已建立的连接
- name: Allow related and established connections
  iptables:
    chain: INPUT
    ctstate: ESTABLISHED,RELATED
    jump: ACCEPT
  become: yes

# 在TCP端口22 (SSH)上允许新的传入SYN包
- name: Allow new incoming SYN packets on TCP port 22 (SSH).
  iptables:
    chain: INPUT
    protocol: tcp
    destination_port: 22
    ctstate: NEW
    syn: match
    jump: ACCEPT
    comment: Accept new SSH connections.

# 匹配IP范围
- name: Match on IP ranges
  iptables:
    chain: FORWARD
    src_range: 192.168.1.100-192.168.1.199
    dst_range: 10.0.0.1-10.0.0.50
    jump: ACCEPT

# 用DSCP标记8标记所有出方向的tcp报文
- name: Tag all outbound tcp packets with DSCP mark 8
  iptables:
    chain: OUTPUT
    jump: DSCP
    table: mangle
    set_dscp_mark: 8
    protocol: tcp

# 用DSCP DiffServ类CS1标记所有出站tcp包
- name: Tag all outbound tcp packets with DSCP DiffServ class CS1
  iptables:
    chain: OUTPUT
    jump: DSCP
    table: mangle
    set_dscp_mark_class: CS1
    protocol: tcp

# 在第5行插入一条规则
- name: Insert a rule on line 5
  iptables:
    chain: INPUT
    protocol: tcp
    destination_port: 8080
    jump: ACCEPT
    action: insert
    rule_num: 5

# 将INPUT链的策略设置为DROP
- name: Set the policy for the INPUT chain to DROP
  iptables:
    chain: INPUT
    policy: DROP

# 使用tcp-reset拒绝tcp
- name: Reject tcp with tcp-reset
  iptables:
    chain: INPUT
    protocol: tcp
    reject_with: tcp-reset
    ip_version: ipv4

# 设置tcp标志
- name: Set tcp flags
  iptables:
    chain: OUTPUT
    jump: DROP
    protocol: tcp
    tcp_flags:
      flags: ALL
      flags_set:
        - ACK
        - RST
        - SYN
        - FIN

# iptables冲洗过滤器
- name: iptables flush filter
  iptables:
    chain: "{{ item }}"
    flush: yes
  with_items:  [ 'INPUT', 'FORWARD', 'OUTPUT' ]

# iptables冲洗nat
- name: iptables flush nat
  iptables:
    table: nat
    chain: '{{ item }}'
    flush: yes
  with_items: [ 'INPUT', 'OUTPUT', 'PREROUTING', 'POSTROUTING' ]

# 记录到达用户定义链的数据包
- name: Log packets arriving into an user-defined chain
  iptables:
    chain: LOGGING
    action: append
    state: present
    limit: 2/second
    limit_burst: 20
    log_prefix: "IPTABLES:INFO: "
    log_level: info

官方文档:https://docs.ansible.com/ansible/2.9/modules/iptables_module.html#iptables-module

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值