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 영상을 받아볼 수 있습니다.
'기타 잡 코딩' 카테고리의 다른 글
슈퍼마리오 1을 플레이하는 AI를 만드는 방법(4) (1) | 2021.07.11 |
---|---|
슈퍼마리오 1을 플레이하는 AI를 만드는 방법(3) (0) | 2021.07.10 |
슈퍼마리오 1을 플레이하는 AI를 만드는 방법(2) (0) | 2021.07.09 |
슈퍼마리오 1을 플레이하는 AI를 만드는 방법 (0) | 2021.07.07 |
폴란드 테트리스를 플레이하는 AI를 만드는 방법(2) (0) | 2021.07.06 |