실습1
1.
내부 웹서버 (192.168.y.200)와 DNS서버(192.168.y.222)는 내부 및 외부에서 접속할 수 있어야 한다.
http tcp 목적지포트 80
https tcp 목적지포트 443
iptables -A For
2.
웹서버 관리자는 업무용 PC(192.168.x.200)에서 웹서버에 ssh연결을 통해 원격 관리할 수 있어야 한다. 이때 로그도 기록해야 한다.
3.
내부 네트워크는 외부와 아래와 같은 통신만 요청하게 해야 하며 ping도 사용할 수 있어야 한다. (O, F)
DNS, FTP, NTP, SSH, SMTP, Whois, HTTP(s), yum
4.
내부 네트워크나 방화벽에서 시작된 세션은 iptables가 상태유지형으로 추적해야 한다. (I, O, F)
5.
외부 IP주소로 포워딩되는 내부 네트워크로부터의 스푸핑 차단
6.
내부 네트워크(192.168.x.222 는 제외)에서는 SSH를 통해 방화벽에 접속할 수 있어야 한다. 즉, 방화벽에서 실행되는 유일한 서버 프로그램이다. (I)
7.
방화벽은 내부로부터(DMZ에서는 제외) ICMP 에코 요청만을 수용해야 한다.
8.
방화벽에서는 ping을 사용하여 내, 외부 호스트 작동여부를 알 수 있어야 한다. (O)
이외 잘못 전달된 패킷, 포트 스캔, 명시적으로 허용된 것이 아닌 기타 연결 시도를 모두 기록하고 버려야 한다. (loopback 트래픽은 제외)(I, O, F)
9.
NAT 서비스를 제공해야 한다. (P)
#!/bin/sh
1. 내부 웹서버 (192.168.y.200)와 DNS서버(192.168.y.222)는 내부 및 외부에서 접속할 수 있어야 한다.
http tcp 목적지포트 80
https tcp 목적지포트 443
iptables -A For
2. 웹서버 관리자는 업무용 PC(192.168.x.200)에서 웹서버에 ssh연결을 통해 원격 관리할 수 있어야 한다. 이때 로그도 기록해야 한다.
3. 내부 네트워크는 외부와 아래와 같은 통신만 요청하게 해야 하며 ping도 사용할 수 있어야 한다. (O, F)
DNS, FTP, NTP, SSH, SMTP, Whois, HTTP(s), yum
4. 내부 네트워크나 방화벽에서 시작된 세션은 iptables가 상태유지형으로 추적해야 한다. (I, O, F)
5. 외부 IP주소로 포워딩되는 내부 네트워크로부터의 스푸핑 차단
6. 내부 네트워크(192.168.x.222 는 제외)에서는 SSH를 통해 방화벽에 접속할 수 있어야 한다. 즉, 방화벽에서 실행되는 유일한 서버 프로그램이다. (I)
7. 방화벽은 내부로부터(DMZ에서는 제외) ICMP 에코 요청만을 수용해야 한다.
8. 방화벽에서는 ping을 사용하여 내, 외부 호스트 작동여부를 알 수 있어야 한다. (O)
이외 잘못 전달된 패킷, 포트 스캔, 명시적으로 허용된 것이 아닌 기타 연결 시도를 모두 기록하고 버려야 한다. (loopback 트래픽은 제외)(I, O, F)
9. NAT 서비스를 제공해야 한다. (P)
###초기화
iptables -F
iptables -t nat -F
iptables -X
###기본정책
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
###변수
SERVER_WEB = 192.168.200.200
SERVER_DNS = 192.168.200.222
HOST_ADMIN = 192.168.100.200
NET_OFFICE = 192.168.100.0/24
NET_DMZ = 192.168.200.0/24
NET_EXT = 192.168.0.0/24
INF_OFFICE = eth1
INF_DMZ = eth2
INF_EXT = eth0
###INPUT
#4번
iptables -A INPUT -m conntrack --ctstate INVALID -j LOG --log-prefix "r"
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
iptables -A INPUT -m conntra
ck --ctstate ESTABLISHED,RELATED -j ACCEPT
#6번
iptables -A INPUT -p tcp --dport 22 ! -s $HOST_SHARE -i $INF_OFFICE -j ACCEPT
#7번
iptables -A INPUT -p icmp --icmp-type echo-request -s $NET_OFFICE -i $INF_OFFICE -j ACCEPT
#9번
iptables -A INPUT ! -i lo -j LOG --log-prefix "기본정책에 의한 차단"
iptables -A INPUT -i lo -j ACCEPT
###OUTPUT
#4번
iptables -A OUTPUT -m conntrack --ctstate INVALID -j LOG --log-prefix "r"
iptables -A OUTPUT -m conntrack --ctstate INVALID -j DROP
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
#8번
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
#9번
iptables -A OUTPUT ! -i lo -j LOG --log-prefix "기본정책에 의한 차단"
iptables -A OUTPUT -i lo -j ACCEPT
###FORWARD
iptables -A 체인 -p 프로토콜 --dport 포트 -d or -s 주소 -i or -o 인터페이스 -j 타겟
#4번
iptables -A FORWARD -m conntrack --ctstate INVALID -j LOG --log-prefix "r"
iptables -A FORWARD -m conntrack --ctstate INVALID -j DROP
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
#1번
iptables -A FORWARD -p tcp --dport 80 -d $SERVER_WEB -o $INF_DMZ -j ACCEPT
iptables -A FORWARD -p tcp --dport 443-d $SERVER_WEB -o $INF_DMZ -j ACCEPT
iptables -A FORWARD -p tcp --dport 53-d $SERVER_DNS -o $INF_DMZ -j ACCEPT
iptables -A FORWARD -p udp--dport 53-d $SERVER_DNS -o $INF_DMZ -j ACCEPT
#2번
iptables -A FORWARD -p tcp --dport 22 -s $HOST_ADMIN -d $SERVER_WEB -i $INF_OFFICE -o $INF_DMZ -j LOG --log-prefix "XXX"
iptables -A FORWARD -p tcp --dport 22 -s $HOST_ADMIN -d $SERVER_WEB -i $INF_OFFICE -o $INF_DMZ -j ACCEPT
#3번
iptables -A FORWARD -p udp --dport 53 -s $NET_OFFICE -i $INF_OFFICE -o $INF_EXT -j ACCEPT
iptables -A FORWARD -p tcp --dport 53 -s $NET_OFFICE -i $INF_OFFICE -o $INF_EXT -j ACCEPT
iptables -A FORWARD -p tcp --dport 21 -s $NET_OFFICE -i $INF_OFFICE -o $INF_EXT -j ACCEPT
iptables -A FORWARD -p udp --dport 123 -s $NET_OFFICE -i $INF_OFFICE -o $INF_EXT -j ACCEPT
iptables -A FORWARD -p tcp --dport 22 -s $NET_OFFICE -i $INF_OFFICE -o $INF_EXT -j ACCEPT
iptables -A FORWARD -p tcp --dport 25 -s $NET_OFFICE -i $INF_OFFICE -o $INF_EXT -j ACCEPT
iptables -A FORWARD -p tcp --dport 43 -s $NET_OFFICE -i $INF_OFFICE -o $INF_EXT -j ACCEPT
iptables -A FORWARD -p tcp --dport 80 -s $NET_OFFICE -i $INF_OFFICE -o $INF_EXT -j ACCEPT
iptables -A FORWARD -p tcp --dport 443 -s $NET_OFFICE -i $INF_OFFICE -o $INF_EXT -j ACCEPT
iptables -A FORWARD -p tcp --dport 443 -s $NET_OFFICE -i $INF_OFFICE -o $INF_EXT -j ACCEPT
iptables -A FORWARD -p icmp --icmp-type echo-request -s $NET_OFFICE -i $INF_OFFICE -o $INF_EXT -j ACCEPT
#9번
iptables -A FORWARD ! -i lo ! -o lo -j LOG --log-prefix "기본정책에 의한 차단"
iptables -A FORWARD -i lo -j ACCEPT
###NAT
#10번문제포함 다수 -Normal NAT
iptables -t nat -A POSTROUTING -s $NET_OFFICE -o $INF_EXT -j MASQUERATE
#10번 & 1번 -DNAT
iptables -t nat -A PREROUTING -i $INF_EXT -p tcp --dport 80 -j DNAT --to:$SERVER_WEB:80
iptables -t nat -A PREROUTING -i $INF_EXT -p tcp --dport 443 -j DNAT --to:$SERVER_WEB:443
iptables -t nat -A PREROUTING -i $INF_EXT -p tcp --dport 53 -j DNAT --to:$SERVER_DNS:53
iptables -t nat -A PREROUTING -i $INF_EXT -p udp --dport 53 -j DNAT --to:$SERVER_DNS:53
Bash
복사