본문 바로가기

리눅스

iptables 방화벽 정책

반응형

iptables 방화벽 정책

iptables는 리눅스 커널의 Netfilter 기능을 활용하여 패킷 필터링, NAT, 포트 제어 등을 수행하는 방화벽 도구입니다.

1. 기본 정책 예제

# Loopback 허용
-A INPUT  -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT

# 내부 특정 IP 허용
-A INPUT -s 192.168.0.19 -j ACCEPT

# 비정상 TCP 패킷 차단
-A INPUT -p tcp --tcp-flags ALL NONE -j DROP
-A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

# 상태 기반 필터링
-A INPUT  -m state --state INVALID -j DROP
-A OUTPUT -m state --state INVALID -j DROP
-A INPUT  -m state --state RELATED,ESTABLISHED -j ACCEPT

# 서비스 허용 정책
## DNS
-A INPUT -p udp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT

## HTTP / HTTPS
-A INPUT -p tcp --dport 80  -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT

## MySQL
-A INPUT -p tcp --dport 3306 -j ACCEPT

## Mail (SMTP)
-A INPUT -p tcp --dport 25 -j ACCEPT

## SSH
-A INPUT -p tcp --dport 22 -j ACCEPT
-A INPUT -p tcp --dport 2165 -j ACCEPT

## FTP
-A INPUT -p tcp --dport 21 -j ACCEPT
-A INPUT -p tcp --dport 20 -j ACCEPT

## SNMP
-A INPUT -p udp --dport 161 -j ACCEPT

# ICMP(Ping) 차단
-A INPUT -p icmp --icmp-type 8 -j DROP

# Well-known port 차단 (보안 정책에 따라 선택)
-A INPUT -p tcp --dport 0:1023 -j DROP
-A INPUT -p udp --dport 0:1023 -j DROP

# 기본 차단 정책
-A INPUT -p tcp --tcp-flags SYN,RST,ACK SYN -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp --tcp-flags SYN,RST,ACK SYN -j DROP

COMMIT

2. iptables 기본 구조

명령어 형태

iptables -[옵션] 체인 [조건] -j 타겟

예시

iptables -A INPUT -s 211.254.138.130 -j DROP
iptables -A OUTPUT -d 211.254.138.130 -j DROP

주요 체인 (Chain) 설명

  • INPUT : 외부 → 로컬 서버
  • OUTPUT : 로컬 서버 → 외부
  • FORWARD : 서버를 통과하는 트래픽
  • PREROUTING : 라우팅 전
  • POSTROUTING : 라우팅 후

주요 옵션 (Command) 설명

  • -A : 룰 추가 (append)
  • -I : 룰 삽입
  • -D : 룰 삭제
  • -R : 룰 교체
  • -L : 룰 조회
  • -F : 룰 초기화
  • -P : 기본 정책 설정
  • -N : 사용자 체인 생성
  • -X : 체인 삭제

Rule 조건 (핵심) 옵션 설정

  • -p : 프로토콜 (tcp, udp, icmp)
  • -s : 출발지 IP
  • -d : 목적지 IP
  • --sport : 출발지 포트
  • --dport : 목적지 포트
  • -i : 입력 인터페이스
  • -o : 출력 인터페이스
  • -j : 동작 (ACCEPT, DROP 등)
728x90

2. 주요 확장 모듈

state (연결 추적)

-m state --state NEW,ESTABLISHED,RELATED,INVALID

상태 설명

  • NEW : 신규 연결
  • ESTABLISHED : 이미 연결됨
  • RELATED : 관련 연결 (FTP, ICMP 등)
  • INVALID : 비정상 패킷

TCP 옵션

--tcp-flags SYN,ACK,FIN,RST SYN
  • 비정상 패킷 탐지 가능

limit (속도 제한)

-m limit --limit 10/sec
  • 로그 폭주 방지

mac 필터

-m mac --mac-source 00:11:22:33:44:55

owner (프로세스 기반 필터)

-m owner --uid-owner 1000

3. Target (동작)

Target 설명

  • ACCEPT : 허용
  • DROP : 차단 (응답 없음)
  • REJECT : 차단 + 응답
  • LOG : 로그 기록

4. 실무 필수 정책 패턴

기본 정책 (Drop 정책)

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

최소 허용 정책 (Whitelist 방식)

# SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

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

특정 IP 차단

iptables -A INPUT -s 1.2.3.4 -j DROP

특정 IP만 허용

iptables -A INPUT -p tcp --dport 22 -s 192.168.0.10 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

포트 제한

iptables -A INPUT -p tcp --dport ! 80 -j DROP

5. NAT 설정

SNAT (출발지 변환)

iptables -t nat -A POSTROUTING -s 192.168.1.10 -o eth0 -j SNAT --to-source 1.1.1.1

DNAT (목적지 변환)

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.0.7:8080

6. 운영 시 필수

1. 룰 순서 중요

  • 위에서 아래로 평가됨
  • 먼저 매칭되는 룰이 적용됨

2. 관리 IP 차단 방지

iptables -A INPUT -s 관리자IP -j ACCEPT

3. 설정 저장

service iptables save

또는

iptables-save > /etc/sysconfig/iptables

4. 재부팅 자동 적용

chkconfig iptables on

5. 룰 확인

iptables -L -n -v --line-numbers

7. 로그 확인

tail -f /var/log/messages

 

728x90
반응형