[Linux Network] 06. iptables - 1

Date:     Updated:

카테고리:

태그:


01. iptables이란?


a) Netfilter

Linux Kernel 내부의 네트워크 관련 프레임워크로, 네트워크 패킷을 제어할 수 있는 기능을 제공한다.


b) iptables

패킷 필터링 기능을 가지고 있는 리눅스 커널에 내장된 Netfilter 기능을 관리하기 위한 툴로 Rule 기반의 패킷 필터링 기능을 제공한다.


■ 지원 기능

구분 내용
기본 기능 filtering, Logging, NAT
확장 모듈 ‘상태 추적(Stateful Inspection)’, String Filtering, Limit, Logging 등


b) 상태 추적(Stateful Inspection)

방화벽을 통과하는 모든 패킷에 대한 연결 상태를 추적하여 이 정보를 메모리에 기억하고 있다가 기존의 연결을 가장하여 접근할 경우 저정된 상태 목록과 비교하여 적합하면 통과하는 기능을 말한다.




02. iptables 용어


구분 설명
테이블(Table) iptables가 제공하는 기능을 의미
체인(Chain) 패킷이 이동하는 경로, 테이블마다 사용할 수 있는 체인이 정해져 있다.
룰(Rule) 패킷을 필터링하기 위한 룰

a) 테이블(Table)


■ 테이블 종류

구분 설명
Filter 정책에 일치하는 패킷을 타겟(Target)으로 전달하여 Action을 수행, 주로 패킷의 혀용/거부할 때 사용
Nat 정책에 일치하는 패킷의 주소를 변화하는 동작을 수행
Mangle 정책에 일치하는 패킷의 필드 값을 변경함, 주로 데이터 전송 경로 변경, 우선순위 값 변경 등에 사용됨


■ Table 조회 명령

# filter Table(기본값)
$ iptables –L

# nat Table
$ iptables –t nat –L

# mangle Table
$ iptables –t mangle -L


b) 체인(Chain)


■ Built-in Chain

  • Netfilter에서 정의한 패킷을 제어할 수 있는 위치

  • INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING


■ 사용자 정의 Chain

  • Command 옵션으로 사용자가 직접 생성하는 chain

  • 예를 들어, WEB 데이터를 제어하기 위한 정책 목록 구성하거나 DOS 차단 정책을 위한 목록 구성 등


c) Tables별 Built-in chain

3131


■ Filter Table

구분 설명
INPUT 목적지가 호스트인 패킷에 대한 필터링
OUTPUT 출발지가 호스트인 데이터에 대한 필터링
FORWARD 호스트를 경유하는 데이터에 대한 필터링(라우터 용도)


■ Nat Table

구분 설명
PREROUTING ㆍtarget → DNAT
ㆍ외부에서 내부로 향하는 데이터의 주소 변조
ㆍ인터페이스에 데이터를 받자마자 변환 수행
OUTPUT 로컬에서 생성된 데이터를 내보내기 직전에 변환 수행
POSTROUTING ㆍtarget → SNAT, MASQUERADE
ㆍ내부에서 외부로 향하는 데이터의 주소 변환
ㆍ인터페이스로 데이터가 전달되기 직전에 변환 수행


■ Mangle Table

구분 설명
INPUT 목적지가 호스트인 패킷 변경
OUTPUT 출발지가 호스트인 패킷 변경
FORWARD 호스트을 경유하는 패킷 변경
PREROUTING 패킷이 라우팅 되기 전에 변경
POSTROUTING 패킷이 라우팅 된 후에 변경




03. iptables 동작


  1. 위에서부터 차례로 각 규칙에 대해 검사 수행

  2. 규칙과 일치하는 패킷에 대해 타겟에 지정한 작업을 수행

  3. 규칙이 일치하고 작업이 수행되면 해당 규칙의 결과에 따라 처리하고 체인에서 추가 규칙을 무시

  4. 패킷이 체인의 모든 규칙과 매치하지 않아 규칙의 바닥에 도달하면 정해진 기본정책(policy) 수행




04. iptables 명령어


iptables [-t 테이블 이름] <Command> [Chain 이름] [Rule 옵션] [-m 확장 모듈] [모듈 옵션] [target] [target 옵션]

a) 체인(Chain) 설정

구분 설명
-A <chain> 지정된 체인의 마지막에 정책 추가
-I <chain> <num> 지정된 체인의 지정된 위치에 정책 추가
-D <chain> <num> 지정된 체인의 지정된 정책 삭제


b) 체인(Chain) 정보 관리

구분 설명
-F [chain] 지정된 chain의 모든 정책을 초기화
-Z [chain] 지정된 chain의 패킷 카운터 초기화
-P <chain> 지정된 chain의 기본정책 변경(Built-in chain만 변경 가능)
-L [chain] 지정된 chain의 모든 정책 목록 확인(–line: 정책 순번 확인, -v: 정책 매치되는 패킷의 수와 크기 출력)
-N <new chain> 지정된 chain 이름으로 사용자 정의 체인 생성
-E <old> <new> 지정된 chain을 다른 이름으로 변경(단, chain이 비어있어야 함)
-X <chain> 지정된 chain을 삭제(사용자 정의 chain만 삭제 가능)
-h 특정 명령에 대한 간단한 도움말 출력


c) 룰(Rule) 설정

