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