[보안] 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;

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

1 Response

  1. 2024년 9월 25일

    … [Trackback]

    […] Read More to that Topic: nblog.syszone.co.kr/archives/65 […]

페이스북/트위트/구글 계정으로 댓글 가능합니다.