국가별 접속 차단 방법
# iptables stop
# chkconfig --level 345 iptables off -level 3,4,5 에서 실행되는 iptables off
# rpm -e |grep iptables
# rm -rf /usr/local/sbin/iptable 관련항목 삭제
# rm -rf /usr/local/ iptables 관련항목 삭제
1. 필요한 파일 /usr/src/kernel
# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.22.tar.gz 커널 컴파일
# wget ftp://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/patch-o-matic-ng-20070819.tar.bz2
# wget ftp://ftp.netfilter.org/pub/iptables/iptables-1.3.7-1.3.8.bz2
# wget http://people.netfilter.org/peejix/geoip/tools/csv2bin-20041103.tar.gz
# wget http://www.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip
2. geoip 라이브러리 생성
csv 파일을 geoipdb.bin , geoipdb.idx 파일로 변환
# mkdir /var/geoip
# cd /var/geoip
# unzip GeoIPCountryCSV.zip
# tar zxvf csv2bin-20041103.tar.gz
# cd csv2bin
# make
# ./csv2bin ../GeoIPCountryWhois.csv
# cp /var/geoip/csv2bin/geoipdb.* /var/geoip
/var/geoip’ 디렉토리를 생성
geoipdb.bin은 국가별 IP 대역에 대한 바이너리 포맷의 데이터
geoipdb.idx는 인덱스 파일
geoip 라이브러리가 ‘/var/geoip’ 디렉토리를 참조하기 때문에 디렉토리명은 반드시 정해진 명칭을 사용해야한다.
3. kernel 컴파일 /usr/src 에 압축풀기
# tar zxvf linux-2.6.22.tar.gz <=== 이거만
# tar jxvf patch-o-matic-ng-20070819.tar.bz2
# tar jxvf iptables-1.3.7-1.3.8.bz2
# ln -s linux-2.6.22 linux < == 이거두
# ln -s iptables-1.3.7-1.3.8 iptables
# export KERNEL_DIR=/usr/src/linux
# export IPTABLES_DIR=/usr/src/iptables
# mv patch-o-matic-ng-20070819 /usr/src/iptables
# ./runme --download --> geoip등의 여러 모듈을 웹에서 받아서 패치할 수 있도록 해준다.
# ./runme geoip --> geoip 패치 다른 모듈도 패치
==================================================================
kernel: 2.6.22, /usr/src/kernels/2.6.22-1.2142_FC4-i386
Iptables: 1.3.8, /usr/src/iptables
Each patch is a new feature: many have minimal impact, some do not.
Almost every one has bugs, so don't apply what you don't need!
-------------------------------------------------------
Already applied:
Testing geoip... not applied
The geoip patch:
Author: Samuel Jean <sjean@cookinglinux.org>; Nicolas Bouliane <nib@cookinglinux.org>
Status: Stable
This patch makes possible to match a packet
by its source or destination country.
GeoIP options:
[!] --src-cc, --source-country country[,country,country,...]
Match packet coming from (one of)
the specified country(ies)
[!] --dst-cc, --destination-country country[,country,country,...]
Match packet going to (one of)
the specified country(ies)
NOTE: The country is inputed by its ISO3166 code.
The only extra files you need is a binary db (geoipdb.bin) & its index file (geoipdb.idx).
Take a look at http://people.netfilter.org/peejix/geoip/howto/geoip-HOWTO.html
for a quick HOWTO.
-----------------------------------------------------------------
Do you want to apply this patch [N/y/t/f/a/r/b/w/q/?] y
unable to find ladd slot in src /tmp/pom-15160/net/ipv4/netfilter/Makefile (./patchlets/geoip/linux-2.6/./net/ipv4/netfilter/Makefile.ladd)
-----------------------------------------------------------------
Do you want to apply this patch [N/y/t/f/a/r/b/w/q/?] -> y 선택
==================================================================
*******************************************************************************************************************************************************
# cp /usr/src/kernels/커널버전/.config /usr/src/linux/.config --> 예 버전에 대한 설정을 가지고온당
# make menuconfig
==================================================================
[Load an Alternate Configuration File] 선택
-> [.config] 입력
-> [ok] 선택
*******************************************************************************************************************************************************
[Networking] 선택
-> Networking support
-> Networking options
-> Network packet filtering (replaces ipchains)
-> IP: Netfilter Configuration
-> [*] geoip match support [선택]
====================================================================
# make dep && make clean && make bzImage && make modules --> error 가 나타난다. <=== 이거 까지.
=======================kernel 2.6.22 에서 나타나는 오류==============
CC [M] net/ipv4/netfilter/ipt_geoip.o
net/ipv4/netfilter/ipt_geoip.c: In function `match':
net/ipv4/netfilter/ipt_geoip.c:113: error: structure has no member named `nh'
net/ipv4/netfilter/ipt_geoip.c: In function `init':
net/ipv4/netfilter/ipt_geoip.c:291: warning: implicit declaration of function `ipt_register_match'
net/ipv4/netfilter/ipt_geoip.c: In function `fini':
net/ipv4/netfilter/ipt_geoip.c:296: warning: implicit declaration of function `ipt_unregister_match'
make[3]: *** [net/ipv4/netfilter/ipt_geoip.o] 오류 1
make[2]: *** [net/ipv4/netfilter] 오류 2
make[1]: *** [net/ipv4] 오류 2
make: *** [net] 오류 2
==================================================================
# cp geoip-match-2.6.22.patch /usr/src/linux/net/ipv4/netfilter/
# cd /usr/src/linux/net/ipv4/netfilter/
# patch -p1 < geoip-match-2.6.22.patch
-->: [ipt_geoip.c] 입력 = geoip를 재 패치 하기위해서이다.
# make dep && make clean && make bzImage && make modules && make modules_install && make install
3. iptables 컴파일
# cd /usr/src/iptables
# export KERNEL_DIR=/usr/src/linux
# make && make install && make install-devel (개발버전에서 사용)
# ldconfig -v
# cd /usr/include/
# mv linux linux.orig
# ln -s /usr/local/linux/include/linux linux
**소스 컴파일된 iptables 지우기 -> /usr/local 에 있는 파일만 지우면 됨 reboot
이후 iptables 역시 ‘ftp.netfilter.org/pub/iptables/’에서 최신 버전을 다운로드받아 설치한다.
커널 컴파일을 완료한 후 새로운 버전의 커널로 부팅하면 이제 iptables의 geoip를 사용할 준비가 된 것이다. 사용할 수 있는 옵션은 --src-cc와 --dst-cc가 있는데, 각각 뒤에 국가 코드명을 넣으면 된다. 예를 들어 확인해 보자.
- 일본과 미국에서의 웹 접속을 차단하고 다른 곳에서의 접속은 허용할 때
iptables -A INPUT -p tcp --dport 20,21,22,25,53,80,110,143 -m geoip --src-cc JP,US -j DROP
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
- 한국에서의 ftp만 허용하고 나머지 국가에서의 접속은 차단하고자 할 때
iptables -A INPUT -p tcp -m multiport --dport 20,21,22,25,53,80,110,143 -m geoip --src-cc KR -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dport 20,21,22,25,53,80,110,143 -j DROP
또는 iptables -A INPUT -p tcp --dport 21 -m geoip ! --src-cc KR -j DROP
실제로 운영중인 서버에 설정한 결과 서버가 느려지거나 부하가 늘어나는 일은 없었다. 이를 적절히 활용한다면 다양한 응용이 가능할 것이다.
리눅스에서도 윈도우처럼 자동 업데이트하기
리눅스에 비해 윈도우의 장점중 하나는 업데이트가 쉽고 편리하다는 것이다. 특히 최근처럼 보안 문제가 이슈화되는 시기에 이는 더욱 민감한 문제가 아닐 수 없다.
더구나 윈도우의 경우 자동으로 현재의 환경을 체크해 업데이트할 항목을 바로 보여주지만, 리눅스 서버를 운영하다보면 어떤 패키지를 업데이트해야 할지도 모르겠고, 일일이 찾아서 업데이트하는 것 역시 여간 불편한 일이 아닐 수 없다.
특히 rpm 등 패키지 형태로 많이 사용하는 리눅스의 경우 업데이트 때문에 의존성 등 다른 문제가 발생하지 않을까 하는 막연한 두려움이 있는 것도 사실이다. 그러나 그 중에서도 가장 큰 문제는 리눅스 서버가 여러대가 있을 경우, 버전이 각기 다른 서버에 로그인해 버전 확인 후 일일이 패치하는 것은 시간과 인력이 많이 소요되는 일이라는 점이다.
그런데 이제 이 문제를 시원하게 해결해 줄 수 있는 솔루션이 나왔고 점차로 사용자 층도 넓어지고 있다.
이는 yum이라는 것으로, ‘Yellow dog Updater, Modified’의 약자로 미국의 듀크대학에서 파이썬(python) 언어로 개발되고 있다. yum에 대한 자세한 내용은 홈페이지(linux.duke.edu/projects/yum/)를 참고하기 바란다.
rc.firewall
-----------------------------------------------------------
#!/bin/sh
IPTABLES="/usr/local/sbin/iptables"
IPADDR=$(awk -F'[=]' '/IPADDR/ {print $2}' /etc/sysconfig/network-scripts/ifcfg-eth0)
/sbin/modprobe ip_conntrack_ftp
$IPTABLES -F
$IPTABLES -X
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD DROP
# Local Traffic ALL allow
$IPTABLES -A INPUT -s 127.0.0.1 -j ACCEPT
$IPTABLES -A INPUT -s $IPADDR -j ACCEPT
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# geoip
$IPTABLES -A INPUT -p tcp -m multiport --dport 20,21,22,25,53,80,110,143 -m geoip --src-cc KR -j ACCEPT
$IPTABLES -A INPUT -p tcp -m multiport --dport 20,21,22,25,53,80,110,143 -j DROP
# Dport Allow
$IPTABLES -A INPUT -p tcp -m multiport -s 0.0.0.0/0 -d $IPADDR --dport 20,21,22,25,53,80,110,143,3306 -j ACCEPT
$IPTABLES -A INPUT -p udp -m multiport -s 0.0.0.0/0 -d $IPADDR --dport 20,53 -j ACCEPT
# Sport Allow
$IPTABLES -A INPUT -p tcp -m multiport -s 0.0.0.0/0 -d $IPADDR --sport 20,21,22,25,53,80,110,143,3306 -j ACCEPT
$IPTABLES -A INPUT -p udp -m multiport -s 0.0.0.0/0 -d $IPADDR --sport 20,53 -j ACCEPT
# Ping Allow
$IPTABLES -A INPUT -p icmp -s 0:0:0:0/0 -d 0:0:0:0/0 -j ACCEPT
$IPTABLES -A INPUT -p icmp -s $IPADDR -d $IPADDR -j ACCEPT
# net send drop
#$IPTABLES -A INPUT -p tcp --syn -d $IPADDR --sport 139 -j DROP
$IPTABLES -A INPUT -p tcp --syn -d $IPADDR --sport 2603 -j DROP
$IPTABLES -A INPUT -p tcp --syn -d $IPADDR --sport 6666:6667 -j DROP
$IPTABLES -A INPUT -p udp -m multiport -d $IPADDR --dport 135 -j DROP
## INVALID packet drop
$IPTABLES -A INPUT -m state --state INVALID -j LOG --log-prefix "INVALID DROP"
$IPTABLES -A INPUT -m state --state INVALID -j DROP
# syn packet drop
$IPTABLES -A INPUT -p tcp --syn -d $IPADDR -j DROP
-----------------------------------------------------------------
rc.firewall.stop
---------------------------------------------------------------
#!/bin/sh
IPTABLES="/usr/local/sbin/iptables"
$IPTABLES -F
$IPTABLES -X
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
--------------------------------------------------------------------------
- 참조 사이트
http://www.maxmind.com/geoip
http://blog.sorpyo.com/29
댓글 없음:
댓글 쓰기