Search

iptables

대분류
보안
소분류
방화벽
유형
방화벽
Linux
명령어
최종 편집 일시
2024/10/27 16:24
생성 일시
2023/04/07 03:38
15 more properties
리눅스 배포판 포함
상용 방화벽 제공 대부분 기능 제공
패킷 필터링
상태기반
어플리케이션 계층 필터링

Netfilter

리눅스가 제공하는 모든 종류의 패킷 필터링과 맹글링 도구의 공식적 프로젝트명
네트워크 스택으로 함수를 후킹하는데 사용할 수 있는 리눅스 내부의 프레임 워크
iptables가 방화벽 기능을 구현할 수 있게 프레임워크를 제공

명령어

iptables [Table] [Command] [Chain] [Rule] [Target]

Table

***filter
패킷 필터링 시 적용되는 필터링 규칙
*nat
NAT 규칙
mangle
패킷 데이터를 변경하는 특수 규칙
raw
넷필터의 연결 추적 기능과 독립적으로 작동시키는 기능에 사용되는 테이블 넷필터, ip conntrack 모듈보다 더 높은 우선순위 가짐

Command

*A(Append)
명시한 체인에 규칙 추가
*I (Insert)
명시한 체인 특정 위치에 규칙 추가
*D (Delete)
명시한 체인에 특정 규칙 삭제
N (new)
사용자정의 체인 생성
*F (Flash)
명시한 체인 내 규칙 전체 삭제
X (Erase)
명시한 체인 삭제
*P (Policy)
기본 정책 설정
*L (List)
명시한 체인 내 규칙 출력
E (namE)
체인이름 변경

Chain

forward - 방화벽에 들어오거나 나가는 체인
output : 방화벽에서 생성된 패킷 = 소스 ip가 방화벽
Routing이 수행된 후에 목적지 ip가 자기자신이라면 input 아니라면 forward
어떤 패킷 허용 차단 - 방화벽 타겟 들어오고있다. : input이다
어떤 패킷 허용 차단 - 방화벽에서 만들어져서 다른곳 가려고함 : output
그외 나머지 : forward
Filter테이블에서 주로 다루는 chain
INPUT : 커널 내부에서 라우팅 계산을 마친 후 로컬 리눅스 시스템이 목적지인 패킷(로컬 소켓이 목적지인 패킷)
OUTPUT : 리눅스 시스템 자체가 생성하는 패킷
FORWARD : 리눅스 시스템을 통과하는 패킷
Nat테이블에서 다루는 체인
PREROUTING : 커널 내부에서 라우팅을 수행하기 전
POSTROUTING : 커널 내부에서 라우팅을 수행한 후
OUTPUT
Mangle 테이블에서 다루는 체인
PREROUTING, POSTROUTING, INPUT, OUTPUT, FORWARD
Raw테이블에서 다루는 체인
PREROUTING, OUTPUT

Match

정책 설정을 위한 조건
--source (-s)
출발지 IP주소(or 네트워크 주소) - AND Hostname, ip주소, ip범위(마스크, CIDR)
--destination (-d)
목적지 IP주소 (or 네트워크 주소)
--protocol (-p)
특정 프로토콜 tcp, udp, icmp
--sport
출발지 포트
--dport
도착지 포트
--in-interface (-i)
입력 인터페이스명( ex) eth0 )
--out-interface (-o)
출력 인터페이스명
--state
연결 상태 NEW, ESTABLISHED, RELATED, INVALID
--string
어플리케이션 계층 데이터 바이트 순서

Target -j

*ACCEPT
패킷이 본래 라우팅대로 진행(허용)
*DROP
패킷을 그대로 버림(수신 스택에서는 모름)
LOG
syslog에 관련 내용을 기록
REJECT
패킷을 버리고, 적절한 응답 패킷을 전송 TCP 연결의 경우 TCP 재설정 패킷 전송 UDP 패킷의 경우 Port Unreachable 메시지 전송
RETURN
호출한 체인 내에서 패킷 처리 계속 진행
옵션
--log-prefix “XXXXXXXX” --log-level --log-ip-options --log-tcp-options

예제

방화벽에 접속하는 트래픽은 오직 SSH서비스만 가능 iptables -A INPUT -p tcp --dport 22 -j ACCEPT
공격자로 추정되는 1.1.1.1 차단 iptables -A INPUT -s 1.1.1.1 -j DROP iptables -A FORWARD -s 1.1.1.1 -j DROP
네트워크 A에서 네트워크 B로 가는 트래픽 차단 iptables -A FORWARD -s Network_A -d Network_B -j DROP
내부에서 외부서버 2.2.2.2에 접속하는 모든 패킷 정보 기록 iptables -A FORWARD -d 2.2.2.2 -j LOG --log-prefix “LOG_NAME”
Soqmn 웹 서비스를 제외한 모든 트래픽 차단 iptables -A CHAIN -p tcp ! --dport 80 -j DROP
방화벽에 들어오는 패킷중 출발지 주소가 내부 네트워크가 아닌 트래픽은 차단 iptables -A INPUT ! -s Internal_Network -j DROP

필터링 기본 작동 원리

이때 도착한 패킷이 특정 규칙의 조건식에 만족하면 그 규칙의 타겟(허용, 차단)대로 처리되며, 그 패킷은 더 이상 하위 규칙들과 비교하지 않고 다음 패킷을 처리(예외 : Target이 Log인 경우)
패킷 필터링 규칙(Rule)들의 모음
패킷이 도착하면 작성된 규칙들에 부합되는지 비교 (규칙들의 순서번호 별로 진행)
따라서 규칙들간의 우선순위가 중요함. 즉, 도착한 패킷이 여러 개의 규칙에 부합해도 가장 우선순위가 높은 규칙만 적용됨.