iptables is a user-space utility program that allows a system administrator to configure the IP packet filter rules of the Linux kernel firewall, implemented as different Netfilter modules. The filters are organized in different tables, which contain chains of rules for how to treat network traffic packets. Different kernel modules and programs are currently used for different protocols; iptables applies to IPv4, ip6tables to IPv6, arptables to ARP, and  to Ethernet frames.

iptables requires elevated privileges to operate and must be executed by user root, otherwise it fails to function.  On most Linux systems, iptables is installed as  and documented in its man pages, which can be opened using man iptables when installed. It may also be found in /sbin/iptables, but since iptables is more like a service rather than an "essential binary", the preferred location remains .

The term iptables is also commonly used to inclusively refer to the kernel-level components. x_tables is the name of the kernel module carrying the shared code portion used by all four modules that also provides the API used for extensions; subsequently, Xtables is more or less used to refer to the entire firewall (v4, v6, arp, and eb) architecture.

iptables superseded ipchains; and the successor of iptables is nftables, which was released on 19 January 2014 and was merged into the Linux kernel mainline in kernel version 3.13.

Overview
iptables allows the system administrator to define tables containing chains of rules for the treatment of packets. Each table is associated with a different kind of packet processing. Packets are processed by sequentially traversing the rules in chains. A rule in a chain can cause a goto or jump to another chain, and this can be repeated to whatever level of nesting is desired. (A jump is like a “call”, i.e. the point that was jumped from is remembered.) Every network packet arriving at or leaving from the computer traverses at least one chain.

The origin of the packet determines which chain it traverses initially. There are five predefined chains (mapping to the five available Netfilter hooks), though a table may not have all chains. Predefined chains have a policy, for example DROP, which is applied to the packet if it reaches the end of the chain. The system administrator can create as many other chains as desired. These chains have no policy; if a packet reaches the end of the chain it is returned to the chain which called it. A chain may be empty.

 PREROUTING: Packets will enter this chain before a routing decision is made.
 INPUT: Packet is going to be locally delivered. It does not have anything to do with processes having an opened socket; local delivery is controlled by the "local-delivery" routing table: ip route show table local.
 FORWARD: All packets that have been routed and were not for local delivery will traverse this chain.
 OUTPUT: Packets sent from the machine itself will be visiting this chain.
 POSTROUTING: Routing decision has been made. Packets enter this chain just before handing them off to the hardware.

A chain does not exist by itself; it belongs to a table. There are three tables: nat, filter, and mangle. Unless preceded by the option -t, an iptables command concerns the filter table by default. For example, the command iptables -L -v -n, which shows some chains and their rules, is equivalent to iptables -t filter -L -v -n. To show chains of table nat, use the command iptables -t nat -L -v -n

Each rule in a chain contains the specification of which packets it matches. It may also contain a target (used for extensions) or verdict (one of the built-in decisions). As a packet traverses a chain, each rule in turn is examined. If a rule does not match the packet, the packet is passed to the next rule. If a rule does match the packet, the rule takes the action indicated by the target/verdict, which may result in the packet being allowed to continue along the chain or may not. Matches make up the large part of rulesets, as they contain the conditions packets are tested for. These can happen for about any layer in the OSI model, as with e.g. the --mac-source and -p tcp --dport parameters, and there are also protocol-independent matches, such as -m time.

The packet continues to traverse the chain until either
 a rule matches the packet and decides the ultimate fate of the packet, for example by calling one of the ACCEPT or DROP, or a module returning such an ultimate fate; or
 a rule calls the RETURN verdict, in which case processing returns to the calling chain; or
 the end of the chain is reached; traversal either continues in the parent chain (as if RETURN was used), or the base chain policy, which is an ultimate fate, is used.

Targets also return a verdict like ACCEPT (NAT modules will do this) or DROP (e.g. the REJECT module), but may also imply CONTINUE (e.g. the LOG module; CONTINUE is an internal name) to continue with the next rule as if no target/verdict was specified at all.

Userspace utilities

Front-ends
There are numerous third-party software applications for iptables that try to facilitate setting up rules. Front-ends in textual or graphical fashion allow users to click-generate simple rulesets; scripts usually refer to shell scripts (but other scripting languages are possible too) that call iptables or (the faster) iptables-restore with a set of predefined rules, or rules expanded from a template with the help of a simple configuration file. Linux distributions commonly employ the latter scheme of using templates. Such a template-based approach is practically a limited form of a rule generator, and such generators also exist in standalone fashion, for example, as PHP web pages.

