Linux에서 iptables 사용하기: 실용적이고 완전하며 간단한 가이드

마지막 업데이트 : 9 9월 2025
  • 구조 및 흐름: 테이블, 체인 및 트래픽 흐름 방식
  • 규칙 및 정책: 명령, 경기 및 주요 목표
  • NAT 및 게시: 실제 시나리오에서의 SNAT/MASQUERADE 및 DNAT
  • 보안 설계: 기능적 DMZ 및 우수 운영 관행

리눅스의 iptables 방화벽

보안과 개인정보 보호를 위해 리눅스 배포판을 관리한다면 , 결국에는 iptables를 다뤄야 할 것입니다. 이 패킷 필터링 시스템은 GNU/리눅스에서 고전적인 방화벽의 핵심이며 , 네트워크로 들어오고 나가는 트래픽과 네트워크 간에 전달되는 트래픽을 결정하는 역할을 합니다. 제대로 설정하면 마치 네트워크 입구에 숙련된 문지기가 있는 것처럼 완벽하고 정확하게 규칙을 적용합니다.

다음 내용에서는 방화벽 개념 , 넷필터, 테이블 및 체인, 패킷 흐름, 주요 명령, 규칙 확장, 고급 대상 등 필수적인 내용을 모두 다루는 완벽하고 최신 가이드를 제공합니다 . 또한 NAT, 리디렉션, 기본 정책, DMZ 구성과 같은 실제 시나리오도 포함되어 있습니다. 모든 내용은 명확하면서도 체계적인 언어로 설명되어 있으므로, 바로 여러분의 인프라에 적용할 수 있습니다.

맥락 속의 방화벽: 나이트클럽 바운서부터 DMZ까지

방화벽은 기본적으로 네트워크 사이에 있는 필터로, 각 패킷의 운명을 결정하는 규칙을 적용합니다. 나이트클럽의 경비원이 체크리스트를 가지고 있는 것과 비슷하게 생각하면 됩니다 . 패킷이 기준을 충족하면 통과하고, 그렇지 않으면 출입이 거부됩니다. 이 비유를 통해 중요한 것은 규칙의 논리와 평가 순서라는 것을 이해할 수 있습니다.

네트워크 설계에서 일부 토폴로지는 다른 토폴로지보다 보안성이 더 높습니다. DMZ(비무장지대)는 공용 서비스 (웹사이트 또는 FTP 서버 등)를 호스팅하는 중간 네트워크로, 기업 LAN과 분리되어 있습니다. 이렇게 하는 이유는 공격자가 공용 서버를 침해하더라도 네트워크 분리를 통해 내부 네트워크의 나머지 부분에 직접 접근할 수 없도록 차단하기 때문입니다.

방화벽으로서의 Linux: Netfilter와 iptables

리눅스 커널은 패킷을 가로채고 조작하는 기능을 제공하는 프레임워크인 Netfilter를 통합하고 있습니다 . 사용자 공간에서는 iptables라는 유틸리티가 커널이 트래픽에 적용할 규칙을 정의합니다. 이러한 커널과 사용자 공간의 분리는 뛰어난 유연성과 높은 성능을 가능하게 합니다.

프로토콜별로 유틸리티를 구분하는 것이 유용합니다. iptables(IPv4), ip6tables(IPv6), arptables(ARP), ebtables(이더넷 프레임)가 있습니다 . 커널에서는 x_tables라는 공통 모듈이 사용되며, 이 모듈은 확장 이름과 대상을 일치시키는 로직을 공유합니다. 역사적으로 iptables는 ipchains를 대체했고, nftables는 커널 3.13에서 iptables를 계승했지만 , iptables는 여전히 많은 시스템에서 널리 사용되고 있습니다.

작동하려면 관리자 권한이 필요합니다. 루트로 iptables를 실행하세요 (또는 sudo를 사용하여) 일반적으로 /usr/sbin/iptables (데비안/파생) 또는 /sbin/iptables (Red Hat/파생 제품). 공식 문서는 다음 위치에 있습니다. man iptables 그리고 netfilter.org에서도 볼 수 있습니다.

서버용 리눅스 배포판
관련 기사 :
서버를 위한 최고의 Linux 배포판

iptables 구조: 테이블, 체인 및 규칙

