#!/bin/sh
# 모듈을 올린다.
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe iptable_nat
/sbin/modprobe iptable_mangle
# 우선 모든 Rule을 정리한다.
/sbin/iptables -F
/sbin/iptables -A INPUT -m state --state RELATED -j ACCEPT
# localhost에서의 traffic을 받아들인다.
/sbin/iptables -A INPUT -i lo -j ACCEPT
# 특정 ip에서의 연결을 모두받아들인다. 예를 들어 자기 집 컴퓨터
/sbin/iptables -A INPUT -s 192.168.1.1 -j ACCEPT
# 특정 포트로부터 연결을 받아들인다. udp도 할 수 있다.
/sbin/iptables -A INPUT -p tcp --destination-port 22 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --destination-port 20 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --destination-port 21 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --destination-port 80 -j ACCEPT
# x manager port 6000
/sbin/iptables -A INPUT -p tcp --destination-port 6000 -j ACCEPT
# 확립된 연결에 대한 Packet을 받아들인다.
/sbin/iptables -A INPUT -i eth0 -p tcp ! --syn -j ACCEPT
# 인증 연결을 거부한다(그렇지 않을 경우 메일서버가 오랫동안 타임아웃 상태가 될 것이다.)
/sbin/iptables -A INPUT -i eth0 -p tcp --destination-port 113 -j REJECT
# echo나 목적지에 도착 못하거나 시간 초과된 icmp packet들을 받아들인다.
/sbin/iptables -A INPUT -i eth0 -p icmp --icmp-type 0 -j ACCEPT
/sbin/iptables -A INPUT -i eth0 -p icmp --icmp-type 3 -j ACCEPT
/sbin/iptables -A INPUT -i eth0 -p icmp --icmp-type 11 -j ACCEPT
# 다음으로 각각에 대한 정책을 세운다.
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT
## 1~30000번 포트를 드롭한다. (위에서 열어둔 20~22,80은 열려짐) --dport는 destination port
## 다 드롭할 수도 있는데 그렇게 하면 netstat, iptables -L 로 상태보기를 할 때 오랫동안 멈춰있슴.
/sbin/iptables -A INPUT -p tcp --dport 1:30000 -j DROP
## 핑 드롭
/sbin/iptables -A INPUT -p icmp --icmp-type echo-request -j DROP