Such front-ends, generators and scripts are often limited by their built-in template systems and where the templates offer substitution spots for user-defined rules. Also, the generated rules are generally not optimized for the particular firewalling effect the user wishes, as doing so will likely increase the maintenance cost for the developer. Users who reasonably understand iptables and want their ruleset optimized are advised to construct their own ruleset.

Other notable tools
 FireHOL – a shell script wrapping iptables with an easy-to-understand plain-text configuration file
 NuFW – an authenticating firewall extension to Netfilter
 Shorewall – a gateway/firewall configuration tool, making it possible to use easier rules and have them mapped to iptables

See also

 nftables
 NPF (firewall)
 PF (firewall)
 ipfirewall (ipfw)
 ipfilter
 XDP
 ipchains
 Uncomplicated Firewall (firewall)

References

Literature

External links

 The netfilter/iptables project Web page
 
 The netfilter/iptables documentation page (outdated)
 Detecting and deceiving network scans countermeasures against nmap
 The IPTables ManPage for syntax help
 Iptables Tutorial 1.2.2 by Oskar Andreasson
 IPTABLES: The Default Linux Firewall
 Acceleration of iptables Linux Packet Filtering using GPGPU

Command-line software
Firewall software
Linux security software
Linux kernel features
Linux-only free software
Free software programmed in C
iptables는 시스템 관리자가 리눅스 커널 방화벽(다른 넷필터 모듈로 구현됨)이 제공하는 테이블들과 그것을 저장하는 체인, 규칙들을 구성할 수 있게 해주는 사용자 공간 응용 프로그램이다. 각기 다른 커널 모듈과 프로그램들은 현재 다른 프로토콜을 위해 사용되는데, iptables는 IPv4에, ip6tables는 IPv6에, arptables는 ARP에, ebtables는 이더넷 프레임에 적용된다.

iptables는 동작을 위해 상승된 권한을 요구하며 사용자 루트가 실행하여야 하는데, 그렇지 않으면 작동하지 않는다. 리눅스 시스템에서 iptables는 /usr/sbin/iptables에 설치되며, man iptables를 이용하여 열면 표시되는 man page에 문서화되어 있다. /sbin/iptables에서도 볼 수 있지만 iptables는 필수적인 이진 파일이라기 보다는 서비스에 더 가깝기 때문에 선호되는 위치는 /usr/sbin이다.

iptables라는 용어는 커널 수준의 구성 요소를 아울러 가리킬 때에도 흔히 사용된다. x_tables는 4개의 모듈이 사용하는 공유된 코드 일부를 전달하는 커널 모듈의 이름이며, 확장을 위해 사용되는 API를 제공한다. 즉, Xtables는 대체적으로 방화벽 (v4, v6, arp, eb) 구조 전반을 가리키는데 쓰인다.

iptables의 후임자는 nftables이며, 이것은 커널 버전 3.13 이후에 리눅스 커널에 통합되었다.

개요 
Xtables는 시스템 관리자가 패킷을 다루기 위한 규칙(rules)의 체인(chains)를 포함하는 tables를 정의할 수 있게 한다. 패킷들은 체인에 존재하는 규칙을 순회함으로써 처리된다. 체인의 규칙은 goto나 jump를 다른 체인으로 유발할 수 있으며, 이것은 어떤 수준의 네스팅이 요구되더라도 반복적으로 수행될 수 있다. jump는 "call"과 비슷한데, 점프한 위치가 저장된다. 컴퓨터에서 나가거나 들어오는 모든 네트워크 패킷은 적어도 하나의 체인을 순회한다.

패킷의 원본은 초기에 순회할 체인을 고른다. 비록 테이블이 모든 체인들을 갖지는 않지만, 5개의 미리 정의된 체인들이 존재한다. 미리 정의된 체인들은 정책(policy)을 갖는데, 예를 들면 DROP이 있다. 시스템 관리자는 요구되는 만큼 다른 체인들을 만들 수 있다. 이러한 체인들은 정책을 갖지 않는다; 만약 패킷이 체인의 끝에 도달하면 이것은 호출했던 체인으로 돌아간다. 체인은 비어있을 수 있다.
 PREROUTING: 패킷들은 라우팅 결정이 만들어지기 전에 이 체인에 들어갈 것이다.
 INPUT: 패킷이 로컬상에서 전달될 경우, 이것은 열린 소켓을 가진 프로세스들과 아무런 상관이 없다; 로컬 전달은 "local-delivery"라우팅 테이블에 의해 제어된다: ip route show table local.
 FORWARD: 라우팅되고 로컬 전달이 아닌 모든 패킷들은 이 체인을 순회한다.
 OUTPUT: 기계 자체에서 보내진 패킷들은 이 체인을 마주칠 것이다.
 POSTROUTING: 라우팅 결정이 만들어졌을 때, 패킷들은 하드웨어에 보내지기 전에 이 체인에 들어온다.
