Documentation

    PLEASE NOTE: This document applies to latest version and not to the latest stable release v2.21

    Documentation for other releases can be found by using the version selector in the top right of any doc page.

    iptables

    Manage iptables firewall rules.

    Attributes

    check_mode:
      support: full
    

    Parameters

    Parameter Required Type Values Description
    chain true string   The iptables chain to modify.
    table   string   The iptables table to modify. [default: "filter"]
    state   string present
    absent
    Whether the rule should be present or absent. [default: "present"]
    policy   string   Set the policy for the chain (ACCEPT, DROP, REJECT, etc.).
    protocol   string   The protocol of the rule (tcp, udp, icmp, all).
    source   string   The source address/network.
    destination   string   The destination address/network.
    source_port   string   The source port.
    destination_port   string   The destination port.
    jump   string   The jump target (ACCEPT, DROP, REJECT, LOG, etc.).
    to_destination   string   The target for DNAT/SNAT (e.g., “192.168.1.1:80”).
    to_source   string   The source for SNAT (e.g., “192.168.1.1”).
    to_ports   string   The ports for DNAT/SNAT (e.g., “8080-8090”).
    in_interface   string   The input interface.
    out_interface   string   The output interface.
    ctstate   string   Connection tracking states (ESTABLISHED, RELATED, NEW, INVALID).
    match   string   Match extensions (state, conntrack, etc.).
    rule_num   string   Append rule as a specific rule number (1-based).
    flush   boolean   Flush all rules in the chain. [default: false]
    comment   string   Comment for the rule (requires iptables comment module).
    ip_version   string ipv4
    ipv6
    The iptables command to use (iptables, ip6tables). [default: "iptables"]
    flush_all   boolean   Perform a flush before adding rules. [default: false]

    Examples

    - name: Allow HTTP traffic
      iptables:
        chain: INPUT
        protocol: tcp
        destination_port: "80"
        jump: ACCEPT
    
    - name: Allow established connections
      iptables:
        chain: INPUT
        ctstate: ESTABLISHED,RELATED
        jump: ACCEPT
    
    - name: Allow traffic from specific source
      iptables:
        chain: INPUT
        source: "192.168.1.0/24"
        jump: ACCEPT
    
    - name: NAT masquerade for outgoing traffic
      iptables:
        table: nat
        chain: POSTROUTING
        source: "10.0.0.0/24"
        out_interface: eth0
        jump: MASQUERADE
    
    - name: Forward port 8080 to 80
      iptables:
        table: nat
        chain: PREROUTING
        in_interface: eth0
        protocol: tcp
        destination_port: "8080"
        jump: DNAT
        to_destination: "127.0.0.1:80"
    
    - name: Remove a specific rule
      iptables:
        chain: INPUT
        protocol: tcp
        destination_port: "8080"
        jump: ACCEPT
        state: absent
    
    - name: Set the policy for the INPUT chain
      iptables:
        chain: INPUT
        policy: DROP
    
    - name: Flush all rules in INPUT chain
      iptables:
        chain: INPUT
        flush: true