iptables
| 원저자 | 러스티 러셀 |
|---|---|
| 개발자 | 넷필터 코어 팀 |
| 발표일 | 2001년 |
| 저장소 |
|
| 프로그래밍 언어 | C |
| 엔진 | |
| 운영 체제 | 리눅스 |
| 종류 | 패킷 필터링 |
| 라이선스 | GPL |
| 웹사이트 | www |
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 이후에 리눅스 커널에 통합되었다.[1]
개요
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의 호출, 또는 이러한 궁극적인 운명을 반환하는 모듈 - 규칙이
RETURNverdict를 호출하며, 그런 경우에 처리는 호출하는 체인에 반환된다 - 체인의 끝에 도달된다; 순회는 부모 체인에서 지속되거나 (만약
RETURN가 사용된 경우), 궁극적인 운명인 기본 정책이 사용된다.
대상들은 또한 ACCEPT (NAT 이 이렇게 한다) 또는 DROP (예를 들면 REJECT 모듈) 같은 verdict를 반환하지만, 또한 대상/verdict가 전혀 맞지 않을 때 다음 규칙을 지속하기 위해 CONTINUE (예를 들면 LOG 모듈; CONTINUE는 내부 이름이다)를 함축할 수 있다.
사용자 공간 유틸리티
프론트엔드
iptables를 위한 규칙을 설정하는 것을 가능하게 하는 수많은 타사 응용 소프트웨어가 존재한다. 프론트엔드는 텍스트 또는 그래픽일 수 있다. 이것은 사용자가 클릭함으로써 간단하게 룰셋을 만들 수 있고, 스크립트는 일반적으로 셸 스크립트를 가리키는데, 이것은 iptables나 iptables-restore를 미리 정의된 규칙들이나 템플릿에서 확장된 규칙들과 함께 호출한다. 리눅스 배포판들은 일반적으로 템플릿 방식을 사용하는데, 이러한 템플릿 기반 접근법은 규칙 생성기의 제한된 형태이며, 이러한 생성기는 또한 PHP 웹 페이지들처럼 독자적으로 존재한다.
이러한 프론트엔드들, 생성기들 그리고 스크립트들은 종종 그들의 빌트인 템플릿 시스템에 의해 제한된다. 또한 생성된 규칙들은 일반적으로 사용자가 원하는 특정한 방화벽 효과를 위해 최적화되어있지 않아서 개발자들에게 유지 보수 비용을 끌어올리는 경향이 있다.
다른 툴들
- IPFire은 리눅스 기반 방화벽 배포판이며 웹 기반 사용자 인터페이스가 방화벽 규칙 설정을 위해 제공되는데, 이것은 명령 줄 라인의 사용 없이 iptables 규칙들을 생성할 수 있게 한다.
- NuFW는 넷필터에 대한 방화벽 확장이다.
- abyle-firewall은 파이썬/xml 기반 iptable 래퍼이다.(wiki)
같이 보기
각주
- ↑ “Linux 3.13, Section 1.2. nftables, the successor of iptables”. 《kernelnewbies.org》. 2014년 1월 19일. 2014년 1월 20일에 확인함.
외부 링크
- 파일:Commons-logo.svg 위키미디어 공용에 [{{fullurl:Commons:모듈:WikidataIB 508번째 줄에서 Lua 오류: attempt to index field 'wikibase' (a nil value).|uselang=ko}} Iptables] 관련 미디어 분류가 있습니다.
- 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
모듈:Authority_control 159번째 줄에서 Lua 오류: attempt to index field 'wikibase' (a nil value).
- 스크립트 오류가 있는 문서
- 잘못된 파일 링크가 포함된 문서
- 위키데이터 속성 P18을 사용하는 문서
- 위키데이터 속성 P41을 사용하는 문서
- 위키데이터 속성 P94를 사용하는 문서
- 위키데이터 속성 P117을 사용하는 문서
- 위키데이터 속성 P154를 사용하는 문서
- 위키데이터 속성 P213을 사용하는 문서
- 위키데이터 속성 P227을 사용하는 문서
- 위키데이터 속성 P242를 사용하는 문서
- 위키데이터 속성 P244를 사용하는 문서
- 위키데이터 속성 P245를 사용하는 문서
- 위키데이터 속성 P268을 사용하는 문서
- 위키데이터 속성 P269를 사용하는 문서
- 위키데이터 속성 P271을 사용하는 문서
- 위키데이터 속성 P347을 사용하는 문서
- 위키데이터 속성 P349를 사용하는 문서
- 위키데이터 속성 P350을 사용하는 문서
- 위키데이터 속성 P373을 사용하는 문서
- 위키데이터 속성 P380을 사용하는 문서
- 위키데이터 속성 P396을 사용하는 문서
- 위키데이터 속성 P409를 사용하는 문서
- 위키데이터 속성 P428을 사용하는 문서
- 위키데이터 속성 P434를 사용하는 문서
- 위키데이터 속성 P435를 사용하는 문서
- 위키데이터 속성 P436을 사용하는 문서
- 위키데이터 속성 P454를 사용하는 문서
- 위키데이터 속성 P496을 사용하는 문서
- 위키데이터 속성 P549를 사용하는 문서
- 위키데이터 속성 P650을 사용하는 문서
- 위키데이터 속성 P651을 사용하는 문서
- 위키데이터 속성 P691을 사용하는 문서
- 위키데이터 속성 P716을 사용하는 문서
- 위키데이터 속성 P781을 사용하는 문서
- 위키데이터 속성 P791을 사용하는 문서
- 위키데이터 속성 P864를 사용하는 문서
- 위키데이터 속성 P865를 사용하는 문서
- 위키데이터 속성 P886을 사용하는 문서
- 위키데이터 속성 P902를 사용하는 문서
- 위키데이터 속성 P906을 사용하는 문서
- 위키데이터 속성 P947을 사용하는 문서
- 위키데이터 속성 P950을 사용하는 문서
- 위키데이터 속성 P966을 사용하는 문서
- 위키데이터 속성 P982를 사용하는 문서
- 위키데이터 속성 P1003을 사용하는 문서
- 위키데이터 속성 P1004를 사용하는 문서
- 위키데이터 속성 P1005를 사용하는 문서
- 위키데이터 속성 P1006을 사용하는 문서
- 위키데이터 속성 P1015를 사용하는 문서
- 위키데이터 속성 P1045를 사용하는 문서
- 위키데이터 속성 P1048을 사용하는 문서
- 위키데이터 속성 P1053을 사용하는 문서
- 위키데이터 속성 P1146을 사용하는 문서
- 위키데이터 속성 P1153을 사용하는 문서
- 위키데이터 속성 P1157을 사용하는 문서
- 위키데이터 속성 P1186을 사용하는 문서
- 위키데이터 속성 P1225를 사용하는 문서
- 위키데이터 속성 P1248을 사용하는 문서
- 위키데이터 속성 P1273을 사용하는 문서
- 위키데이터 속성 P1315를 사용하는 문서
- 위키데이터 속성 P1323을 사용하는 문서
- 위키데이터 속성 P1330을 사용하는 문서
- 위키데이터 속성 P1362를 사용하는 문서
- 위키데이터 속성 P1368을 사용하는 문서
- 위키데이터 속성 P1375를 사용하는 문서
- 위키데이터 속성 P1407을 사용하는 문서
- 위키데이터 속성 P1556을 사용하는 문서
- 위키데이터 속성 P1584를 사용하는 문서
- 위키데이터 속성 P1695를 사용하는 문서
- 위키데이터 속성 P1707을 사용하는 문서
- 위키데이터 속성 P1736을 사용하는 문서
- 위키데이터 속성 P1886을 사용하는 문서
- 위키데이터 속성 P1890을 사용하는 문서
- 위키데이터 속성 P1907을 사용하는 문서
- 위키데이터 속성 P1908을 사용하는 문서
- 위키데이터 속성 P1960을 사용하는 문서
- 위키데이터 속성 P1986을 사용하는 문서
- 위키데이터 속성 P2041을 사용하는 문서
- 위키데이터 속성 P2163을 사용하는 문서
- 위키데이터 속성 P2174를 사용하는 문서
- 위키데이터 속성 P2268을 사용하는 문서
- 위키데이터 속성 P2349를 사용하는 문서
- 위키데이터 속성 P2418을 사용하는 문서
- 위키데이터 속성 P2456을 사용하는 문서
- 위키데이터 속성 P2484를 사용하는 문서
- 위키데이터 속성 P2558을 사용하는 문서
- 위키데이터 속성 P2750을 사용하는 문서
- 위키데이터 속성 P2980을 사용하는 문서
- 위키데이터 속성 P3223을 사용하는 문서
- 위키데이터 속성 P3233을 사용하는 문서
- 위키데이터 속성 P3348을 사용하는 문서
- 위키데이터 속성 P3372를 사용하는 문서
- 위키데이터 속성 P3407을 사용하는 문서
- 위키데이터 속성 P3430을 사용하는 문서
- 위키데이터 속성 P3544를 사용하는 문서
- 위키데이터 속성 P3562를 사용하는 문서
- 위키데이터 속성 P3563을 사용하는 문서
- 위키데이터 속성 P3601을 사용하는 문서
- 위키데이터 속성 P3723을 사용하는 문서
- 위키데이터 속성 P3788을 사용하는 문서
- 위키데이터 속성 P3829를 사용하는 문서
- 위키데이터 속성 P3863을 사용하는 문서
- 위키데이터 속성 P3920을 사용하는 문서
- 위키데이터 속성 P3993을 사용하는 문서
- 위키데이터 속성 P4038을 사용하는 문서
- 위키데이터 속성 P4055를 사용하는 문서
- 위키데이터 속성 P4114를 사용하는 문서
- 위키데이터 속성 P4143을 사용하는 문서
- 위키데이터 속성 P4186을 사용하는 문서
- 위키데이터 속성 P4423을 사용하는 문서
- 위키데이터 속성 P4457을 사용하는 문서
- 위키데이터 속성 P4534를 사용하는 문서
- 위키데이터 속성 P4535를 사용하는 문서
- 위키데이터 속성 P4581을 사용하는 문서
- 위키데이터 속성 P4613을 사용하는 문서
- 위키데이터 속성 P4955를 사용하는 문서
- 위키데이터 속성 P5034를 사용하는 문서
- 위키데이터 속성 P5226을 사용하는 문서
- 위키데이터 속성 P5288을 사용하는 문서
- 위키데이터 속성 P5302를 사용하는 문서
- 위키데이터 속성 P5321을 사용하는 문서
- 위키데이터 속성 P5368을 사용하는 문서
- 위키데이터 속성 P5504를 사용하는 문서
- 위키데이터 속성 P5587을 사용하는 문서
- 위키데이터 속성 P5736을 사용하는 문서
- 위키데이터 속성 P5818을 사용하는 문서
- 위키데이터 속성 P6213을 사용하는 문서
- 위키데이터 속성 P6734를 사용하는 문서
- 위키데이터 속성 P6792를 사용하는 문서
- 위키데이터 속성 P6804를 사용하는 문서
- 위키데이터 속성 P6829를 사용하는 문서
- 위키데이터 속성 P7293을 사용하는 문서
- 위키데이터 속성 P7303을 사용하는 문서
- 위키데이터 속성 P7314를 사용하는 문서
- 위키데이터 속성 P7902를 사용하는 문서
- 위키데이터 속성 P8034를 사용하는 문서
- 위키데이터 속성 P8189를 사용하는 문서
- 위키데이터 속성 P8381을 사용하는 문서
- 위키데이터 속성 P8671을 사용하는 문서
- 위키데이터 속성 P8980을 사용하는 문서
- 위키데이터 속성 P9070을 사용하는 문서
- 위키데이터 속성 P9692를 사용하는 문서
- 위키데이터 속성 P9725를 사용하는 문서
- 위키데이터 속성 P9984를 사용하는 문서
- 위키데이터 속성 P10020을 사용하는 문서
- 위키데이터 속성 P10299를 사용하는 문서
- 위키데이터 속성 P10608을 사용하는 문서
- 위키데이터 속성 P10832를 사용하는 문서
- 위키데이터 속성 P11249를 사용하는 문서
- 위키데이터 속성 P11646을 사용하는 문서
- 위키데이터 속성 P11729를 사용하는 문서
- 위키데이터 속성 P12204를 사용하는 문서
- 위키데이터 속성 P12362를 사용하는 문서
- 위키데이터 속성 P12754를 사용하는 문서
- 위키데이터 속성 P13049를 사용하는 문서
- 방화벽 소프트웨어
- 리눅스 커널 특징
- 리눅스 보안 소프트웨어
- 명령줄 소프트웨어