Iptables는 규칙으로 채워진 체인으로 구성된 테이블을 사용하여 논리를 구성합니다 . 각 규칙은 일치 조건과 패킷이 일치할 때 적용할 대상을 지정합니다.

  • 필터 테이블 (기본값, 순수 필터링)
    • 입력: 기계 자체로 향하는 트래픽입니다.
    • 앞으로: 장비를 통과하는 트래픽(라우팅).
    • 출력: 로컬에서 생성된 트래픽.
  • 내추럴 테이블 (주소 번역; 새로운 연결에 대해 평가됨)
    • PREROUTING: 경로를 결정하기 전에; DNAT/포트 포워딩에 이상적입니다.
    • 출력: 라우팅 전 로컬에서 생성된 패킷.
    • POSTROUTING: 라우팅 후; SNAT/MASQUERADE의 일반적입니다.
  • 맹그로브 테이블 (세부 헤더 조정: TOS, TTL, 표시 등)
    • 프리라우팅, 입력, 포워드, 출력, 포스트라우팅: 항상 사용 가능.
  • 원시 테이블 (연결 추적 제어/conntrack)
    • PREROUTING y 출력: conntrack에서 건너뛰어야 할 트래픽을 표시합니다.

패킷이 체인에 도달하면 각 규칙과 순차적으로 비교됩니다 . 규칙과 일치하면 해당 패킷의 대상이 실행되고 탐색이 중지됩니다. 만약 패킷이 어떤 규칙과도 일치하지 않고 체인의 끝에 도달했으며 해당 체인이 미리 정의되어 있다면, 해당 체인의 기본 정책이 적용됩니다.

  비즈니스 백업: 기업을 위한 완벽한 백업 가이드

패킷 흐름: 패킷이 어디로, 언제 통과하는지

트래픽 경로를 이해하는 것은 규칙을 올바르게 적용하는 데 핵심입니다. LAN에서 인터넷으로 나가는 패킷은 일반적으로 다음과 같이 처리됩니다. 먼저 사전 라우팅 (DNAT/변조 포함)을 거친 후, 포워드 (전송 필터링)를 수행하고, 장치를 나가기 전에 사후 라우팅 (SNAT/마스커레이드 포함, 해당되는 경우)을 거칩니다.

반대로, 목적지가 방화벽 자체라면 경로는 PREROUTING → INPUT이 되고 , 로컬 머신에서 시작하는 경우 경로는 OUTPUT → POSTROUTING이 됩니다 . 이러한 개념적 틀을 이해하면 경로가 맞지 않을 때 발생하는 문제를 예방할 수 있습니다.

기본 명령: 목록, 지우기, 만들기 및 기본 정책

