NAME
Rex::Commands::Iptables - Iptable Management Commands
DESCRIPTION
With this Module you can manage basic Iptables rules.
Version <= 1.0: All these functions will not be reported.
Only open_port and close_port are idempotent.
SYNOPSIS
use Rex::Commands::Iptables;task "firewall", sub {iptables_clear;open_port 22;open_port [22, 80] => {dev => "eth0",};close_port 22 => {dev => "eth0",};close_port "all";redirect_port 80 => 10080;redirect_port 80 => {dev => "eth0",to => 10080,};default_state_rule;default_state_rule dev => "eth0";is_nat_gateway;iptables t => "nat",A => "POSTROUTING",o => "eth0",j => "MASQUERADE";# The 'iptables' function also accepts long options,# however, options with dashes need to be quotediptables table => "nat",accept => "POSTROUTING","out-interface" => "eth0",jump => "MASQUERADE";# Version of IP can be specified in the first argument# of any function: -4 or -6 (defaults to -4)iptables_clear -6;open_port -6, [22, 80];close_port -6, "all";redirect_port -6, 80 => 10080;default_state_rule -6;iptables -6, "flush";iptables -6,t => "filter",A => "INPUT",i => "eth0",m => "state",state => "RELATED,ESTABLISHED",j => "ACCEPT";};
EXPORTED FUNCTIONS
open_port($port, $option)
Open a port for inbound connections.
task "firewall", sub {open_port 22;open_port [22, 80];open_port [22, 80],dev => "eth1";};task "firewall", sub {open_port 22,dev => "eth1",only_if => "test -f /etc/firewall.managed";} ;
close_port($port, $option)
Close a port for inbound connections.
task "firewall", sub {close_port 22;close_port [22, 80];close_port [22, 80],dev => "eth0",only_if => "test -f /etc/firewall.managed";};
redirect_port($in_port, $option)
Redirect $in_port to another local port.
task "redirects", sub {redirect_port 80 => 10080;redirect_port 80 => {to => 10080,dev => "eth0",};};
iptables(@params)
Write standard iptable comands.
Note that there is a short form for the iptables "--flush" option; when you pass the option of "-F|"flush"" as the only argument, the command "iptables -F" is run on the connected host. With the two argument form of "flush" shown in the examples below, the second argument is table you want to flush.
task "firewall", sub {iptables t => "nat", A => "POSTROUTING", o => "eth0", j => "MASQUERADE";iptables t => "filter", i => "eth0", m => "state", state => "RELATED,ESTABLISHED", j => "ACCEPT";# automatically flushes all tables; equivalent to 'iptables -F'iptables "flush";iptables -F;# flush only the "filter" tableiptables flush => "filter";iptables -F => "filter";};# Note: options with dashes "-" need to be quoted to escape them from Perltask "long_form_firewall", sub {iptables table => "nat",append => "POSTROUTING","out-interface" => "eth0",jump => "MASQUERADE";iptables table => "filter","in-interface" => "eth0",match => "state",state => "RELATED,ESTABLISHED",jump => "ACCEPT";};
is_nat_gateway
This function creates a NAT gateway for the device the default route points to.
task "make-gateway", sub {is_nat_gateway;is_nat_gateway -6;};
default_state_rule(%option)
Set the default state rules for the given device.
task "firewall", sub {default_state_rule(dev => "eth0");};
iptables_list
List all iptables rules.
task "list-iptables", sub {print Dumper iptables_list;print Dumper iptables_list -6;};
iptables_clear
Remove all iptables rules.
task "no-firewall", sub {iptables_clear;};