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