[보안] iptables 예제 -1
======================================
#!/bin/sh
# http://woogi.org ^-^v
# 모듈 같은건 올리지 않습니다. 기본적으로 올라와 있으므로…
# iptables Path
iptables=/sbin/iptables
# SERVER IP 받아오기.
HOST_IP=”`/sbin/ifconfig eth0 | grep ‘inet addr’ | awk ‘{print $2}’ | sed -e
‘s/.*://’`”
NETMASK=”`/sbin/ifconfig eth0 | grep ‘inet addr’ | awk ‘{print $4}’ | cut -d : -f
2`”
# rule delete
# 모두 지우고 다시 재설정합니다.
$iptables -F
# INPUT Rules 설정
$iptables -Z INPUT
$iptables -P INPUT ACCEPT
# local 과 자기자신의 IP 는 허용.
$iptables -A INPUT -i lo -j ACCEPT
$iptables -A INPUT -s $HOST_IP -j ACCEPT
# 알 수 없는 패킷 즉, NETWORK 상태가 INVALID 인 패킷들을 막아 버린다.
# 정상적인 접근에서는 나올 수 없는 상태.
$iptables -A INPUT -m state –state INVALID -j DROP
# 외부 서비스를 위한 설정. / udp service
# dns 상호 쿼리를 위해서…
$iptables -A INPUT -p udp –sport 53 -m state –state ESTABLISHED -j ACCEPT
# TCP service
# ftp-data, 서버자체가 클라이언트가 될 경우…
$iptables -A INPUT -p tcp –dport 20 -m state –state NEW,ESTABLISHED -j ACCEPT
$iptables -A INPUT -p tcp –dport 20 -m state –state ESTABLISHED -j ACCEPT
$iptables -A INPUT -i eth0 -p tcp –sport 1024:65535 –dport 1024:65535 -m state —
state ESTABLISHED,RELATED -j ACCEPT
# ftp service
# ftp 를 이용할 수 있는 대역을 지정하였습니다. 좀더 세밀해 질 수 있겠죠.
$iptables -A INPUT -s 61.0.0.0/8 -p tcp –dport 21 -j ACCEPT
$iptables -A INPUT -s 210.0.0.0/8 -p tcp –dport 21 -j ACCEPT
$iptables -A INPUT -s 211.0.0.0/8 -p tcp –dport 21 -j ACCEPT
# ssh service
# ssh 접속 지역 지정.
$iptables -A INPUT -s 61.0.0.0/8 -p tcp –dport 22 -j ACCEPT
$iptables -A INPUT -s 210.0.0.0/8 -p tcp –dport 22 -j ACCEPT
$iptables -A INPUT -s 211.0.0.0/8 -p tcp –dport 22 -j ACCEPT
# telnet
# telnet은 현재 서비스 하지 않습니다.
#$iptables -A INPUT -s 210.0.0.0/8 -p tcp –dport 23 -j ACCEPT
#$iptables -A INPUT -s 211.0.0.0/8 -p tcp –dport 23 -j ACCEPT
# etc service
# 25(메일), 80(웹)은 모든 곳에서 ACCEPT 입니다. 반드시…
$iptables -A INPUT -p tcp –dport 25 -m state –state NEW,ESTABLISHED -j ACCEPT
$iptables -A INPUT -p tcp –dport 80 -m state –state NEW,ESTABLISHED -j ACCEPT
# AUTH 는 서비스를 하지 않더라도 열어야 합니다. 클라이언트에서 요청합니다.
$iptables -A INPUT -p tcp –dport 113 -m state –state NEW,ESTABLISHED -j ACCEPT
# pop3s 를 이용하는 관계로 995번을 열고 있습니다.
$iptables -A INPUT -p tcp –dport 995 -m state –state NEW,ESTABLISHED -j ACCEPT
# mysql
# 기본적으로 mysql 은 local에서만 접속하면 됩니다. DB 공유를 할 경우 대역 지정.
$iptables -A INPUT -p tcp –dport 3306 -m state –state NEW,ESTABLISHED -j ACCEPT
# ip 대역 예제.
# ip 대역뿐만 아니라 아래와 같이 상태접속을 지정할 수도 있습니다.
#$iptables -A INPUT -s 211.0.0.0/8 -p tcp –dport 22 -m state –state NEW,ESTABLISHED –
j ACCEPT
# UDP service
# udp 서비스는 하나뿐이죠?
$iptables -A INPUT -p udp –dport 53 -m state –state NEW,ESTABLISHED -j ACCEPT
# ICMP service
# ping은 별 의미가 없지만…
$iptables -A INPUT -s 211.0.0.0/8 -p icmp –icmp-type echo-request -j ACCEPT
$iptables -A INPUT -s 211.0.0.0/8 -p icmp –icmp-type echo-request -j ACCEPT
# 서버로 들어오는 SYN packet 을 모두 거절한다.
$iptables -A INPUT -p tcp –syn -j REJECT
# Drop All packet
# 원활한 서비스를 위해 1023 포트까지만 DROP 을 합니다. 물론 다 막아도 상관 없습니다.
$iptables -A INPUT -p tcp –dport 0:1023 -j DROP
$iptables -A INPUT -p udp –dport 0:1023 -j DROP
$iptables -A INPUT -p icmp –icmp-type echo-request -j REJECT
echo -e “\\nDone.\\n”
exit;