설치성공기
HOME > 커뮤니티 > 설치성공기

[프로그램] 해외IP FTP공격 차단

 글쓴이 : winxcom
작성일 : 12-01-14 16:46    조회 : 8,348  

최근 해킹 피해사례를 뉴스나 매스컴을 통해 접할 수 있습니다. 중국 발 해킹에 대한 피해가 매년 증가추세를 보이고 있으며, 보안시스템이 강화되고 있지만 최근 들어서는 해커들이 사용하는 해킹 툴도 강력해지며 보안시스템을 속속 무력화시키고 있습니다. 해킹에 대한 피해가 급증하는 만큼 서버관리자들의 서버 보안 정책에도 많은 관심이 필요한 때입니다. 에 저희 KoreaIDC에서는 당사의 서비스를 이용 하시고 계신 고객님들에게 해킹의 대한 피해와 불편함을 줄이고자 본 매뉴얼을 작성하게 되었습니다. 흔히 Linux에서 가장 많이 사용되고 있는 방화벽 프로그램인 iptables에 geoip라는 국가별 IP를 식별 하는 모듈을 추가적으로 설치하여, 가장 많이 사용되는 ftp서비스의 취약점을 이용한 해외에서의 무차별 적인 공격에 대해, ftp서비스에 사용되는 TCP 20, 21port의 접속을 국내외에 불필요한 해외의 접근을 방화벽에서 차단함으로써 해킹에 대한 피해를 보다 효과적으로 줄일 수 있습니다.

1. 2.6.27.4 Kernel 소스 다운로드,iptables 1.4.2 소스 다운로드,patch-o-matic-ng 소스 다운로드

각 소스는 아래 링크에서 다운로드 합니다.

# cd /usr/src

# wget http://220.73.173.111/~whisker1/linux-2.6.27.4.tgz
# wget http://220.73.173.111/~whisker1/iptables-20081028.tar.bz2
# wget http://220.73.173.111/~whisker1/patch-o-matic-ng-20081028.tar.bz2

상기 소스들은 /usr/src 디렉토리에 받아 놓고 압축을 풀어 둡니다.
커널 소스와 iptables 소스는 압축을 풀어 놓으면 디렉토리 명이 길기 때문에
짧은 디렉토리 명으로 심볼릭 링크를 걸어 두는 것이 작업상 편리합니다.

# /usr/src

# tar xfzp linux-2.6.27.4.tgz

# rm –rf linux ß기존 심볼릭링크 삭제 * 삭제시 주의*
# ln -s linux-2.6.27.4 linux
# tar xvfj iptables-20081028.tar.bz2
# ln -s iptables-20081028 iptables

# tar xvfj patch-o-matic-ng-20081028.tar.bz2



2. patch-o-matic-ng 소스로 iptables 소스와 커널 소스에 패치를 합니다.이 메뉴얼에서는 connlimit 와 geoip 모듈만 커널에 추가시키고 iptables 에서 이 모듈들을 컨트롤할 수 있게 하는 방법만을 다루겠습니다.

# cd /usr/src/iptables
# ./configure


※ 반드시 iptables 소스 디렉토리에서 configure 커맨드로 컴파일 환경설정을 먼저 한 뒤에 patch-o-matic-ng 로 패치를 가해 주어야 합니다. 그렇지 않을 경우 패치 과정에서 iptables 소스가 패치 소스에 적합치 않다는 에러를 내며 중단 될수도 있습니다.

# cd /usr/src/patch-o-matic-ng-20081028
# ./runme --download
# ./runme geoip


이 작업 과정을 보면 geoip 패치만 하게 되는데 connlimit 모듈은 2.6.23 커널부터 기본 포함이 되어 있어서 커널 컴파일 시 활성화만 시켜주면 되며 iptables에도 기본 extension으로 포함되어 있기 때문에 iptables에도 따로 패치를 가할 필요가 없습니다. 그러나 geoip는 커널에도, iptables의 기본 익스텐션으로도 포함되어 있지 않으므로 patch-o-matic-ng 로 수동 패치해 줘야 합니다.

3. geoip 패치가 끝났으면 먼저 패치된 커널 소스를 컴파일하여 설치하고, 새로운 커널로 부팅이 되도록 grub.conf 수정 후 재부팅 합니다.

# cd /usr/src/linux

# make bzImage
# make modules
# make modules_install
# make install

# vi /etc/grub.conf

변경전 default=1

변경후 default=0

# reboot


재부팅후 modprobe 커맨드로 xt_geoip, xt_connlimit 모듈을 올려줍니다.

# depmod -a
# modprobe xt_geoip
# modprobe xt_connlimit

lsmod 커맨드를 이용하여 모듈을 로딩해 보면 이상없이 모듈이 올라올 것을 확인할 수 있습니다.
이제 iptables 작업으로 넘어갑니다.

# lsmod

4. patch-o-matic-ng로 패치된 iptables 소스컴파일 설치.

