Linux

[Linux] iptables

thdwldud 2026. 4. 6. 13:04

iptables 사용하기

  • iptables를 이용하여 정책을 설정할 때 가장 중요한 것은 실질적 룰(Rule)에 해당하는 매치(Match)와 타깃(Target)
    • 매치는 iptables가 규칙 타깃에 의해 명시되는 동작에 따라 패킷을 처리하기 위해서 만족해야 하는 조건
    • 타깃은 iptables에서 패킷이 규칙과 일치할 때 취하는 동작
  • TCP 패킷에만 적용하려면 -p(--protocol) 매치를 사용해서 적용, -p 옵션으로 프로토콜을 명시하지 않으면 모든 프로토콜(tcp, udp, icmp)에 해당 정책에 적용됨
💡 firewalld 중단하기
RHEL 7버전부터는 iptables 기반의 동적 관리 방화벽인 firewalld가 기본적으로 운영되고 있음. 따라서 ‘iptables -L’ 명령을 실행하면 기본 사슬(chain) 이외에 firewalld가 생성한 많은 사슬이 존재하는 것을 확인 가능

iptables 명령을 직접 사용하면 다음 명령을 실행해서 firewalld의 동작을 중지시킴
# systemctl stop firewalld

firewalld의 동작을 재부팅 후에도 중지시키려면 다음의 명령을 추가로 실행
# systemctl disable firewalld

 

iptables [-t table] action chain match [-j target]
  • 테이블의 기본 설정은 Filter이고, 다른 테이블 지정할 때는 -t 옵션을 사용
  • 액션은 사슬 지정, 설정, 제어할 때 사용. 주로 -N, -A와 같은 대문자 옵션을 사용
  • 사슬을 설정하고 하는 사슬을 명기하면 되는데 INPUT, OUTPUT과 같이 입력. 대소문자 구분
  • 실질적인 룰에 해당하는 매치와 타깃을 지정하면 됨
  • 매치는 -d, -p와 같은 소문자 옵션을 사용해서 설정
  • 타깃은 -j(--jump)옵션을 사용하여 설정

 

[주요 액션]

Action 설명
-N
--newchain
새로운 사용자 정의 사슬을 만듦
-X
--delete-chain
비어있는 사슬을 제거
기본 사슬은 제거할 수 없음
-P
--policy
사슬의 기본 정책을 설정
-L
--list
현재 사슬의 규칙을 나열
-S
--list-rules
현재 사슬의 규칙을 적용한 명령 형태로 출력
iptables-save 명령으로 저장되는 형태로 출력
-F
--flush
사슬로부터 규칙을 제거
-Z
--zero
사슬내의 모든 규칙들의 패킷과 바이트의 카운트를 0으로 만듦
-A
--append
사슬에 새로운 규칙을 추가
해당 사슬에 맨 마지막 규칙으로 등록
-I
--insert
사슬에 규칙을 맨 첫 부분에 삽입
룰 넘버를 사용하여 특정 부분에 삽입할 수 있음
-R
--replace
사슬의 규칙을 교환
-D
--delete
사슬의 규칙을 제거

 

[주요 매치]

Match 설명
-s
--source, --src
출발지 IP 주소나 네트워크와 매칭
도메인, IP 주소, 넷마스크값을 이용하여 표기
-d
--destination, --dst
목적지 IP 주소나 네트워크와 매칭
도메인, IP 주소, 넷마스크값을 이용하여 표기
-p
--protocol
특정 프로토콜과 매칭
TCP, UDP, ICMP와 같은 이름을 사용하고 대소문자는 구분하지 않음
이 옵션을 사용하지 않으면 모든 프로토콜이 대상이됨
-i
--in-interface
입력 인터페이스와 매칭
-o
--out-interface
출력 인터페이스와 매칭
! 아닌(NOT)의 의미로 사용하는데, 특정 매칭을 제외할 때 사용
-m
--match
좀 더 세밀하게 제어할 때 사용하는 매칭 옵션
--state 연결 상태와 매칭
INVALID, ESTABLISHED, NEW, RELATED를 사용
--string 특정한 패턴과 매칭

 

