본문 바로가기

기타 잡 코딩

iptables 명령어란?

iptables 명령어에 대해

이 페이지는 linux의 명령어인 iptables에 대한 글입니다. 방화벽 설정, 포워딩 등에 사용되는 iptables 에 대해서 알아봅니다.

사용법

iptables는 리눅스의 패킷처리 과정에서 ipv4 주소를 가진 패킷의 경로 설정을 담당하고 있습니다.

라우팅 테이블을 변경하여 특정 ip를 차단하거나, 포트포워딩을 하는 등의 기능을 제공할 수 있습니다.

리눅스에서 기본적으로 5가지 라우팅 테이블을 사용하고 있습니다.

  • Filter
  • NAT
  • Mangle
  • RAW
  • Security

우리는 이 중에서 Filter와 NAT 테이블을 주로 사용할 것입니다.

Filter 테이블은 기본적인 패킷 필터링을 담당합니다.

각 테이블에는 Chain이라는 규칙 모음이 존재합니다.

Filter 테이블에는

  • INPUT
  • OUTPUT
  • FORWARD

Chain이 존재합니다.

NAT 테이블에는

  • INPUT
  • OUTPUT
  • PREROUTING
  • POSTROUTING

Chain이 있습니다.

패킷은 위 그림의 Chain들을 거쳐 Match되는 규칙에 따라서 특정 정책을 취하게 되는 데 이를 TARGET이라고 합니다.

TARGET에는 외부에서 내부로 오는 패킷의 목적지를 수정하는 DNAT, 그 반대인 SNAT, MASQUEARDE가 있습니다.

MASQUERADE는 “내부 사설 IP의 PC들이 외부 인터넷이 연결 가능하도록 해주는 기능” 이라고 합니다. 이에 대해서는 추후 더 조사할 예정입니다.

실제 적용

sudo iptables -nvL

현재 적용된 규칙들을 봅니다. 기본 테이블은 Filter입니다

iptables -nvL -t nat

NAT 테이블의 규칙들을 봅니다.

특정 규칙을 삭제하고 싶을 때는

-D option을 사용합니다.

sudo iptables -t nat -D PREROUTING 2

NAT 테이블의 PREROUTING Chain에서 2번째 규칙을 삭제합니다.

규칙의 순번을 알고 싶을 때는 --line-number를 사용합니다.

sudo iptables -nvL -t nat --line-number

기본적인 사용법은 위와 같습니다.

우리 상황에서 필요한 로컬서버의 포트포워딩은 다음과 같은 명령어로 수행합니다.

sudo iptables -t nat -I PREROUTING -p tcp --dport 4554 -j DNAT --to-destination 169.254.152.185

NAT 테이블의(-t) PREROUTING에 규칙을 삽입(-I)합니다. tcp 프로토콜로 들어오는(-p) 패킷이 4554 포트로 들어오고자 할 때 이를 169.254.152.185 로 DNAT(외부에서 내부에서 패킷을 보낼때 패킷의 목적지를 수정) 하여 보냅니다.

결론

iptables는 리눅스 서버로 오는 패킷의 경로를 설정하는 명령어입니다. 리눅스의 기본 라우팅 테이블에는 NAT, Filter, Mangle, RAW, Security 가 있고, 각 테이블에는 Chain들이 존재합니다. iptables의 각 명령어를 통해 특정 테이블의 특정 Chain에 패킷을 조작하는 규칙을 삽입/삭제 할 수 있습니다.

실제 로컬 서버의 iptables 규칙을 삽입함으로써 외부에서 카메라의 RTSP streaming 영상을 받아볼 수 있습니다.