반응형
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
반응형
'리눅스' 카테고리의 다른 글
| 리눅스 시스템에서 root로 오는 메일을 다른 계정으로 받는 방법 (0) | 2013.08.02 |
|---|---|
| MySQL의 root 사용자 패스워드를 설정하고 변경하는 방법 (0) | 2013.07.24 |
| 서비스 이름 및 전송 프로토콜 포트 번호 레지스트리 (0) | 2013.07.24 |
| 아파치에서 443 포트를 활성화하는 방법 (0) | 2013.07.23 |
| PHP You have to install PHP gettext extension 오류 해결 방법 (0) | 2013.07.23 |