진호박's Life Style

# 사용자 설정 부분 끝
##################################################################
# 들어오는 접근 테이블을 룰을 내버린다.
$IPTABLES -F FORWARD

# 우리는 들어오는 접근을 기본적으로 거부한다.
$IPTABLES -P FORWARD deny

# 외부에서 이 호스트로 보낸 모든 데이터그램을 거부한다.
$IPTABLES -A INPUT -i $ANYDEV -J DROP

# 스푸핑
# 우리는 발신지 주소가 우리의 네트워크인 외부에서 들어오는 데이터그램을

# 허용하지 않으므로 그것들을 거부한다.
$IPTABLES -F FORWARD -s $OURNET -i $ANYDEV -j DROP

# SMURF
# '스머프' 형식의 공격에 대비하기 위해 브로드캐스트 주소로 ICMP를 보내게 허용하지 않는다.
$IPTABLES -A FORWARD -m multiport -p icmp -i $ANYDEV -d $OURNET -j DENY

# 분할된 데이터그램을 받아들여야 하므로 iptables에 별도로 이것을 해주어야 한다.
$IPTABLES -A FORWARD -f -j ACCEPT

# TCP
# 통과를 허용하는 TCP포트에 대해, 현존하는 연결의 소유인
# (즉, ACK비트가 지정되어 있는) 모든 TCP데이터그램을 받아들인다.
# 이상없는 TCP 패킷의 95% 이상을 여기서 잡아낼 것이다.
$IPTABLES -A FORWARD -m multiport -p tcp -d $OURNET --dports $TCPIN ! --tcp-flags SYN,ACK ACK -j ACCEPT
$IPTABLES -A FORWARD -m multiport -p tcp -d $OURNET --sports $TCPIN ! --tcp-flags SYN,ACK ACK -j ACCEPT

# TCP - 들어오는 연결
# 우리는 허용한 TCP 포트에 대해서만 외부에서의 연결 요청을 받아 들일 것이다.
$IPTABLES -A FORWARD -m multiport -p tcp -i $ANYDEV -d $OURNET $TCPIN --syn -j ACCEPT

# TCP - 외부로 나가는 연결
# 우리는 허용한 TCP 포트에 대해 외부로 나가는 모든 tcp 연결을 허용한다.
$IPTABLES -A FORWARD -m multiport -p tcp -i $OURDEV -d $ANYADDR --dports $TCPOUT --syn -j ACCEPT

# UDP - 들어오는 데이터그램
# 허용한 포트 상의 UDP 데이터그램을 통과시킨다.
$IPTABLES -A FORWARD -m multiport -p udp -i $ANYDEV -d $OURNET --dports $UDPIN -j ACCEPT
$IPTABLES -A FORWARD -m multiport -p udp -i $ANYDEV -d $OURNET --sports $UDPIN -j ACCEPT

# UDP - 내보내는 데이터그램
# 허용한 포트상의 UDP 데이터그램이 나가도록 허용한다.
$IPTABLES -A FORWARD -m multiport -p udp -i $OURDEV -d $ANYADDR --dports $UDPOUT -j ACCEPT
$IPTABLES -A FORWARD -m multiport -p udp -i $OURDEV -d $ANYADDR --sports $UDPOUT -j ACCEPT

# ICMP - 들어오는 데이터그램
# 허용한 유형의 ICMP 데이터그램을 받아들인다.
$IPTABLES -A FORWARD -m multiport -p icmp -i $ANYDEV -d $OURNET --dports $ICMPIN -j ACCEPT

# ICMP - 내보내는 데이터그램
# 허용한 유형의 ICMP 데이터그램이 나갈수 있게 한다.
$IPTABLES -A FORWARD -m multiport -p icmp -i $OURDEV -d $ANYADDR --dports $ICMPOUT -j ACCEPT

# 기본 정책과 로깅
# 나머지 데이터그램 모두는 기본 정책으로 보내지면 버려진다.
# 여러본이 LOGGING 변수를 위에서 설정하였다면
# 그것들을 로그로 남긴다.
#
if [ "$LOGGING" ]
then
# Log barred TCP
$IPTABLES -A FORWARD -m tcp -p tcp -j LOG

# Log barred UDP
$IPTABLES -A FORWARD -m udp -p udp -j LOG

# Log barred ICMP
$IPTABLES -A FORWARD -m icmp -p icmp -j LOG
fi

#
# 끝.