OS/Linux

linux iptables 구조 및 명령어

엔지니어1 2024. 3. 19. 14:27

iptables의 구조를 이해하고 네트워크 트래픽을 제어하는 방법을 알아보겠습니다.

먼저 iptables는 IP주소, 포트번호, 프로토콜 유형, 패킷 컨텐츠 등 사용자 환경에 따라 트래픽을 차단 및 허용할 수 있습니다.

 

iptables의 구조

iptables의 구조는 table, chain이 있고 table을 먼저 소개하겠습니다.

1) table

iptables는 방화벽 규칙을 네트워크 트래픽을 처리하는 방법을 정의한 테이블이 존재하며,

각 테이블은 틍정 종류의 패킷 처리 규칙을 담당합니다.

1-1) filter

이 테이블을 가장 자주 사용하며, 패킷을 허용할지 말지 결정합니다.

iput, output, forward 체인을 사용합니다.

1-2) NAT

NAT규칙을 처리하는 테이블입니다.

prerouting, postrouting, output 체인을 사용합니다.

1-3) Mangle

패킷의 우선순위와 같은 패킷의 특정 속성을 변경합니다.

input, output, forward 체인을 사용합니다.

1-4 Raw

패킷이 다른 테이블에서 처리되기 전 초기 단계를 처리하는 규칙 테이블입니다.

prerouting, output 체인을 사용합니다.

 

4가지의 테이블 구조에 작성한 각각의 체인들을 설정할 수 있습니다.

다음은 체인에 대해 설명하겠습니다.

 

2) chain

각 테이블은 여러 개의 체인을 가질 수 있고, 체인은 패킷이 언제 규칙에 따라 처리될지 결정합니다.

2-1) input

시스템으로 들어오는 패킷을 처리합니다.

2-2) output

시스템에서 나가는 패킷을 처리합니다.

2-3) forward

시스템을 통과하는 패킷, 즉 라우터 역할을 하는 경우의 패킷을 처리합니다.

다른 컴퓨터로부터 받아 다른 컴퓨터로 전달되는 데이터의 규칙을 설정합니다.

2-4) prerouting, postrouting

NAT 테이블에서 사용되며, 주소 변환 전 후 패킷 처리 규칙을 정의합니다.

 

3) iptables 명령어

iptables는 등록 순서에 영향을 받아 먼저 등록한 정책이 우선순위가 높습니다.

iptables [-t table] [action] [chain] [match] [-j target]

으로 iptagles를 사용하고 명시되는 동작에 따라서만 패킷을 처리합니다.

3-1) action

action 설명
-A 규칙 추가
-D 규칙 삭제
-I 순서 지정
-L 규칙 목록 출력
-F 규칙 초기화
-N 새로운 사용자 정의
-X 비어있는 체인 제거, 기본 체인 제거불가
-P 체인 기본 정책 설정

 

3-2) match

match 설명
-s 출발지 source를 뜻함
-d 목적지 destination을 뜻함
-P 특정 프로토콜과 매칭
-i 입력 인터페이스와 매칭
-o 출력 인터페이스와 매칭
# -p 옵션 뒤에는 추가 옵션을 붙여야합니다.
--sport # 발신지의 포트
--dport # 목적지의 포트

 

3-3) target

target 설명
ACCEPT 패킷을 허가함
DROP 패킷을 거부함
LOG 패킷을 로그에 전달하여 기록하여 시스템로그에 저장
REJECT 패킷을 버리고 응답 패킷 전달

 

3-4) 종합 예제문

설정 내용 출력
iptables -nL

TCP 22 포트를 열기
iptables -A INPUT -p tcp --drpot 22 -j ACCEPT

특정 네트워크 인터페이스를 통해 들어오는 트래픽 규칙 지정
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT

# 특정 네트워크 인터페이스를 통해 나가는 트래픽 규칙 지정
iptables -A OUTPUT -o eth0 -p tcp --dport 80 -j ACCEPT

# localhost 접속 허용
iptables -A INPUT -i lo -j ACCEPT

# 순서 지정하기
iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT

# 특정 ip차단
iptables -A INPUT -s 111.222.33.44 -j DROP

# 포워딩
iptables -A PREROUTING -t nat -p tcp --dport 80 -j REDIRECT --to-port 8080

# 특정 테이블 리스트 확인
iptables -t nat -L

# 규칙 삭제
iptables -D INPUT 1 -p tcp --dport 443 -j ACCEPT

# 체인의 기본 정책 정의
iptables -P INPUT DROP

# 모듈 사용
iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED -j ACCEPT
# -m state : state 모듈을 사용한다는 의미
# --state NEW,ESTABLISHE : 패킷의 연결 상태를 기준으로 필터링을 하겠다는 조건을 나타냄

# 설정 내용 초기화
iptables -F

 

3-5) 모듈

-m 명령어로 모듈을 지정해줍니다.

# conntrack 모듈 패킷의 연결 추적 상태를 기반으로 필터링 한는 모듈입니다. state보다 더 세밀한 관리가 가능합니다.
-m conntrack --ctstate NEW,ESTABLISHED
# 새로운 연결을 시작하는 패킷이나 이미 화립된 연결의 패킷을 선택할 수 있습니다.
# 이 밖에도 RELATED, INVALID, UNTRACKED, SNAT, DNAT의 옵션이 있습니다.

# state 모듈 conntrack 모듈과 유사하게 패키스이 연결 상태를 기반으로 필터링 합니다.
-m state --state RELATED,ESTABLISHED
# RELATED 상태는 새 연결이 기존의 확립된 연결과 관련 있음을 나타냅니다.
# 이 밖에도 NEW, INVALID 옵션이 있습니다.

# 공통적으로 
# NEW : 새로운 연결을 위한 패킷
# ESTABLISHED : 기존 연결의 일부로 확인된 패킷
# RELATED : 기전 연결과 관련된 새로운 연결을 위한 패킷. (FTP의 데이터 전송과 같은 경우)
# INVALID : 추적할 수 없는 상태
# UNTRACKE : 연결 추적 시스템에 의해 추적되지 않는 패킷
# SNAT : 소스 NAT 후의 패킷 상태
# DNAT : 목적지 NAT 후의 패킷 상태
# 를 나타냅니다.

# tcp 모듈

# udp 모듈

# icmp 모듈 icmp 프로토콜을 사용하는 패킷, 특히 echo request 메시지를 필터링합니다.
-m icmp --icmp-type echo-request

# limit 모듈 지정된 한도 내에서만 패킷을 허용하는 모듈입니다.
-m limit --limit 1/s --limit-burst 5
# 초당 1개 패킷을 허용하되, 최대 5개까지는 버스트를 허용한다는 의미입니다.

# multiport 모듈 여러 포트에 대한 규칙을 지정합니다.
-m multiport --dports 22,80,443