본문 바로가기
Hack/Network

iptables와 netfilter에 대하여

by Becoming a Hacker 2022. 8. 23.
반응형

netfilter

netfilter란 Kernel에 존재하는 Network 관련 Framework로써 원하는 지점에서 Packet 제어를 위한 다섯 가지 Hook(지점)을 제공합니다.

 

다섯 가지 Hook은 지점에 따라 PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING 으로 불립니다.

 

각각의 Hook에 대한 간단한 설명은 다음과 같습니다.

 

PREROUTING

Network Interface를 통해 들어온 Packet을 가장 먼저 처리하는 Hook

외부 주소(IP)로 도착한 Packet을 내부 주소(IP)로 변경하기 위해 DNAT(Destination NAT) 사용 가능

 

INPUT

Network Interface를 통해 들어온 Packet 중 실제 처리가 필요한 Packet을 처리하는 Hook 

 

OUTPUT

Network Applications에서 처리 후 밖으로 나가는 Packet을 처리하는 Hook

 

FORWARD

다른 Host로 전달되는 Packet을 처리하는 Hook

 

POSTROUTING

Network Interface를 통해 Packet이 빠져나가기 직전에 처리하는 Hook

내부 주소(IP)를 외부 주소(IP)로 변경하기 위해  SNAT(Source NAT)과 MASQUERADE 사용 가능

※ SNAT과 MASQUERADE는 동일한 역할을 하지만, IP를 명시해줘야 하는 SNAT과 달리 MASQUERADE는 IP를 명시하지 않더라도 Network Interface를 통해 자동으로 IP를 할당함

 

iptables

iptables란 Linux에서 주로 사용되는 방화벽 도구로 Linux Kernel의 Networking Stack에서 netfilter를 이용하여 Packet을 제어할 수 있도록 도와줍니다.

 

구조

$ sudo iptables [-t Table] [Action] [Chain] [Match] [-j Target]

 

Table

filter (Default) : Rule에 따라 Packet을 걸러내거나 통과시키는 역할을 함.

※ INPUT, FORWARD, OUTPUT 사용 가능

 

nat : 외부 주소를 내부 주소로 변경하는 역할(SNAT) 또는 내부 주소를 외부 주소로 변경하는 역할(DNAT)을 함.

※ POSTROUTING, PREROUTING, OUTPUT 사용 가능

 

mangle : Packet 내 특정 값(TTL) 또는 TOS 값을 변경하는 역할을 함.

※ POSTROUTING, PREROUTING, INPUT, FORWARD, OUTPUT 사용 가능

 

raw : Netfilter의 Connection Tracking System과 독립적으로 동작하는 역할을 함.

※ PREROUTING, OUTPUT 사용 가능

 

Action

-A : 정책 추가 (Append)

-I : 정책 삽입 (Insert)

-D : 정책 삭제 (Delete)

-R : 정책 교체 (Replace)

-F : 모든 정책 삭제 (Flush)

-L : 정책 확인 (List)

 

Chain

INPUT

OUTPUT

FORWARD

PREROUTING

POSTROUTING

 

Match

-s : Source 매칭

-d : Destination 매칭

-p : Protocol 매칭 (ex: TCP, UDP)

-i : 입력 Interface 지정

-o : 출력 Interface 지정

 

Target

ACCEPT : Packet 허용

DROP : Packet 버리기

REJECT : Packet을 버린 뒤, 적절한 응답 패킷 전송

LOG : Packet을 syslog에 기록

SNAT --to [주소] : Source IP를 [주소]로 변환

DNAT --to [주소] : Destination IP를 [주소]로 변환

RETURN : 호출 체인 내에서 Packet을 처리

MASQUERADE : POSTROUTING Chain의 nat Table에서만 사용 가능하며, 동적으로 IP 주소 매핑

 

자주 사용되는 예제

정책 목록 및 번호 확인

$ sudo iptables -L --line-numbers

 

INPUT Chain의 1번째 정책 삭제

$ sudo iptables -D INPUT 1

 

INPUT Chain 정책 전체 삭제

$ sudo iptables -F INPUT

 

특정 IP로부터 들어오는 Packet 허용 정책

$ sudo iptables -I INPUT -s xxx.xxx.xxx.xxx -j ACCEPT

 

특정 IP로부터 들어오는 Packet 차단 정책

$ sudo iptables -A INPUT xxx.xxx.xxx.xxx -j DROP

 

eth1 Network interface로 나가는 Packet에 MASQUERADE 사용

$ sudo iptables -n nat -A POSTROUTING -o eth1 -j masquerade

 

 

기타 명령어 참조

 

 

iptables(8) - Linux man page

iptables(8) - Linux man page Name iptables - administration tool for IPv4 packet filtering and NAT Synopsis iptables [-t table] -[AD] chain rule-specification [options] iptables [-t table] -I chain [rulenum] rule-specification [options] iptables [-t table]

linux.die.net

 

댓글