현재 상태를 감사하려면 미국 iptables -L (선택적으로 -v 자세한 내용과 -n (이름을 확인하지 않으려면). 또한 다음을 사용하여 체인을 생성하고 삭제할 수 있습니다. -N y -X 각각 기본 정책을 설정합니다. -P.

처음부터 시작해야 할 때, 깨끗한 규칙 -F (플러시) 그리고 해당되는 경우 카운터도 있습니다. 테이블을 지정할 수 있다는 점을 기억하세요. -t 및 특정 체인; 예를 들어, iptables -F -t nat NAT를 위해.

규칙을 정의할 때 가장 일반적인 옵션은 간단합니다. -A 오리, -I 끼워 넣다, -R 대체하고 -D 지우다. 그런 다음 다음과 같은 선택자를 추가합니다. -p (규약), -s/-d (출발지/목적지), -i/-o (인터페이스) 및 대상 -j (예: 수락, 삭제 또는 거부).

라스 기본 정책 일치하는 규칙이 없는 경우 발생하는 상황을 정의합니다. 호스트의 일반적인 강화된 체계는 다음과 같습니다. INPUT DROP, FORWARD DROP, OUTPUT ACCEPT, 명시적으로 허용된 것 외에 들어오는 모든 것을 차단합니다. 그리고 나오는 것을 허용합니다.

확장자 일치(-m): TCP, UDP, ICMP, MAC, 상태 저장 및 다중 포트

Iptables는 일치하는 모듈을 사용하여 필터를 확장합니다. -m. TCP는 포트와 플래그로 튜닝을 허용합니다.: --dport/--sport y --syn 예를 들어 새로운 연결이 열리는 경우.

UDP의 경우, 출발지 및 목적지 포트를 제한할 수도 있습니다 . 대표적인 예로는 웹 서버에 80/443 포트를 열거나 53/UDP 포트를 통해 나가는 DNS 쿼리를 허용하는 것이 있습니다.

ICMP를 사용하면 --icmp-type 유형을 구별할 수 있습니다 (예: 에코 요청 y 에코 응답 (ping의 경우) 이는 ICMP에 대한 모든 가능성을 열어두지 않고도 진단을 허용하는 데 유용합니다.

모듈도 있습니다 mac MAC 주소로 필터링하려면 와 --mac-sourceIP에 의존하지 않고 동적 IP를 사용하는 관리형 컴퓨터에 방화벽에 ping을 보낼 수 있는 권한을 부여하려는 경우 유용합니다.

그리고 아마도 가장 중요한 것은 운영 수준에서, 모듈 state (또는 conntrack)와 함께 --state NEW, ESTABLISHED, RELATED이를 통해 이미 구축된 연결에서 응답이 허용되므로 필요한 규칙 수가 크게 줄어듭니다.

포트를 그룹화하려면 multiport 추가하다 --sports y --dports 쉼표로 구분된 목록 포함HTTP, HTTPS, SSH를 하나의 규칙으로 열면 편리합니다.

ACCEPT/DROP 이외의 대상: NAT 및 회사

iptables는 요청을 수락하거나 거부하는 것 외에도 사설 네트워크를 인터넷에 연결하거나 내부 서비스를 알리기 위해 주소와 포트를 재작성할 수 있습니다.

가장 무도회 (시 POSTROUTING 테이블에서 nat) 소스 IP를 방화벽의 출력 IP로 대체합니다. 공개 IP는 동적입니다 (DHCP). 이는 전체 LAN에 대한 일반적인 아웃바운드 NAT입니다.

SNAT (또한 POSTROUTING) 소스 IP/포트를 명시적으로 설정합니다. --to-source. 고정된 공용 IP를 사용하는 경우 사용됩니다. 그리고 번역을 정확하게 제어하고 싶습니다.

DTA (시 PREROUTING o OUTPUT) 목적지 IP를 변경합니다. --to-destination. 이곳은 유명한 "개항지"입니다: 공용 IP에서 트래픽을 수신하여 DMZ에 있는 서버(예: 192.168.1.2의 내부 웹사이트)로 리디렉션합니다.

  API를 위한 능동형 방어 및 취약점 스캐너

간단한 예: 두 네트워크 간 트래픽 필터링

두 서브넷 사이의 라우터/방화벽 역할을 하는 장비를 상상해보세요. 호스트 B만 C와 TCP를 통해서만 통신하도록 하려면, 테이블은 될 것입니다 filter 그리고 올바른 문자열은 다음과 같습니다. FORWARD트래픽이 장비를 통과하기 때문입니다.

먼저, FORWARD에 대해 기본 DROP 정책을 적용한 다음 TCP를 통해 B→C 트래픽(그리고 필요한 경우 C→B 트래픽)을 명시적으로 허용합니다. 이러한 "기본적으로 차단하고 최소한의 트래픽만 허용하는" 패턴이 강력한 보안 태세의 기초입니다.

캣워크에서의 일상적인 사례: 일반적인 규칙

예를 들어 두 개의 인터페이스가 있는 게이트웨이 eth1(LAN) 및 eth0(WAN)일반적으로 LAN에서 인터넷으로 패킷을 전달해야 합니다. 이를 위해 다음을 추가합니다. FORWARD -i eth1 -o eth0 -j ACCEPT, 그리고 역방향으로만 허용 ESTABLISHED,RELATED 와 -m state.

방화벽 자체에서 권한을 부여하는 것이 좋습니다. 나가는 연결에 대한 응답인 들어오는 트래픽 와 INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT, 항상 루프백을 허용합니다. INPUT -i lo -j ACCEPT.

LAN 컴퓨터가 검색할 수 있도록 하려면 아웃바운드 NAT를 적용하세요. -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to-source X.Y.Z.W (o MASQUERADE IP가 동적이면). 이렇게 하면 개인 IP가 공용 IP로 변환됩니다.

기본적인 보안 강화 조치는 발신 IP 주소가 부적절한 (자신의 공용 IP 주소, 사설 IP 범위 192.168.0.0/24, 127.0.0.0/8 등) WAN 패킷을 차단하는 것입니다. 이러한 패킷은 일반적으로 스푸핑을 나타내기 때문입니다.

방화벽에서 서비스를 노출하려면(예: SMTP 25, HTTP 80, HTTPS 443 또는 SSH 22) 다음을 수행할 수 있습니다. SYN 플래그가 있는 TCP 패킷을 해당 대상 포트로 허용합니다.. 대상 IP로 범위를 좁히려면 다음을 추가하세요. -d 서비스의 IP로.

일반적인 인프라 서비스에는 LAN 인터페이스의 DHCP (포트 68~67)와 소스별 필터링 시 권한 있는 리졸버의 DNS (UDP 53)가 포함됩니다. 이러한 포트를 통해 클라이언트는 IP 주소를 얻고 이름을 확인할 수 있습니다.

접근을 차단해야 하는 경우, 수신되는 SSH/Telnet 연결을 차단(DROP)하면 간단하게 차단할 수 있습니다. 또한 로컬 네트워크에서 차단된 IP 주소로 전송되는 메시지를 거부(REJECT)하여 발신자가 거부 알림을 받도록 할 수도 있습니다.

Red Hat/CentOS 시스템에 서비스 설치 및 관리

CentOS/RHEL 5/6을 사용하는 레거시 환경에서는 충분했습니다. 설치하다 yum -y install iptables오늘날 많은 새로운 배포판이 nftables를 선호하지만 iptables는 여전히 프로덕션 시스템과 어플라이언스에 존재합니다.

통합 SysV 서비스 규칙을 관리하고 유지할 수 있음: service iptables start|stop|restart y service iptables save, 저장 /etc/sysconfig/iptables부팅 시 활성화하려면: chkconfig iptables on 2~5레벨.

현대 시스템에서는 겉모습은 바뀌더라도 기본적인 아이디어는 변함없이 유지됩니다. 시스템 도구든 스크립트든 상관없이 규칙을 정의하고, 테스트하고, 재부팅 후에도 유지되도록 저장하는 것입니다 .

정확한 규칙 나열, 삭제 및 편집

규칙 번호로 상태를 보려면 미국 iptables -L --line-numbers -n -v. 이렇게 하면 인덱스별로 삭제할 수 있습니다. -D INPUT 3 또는 다음으로 교체 -R 혼란 없이.

선택적 삭제가 필요한 경우 접촉하는 체인이나 보드만 청소하세요. (-F FORWARD o -F -t nat). "안전망" 없이 원격 글로벌 스윕을 수행하지 마십시오. 그렇지 않으면 SSH 액세스 권한을 잃을 수 있습니다.

일반적으로는 먼저 SSH 세션을 허용하는 규칙을 설정하고 , 변경 사항을 점진적으로 적용하며, 롤백 기간을 두는 것이 좋습니다(예: 변경 사항을 적용하지 않을 경우 5분 후에 규칙을 복원하는 cron 작업).

iptables-save 및 iptables-restore를 사용한 지속성

설정을 저장하려면 iptables-save > /ruta/backup/iptables.rules 모든 테이블에 대한 기계 판독 가능 덤프를 생성합니다. 변경 관리 및 마이그레이션에 이상적입니다.

  Windows에서 Zsh와 Oh My Zsh를 사용하여 WSL2 자동화를 완벽하게 구현하세요.

충전하려면 다음을 사용하세요. iptables-restore < /ruta/backup/iptables.rulessystemd, init 스크립트 또는 cron 작업을 사용하여 부팅 복원을 자동화할 수 있습니다. @reboot재부팅 후에도 방화벽이 활성 상태를 유지하도록 보장합니다.

여기에 좋은 운영 관행을 추가하세요. 적절한 권한으로 실행됩니다, 외부에 파일을 저장하세요 /tmp 그리고 놀라움을 피하기 위해 환경(올바른 인터페이스 및 서브넷)에 맞춰 정렬합니다.

DMZ에 대한 자세한 설명: 완전하고 현실적인 사례

Linux 방화벽이 "단일 사용자" 모드(NAT 미사용)로 라우터에 연결되어 있으며, 세 개의 인터페이스( eth0(LAN 192.168.1.1/24), eth1(DMZ 192.168.2.1/24), eth2(DHCP로 IP 할당된 WAN)) 를 가지고 있다고 가정합니다 . DMZ에는 Apache 웹 서버 (192.168.2.2)와 FTP 서버(192.168.2.3)가 호스팅되어 있습니다.

정책 목표: DMZ에서 인터넷으로 HTTP/HTTPS 및 FTP 접속을 허용하고 , LAN에서 방화벽으로의 SSH 관리 접속을 허용하며, LAN에서 웹 브라우징(HTTP/HTTPS), FTP를 통한 파일 전송 및 DNS 확인을 허용합니다. 그 외 모든 접근은 차단됩니다.

대체로 말해서: 필터/FORWARD 응답과 함께 LAN→WAN 전송을 허용합니다. WAN→DMZ는 게시된 포트에만 해당 와 ESTABLISHED,RELATED 답변을 위해. nat/프리라우팅, DNAT를 적용하여 서비스를 게시합니다. nat/포스트라우팅, LAN/DMZ 출력을 위한 SNAT/MASQUERADE.

오프닝의 예: DNAT 80/443에서 192.168.2.2로, 21/20(모드에 따라 다름)에서 192.168.2.3으로 해당되는 것과 함께 FORWARD 해당 포트를 허용하세요. FTP(액티브/패시브)의 제어 및 데이터 채널을 보호하거나 패시브 범위를 제한하고 이를 방화벽에 반영하세요.

LAN의 경우: 80, 443, 21, 53으로 나갈 수 있습니다 그리고 그 반환은 아웃바운드 NAT를 적용합니다. POSTROUTING. 방화벽에서 권한을 부여합니다. 192.168.1.0/24 서브넷에서만 들어오는 SSH WAN에서 원치 않는 액세스를 차단합니다.

보안을 잊지 마세요. WAN에서 유효하지 않은 범위 (사설, 루프백, 자체 공용)로 연결을 해제하고 필요한 정보만 로깅하세요. 제한적인 기본 정책과 최소한의 개방으로 노출 위험을 최소화할 수 있습니다.

모범 사례와 운영상의 요령

항상 계획을 세우고 작업하세요. 허용하는 사항과 그 이유를 문서화하고 , 간단한 다이어그램으로 예상되는 흐름을 확인하고, 중복을 피하기 위해 규칙을 올바른 순서로 적용하세요.

헤드와 함께 모듈의 조합을 사용하세요: 응답에 대한 state/conntrack, tcp con --syn 개구부에서, 그리고 multiport 그룹으로이렇게 하면 작업이 간소화되고 불일치의 위험이 줄어듭니다.

자주 변경되는 환경의 경우 기능별로 규칙을 분리하는 것을 고려하세요. 맞춤형 체인 (함께 -N) INPUT/OUTPUT/FORWARD에서 호출하므로 조각을 유지하거나 뒤집는 것이 더 깔끔합니다.

많은 배포판에서 nftables로의 전환이 진행 중이지만, 플랫폼/제품에서 iptables를 사용하는 경우 이러한 구성 요소를 철저히 이해하면 완벽한 제어가 가능합니다 . 그리고 마이그레이션을 진행하더라도 nftables에서 동일한 개념 구조를 쉽게 이해할 수 있을 것입니다.

지금까지 다룬 내용을 바탕으로 이제 프로덕션 환경에서 iptables를 배포하고 유지 관리하는 데 필요한 탄탄한 기반을 갖추게 되었습니다. 아키텍처(테이블, 체인, 흐름)를 이해하고, 필수 명령어를 능숙하게 다룰 수 있으며, NAT를 구현하고 DNAT/SNAT를 사용하여 패킷을 배포할 수 있고, 안전한 DMZ를 설정하는 방법도 알게 되었습니다 . 이제 남은 것은 특정 요구 사항에 맞게 iptables를 조정하고, 정기적으로 감사를 수행하며, 네트워크 모델처럼 명확한 규칙을 유지하는 것입니다.