[보안] ipchains 실용예제

ipchains를 이용해서 제가 하나 만든(짜집기) 엽기적인 방화벽 설정을 올립니다.

복사해서 국을 끓여드시든 방화벽을 설정하시든 참고하시고 피해가 발생해도 저 책임 못 집니다.

리눅스 커널 2.2기반입니다. 저한테 질문하지 마시고 ipchains 한번 공부해보세요.

좀 머리가 아프기는 하지만…. 혹시나 문제있는 부분이 있다면 알려주시구요.

-l 은 로그를 기록하는 옵션인데 잘못 사용하면 로그 디렉토리가 꽉 차버릴수 있다는 사실

  명심하세요.

#!/bin/sh

# firewall 설정

# 참고자료 http://kldp.org/HOWTO/html/IP-Masquerade/IP-Masquerade-HOWTO-6.html#ss6.5

# 참고자료 http://tunelinux.pe.kr/security/lasg/firewall/index.html

# 참고자료 http://kldp.org/Translations/IPCHAINS-HOWTO

# 작성일 : 2000.05.15

# 작성자 : 문태준 (taejun at taejun.pe.kr http://tunelinux.pe.kr

#http://taejun.pe.kr http://database.sarang.net)

# 외부 공인 ip를 211.11.11.68로 가정

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

# Load all required IP MASQ modules

#

#   NOTE:  Only load the IP MASQ modules you need.  All current IP MASQ modules

# are shown below but are commented from loading.

# Needed to initially load modules

#

/sbin/depmod -a

# Supports the proper masquerading of FTP file transfers using the PORT method

#

/sbin/modprobe ip_masq_ftp

# Supports the masquerading of RealAudio over UDP.  Without this module,

#       RealAudio WILL function but in TCP mode.  This can cause a reduction

#       in sound quality

#

/sbin/modprobe ip_masq_raudio

# Supports the masquerading of IRC DCC file transfers

#

#/sbin/modprobe ip_masq_irc

# Supports the masquerading of Quake and QuakeWorld by default.  This modules is

#   for for multiple users behind the Linux MASQ server.  If you are going to play

#   Quake I, II, and III, use the second example.

#

#Quake I / QuakeWorld (ports 26000 and 27000)

#/sbin/modprobe ip_masq_quake

#

#Quake I/II/III / QuakeWorld (ports 26000, 27000, 27910, 27960)

#/sbin/modprobe ip_masq_quake ports=26000,27000,27910,27960

# Supports the masquerading of the CuSeeme video conferencing software

#

#/sbin/modprobe ip_masq_cuseeme

#Supports the masquerading of the VDO-live video conferencing software

#

#/sbin/modprobe ip_masq_vdolive

#CRITICAL:  Enable IP forwarding since it is disabled by default since

#

#  Redhat Users:  you may try changing the options in /etc/sysconfig/network from:

#

#     FORWARD_IPV4=false

#  to

#     FORWARD_IPV4=true

# ip 포워딩 기능 활성화

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

# RFC1812에 따른 IP spoof 방지를 위한 설정(커널 2.2 이상 버전)

# 아래에서 ip 스푸핑 해당 항목 참고

