[Linux Network] 07. iptables - 2

Date:     Updated:

카테고리:

태그:


01. 네트워크 구성도


222311

313123123

232323


02. iptables 실습 내용



■ 기본 규칙

  • 보안 정책은 상태 추적을 이용하여 구성

  • 서비스 별 사용자 정의 체인 사용


■ Trusted Site 정책

  • Trusted Site 전체 외부 통신 가능하도록 설정

  • Host Network 정책

    • 내부 사용자 WEB 서비스 허용 → 허용된 트래픽에 대해 LOG 남기기(10회 저장 후 분당 10번씩 저장)

    • 내부 사용자 SSH 서비스 허용 → 허용된 트래픽에 대해 LOG 남기기(20회 저장 후 초당 7번씩 저장)

    • www.facebook.com 과 inven.co.kr 접속 차단 → 차단된 트래픽에 대해 LOG 남기기(3회 저장 후 분당 10번씩 저장)


■ Untrusted Site 정책

  • DMZ의 WEB서버 접근을 제외한 모든 통신 차단

  • Untrusted에서 관리 목적으로 접근하는 관리자의 SSH접속 허용

  • Port Scanning 차단(DMZ에서 서비스 중인 포트 제외)

    • 정상적인 패킷은 접속량으로 차단

    • 비정상적인 패킷은 탐지하여 차단

  • DoS 공격 차단(SYN Flooding, Smurf, UDP Flooding, …)

  • Icmp Redirect 차단

  • 방화벽 정책 backup


■ 관리 정책

  • 방화벽 정책 backup


03. 정책 적용


# Trusted Site 전체 외부 통신 가능하도록 설정
iptables -t nat -A POSTROUTING -s 172.20.15.0/24 -o ens160 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.1.2.0/24 -o ens160 -j MASQUERADE


# 내부 웹 서버 공인 IP 설정 (DNAT)
ifconfig ens160:0 192.168.219.200 netmask 255.255.255.0
iptables -t nat -A PREROUTING -d 192.168.219.200 -j DNAT --to 10.1.2.202


# 목록을 제외한 모든 패킷을 차단
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP


# 내부 사용자가 특정 사이트 접근 차단
iptables -N DROP_SITE
iptables -A DROP_SITE -p tcp -m multiport --dport 80,443 -s 172.20.15.0/24 -m limit --limit 10/m --limit-burst 3 -j LOG --log-prefix "[DROP_SITE]"
iptables -A DROP_SITE -p tcp -m multiport --dport 80,443 -s 172.20.15.0/24 -m string --algo kmp --string "facebook" -j DROP
iptables -A DROP_SITE -p tcp -m multiport --dport 80,443 -s 172.20.15.0/24 -m string --algo kmp --string "inven.co.kr" -j DROP
iptables -A FORWARD -j DROP_SITE


# DNS 서비스 허용
iptables -N INT_DNS
iptables -A INT_DNS -p udp --dport 53 -s 172.20.15.0/24 -m state --state NEW, ESTABLISHED -j ACCEPT
iptables -A INT_DNS -p udp --sport 53 -d 172.20.15.0/24 -m state --state NEW, ESTABLISHED -j ACCEPT
iptables -A INT_DNS -p udp --dport 53 -s 10.1.2.0/24 -m state --state NEW, ESTABLISHED -j ACCEPT
iptables -A INT_DNS -p udp --sport 53 -d 10.1.2.0/24 -m state --state NEW, ESTABLISHED -j ACCEPT
iptables -A FORWARD -j INT_DNS


# Ping 허용
iptables -N ICMP
iptables -A ICMP -p icmp --icmp-type 8 -j ACCEPT
iptables -A ICMP -p icmp --icmp-type 0  -j ACCEPT
iptables -A INPUT -j ICMP
iptables -A OUTPUT -j ICMP
iptables -A FORWARD -j ICMP


# 내부 사용자가 WEB 서비스 허용
iptables -N INT_WEB
iptables -A INT_WEB -p tcp -m multiport --dport 80,443 -s 172.20.15.0/24 -m limit --limit 10/m --limit-burst 10 -j LOG --log-prefix "[INT_WEB_ACCEPT]"
iptables -A INT_WEB -p tcp -m multiport --dport 80,443 -s 172.20.15.0/24 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INT_WEB -p tcp -m multiport --sport 80,443 -d 172.20.15.0/24 -m state --state ESTABLISHED -j ACCEPT
iptables -A FORWARD -j INT_WEB


