[보안] iptables 예제 -2

#!/bin/sh

# http://woogi.org

# 이 설정은 김정균님의 iptables 의 내용을 기초로 하여 작성된 것입니다.

# iptables Path

iptables=/sbin/iptables

# 모듈 올리기

modprobe iptable_filter

#/sbin/depmod -a

#/sbin/insmod ip_tables

#/sbin/insmod ip_conntrack

#/sbin/insmod ip_conntrack_ftp

#/sbin/insmod iptable_nat

#/sbin/insmod ip_nat_ftp

# 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`”

# INPUT Rules 설정

$iptables -Z INPUT

$iptables -P INPUT ACCEPT

$iptables -F INPUT

$iptables -A INPUT -i lo -j ACCEPT

$iptables -A INPUT -s $HOST_IP/$NETMASK -j ACCEPT

#  알 수 없는 패킷 즉,  NETWORK 상태가 INVALID 인 패킷들을 막아 버린다.

#  정상적인 접근에서는 나올 수 없는 상태이다.

$iptables -A INPUT -m state –state INVALID -j DROP

$iptables -A OUTPUT -m state –state INVALID -j DROP

# Nimda, CodeRed 등의 바이러스 문자열 차단.

#$iptables -A INPUT -p tcp –tcp-flags ACK ACK –dport 80 -m string  \\

–string “/default.ida?” -j REJECT –reject-with tcp-reset

#$iptables -A INPUT -p tcp –tcp-flags ACK ACK –dport 80 -m string  \\

–string “XXXXXXXX” -j REJECT –reject-with tcp-reset

#$iptables -A INPUT -p tcp –tcp-flags ACK ACK –dport 80 -m string  \\

–string “cmd.exe” -j REJECT –reject-with tcp-reset

#$iptables -A INPUT -p tcp –tcp-flags ACK ACK –dport 80 -m string  \\

–string “root.exe?” -j REJECT –reject-with tcp-reset

# 외부 서비스를 위한 설정. / TCP service

#$iptables -A INPUT -p tcp –sport 20 -m state –state ESTABLISHED,RELATED -j \\

ACCEPT

#$iptables -A INPUT -i eth0 -p tcp –sport 1024:65535 –dport 1024:65535 -m state \\

–state ESTABLISHED -j ACCEPT

#$iptables -A INPUT -p tcp –sport 21 -m state –state ESTABLISHED -j ACCEPT

#$iptables -A INPUT -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT

#$iptables -A INPUT -p tcp –sport 23 -m state –state ESTABLISHED -j ACCEPT

#$iptables -A INPUT -p tcp –sport 25 -m state –state ESTABLISHED -j ACCEPT

#$iptables -A INPUT -p tcp –sport 80 -m state –state ESTABLISHED -j ACCEPT

#$iptables -A INPUT -p tcp –sport 110 -m state –state ESTABLISHED -j ACCEPT

#$iptables -A INPUT -p tcp –sport 143 -m state –state ESTABLISHED -j ACCEPT

#$iptables -A INPUT -p tcp –sport 443 -m state –state ESTABLISHED -j ACCEPT

#$iptables -A INPUT -p tcp –sport 873 -m state –state ESTABLISHED -j ACCEPT

#$iptables -A INPUT -p tcp –sport 2401 -m state –state ESTABLISHED -j ACCEPT

#

# 외부 서비스를 위한 설정. / udp service

$iptables -A INPUT -p udp –sport 53 -m state –state ESTABLISHED -j ACCEPT

#  위의 설정은 내부에서 외부의 서비스를 이용할수 있도록 하기 위한 설정이

#  다. ftp 와 같이 특수한 경우를 제외하고는 ESTABLISHED 만 있으면 외부의

#  서비스를 이용하는데 지장이없다. ftp의 경우에는 active mode 와 passive

#  mode 처리를 모두 해 줘야 한다. 마지막의 Name Service Config 는 일반적

#  으로 네트워크에 연결이 되어 있는 서버들의 경우에는 모두 자신이 아니더

#  라도 외부의 name 질의를 해야 하므로 강제적으로 열리게 해 놓은 것이다.

# TCP service

$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

$iptables -A INPUT -p tcp –dport 21 -m state –state NEW,ESTABLISHED -j ACCEPT

$iptables -A INPUT -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT

$iptables -A INPUT -p tcp –dport 23 -m state –state NEW,ESTABLISHED -j 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

$iptables -A INPUT -p tcp –dport 110 -m state –state NEW,ESTABLISHED -j ACCEPT

$iptables -A INPUT -p tcp –dport 113 -m state –state NEW,ESTABLISHED -j ACCEPT

$iptables -A INPUT -p tcp –dport 3306 -m state –state NEW,ESTABLISHED -j ACCEPT

# ip 대역 예제.

#$iptables -A INPUT -s 211.0.0.0/8 -p tcp –dport 23 -m state –state \\

NEW,ESTABLISHED -j ACCEPT

#$iptables -A INPUT -s 210.0.0.0/8 -p tcp –dport 23 -m state –state \\

NEW,ESTABLISHED -j ACCEPT

#$iptables -A INPUT -s 211.0.0.0/8 -p tcp –dport 993 -m state –state \\

NEW,ESTABLISHED -j ACCEPT

# UDP service

$iptables -A INPUT -p udp –dport 53 -m state –state NEW,ESTABLISHED -j ACCEPT

# ICMP service

$iptables -A INPUT -s 211.0.0.0/8 -p icmp –icmp-type echo-request -j ACCEPT

$iptables -A INPUT -s 210.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

$iptables -A INPUT -p tcp –dport 1:1023 -j DROP

$iptables -A INPUT -p udp –dport 1:1023 -j DROP

$iptables -A INPUT -p icmp –icmp-type echo-request -j REJECT

# OUTPUT SERVICE

#$IPTABLES -Z OUTPUT

$IPTABLES -P OUTPUT ACCEPT

$IPTABLES -F OUTPUT

$IPTABLES -A OUTPUT -o eth0 -p tcp –dport 20 -m state –state NEW,ESTABLISHED -j \\

DROP

$IPTABLES -A OUTPUT -o eth0 -p tcp –dport 21 -m state –state NEW,ESTABLISHED -j \\

DROP

$IPTABLES -A OUTPUT -o eth0 -p tcp –dport 23 -m state –state NEW,ESTABLISHED -j \\

DROP

# 각종 서비스들에 대해 최대의 성능을 발휘할 수 있도록 TOS 설정을 한다.

#$iptables -t mangle -A OUTPUT -p tcp -s 0/0 –sport 80 -j TOS –set-tos 0x10

#$iptables -t mangle -A OUTPUT -p tcp -d 0/0 –dport 21 -j TOS –set-tos 0x10

#$iptables -t mangle -A OUTPUT -p tcp -d 0/0 –dport 22 -j TOS –set-tos 0x10

#$iptables -t mangle -A OUTPUT -p tcp -d 0/0 –dport 23 -j TOS –set-tos 0x10

#$iptables -t mangle -A OUTPUT -p tcp -s 0/0 –sport 20 -j TOS –set-tos 0x08

서진우

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

You may also like...

1 Response

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