[기타 옵션]

옵션 설명
-n
--numeric
다른 옵션과 같이 사용되며 출력 정보를 숫자값으로 표현
-v
--verbose
다른 옵션과 같이 사용되며 패킷, 바이트 수 등을 추가하여 정보를 자세히 출력
--line-number 정책 앞에 번호를 붙여 출력하며 삭제나 삽입할 때 유용

 

[주요 타깃 (-j, --jump)]

Target 설명
ACCEPT 패킷을 허가하는 것으로 본래 라우팅대로 진행
DROP 패킷을 거부하는 것으로 더이상 어떤 처리도 수행되지 않고 버림
LOG 패킷을 syslog에 전달하여 기록
일반적으로 /var/log/messages에 저장
REJECT 패킷을 버리고 동시에 적당한 응답 패킷을 전달
TCP인 경우 TCP 재설정(Reset) 패킷, UDP인 경우 ICMP 포트 도달 불가(Port Unreachable)메시지 전송
RETURN 호출 사슬 내에서 패킷 처리를 계속 진행

 

[사용 예]

  • 기본 테이블인 Filter의 모든 사슬에 설정된 정책 정보를 출력
iptables -L
  • 기본 테이블인 Filter의 모든 사슬에 설정된 정책 정보(포트, 프로토콜 등)를 숫자값으로 출력
iptables -nL
  • 기본 테이블인 Filter의 모든 사슬에 설정된 정책 정보를 패킷, 바이트 등을 추가하여 자세히 출력
iptables -vL
  • 기본 테이블인 Filter의 INPUT 사슬에 설정된 정책 정보를 출력
iptables -L INPUT
  • NAT 테이블의 모든 사슬에 설정된 정책 정보를 출력
iptables -t NAT -L
  • 기본 테이블인 Filter의 모든 사슬에 설정된 정책을 모두 제거
iptables -F
  • 기본 테이블인 Filter의 INPUT 사슬에 설정된 정책을 모두 제거
iptables -F INPUT
  • INPUT 사슬에 발신지가 192.168.12.22이고 도착지가 localhost인 패킷을 거부(DROP) 시키는 정책을 추가
iptables -A INPUT -s 192.168.12.22 -d localhost -j DROP
  • INPUT 사슬에 발신지가 192.168.1.0 네트워크 대역에 속한 호스트들을 허가하는 정책을 추가
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
  • INPUT 사슬에 발신지가 192.168.5.13으로부터 들어오는 ICMP 패킷을 거부
iptables -A INPUT -s 192.168.5.13 -p ICMP -j DROP
  • INPUT 사슬에 발신지가 192.168.5.13으로부터 패킷 중에 ICMP 프로토콜을 제외한 모든 프로토콜을 거부
iptables -A INPUT -s 192.168.5.13 ! -p ICMP -j DROP
  • INPUT 사슬에 설정한 관련 정책을 삭제
iptables -D INPUT -s 192.168.5.13 -p ICMP -j DROP
  • 기본 테이블인 Filter의 INPUT 사슬에 설정된 정책 정보의 앞 부분에 번호를 붙여서 출력
iptables -L INPUT --line-number
  • INPUT 사슬에 설정한 두 번째 정책을 삭제
iptables -D INPUT 2
  • www.posein.org의 웹 사이트에 접속을 차단
iptables -A OUTPUT -p tcp -d www.posein.org --dport 80 -o eth0 -j DROP
  • 공인 IP 주소를 공유하여 SNAT를 설정했을 경우에 사설 IP 대역 사용자들의 www.posein.org의 웹 사이트에 접속을 차단
iptables -A FORWARD -p tcp -d www.posein.org --dport 80 -o eth0 -j DROP