for pfile in /proc/sys/net/ipv4/conf/*/rp_filter

do

echo “1” > $pfile

done

# ip 주소를 스푸핑한다고 예상되는 경우 로그에 기록하기

echo “1” > /proc/sys/net/ipv4/conf/all/log_martians

# 브로드캐스트, 멀티캐스트 주소에 ICMP 메시지 보내는것 막기

# “smurf” 공격 방지용

# 아래에서 해당 조항 참고

# 커널 2.2 이상에 해당

echo “1” > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# 기본 정책 거부

ipchains -F input

ipchains -P input REJECT

ipchains -F output

ipchains -P output REJECT

ipchains -F forward

ipchains -P forward REJECT

# 기본 정책 허용

#ipchains -F input

#ipchains -P input ACCEPT

#ipchains -F output

#ipchains -P output ACCEPT

#ipchains -F forward

#ipchains -P forward ACCEPT

# 기본 정책 flush

#

#ipchains -F input

#ipchains -P input ACCEPT

#

#

#

#ipchains -F output

#ipchains -P output ACCEPT

##

#ipchains -F forward

#ipchains -P forward ACCEPT

#

#

# Get the dynamic IP address assigned via DHCP

#

#extint=”eth0″

#extip=”`/sbin/ifconfig eth0 | grep ‘inet addr’ | awk ‘{print $2}’ | sed -e ‘s/.*://’`”

#extip=”211.111.111.68″

# Assign the internal IP

#intint=”eth1″

#intnet=”192.168.1.0/24″

# MASQ timeouts

#

#   2 hrs timeout for TCP session timeouts

#   TCP 세션 타임아웃시간

#  10 sec timeout for traffic after the TCP/IP “FIN” packet is received

# FIN 패킷 이후의 TCP 세션

#  60 sec timeout for UDP traffic (MASQ’ed ICQ users must enable a 30sec firewall timeout in

ICQ itself)

#  UDP 패킷에 대한 값

#

ipchains -M -S 7200 10 60

#############################################################################

# Incoming, flush and set default policy of reject. Actually the default policy

# is irrelevant because there is a catch all rule with deny and log.

# input 정책 설정

# 내부에서 외부로의 접근 허용

ipchains -A input -i eth1 -s 192.168.1.0/24 -d 0/0 -j ACCEPT

# 내부 네트웍 통신허용

# 위 내용에 포함됨

#ipchains -A input -i eth1 -j ACCEPT

# 외부에서 공인 아이피로 접근 허용

ipchains -A input -i eth0 -s 0/0 -d 211.111.111.68/32 -j ACCEPT

# 내부 인터페이스는 모두 허용

ipchains -A input -i lo -s 0/0 -d 0/0 -j ACCEPT

####### IP spoofing 막기 #######

# 외부에서 사설 ip로 접근하는것

ipchains -A input -i eth0 -s 10.0.0.0/8 -d 0/0 -j DENY

ipchains -A input -i eth0 -s 127.0.0.0/8 -d 0/0 -j DENY

ipchains -A input -i eth0 -s 172.16.0.0/16 -d 0/0 -j DENY

ipchains -A input -i eth0 -s 192.168.0.0/24 -d 0/0 -j DENY

# ip spoofing 방지 외부에서 내부 사설 ip 위장

ipchains -A input -i eth0 -s 192.168.1.0/24 -d 0/0 -j DENY

# ip 어드레스를 속여서 외부에서 들어오는 패킷 거부함.

# 외부에서 공인 ip 속여 접근하는것 차단

ipchains -A input -i eth0 -s 211.111.111.68/32 -d 0/0 -j DENY

# BLOCKING 1:1023

# 방화벽 서버에서 외부에 제공할 서비스가 없으므로 포트를 막음

ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 1:1023

ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 1:1023

# broadcast, multicast 막음

ipchains -A input -i eth0 -s 0/0 -d 255.255.255.255/32 -j DENY

ipchains -A input -i eth0 -s 0/0 -d 211.111.111.255/32 -j DENY

ipchains -A input -i eth1 -s 0/0 -d 255.255.255.255/32 -j DENY

ipchains -A input -i eth1 -s 0/0 -d 192.168.1.255/32 -j DENY

#ipchains -A input -i eth1 -s 0/0 -d 211.111.111.255/32 -j DENY

# ICMP에 broadcast, multicast 하는것(Smurf 공격) 막음

# DOS 공격에 필요함

ipchains -A input -p icmp -i eth0 -s 0/0 -d 211.111.111.255 -j DENY

# 나머지는 모두 버리고 로그 기록에 남김

# -l 은 syslog를 이용 로그에 기록하는 옵션임

#

ipchains -A input -s 0/0 -d 0/0 -j REJECT

#ipchains -A input -s 0/0 -d 0/0 -l -j REJECT

############################################################################

# Outgoing, flush and set default policy of reject. Actually the default policy

# is irrelevant because there is a catch all rule with deny and log.

# output 정책 설정

#ipchains -F output

#ipchains -P output REJECT

# local interface, any source going to local net is valid

# 로컬 내부 전송 허용

ipchains -A output -i eth1 -s 0.0.0.0/0 -d 192.168.1.0/24 -j ACCEPT

# 내부 네트웍 통신허용

# 위 내용에 포함이 됨

#ipchains -A output -i eth1 -j ACCEPT

# outgoing to local net on remote interface, stuffed routing, deny

# 외부로 나가는 것이 사설 ip(목적지)를 향해 나가는 것은 말이 안되지요?

# 사설 ip 전송 차단

ipchains -A output -i eth0 -s 0.0.0.0/0 -d 192.168.1.0/24 -l -j REJECT

# outgoing from local net on remote interface, stuffed masquerading, deny

# 외부로 나가는것이 사설 ip(출발지)면 말이 안되지요?

ipchains -A output -i eth0 -s 192.168.1.0/24 -d 0.0.0.0/0 -l -j REJECT

# anything else outgoing on remote interface is valid

# 공인 ip에서 외부로 나가기 허용

ipchains -A output -i eth0 -s 211.111.111.68/32 -d 0.0.0.0/0 -j ACCEPT

# loopback interface is valid.

# 로프백으로 나가는것 허용

ipchains -A output -i lo -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT

# catch all rule, all other outgoing is denied and logged. pity there is no

# log option on the policy but this does the job instead.

# 그외의 것은 모두 차단

ipchains -A output -s 0.0.0.0/0 -d 0.0.0.0/0 -l -j REJECT

############################################################################

# Forwarding, flush and set default policy of deny. Actually the default policy

# is irrelevant because there is a catch all rule with deny and log.

# forward 정책

# 192.168.1.0-255 사이 외부 접속 허가

# 그 이외의 패킷은 전송하지 않음.

#ipchains -P forward DENY

ipchains -A forward -i eth0 -s 192.168.1.0/24 -d 0.0.0.0/0 -j MASQ

#ipchains -A forward -s 192.168.1.0/24 -d 0.0.0.0/0 -j MASQ

# userlink를 사용하여 LAN 내부로부터 포트번호 137-139의 NetBIOS 패킷 외부로의 전송을 거부

ipchains -A forward -i eth0 -p tcp -s 192.168.1.0/0 137:139 -d 0/0 1024:65535 -j DENY

ipchains -A forward -i eth0 -p udp -s 192.168.1.0/0 137:139 -d 0/0 1024:65535 -j DENY

서진우

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

You may also like...

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