여기서는 기존의 rpm 버전 iptables를 삭제하지 않고 그 위에 소스컴파일로 덮어씌우는 방식을 설명합니다. 왜냐하면 rpm 버전을 삭제한 뒤 소스로 새롭게 설치하게 되면 기존의 rpm 버전에서 제공하던 system-config-securitylevel, lokkit, /etc/rc.d/init.d/iptables 와 같은 실행 스크립트 파일이 존재하지 않기 때문에 따로 스크립트로 구현하지 않는 한 일일이 iptables 룰을 추가해야 하는 불편함을 감수해야 합니다. 다행스럽게도 iptables를 소스로 설치하게 되면 바이너리 파일, 환경설정 파일, 라이브러리 등이 rpm 버전과 거의 동일한 경로에 설치되므로 rpm 버전 위에 덮어 씌워 설치하면 기존의 관련 명령어를 그대로 활용할 수 있다는 장점이 있습니다.

# cd /usr/src/iptables
# ./configure

# cp /usr/src/patch-o-matic-ng-20081028/patchlets/geoip/linux-2.6/include/linux/netfilter/xt_geoip.h /usr/src/iptables-20081028/include/linux/netfilter/


iptables 의 소스에서 /usr/src/iptables/include/xtables.h 를 다음과 같이 수정하면 됩니다.

# vi /usr/src/iptables/include/xtables.h

[기존 코드]
#define XTABLES_VERSION "1.4.1.1"
#define XTABLES_VERSION_CODE (0x10000 * 1 + 0x100 * 4 + 1)

[수정후]

#define XTABLES_VERSION "1.4.1.1"
#define XTABLES_VERSION_CODE (0x10000 * 1 + 0x100 * 4 + 1)
#define IPTABLES_VERSION "1.4.2"
ß 위의 두줄 밑에 추가해 줍니다.



# make
# make install



CCLD libxt_dscp.so
CC libxt_esp.oo
CCLD libxt_esp.so
CC libxt_geoip.oo
libxt_geoip.c:69: warning: no previous prototype for 'get_country_subnets'
libxt_geoip.c: In function 'get_country_subnets':
libxt_geoip.c:72: warning: declaration of 'index' shadows a global declaration
/usr/include/string.h:304: warning: shadowed declaration is here
CCLD libxt_geoip.so
CC libxt_hashlimit.oo


이제 기존의 rpm 버전 iptables에서 사용되던 명령어들을 삭제하고 새로이 설치한 소스 버전의 명령어들로 교체하는 작업이 필요합니다.
/sbin 디렉토리안의 iptables 관련 명령 삭제 후, /usr/local/sbin 아래에 생성된 iptables 관련 명령들을 심볼릭 링크를 생성합니다.(총 8개 명령)

# ls /usr/local/sbin

아래의 8개 명령어를 삭제합니다. (rm 파일명)
ip6tables ip6tables-restore iptables iptables-restore
ip6tables-multi ip6tables-save iptables-multi iptables-save

#mv /sbin/iptables /sbin/iptables_old

#mv /sbin/iptables-restore /sbin/iptables-restore_old

#mv /sbin/iptables-save /sbin/iptables-save_old

# ln -s /usr/local/sbin/ip6tables /sbin
# ln -s /usr/local/sbin/ip6tables-restore /sbin
# ln -s /usr/local/sbin/iptables /sbin
# ln -s /usr/local/sbin/iptables-restore /sbin
# ln -s /usr/local/sbin/ip6tables-multi /sbin
# ln -s /usr/local/sbin/ip6tables-save /sbin
# ln -s /usr/local/sbin/iptables-multi /sbin
# ln -s /usr/local/sbin/iptables-save /sbin


이제 iptables 버전을 확인해 보면 업그레이드된 버전임을 알 수 있습니다.

# iptables -V
iptables v1.4.2



5. geoip database 설치

국가 DB 생성 및 최신 정보로 업데이트

일단 알아두어야 할것은 geoip 모듈은 /var/geoip 경로의 DB파일 참조합니다.
cvs2bin 툴을 이용하여 매월1일 업데이트 되는 geoip database를 생성합니다.

툴 다운로드후 설치 및 CSV 파일 변환
wget
http://220.73.173.111/~whisker1/csv2bin-20041103.tar.gz

# tar -xvzf csv2bin-20041103.tar.gz
# cd csv2bin
# make

국가별 DB를 다운로드합니다.

wget http://220.73.173.111/~whisker1/GeoIPCountryCSV.zip

# unzip GeoIPCountryCSV.zip

# chmod 755 GeoIPCountryWhois.csv

# mv GeoIPCountryWhois.csv csv2bin

# cd csv2bin

# ./csv2bin ./GeoIPCountryWhois.csv

# mkdir /var/geoip

# cp geoipdb* /var/geoip

# echo "1024000" > /proc/sys/net/netfilter/nf_conntrack_max

# echo "128000" > /sys/module/nf_conntrack/parameters/hashsize

6. iptables 정상 동작 확인

# iptables -A INPUT -p tcp --dport 80 -m string --string "/default.ida?" --algo kmp -j REJECT

# iptables -A INPUT -p tcp --dport 21 -m geoip --src-cc KR -j ACCEPT

# iptables -nvL

위와 같이 iptables 명령어를 내렸을 때 오류 메시지가 나오지 않아야 정상적으로 설치 된 것 입니다.

7. iptables 적용 ex) 한국 외에 ftp(21port)의 접속을 차단.

iptables –A INPUT –p tcp –-dport 21 –m geoip –-src-cc KR –j ACCEPT

iptables –A INPUT –p tcp –-dport 21 –j DROP

[출처] 해외IP FTP공격 차단 (webdori) |작성자 풍사



이 글을 트위터로 보내기 이 글을 페이스북으로 보내기