구분 설명
-p <IP헤더의 protocol 값> 제어할 데이터의 종류 지정
–sport <port번호(범위)> 제어할 데이터의 출발지 포트를 조건으로 지정
–dport <port번호(범위)> 제어할 데이터의 목적지 포트를 조건으로 지정
-s <출발지 IP> 제어할 데이터의 출발지 IP를 조건으로 지정 (네트워크 설정 가능: 10.10.10.0/24)
-d <목적지 IP> 제어할 데이터의 목적지 IP를 조건으로 지정 (네트워크 설정 가능: 10.10.10.0/24)
-i <인터페이스 이름> 지정된 인터페이스로 들어오는 데이터를 조건으로 지정 (OUTPUT 체인에서는 정의하지 못함)
-o <인터페이스 이름> 지정된 인터페이스로 들어오는 데이터를 조건으로 지정 (INPUT 체인에서는 정의하지 못함)
–icmp-type <type> 특정 종류의 icmp 메시지를 조건으로 지정 (iptables -p icmp -h : 타입종류 확인)
–tcp-flags <flag> 특정 종류의 TCP를 조건으로 지정 (flag : SYN, ACK, FIN, PSH, URG, RST)
–syn TCP SYN 메시지를 조건으로 지정


d) 타겟(Target) 설정

-j <target 종류> [target 옵션]"


■ Filter 테이블 타겟 종류

구분 설명
-j ACCEPT 조건에 일치하는 패킷 허용
-j REJECT 조건에 일치하는 패킷 차단, 차단 된 패킷에 대한 응답(Error Message)을 전달 함
-j DROP 조건에 일치하는 패킷 차단, 차단 된 패킷에 대한 응답을 발생시키지 않음
-j LOG 조건에 일치하는 패킷을 로그로 남김, Limit 모듈과 같이 사용 함, [–log-prefix <”로그제목”>], [–log-level <syslog level>]


■ NAT 테이블 타겟 종류

구분 설명
-j SNAT –to <변경 할 IP> 내부에서 전달되는 요청의 출발지 주소를 직접 지정한 공인 IP로 변환
-j DNAT –to <변경 할 IP> 외부에서 전달되는 요청의 목적지 주소를 서버의 사설 IP로 변환
-j MASQUERADE 조건에 일치하는 패킷의 출발지 주소를 변환, 내부에서 전달되는 요청의 출발지 주소를 조건에 지정된 인터페이스의 IP로 변환
-j REDIRECT –to-port <redirect port> 조건에 일치하는 패킷의 port를 –to-port 옵션으로 지정된 port로 redirection 함(Port Forwarding)


e) 확장 모듈 설정


■ Multiport 확장 모듈

  • 각각 떨어져 있는 포트를 한꺼번에 묶어서 정책을 구성할 때 multiport 모듈을 사용
-m multiport <모듈 옵션>
-p <UDP|TCP> -m multiport <--sports|--dports|--ports> <port>,[port],…
# 예시
$ iptables –t filter –A FORWARD –p tcp –m multiport --dports 20,80,443 –j ACCEPT


■ limit 확장 모듈

  • 패킷의 조건 매칭의 주기를 제한하기 위해 사용 (LOG를 남기는 주기 설정 또는 DOS/DDOS 차단 정책 (정상적인 패킷의 전달주기 이상이 될 때 차단))
# 패킷을 매치 시킬 주기 패킷수/시간단위
# 초당(/second, /s), 분당(/minute, /m), 시간당(/hour,/h), 하루당(/day, /d)
# 예) 3/s → 초당 3개의 패킷을 조건에 매치
--limit <주기>
# --limit 옵션으로 제한하기 전 무조건 허용할 패킷의 개수 지정
--limit-burst <패킷 수>


■ state 확장 모듈

  • 상태 추적 기능을 지원하는 모듈
-m state --state <상태추적 종류>
상태 추적 종류 설명
NEW ㆍ새로운 연결을 요청하는 패킷을 상태 추적 테이블에 등록하고 필터링 함
ㆍ새로운 요청(SYN)을 매치 함
ESTABLISHED ㆍ기존 연결에 속하는 패킷(상태 추적 테이블에 등록된 패킷)일 때 필터링 함
ㆍNEW에 의해 등록된 연결에 소속된 패킷(ACK를 포함하고 있는 응답)을 매치 함
RELATED ㆍ기존 연결에 속하지만 새로운 연결을 요청하는 패킷에 대한 정보를 상태 추적 테이블에 업데이트하면서 필터링
ㆍ통신과정에서 새로운 연결을 개시하는 서비스에서 사용 함 → FTP, ICMP Error Message …
INVALID 상태 추적 테이블에 등록되지 않은 패킷에 대한 필터링
  • 상태 추적 테이블 정보 확인 (/proc/net/nf_conntrack)


■ string 확장 모듈

  • Application Layer의 Text 필터링 기능을 지원하는 모듈

  • WEB Log등을 필터링 하여 특정 주소로 접근하는 패킷을 필터링 할 수 있음

-m string --algo <문자 알고리즘> --string <“필터링 할 문자열”>
옵션 설명
–algo <bm|kmp> 문자 매치 알고리즘 지정 (bm:Boyer-Moore, Kmp:Knuth-Pratt-Morris)
–string “pattern” 문자열로 패턴 지정
–hex-string “hex pattern” 문자열의 Hex값으로 패턴 지정




05. iptables 규칙 저장



a) iptables 규칙 저장

  • iptables로 구성된 정책은 메모리에 저장되어 서비스를 재시작하면 삭제 된다.

  • “service iptables save”: /etc/sysconfig/iptables 파일에 저장됨


b) 다른 파일로 BACKUP

  • “iptables-save > 백업파일”: iptables-save명령으로 정책을 호출한 후 redirection하여 파일에 출력 함


c) 지정한 파일로 RESTORE

  • “cat 백업파일 | iptables-restore”: Backup된 iptables 정책을 메모리에 로드 함

LINUX_NETWORK 카테고리 내 다른 글 보러가기

댓글 남기기