[보안] IPCHAINS를 사용한 Packet Filtering 10분 Guide

ipchains_guide-0.1.txt – IPCHAINS를 사용한 Packet Filtering 10분 Guide

이용재, yjlee@clunix.com, 2000.12.19.

Linux의 ipchains를 사용하면 특정 호스트가 자신으로 들어오고 나가는 packet을

filtering 할 수 있다. 자세한 정보는 IPCHAINS-HOWTO 를 보면 되지만, 졸라

복잡하므로 일단 무조건 따라하자. 물론 모든 건 root상태에서 수행하여야 한다.

1. 다음과 같은 내용으로 /etc/ipchains.cmd 라는 화일을 만들고,

“chmod 700 /etc/ipchains.cmd” 를 수행한다. (XXXX는 적당한 말로 채우면 됨)

#!/bin/sh

# ipchains rules for XXXXX

# by XXXX at XXXX.XX.XX.

export PATH=/sbin:/bin:/usr/bin

# Clear previous setting

echo 0 > /proc/sys/net/ipv4/ip_forward

ipchains -X

ipchains -F

ipchains -P input ACCEPT

ipchains -P output ACCEPT

ipchains -P forward ACCEPT

# Accept loopback

ipchains -A input -s 127.0.0.1 -j ACCEPT

ipchains -A input -d 127.0.0.1 -j ACCEPT

### Custom Rules

# All other rules comes here

### Custom Rules End

# Accept all ICMP processing

ipchains -A input -p ICMP -j ACCEPT

# Deny all others

ipchains -P input DENY

# Enable packet filtering

echo 1 > /proc/sys/net/ipv4/ip_forward

# Save New setting

/sbin/ipchains-save > /etc/ipchains.rules

/bin/chmod 600 /etc/ipchains.rules

# End of file

2. 일단, 자기 자신으로부터 밖으로 나가는 packet을 모두 허용한다. 자신의 IP가

192.168.12.3 이라면, 다음과 같은 line을 “###Custom Rules” 부분에 추가 한다:

(이하 “추가 한다”, “.. 하고 싶다면:”은 모두 여기에 추가하는 것을 가리킨다.)

(rule은 “적혀있는 순서대로” 처리된다. 따라서 허가와 금지가 섞이는 경우 rule의

순서에 주의하기 바란다.)

ipchains -A input -s 192.168.12.3/32 -j ACCEPT

3. 192.168.102.12 로부터의 접근을 허용하고 싶으면:

ipchains -A input -s 192.168.102.12/32 -j ACCEPT

4. 192.168.102.13 으로부터의 접근을 금지하고 싶으면:

ipchains -A input -s 192.168.102.13/32 -j DENY

5. 192.168.12.0 subnet (netmask 255.255.255.0)에서의 접근을 모두 허용하고

싶다면:

ipchains -A input -s 192.168.12.0/24 -j ACCEPT

6. 이 기계가 외부에 서비스를 제공 한다면 이들 서비스 포트에 대하여 허가해

주어야 한다. 예를 들어 dns, web, ftp, mail, ssh 을 제공하는 서버라면:

# Accept external service connections

ipchains -A input -p UDP -d 0.0.0.0/0 echo -j ACCEPT

ipchains -A input -p UDP -d 0.0.0.0/0 domain -j ACCEPT

ipchains -A input -p TCP -d 0.0.0.0/0 www -j ACCEPT

ipchains -A input -p TCP -d 0.0.0.0/0 https -j ACCEPT

ipchains -A input -p TCP -d 0.0.0.0/0 ftp -j ACCEPT

ipchains -A input -p TCP -d 0.0.0.0/0 ftp-data -j ACCEPT

ipchains -A input -p TCP -d 0.0.0.0/0 smtp -j ACCEPT

ipchains -A input -p TCP -d 0.0.0.0/0 ssh -j ACCEPT

# And vice versa

ipchains -A input -p UDP -s 0.0.0.0/0 echo -j ACCEPT

ipchains -A input -p UDP -s 0.0.0.0/0 domain -j ACCEPT

ipchains -A input -p TCP -s 0.0.0.0/0 www -j ACCEPT

ipchains -A input -p TCP -s 0.0.0.0/0 https -j ACCEPT

ipchains -A input -p TCP -s 0.0.0.0/0 8080 -j ACCEPT

ipchains -A input -p TCP -s 0.0.0.0/0 ftp -j ACCEPT

ipchains -A input -p TCP -s 0.0.0.0/0 ftp-data -j ACCEPT

ipchains -A input -p TCP -s 0.0.0.0/0 smtp -j ACCEPT

ipchains -A input -p TCP -s 0.0.0.0/0 ssh -j ACCEPT

7. /etc/ipchains.cmd 를 수정하고 나면, 이 스크립트 화일을 실행시키면, 설정된

내용에 따라 packet filtering이 수행된다.

(이때 /etc/ipchains.rules 이 만들어진다.)

현재의 ipchains 설정을 보려면 “/sbin/ipchains -nL” 을 수행하면 된다.

8. 시스템이 시작할때마다 packet filtering 설정이 되도록 하려면, 다음과 같은

내용으로 /etc/rc.d/init.d/packetfilter 파일을 만들고,

“chmod a+x /etc/rc.d/init.d/packetfilter” 한뒤,

“chkconfig packetfilter” 하면 된다.

#!/bin/sh

#

# Startup script for the ipchains packet filter

#

# chkconfig: 345 85 15

# description: ipchains packet filter control

# Source function library.

. /etc/rc.d/init.d/functions

# If no rules, do nothing.

[ -f /etc/ipchains.rules ] || exit 0

# See how we were called.

case “$1” in

  start)

        echo -n “Starting packet filtering: ”

        /sbin/ipchains-restore < /etc/ipchains.rules || exit 1

        echo 1 > /proc/sys/net/ipv4/ip_forward

        echo_success

        echo

        ;;

  stop)

        echo -n “Shutting down packet filtering: ”

        echo 0 > /proc/sys/net/ipv4/ip_forward

        /sbin/ipchains -X

        /sbin/ipchains -F

        /sbin/ipchains -P input ACCEPT

        /sbin/ipchains -P output ACCEPT

        /sbin/ipchains -P forward ACCEPT

        echo_success

        echo

        ;;

  status)

        if [ “`cat /proc/sys/net/ipv4/ip_forward`” = “1” ];

        then

            echo “Packet filtering is enabled”

            /sbin/ipchains -L -n

        else

            echo “Packet filtering is diabled”

        fi

        ;;

  *)

        echo “Usage: $0 {start|stop|staus}”

        exit 1

        ;;

esac

exit 0

9. Packet filtering 기능을 중지하고 초기화시키려면 위에서 만든 script를

사용하여, “/etc/rc.d/init.d/packetfilter stop” 을 하던지, 다음 명령을

수행하면 된다:

% echo 0 > /proc/sys/net/ipv4/ip_forward

% /sbin/ipchains -X

% /sbin/ipchains -F

% /sbin/ipchains -P input ACCEPT

% /sbin/ipchains -P output ACCEPT

% /sbin/ipchains -P forward ACCEPT

.

서진우

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

You may also like...

2 Responses

  1. 2022년 6월 22일

    1artificial

  2. 2023년 1월 27일

    2version

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