작성자 : 문태준

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@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

관련 링크: http://tunelinux.pe.kr

'Security' 카테고리의 다른 글

nmap 포트스캔 유틸리티  (0) 2001.08.10
소유권과 소유자파일 점검하기  (0) 2001.08.09
리눅스서버에서 열린포트 찾기  (0) 2001.08.08
portsentry 사용법  (0) 2001.08.08
특정 아이피에게만 텔넷허용  (0) 2001.08.08

+ Recent posts