CyberRanger

[Linux 보안] iptables - 리눅스 방화벽 본문

정보보안기사/시스템 보안

[Linux 보안] iptables - 리눅스 방화벽

CyberRanger 2024. 8. 5. 23:02

iptables: 리눅스에서 방화벽 정책을 수립할 수 있는 도구.

화이트 리스트 / 블랙 리스트 필터링 정책 설정 가능.

 

 


1. iptables 기본 동작

· 패킷에 대한 동작은 체인의 위 -> 아래로 각 규칙에 대해 검사.

· 패킷이 규칙과 일치하면 ACCEPT, DROP 등 수행.

· 일치하는 규칙이 없으면 기본정책(Policy)대로 수행.

 

* 명령어 기본 형식은 다음과 같음.
iptables -A INPUT -s 0.0.0.0/0 j DROP   (시스템 내부로 들어오는 패킷 전체 차단)

 

 

(1) 먼저 기본 정책을 만든다. (화이트 리스트 필터링 - 전체 차단 후 선택적 허용)

iptables -P INPUT -j DROP

 

(2) 이후 규칙을 추가하며 사용한다.

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

 

· 정책/규칙 옵션

옵션 설명
-P (policy) 기본 정책 설정
-I (insert) 규칙을 맨 위에 추가
-A (append) 규칙을 맨 아래에 추가
-D (delete) 규칙 삭제
-X (delete chain) 체인 삭제

 

 

· 체인(Chain)의 종류

체인 설명
INPUT 시스템으로 들어오는 패킷
OUTPUT 시스템에서 외부로 나가는 패킷
FORWARD 자신을 통과하는 모든 패킷

 

 

· match 옵션

옵션 설명 사용 예시
-s 출발지 -s 192.168.0.2
-d 도착지 -d 192.168.0.3
-p 프로토콜 -p tcp --dport 80 --syn
-i input 인터페이스 -i eth0
-o output 인터페이스 -o eth0
-j 패킷을 어떻게 처리할 것인지 -j DROP
-m 특정 모듈과 매치(state, connlimit) -m connlimit --connlimit -above 10
-m state --state ESTABLISHED

 

 

· state 모듈

옵션 설명
NEW 새로운 연결 요청
ESTABLISHED NEW 상태 이후에 연결된 패킷
RELATED 기존 연결과 관련된 패킷
INVALID 비정상적인 접근

-m state --state ESTABLISHED,RELATED -j ACCEPT

 

 

· connlimit 모듈

-m connlimit --connlimit -above 10 -j DROP

(10개 이상의 연결은 DROP)

 

 

· iptables 패킷 처리 방법

옵션 설명
ACCEPT 받아들임
DROP 패킷을 버리고 응답하지 않음.
REJECT 패킷을 버리고 거부로 응답 (ICMP Unreachable)
LOG 로그에 기록

* LOG 옵션

-j LOG --log -prefix"접두사"

 

 

 


2. iptables 사용 예제

구분 예제
전체 접근차단 · iptables -A INPUT -s 0.0.0.0/0 -j DROP
특정 IP 접근 허용 · iptables -A INPUT -s 10.0.0.1 -j ACCEPT
HTTP, HTTPS 접근 허용 및
tcp 프로토콜 접근 허용
· iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport 80 -j ACCEPT
· iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport 443 -j ACCEPT
state 옵션 · iptables -I INPUT -d 10.0.0.1 -m state --state ESTABLISHED,RELATED -j ACCEPT
· iptables -I INPUT -d 10.0.0.1 -m state --state RELATED -j ACCEPT
· iptables -I INPUT -d 10.0.0.1 -m state --state INVALID -j DROP
연결 개수 제한 · iptables -I INPUT -d 10.0.0.1 -p tcp --dport 80 -m connlimit --connlimit -above 10 -j DROP
· iptables -I INPUT -d 10.0.0.1 -p tcp --dport 443 -m connlimit --connlimit -above 10 -j DROP
로그 기록 예제
(비정상적인 패킷)
· iptables -A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log -prefix "[Forged SYN Packet]"

· 상태가 NEW이면서(--state NEW), SYN 플래그가 아닌(! --syn) 비정상적인 패킷 차단(-j DROP)
· 새로운 tcp 연결을 위해서는 3-way handshaking이 필수적임.
· 위 규칙은 새로운 tcp 연결에 SYN 플래그가 아닌(3-way handshaking을 하지 않는) 패킷을 탐지함(비정상적 패킷)