체인에서 각 규칙들은 어떤 패킷들이 매치되는지의 명시를 포함한다. 이것은 또한 확장에 사용되는 대상(target) 또는 빌트인 결정 중 하나인 verdict를 포함할 수 있다. 패킷이 체인을 순회할 때, 각 규칙은 차례로 검사된다. 만약 규칙이 패킷과 맞지 않다면 패킷은 다음 규칙으로 전달된다. 만약 규칙이 패킷에 맞다면 규칙은 대상/verdict에 지시된 행동을 취하며, 이것은 패킷을 허용할지 아닐지의 결과로 나타난다. 매치들은 패킷들이 테스트될 조건들을 포함함으로써 룰셋들의 큰 부분을 이룬다. 이것들은 OSI 모델 들 중 어느 단계에서도 일어날 수 있다. 예를 들면 --mac-source 와 -p tcp --dport 파라미터들이 있으며, 또한 프로토콜에 독립적인 매치들도 있는데 이것의 예로는 -m time이 있다.

패킷은 다음의 경우까지 체인을 순회한다
 규칙이 패킷에 매치되며 궁극적인 운명을 결정한다. 예를 들면 ACCEPT 또는 DROP의 호출, 또는 이러한 궁극적인 운명을 반환하는 모듈
 규칙이 RETURN verdict를 호출하며, 그런 경우에 처리는 호출하는 체인에 반환된다
 체인의 끝에 도달된다; 순회는 부모 체인에서 지속되거나 (만약 RETURN가 사용된 경우), 궁극적인 운명인 기본 정책이 사용된다.
대상들은 또한 ACCEPT (NAT 이 이렇게 한다) 또는 DROP (예를 들면 REJECT 모듈) 같은 verdict를 반환하지만, 또한 대상/verdict가 전혀 맞지 않을 때 다음 규칙을 지속하기 위해 CONTINUE (예를 들면 LOG 모듈; CONTINUE는 내부 이름이다)를 함축할 수 있다.

사용자 공간 유틸리티

프론트엔드 
iptables를 위한 규칙을 설정하는 것을 가능하게 하는 수많은 타사 응용 소프트웨어가 존재한다. 프론트엔드는 텍스트 또는 그래픽일 수 있다. 이것은 사용자가 클릭함으로써 간단하게 룰셋을 만들 수 있고, 스크립트는 일반적으로 셸 스크립트를 가리키는데, 이것은 iptables나 iptables-restore를 미리 정의된 규칙들이나 템플릿에서 확장된 규칙들과 함께 호출한다. 리눅스 배포판들은 일반적으로 템플릿 방식을 사용하는데, 이러한 템플릿 기반 접근법은 규칙 생성기의 제한된 형태이며, 이러한 생성기는 또한 PHP 웹 페이지들처럼 독자적으로 존재한다.

이러한 프론트엔드들, 생성기들 그리고 스크립트들은 종종 그들의 빌트인 템플릿 시스템에 의해 제한된다. 또한 생성된 규칙들은 일반적으로 사용자가 원하는 특정한 방화벽 효과를 위해 최적화되어있지 않아서 개발자들에게 유지 보수 비용을 끌어올리는 경향이 있다.

다른 툴들 
 IPFire은 리눅스 기반 방화벽 배포판이며 웹 기반 사용자 인터페이스가 방화벽 규칙 설정을 위해 제공되는데, 이것은 명령 줄 라인의 사용 없이 iptables 규칙들을 생성할 수 있게 한다.
 NuFW는 넷필터에 대한 방화벽 확장이다.
 abyle-firewall은 파이썬/xml 기반 iptable 래퍼이다.(wiki)

같이 보기 

 NPF
 PF (방화벽)
 ipfw
 ipfilter

각주

외부 링크 
 The netfilter/iptables project Web page
 iptables at Freecode
 The netfilter/iptables documentation page (outdated)
 Detecting and deceiving network scans - countermeasures against nmap
 The IPTables ManPage for syntax help
 Iptables Tutorial 1.2.2 by Oskar Andreasson
 Acceleration of iptables Linux Packet Filtering using GPGPU

방화벽 소프트웨어
리눅스 커널 특징
리눅스 보안 소프트웨어
명령줄 소프트웨어