> 네트워크 관리 > iptables

iptables: 리눅스 방화벽 규칙 관리

iptables는 Linux 커널의 Netfilter 프레임워크를 사용하여 IPv4 패킷 필터링 및 NAT(Network Address Translation) 규칙을 설정하고 관리하는 명령줄 유틸리티입니다. 이를 통해 네트워크 트래픽을 제어하고 시스템 보안을 강화할 수 있습니다. iptables는 체인(chains)과 테이블(tables) 개념을 사용하여 패킷 처리 규칙을 정의합니다.

개요

iptables는 들어오고 나가는 네트워크 패킷에 대한 규칙을 정의하여 시스템의 보안 정책을 구현합니다. 각 규칙은 특정 조건에 맞는 패킷에 대해 ACCEPT(허용), DROP(무시), REJECT(거부) 등의 액션(target)을 지정합니다. 주로 INPUT, OUTPUT, FORWARD 체인을 사용하며, NAT 기능을 위해 PREROUTING, POSTROUTING 체인도 활용됩니다.

주요 기능

  • 패킷 필터링 (방화벽)
  • 네트워크 주소 변환 (NAT)
  • 포트 포워딩 및 리디렉션
  • 특정 IP 주소, 포트, 프로토콜 기반 트래픽 제어

주요 옵션

iptables 명령어는 다양한 옵션과 함께 사용되어 특정 규칙을 추가, 삭제, 수정하거나 현재 규칙을 조회합니다.

규칙 관리

매칭 조건

타겟 (액션)

생성된 명령어:

명령어를 조합해 보세요.

설명:

`iptables` 명령어를 실행합니다.

위 옵션들을 조합하여 AI와 함께 가상으로 명령어를 실행해 보세요.

사용 예시

iptables를 사용하여 일반적인 방화벽 규칙을 설정하는 예시입니다. 규칙을 추가하기 전에 항상 현재 규칙을 백업하는 것이 좋습니다.

모든 현재 규칙 조회

sudo iptables -L -v -n

자세한 정보와 IP 주소를 숫자로 표시하여 규칙을 조회합니다.

SSH (22번 포트) 허용

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

외부에서 들어오는 SSH 연결을 허용합니다.

특정 IP 주소 차단

sudo iptables -A INPUT -s 192.168.1.100 -j DROP

특정 IP 주소(예: 192.168.1.100)로부터의 모든 인바운드 트래픽을 차단합니다.

모든 아웃바운드 트래픽 허용

sudo iptables -P OUTPUT ACCEPT

시스템에서 나가는 모든 트래픽을 허용하도록 OUTPUT 체인의 기본 정책을 설정합니다.

웹 서버 포트 포워딩 (80 -> 8080)

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

들어오는 80번 포트 요청을 로컬 8080번 포트로 리디렉션합니다. (NAT 테이블 사용)

내부 네트워크 마스커레이딩 (NAT)

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

내부 네트워크의 트래픽이 외부 인터페이스(예: eth0)를 통해 나갈 때 출발지 IP를 변경합니다. (NAT 테이블 사용)

설치

대부분의 리눅스 배포판에 iptables는 기본적으로 설치되어 있습니다. 만약 설치되어 있지 않다면, 다음 명령어를 사용하여 설치할 수 있습니다.

Debian/Ubuntu

sudo apt update
sudo apt install iptables

CentOS/RHEL/Fedora

sudo dnf install iptables

팁 & 주의사항

iptables 규칙은 시스템 재부팅 시 사라질 수 있으므로, 규칙을 영구적으로 저장하는 방법을 알아두는 것이 중요합니다. 또한, 규칙 설정 시 순서와 기본 정책에 주의해야 합니다.

규칙 영구 저장

iptables 규칙은 기본적으로 휘발성이므로, 재부팅 후에도 유지되도록 저장해야 합니다. 배포판별로 권장되는 방법이 다릅니다.

  • **Debian/Ubuntu**: `sudo apt install iptables-persistent` 설치 후 `sudo netfilter-persistent save` 명령으로 규칙을 저장합니다. 규칙은 `/etc/iptables/rules.v4` 및 `/etc/iptables/rules.v6`에 저장됩니다.
  • **CentOS/RHEL/Fedora**: `sudo dnf install iptables-services` 설치 후 `sudo systemctl enable iptables && sudo systemctl start iptables` 명령으로 서비스를 활성화하고, `sudo iptables-save > /etc/sysconfig/iptables` 명령으로 규칙을 저장합니다.
  • **일반적인 방법**: `sudo iptables-save > /path/to/rules.v4`로 규칙을 파일로 저장한 후, 부팅 시 해당 파일을 `sudo iptables-restore < /path/to/rules.v4` 명령으로 로드하는 스크립트를 작성할 수 있습니다.

규칙 순서의 중요성

iptables 규칙은 체인 내에서 위에서 아래로 순서대로 적용됩니다. 패킷이 특정 규칙과 일치하면 해당 규칙의 액션이 실행되고, 이후 규칙은 검사되지 않습니다. 따라서 더 구체적인 규칙(예: 특정 IP 차단)을 일반적인 규칙(예: 모든 HTTP 허용)보다 위에 두는 것이 중요합니다.

기본 정책 설정 시 주의

체인의 기본 정책(예: `iptables -P INPUT DROP`)을 설정할 때는 매우 신중해야 합니다. 기본 정책을 DROP으로 변경하기 전에, SSH 접속 등 필수적인 서비스에 대한 허용 규칙을 먼저 추가해야 합니다. 그렇지 않으면 시스템에 대한 모든 네트워크 연결이 차단되어 접근이 불가능해질 수 있습니다.

nftables로의 전환

최신 리눅스 배포판에서는 iptables 대신 `nftables`를 기본 방화벽 프레임워크로 사용하는 경우가 많습니다. `nftables`는 iptables의 기능을 통합하고 개선된 문법을 제공합니다. `iptables` 명령어가 내부적으로 `nftables`를 사용하는 호환성 레이어로 동작할 수도 있으므로, 시스템의 기본 방화벽 도구를 확인하는 것이 좋습니다.


동일 카테고리 명령어