본문 바로가기
리눅스

(번역) iptables

by 다움위키 2025. 2. 23.

원문 보기: https://dawoum.duckdns.org/wiki/Iptables

 

Original article: w:Iptables

iptables시스템 관리자에게 리눅스 커널 방화벽IP 패킷 필터 규칙을 구성하는 것을 허용하는 사용자-공간 유틸리티 프로그램으로, 다양한 Netfilter 모듈로 구현됩니다. 필터는 네트워크 트래픽 패킷을 처리하는 방법에 대해 규칙의 체인을 포함하는 일련의 테이블로 구성됩니다. 다양한 커널 모듈과 프로그램이 현재 다양한 프로토콜에 대해 사용됩니다; iptables는 IPv4에 적용되고, ip6tables는 IPv6에 적용되고, arptables는 ARP에 적용되고, ebtables이더넷 프레임에 적용됩니다.

iptables는 작동하기 위해 높은 권한을 요구하고 사용자 root에 의해 실행되어야 하며, 그렇지 않으면 작동하지 않습니다. 대부분의 리눅스 시스템에서, iptables는 /usr/sbin/iptables에 설치되고 설치될 때 man iptables를 사용하여 열릴 수 있는 man 페이지에 설명되어 있습니다. 그것은 역시 /sbin/iptables에서 찾을 수 있지만, iptables는 "필수 바이너리"라기보다는 서비스에 가깝기 때문에, 선호되는 위치는 /usr/sbin입니다.

iptables라는 용어는 커널-수준 구성 요소를 포괄적으로 지칭하는 데에도 공통적으로 사용됩니다. x_tables는 4개 모듈 모두에 의해 사용되는 공유 코드 부분을 포함하는 커널 모듈의 이름으로, 확장에 사용되는 API도 제공합니다; 그후, Xtables는 전체 방화벽 (v4, v6, arp, 및 eb) 아키텍처를 지칭하기 위해 대체로 사용됩니다.

iptables는 ipchains를 대체했습니다; 그리고 iptables의 후속 버전은 2014년 1월 19일에 출시된 nftables이고 커널 버전 3.13에서 리눅스 커널 메인라인에 병합되었습니다.

Overview

iptables는 시스템 관리자에게 패킷의 처리를 위한 규칙체인을 포함하는 테이블을 정의하도록 허용합니다. 각 테이블은 다른 종류의 패킷 처리와 결합됩니다. 패킷은 체인에서 규칙을 순차적으로 순회함으로써 처리됩니다. 체인에서 규칙은 또 다른 체인으로 이동하거나 점프할 수 있고, 이것은 원하는 중첩 수준까지 반복될 수 있습니다. (점프는 "호출"과 같습니다. 즉, 점프했었던 지점이 기억됩니다.) 컴퓨터에 도착하거나 컴퓨터에서 나가는 모든 각 네트워크 패킷은 최소한 하나의 체인을 순회합니다.

패킷의 출처는 처음에 어떤 체인을 통과할지 결정합니다. 다섯 개의 미리-정의된 체인이 있지만 (사용 가능한 5개의 Netfilter 후크에 매핑), 테이블은 모든 체인을 가질 수는 없습니다. 미리-정의된 체인에는 정책, 예를 들어 DROP을 가지며, 이는 패킷이 체인 끝에 도달하면 패킷에 적용됩니다. 시스템 관리자는 원하는 만큼 다른 체인을 만들 수 있습니다. 이들 체인은 정책을 가지지 않습니다; 만약 패킷이 체인 끝에 도달하면, 그것을 호출했던 체인으로 반환됩니다. 체인은 비어 있을 수 있습니다.

  • PREROUTING: 패킷은 라우팅 결정이 내려지기 전에 이 체인에 들어갈 것입니다.
  • INPUT: 패킷은 지역적으로 전달됩니다. 그것은 열어 둔 소켓을 가지는 프로세스와는 아무런 상관이 없습니다. 지역적 전달은 "local-delivery" 라우팅 테이블에 의해 제어됩니다: ip route show table local.
  • FORWARD: 라우팅되어 지역적으로 전달되지 않은 모든 패킷은 이 체인을 통과할 것입니다.
  • OUTPUT: 기계 자체에서 보낸 패킷은 이 체인을 방문할 것입니다.
  • POSTROUTING: 라우팅 결정이 내려졌습니다. 패킷은 하드웨어에 넘기기 직전에 이 체인에 들어갑니다.