# 내부 사용자가 SSH 서비스 허용
iptables -N INT_SSH
iptables -A INT_SSH -p tcp --dport 22 -s 172.20.15.0/24 -m limit --limit 7/s --limit-burst 20 -j LOG --log-prefix "[INT_SSH_ACCEPT]"
iptables -A INT_SSH -p tcp --dport 22 -s 172.20.15.0/24 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INT_SSH -p tcp --sport 22 -d 172.20.15.0/24 -m state --state ESTABLISHED -j ACCEPT
iptables -A FORWARD -j INT_SSH


# DMZ의 WEB 서버 접근을 제외한 모든 총신 차단
iptables -N DMZ_WEB
iptables -A DMZ_WEB -p tcp -m multiport --dport 80,443 -d 10.1.2.202 -j LOG --log-prefix "[DMZ_WEB_ACCEPT]"
iptables -A DMZ_WEB -p tcp -m multiport --dport 80,443 -d 10.1.2.202 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A DMZ_WEB -p tcp -m multiport --sport 80,443 -s 10.1.2.202 -m state --state ESTABLISHED -j ACCEPT
iptables -A FORWARD -j DMZ_WEB


# 관리자의 SSH 접속 허용
iptables -N DMZ_SSH
iptables -A DMZ_SSH -p tcp --dport 22 -s 192.168.219.11 -d 10.1.2.202 -j LOG --log-prefix "[DMZ_WEB_ACCEPT]"
iptables -A DMZ_SSH -p tcp --dport 22 -s 192.168.219.11 -d 10.1.2.202 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A DMZ_SSH -p tcp --sport 22 -d 192.168.219.11 -s 10.1.2.202 -m state --state ESTABLISHED -j ACCEPT
iptables -A FORWARD -j DMZ_SSH
# Port Scanning 차단
iptables -N PORT_SCAN

# 정상적인 패킷은 접속량으로 차단
iptables -A PORT_SCAN -m limit --limit 100/s -j DROP

# 비정상적인 패킷은 탐지하여 차단
iptables -A PORT_SCAN -m state --state INVALID -j DROP

# FIN SCAN
iptables -A PORT_SCAN -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN -m state --state NEW -j DROP

# X-mas Scan
iptables -A PORT_SCAN -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP

# NULL SCAN
iptables -A PORT_SCAN -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
iptables -I FORWARD -j PORT_SCAN


# DoS 공격 차단(SYN Flooding, Smurf, UDP Flooding, …) 

# SYN Flooding 차단 (TCP Full Connection Scan, Half Open Scan)
iptables -N DOS
iptables -A DOS -p tcp --syn -i ens160 -m limit --limit 100/s -j DROP

# Smurf 차단
iptables -A DOS -i ens160 -d 172.20.15.255 -j DROP
iptables -A DOS -i ens160 -d 10.1.2.255 -j DROP

# ICMP Redirect 차단
iptables -A DOS -p icmp -m icmp --icmp-type 5 -j DROP
iptables -I FORWARD -j DOS

# or 
​echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects


# IP spoofing 차단
iptables -N IP_SPOOF
iptables -A IP_SPOOF -i ens160 -s 10.0.0.0/8 -j DROP
iptables -A IP_SPOOF -i ens160 -s 172.16.0.0/12 -j DROP
iptables -A IP_SPOOF -i ens160 -s 127.0.0.0/8 -j DROP
iptables -A IP_SPOOF -i ens160 -s 224.0.0.0/8 -j DROP
iptables -A IP_SPOOF -i ens160 -s 240.0.0.0/8 -j DROP
iptables -A FORWARD -i ens160 -j IP_SPOOF
# iptables 규칙 저장
service iptables save


# 다른 파일로 BACKUPPermalink
iptables-save > back_iptables_set.bak


# 지정한 파일로 RESTORE
cat back_iptables_set.bak | iptables-restore

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

댓글 남기기