상세 컨텐츠

본문 제목

iptables 세팅 예제

IT/Linux & MySQL & PHP

by redsynn 2013. 1. 28. 13:17

본문

리눅스 서버 사용시 iptables 예제. 


자료 보관용


# 루프백 허용

iptables -A INPUT -i lo -j ACCEPT



# 특정 IP 허용

# 참고: 원격으로 리눅스를 사용하고 있을 경우 관리자 아이피를 쓸 것을 권장합니다.

#iptables -A INPUT -s 주소 -j ACCEPT



# 특정 IP 차단

#iptables -A INPUT -s 주소 -j DROP



# 사설 IP 차단

# 참고: 아래 중에서 이용하고 있는 사설 IP 대역이 있다면 해당하는 IP 대역이 있는 행을 지워주세요. (+아래 IANA 참고)

iptables -A INPUT -s 10.0.0.0/8 -j DROP

iptables -A INPUT -s 172.16.0.0/16 -j DROP

iptables -A INPUT -s 192.168.0.0/16 -j DROP

iptables -A INPUT -s 224.0.0.0/4 -j DROP

iptables -A INPUT -s 240.0.0.0/5 -j DROP

iptables -A OUTPUT -d 10.0.0.0/8 -j DROP

iptables -A OUTPUT -d 172.16.0.0/16 -j DROP

iptables -A OUTPUT -d 192.168.0.0/16 -j DROP

iptables -A OUTPUT -d 224.0.0.0/4 -j DROP

iptables -A OUTPUT -d 240.0.0.0/5 -j DROP



# IANA 예약 IP 대역 차단

iptables -A INPUT -s 0.0.0.0/8 -j DROP

iptables -A INPUT -s 169.254.0.0/16 -j DROP

iptables -A INPUT -s 192.0.0.0/24 -j DROP

iptables -A INPUT -s 248.0.0.0/5 -j DROP

iptables -A OUTPUT -d 0.0.0.0/8 -j DROP

iptables -A OUTPUT -d 169.254.0.0/16 -j DROP

iptables -A OUTPUT -d 192.0.0.0/24 -j DROP

iptables -A OUTPUT -d 248.0.0.0/5 -j DROP



# 주요 서비스 허용 (HTTP, FTP, MySQL 등)

# 참고: 옵션 -m mport 로 간단하게 사용 가능합니다.

iptables -A INPUT -p tcp --dport 20 -j ACCEPT

iptables -A INPUT -p tcp --dport 21 -j ACCEPT

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

iptables -A INPUT -p tcp --dport 53 -j ACCEPT

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

iptables -A INPUT -p tcp --dport 443 -j ACCEPT

iptables -A INPUT -p tcp --dport 3306 -j ACCEPT

iptables -A INPUT -p udp --dport 22 -j ACCEPT

iptables -A INPUT -p udp --dport 53 -j ACCEPT

iptables -A INPUT -p udp --dport 443 -j ACCEPT



# 뒤따라오는 연결은 허용

# 참고: 이걸 안하게 되면 네트워크간 접속이 원활하지 않게 됩니다.

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT



# TCP 연결 중 새로 들어오는 접속이 SYN 패킷이 아닌 것만을 허용

iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP



# 비정상인 tcp-flag는 차단

iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP

iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

iptables -A INPUT -p tcp --tcp-flags ALL PSH,FIN -j DROP

iptables -A INPUT -p tcp --tcp-flags ALL URG,PSH,FIN -j DROP

iptables -A INPUT -p tcp --tcp-flags ALL SYN,ACK,FIN -j DROP

iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN,PSH -j DROP

iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN,RST -j DROP

iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN,RST,PSH -j DROP

iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN,ACK,RST -j DROP

iptables -A INPUT -p tcp --tcp-flags ALL SYN,ACK,FIN,RST,PSH -j DROP

iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP

iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP

iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP



# 조각난 패킷은 아웃

iptables -A INPUT -f -j DROP



# 포트 스캔 방지

iptables -A INPUT -p icmp -j DROP



# 패킷량 제한 (tcp 만)

iptables -A INPUT -p tcp -m multiport --sport 20,21,22,53,80,443,3306 -m length --length 0:40 -j LOG --log-prefix "[LENGTH_0-40_-OpenTCP] "

iptables -A INPUT -p tcp -m multiport --sport 20,21,22,53,80,443,3306 -m length --length 0:40 -j DROP



# 접속량 제한 (초당 2회까지만)

iptables -A INPUT -p tcp -m state --state NEW -m hashlimit --hashlimit-mode srcip,dstport --hashlimit-name LimitConTCP --hashlimit 1/s --hashlimit-burst 2 -j LOG --log-prefix "[LimitConnect-TCP] "

iptables -A INPUT -p tcp -m state --state NEW -m hashlimit --hashlimit-mode srcip,dstport --hashlimit-name LimitConTCP --hashlimit 1/s --hashlimit-burst 2 -j ACCEPT

iptables -A INPUT -p udp -m state --state NEW -m hashlimit --hashlimit-mode srcip,dstport --hashlimit-name LimitConUDP --hashlimit 1/s --hashlimit-burst 2 -j LOG --log-prefix "[LimitConnect-UDP] "

iptables -A INPUT -p udp -m state --state NEW -m hashlimit --hashlimit-mode srcip,dstport --hashlimit-name LimitConUDP --hashlimit 1/s --hashlimit-burst 2 -j ACCEPT



# 룰 전체 기본 정책 설정

iptables -P INPUT DROP

iptables -P FORWARD DROP

iptables -P OUTPUT ACCEPT



# 나머지 반입은 모두 제거

iptables -A INPUT -j DROP



출처 : http://blog.eakgnarok.pe.kr/222

관련글 더보기