본문 바로가기

Information Security/Security Solution

Iptables

반응형

* Iptables : 리눅스 커널(Kernel, OS의 주요 기능을 수행하는 모듈)에 내장된 netfilter 기능을 rule 기반으로 패킷 필터링하여 사용자 공간에서 제어하는 오픈소스 방화벽

- 기업 차원은 대부분, 거액을 들인 CC(Common Criteria)을 받은 실제 어플라이언스 형태(전문 전용 장비로 구현)로 이용하나, 오픈소스 FW는 비용이 들지 않는 직접 설정형태의 FW

- 기본 FW와 동일하게 상위 번호(Num 1)부터 순차적 수행 처리

iptables 기능 설명
Network Address Translation * 네트워크 주소 변환 기능
패킷 레벨에서의 로깅 기능 * Logging
확장모듈 기반 다양한 기능 제공 *
상태 추적 기능 제공 * Connection Tracking 또는 Stateful Inspection 기능 제공
- FW을 통과하는 모든 패킷의 연결 상태를 Tracking 하여, 해당 정보를 메모리에 기억, 이후 기존 연결을 가장하는 접근 탐지 시, 비교하여 적합하지 않을 시 거부하는 기능


- 모든 송수신 패킷을 기록, 검사하며, 접근 차단과 차단 시, 패턴 매칭에서 제외되어 성능상의 장점이 존재


- Stateful Inspection의 경우 이스라엘 Checkpoint 사에서 최초 개발, 현대의 대부분 FW에서 기본적으로 제공하는 기능



* 상태 유형
1) NEW : 상태추적 테이블에 연결 정보를 가지고 있지 않은, 최초로 들어온 패킷
- TCP의 경우 SYN 패킷


2) ESTABLISHED : 연결된 이후, 송수신 되어 상태추적 테이블에 연결 정보를 가지는 패킷


3) RELATED : 연결 시, 포트 정보가 서비스 수행 중에 새롭게 추가되는 경우로, 연관된 연결 정보를 가진 패킷
- 대표적으로 FTP 제어 채널(21/TCP) 형성 후, 데이터 채널(20/TCP)로 송수신 하게 되는 때, 데이터 채널로 송수신 되는 패킷들은 모두 RELATED 상태가 됨



* Protocol 별 상태 유형
1) TCP 상태 : FW에서 패킷 확인 시, SYN(최초 NEW 상태), SYN+ACK(응답 수신하여 ESTABLISHED 상태)에서 마지막 ACK가 보이기 전 까지 ESTABLISHED 상태 유지


2) UDP 상태 : 비연결 프로토콜로, 연결 정보가 없기 때문에, UDP 수신 시, 최초 패킷은 NEW, 내부적으로 TTL(임의 시간)동안 ESTABLISHED 상태가 유지됨

 

 

* Iptables 명령어 구조 : #iptables [-t table] [action] [chain] [Rule] [-j target]

옵션 설명 유형 설명
Table * iptables가 제공하는 기능
(Rule Table)


- 명시하지 않을 시, Default는 Filter 테이블
filter 기본 테이블로 방화벽 관련 작업 수행
nat 새로운 연결을 생성하는 패킷 참조
mangle TTL, ToS 변경 같은 특수 규칙을 적용
raw 연결 추적 기능을 자세히 설정, 제외
Action * iptables의 규칙을
추가 / 삭제/ 관리
(조합하여 사용 가능)
-N 새로운 사용자 정의 Chain 생성
-X 비어 있는 Chain 제거
-P Policy로, Chain의 기본 정책 설정
"-P [체인] [ACCEPT | DROP | REJECT]" 형식으로,
해당 체인의 모든 룰에 매치되지 않을 시, 적용되는 정책


* 종류
- Negative 정책 : default policy를 DROP/REJECT로 설정 후, 허용할 부분만 ACCEPT 하는 방식


- Positive 정책 : default policy를 ACCEPT로 하고, 차단할 부분만 DROP/REJECT 하는 방식
-L List로, 현재 Chain의 규칙 나열
-F Flush로, 해당 Chain으로 부터 모든 규칙 제거
-A Append로, Chain의 제일 마지막에 새로운 규칙 추가
-I  Insert로, 해당 Chain의 첫 행에 룰을 추가
"-I 체인 n" 형식으로 지정 시, 행번호 n에 룰 추가 가능
-R 규칙 교환
-D Delete로, 규칙 제거
"-D 체인 룰" 또는 "-D 체인 n" 형식으로 룰/행 지정 삭제
Chain * 패킷이 이동하는 경로
(방향성)을 설정
INPUT 호스트로 향하는(방화벽을 최종 목적지로 하는) 모든 패킷
FORWARD 라우팅되는 로컬이 아닌 모든 패킷
- 방화벽을 별도 서버로 구성하여 서비스 할 시 사용
OUTPUT 호스트에서 상대에 보내는(방화벽을 최초 출발지로 하는) 모든 패킷
Rule * iptables에서 매칭 할 조건 -s, -d 출발지/도착지 IP
- 명시하지 않을 시, any IP (모두)


ex) -s 192.168.159.0/24 또는 -s 192.168.159.131
--s/dport 출발지/도착지 port


ex) --sport 23 (23 포트)
ex) --sport 1024: (1024 이상 포트)
ex) --dport :65535 (65535 이하 포트)
ex) --dport 1:1023 (1~1023 포트)
-p 단순 프로토콜 매칭 (세밀한 설정 없이 지정)
--icmp -type [메세지타입] -p에서 icmp만 설정할 수도 있지만, 디테일하게 메세지 타입 설정이 가능


ex) --icmp-type echo-request
--tcp flags -p에서 tcp만 설정할 수도 있지만, 디테일한 플래그 리스트 설정 가능


-- tcp flags [검사할 플래그 리스트] [설정되어야 할 플래그 리스트]


ex) --tcp-flags SYN,FIN SYN,FIN
= SYN, FIN 플래그만 검사하여, SYN, FIN 플래그가 설정된 패킷 탐지 (이외 다른 플래그가 있어도, SYN, FIN이 있으면 탐지)


ex) --tcp-flags ALL SYN,FIN
= 모든 flag(ALL)를 검사하여, SYN, FIN 플래그만 설정된 패킷 탐지 (이외 다른 플래그 없이, SYN, FIN만 탐지함을 의미)
-m state TCP 탐지 확장 기능으로, 상태(State) 기능 사용 선언으로
-m state --state [탐지할 상태] 명시


- 탐지할 상태 : NEW, ESTABLISHED, RELATED, INVALID
-i, -o i(입력 인터페이스), o(출력 인터페이스)
! NOT의 의미로 사용, 특정 매칭 제외
Target * Rule에 매치될 시, 적용할 정책을 지정
- "-j [유형]" 형태로 선언
ACCEPT 패킷 허가, 본래 라우팅대로 처리
DROP 패킷 거부, 무조건 버림 (응답 메세지 없음)
- 보안상 REJECT 보다 적절함
LOG 패킷을 시스로그(syslog)에 전달하여 기록
- 보통 /var/log/messages에 남김
REJECT 패킷을 버리고 ICMP 에러 메세지로 응답
- 불필요한 트래픽이 발생하므로, 서비스 부하 유발 및, 정보 제공 등 악용 될 수 있음

 

 

 

반응형