현재 woogi.org 서버의 iptables script 입니다.
방화벽용 스크립트와는 구별됩니다. 이것은 서버용입니다.
사용자에 맞게 설정을 하셔야 할 겁니다. 특히 ssh 같은 shell 쪽은 접속자체에 문제가 될 수
있으므로…

======================================

#!/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;

[실전] 서버용 IPTABLES script

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다