Search

iptables script 실습

대분류
보안
소분류
방화벽
유형
Linux
방화벽
명령어
최종 편집 일시
2024/10/27 16:25
생성 일시
2023/05/26 03:13
15 more properties

실습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
복사