Configure iptables

SIP conntrack/NAT extension

The SIP conntrack/NAT extension supports the connection tracking/NATing of the data streams requested on the dynamic RTP/RTCP ports of a SIP session, as well as mangling of SIP requests/responses.

SIP conntrack/NAT extension for netfilter/iptables is currently available from netfilter patch-o-matic.

SIP conntrack/NAT extension is available in the mainstream kernel as of 2.6.18.

Documentation is available here.

Installation

  • Perform a backup of your current kernel, kernel sources and .config
  • Download iptables snapshot from ftp://ftp.netfilter.org/pub/iptables/snapshot/
  • Download patch-o-matic snapshot from ftp://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/
  • Unpack iptables snapshot
  • Unpack patch-o-matic-ng snapshot
  • Create symlink for iptables and patch-o-matic-ng
  • cd into patch-o-matic-ng directory
  • Apply patch to kernel sources (./runme sip-conntrack-nat)
  • Enable module (CONFIG_IP_NF_NAT_SIP=y and CONFIG_IP_NF_SIP=y or "Device drivers, Networking support, Networking options, Network packet filtering, IP: Netfilter configuration, SIP support)
  • Build new kernel (make && make modules_install)
  • Reboot
  • Load SIP conntrack and NAT module (modprobe ip_conntrack_sip ip_nat_sip)
  • Add rule for SIP signalling traffic (usually port 5060)

Using SIP conntrack/NAT

Load the modules

modprobe ip_conntrack_sip ip_nat_sip

Note: ip_conntrack_sip allows up to 8 SIP ports, separated by commas

modprobe ip_conntrack_sip ports=5060

Set IPtables filter rules

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p udp --dport 5060 -j ACCEPT

Set IPtables NAT rules

iptables -A FORWARD -o eth0 -p udp --dport 5060 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source ip.add.dr.ess

Testing iptables

IPTState

IPTState is a top-like display of IPtables state table entries.

  • IPTState project page
  • IPTState Freshmeat page

    conntrack

  • IPtables conntrack news announcement
    conntrack is a commandline program for listing, querying, deleting, updating entries in the connection tracking table. It also supports real-time tracing of connection tracking state changes (conntrack events).

    Use case 1: host-based firewall for sipX mediaserver

    The module has been successfully tested on a host running sipX mediaserver. After call setup, both udp ports are set up and kept alive until 30 seconds after call termination.