체인은 그 자체로 존재하지 않습니다; 그것은 테이블에 속합니다. 세 개의 테이블: nat, filter, 및 mangle이 있습니다. 옵션 -t 뒤에 오지 않는 한, iptables 명령은 기본적으로 filter 테이블과 관련이 있습니다. 예를 들어, 일부 체인과 해당 규칙을 보여주는 iptables -L -v -n 명령은 iptables -t filter -L -v -n과 동등합니다. 테이블 nat의 체인을 보기 위해, iptables -t nat -L -v -n 명령을 사용합니다.

체인에서 각 규칙에는 일치하는 패킷의 사양이 포함됩니다. 그것은 역시 대상 (확장에 사용됨) 또는 판결 (내장된 결정 중 하나)을 포함할 수 있습니다. 패킷이 체인을 통과할 때, 차례로 각 규칙이 검사됩니다. 만약 규칙이 패킷과 일치하지 않으면, 패킷은 다음 규칙으로 전달됩니다. 만약 규칙이 패킷과 일치하면, 규칙은 대상/판결에 표시된 작업을 수행하여, 패킷이 체인을 따라 계속 진행될 수도 있고 그렇지 않을 수도 있습니다. 일치는 패킷을 테스트하는 조건을 포함하므로 규칙-집합의 대부분을 구성합니다. 이것들은 예를 들어, --mac-source 및 -p tcp --dport 매개변수를 갖는 OSI 모델에서 임의의 계층에 대해 발생할 수 있고, -m time과 같은 프로토콜 독립적인 일치도 있습니다.

패킷은 다음 중 하나가 될 때까지 체인을 계속 탐색합니다:

  1. 규칙은 패킷과 일치하고 예를 들어 ACCEPT 또는 DROP 중 하나를 호출하거나 모듈이 그러한 최종 운명을 반환하는 것과 같이 패킷의 최종 운명을 결정합니다; 또는
  2. 규칙은 RETURN 판결을 호출하고, 이 경우에서 처리가 호출 체인으로 반환됩니다; 또는
  3. 체인의 끝에 도달합니다; 탐색은 부모 체인에서 계속되거나 (RETURN을 사용한 것처럼), 궁극적인 운명인 기본 체인 정책이 사용됩니다.

대상은 ACCEPT (NAT 모듈이 이를 수행할 것임) 또는 DROP (예를 들어, REJECT 모듈)과 같은 판정을 반환하지만, 아무런 대상/판결이 지정되지 않은 것처럼 다음 규칙을 계속 진행하기 위해 CONTINUE (예를 들어, LOG 모듈; CONTINUE는 내부 이름임)를 의미할 수도 있습니다.

Userspace utilities

Front-ends

iptables에 대한 규칙 설정을 용이하게 하려는 수많은 타사 소프트웨어 응용 프로그램이 있습니다. 텍스트 또는 그래픽 방식에서 프런트-엔드는 사용자에게 간단한 규칙-집합을 클릭-생성하도록 허용합니다; 스크립트는 보통 쉘 스크립트를 참조하며 (그러나 다른 스크립팅 언어도 가능), iptables 또는 (더 빠른) iptables-restore를 미리-정의된 규칙의 모음 또는 간단한 구성 파일의 도움으로 템플릿에서 확장된 규칙으로 호출합니다. 리눅스 배포판은 공통적으로 템플릿을 사용하는 후자의 방식을 사용합니다. 그러한 템플릿-기반 접근 방식은 사실상 제한된 형태의 규칙 생성기이고, 그러한 생성기는, 예를 들어, PHP 웹 페이지로 독립 실행형 방식으로도 존재합니다.

그러한 프런트-엔드, 생성기, 및 스크립트는 종종 내장된 템플릿 시스템에 의해 제한되고 여기서 템플릿이 사용자-정의된 규칙에 대해 대체 지점을 제공합니다. 역시, 생성된 규칙은 일반적으로 사용자가 원하는 특정 방화벽 효과에 최적화되지 않는데, 왜냐하면 그렇게 하는 것이 개발자에 대한 유지 관리 비용을 증가할 가능성이 있기 때문입니다. iptables를 합리적으로 이해하고 규칙의 모음을 최적화하려는 사용자는 자신의 규칙의 모음을 구성하는 것이 좋습니다.

Other notable tools

  • FireHOL – 이해하기 쉬운 일반 텍스트 구성 파일로 iptables를 래핑하는 쉘 스크립트
  • NuFW – Netfilter에 대한 인증 방화벽 확장
  • Shorewall – 게이트웨이/방화벽 구성 도구, 보다 쉬운 규칙을 사용하고 이를 iptables에 매핑할 수 있도록 만듭니다.

See also

 

 

 

Literature