리눅스에 geoip 모듈 설치하기
- 꼬반
- 2015. 6. 8. 09:24
보안감사를 대비하기 위해 전산실 내에 서버들에 보안설정을 하고 iptables에 geoip 모듈까지 설치하였다.
그동안 사용안하던걸 갑자기 적용하려하니 삽질에 삽질을 ㅠㅠ 거듭하여 삽질 후기를 기록한다.
먼저 적용환경은 다음과 같다
CentOS 5 / 6 / 7
Fedora 8 / 10 / 12
....
....
그나마 두 OS가 RHEL 계열이라 다행.. Debian 계열은 없어서 다음과 같이 작업 했다.
1. 먼저 CentOS 6 / 7 / Fedora 12
이 버전은 설치가 상당히 쉬운편(5버전 커널에 비하여)이여서 스크립트로 돌림.
CentOS 6
<code>
#!/bin/sh
#iptables 경로
IPTABLES="/sbin/iptables"
######################################
#2015/02/24 1st made by ifmkl
######################################
echo "Step 1 : SSH port Check"
grep Port /etc/ssh/sshd_config
grep Root /etc/ssh/sshd_config
echo -e "\nStep 2 : selinux Check\n"
grep SELINUX /etc/selinux/config
# enforce 거나 disable 이면 permissive 변경
sed -i -e "s/SELINUX=enforcing/SELINUX=permissive/" /etc/selinux/config
sed -i -e "s/SELINUX=disabled/SELINUX=permissive/" /etc/selinux/config
echo -e "\n"
grep SELINUX /etc/selinux/config
echo -e "\nStep 3 : hosts 설정\n"
# hosts.deny 설정
echo -e "작업 전\n"
cat /etc/hosts.deny
echo sshd : ALL >> /etc/hosts.deny
echo -e "\n작업 후\n"
cat /etc/hosts.deny
# hosts.allow 설정
echo -e "\n작업 전\n"
cat /etc/hosts.allow
echo sshd : ip.ip.ip. >> /etc/hosts.allow
echo sshd : ip.ip.ip. >> /etc/hosts.allow
echo -e "\n작업 후\n"
cat /etc/hosts.allow
echo -e "\nStep 4 : geoip 설치\n"
#perl-Text-CSV_XS 설치
yum install -y kernel-devel iptables-devel
rpm -i http://packages.sw.be/rpmforge-release/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
yum install -y perl-Text-CSV_XS
#xtables-addons 설치
wget http://downloads.sourceforge.net/project/xtables-addons/Xtables-addons/1.47/xtables-addons-1.47.1.tar.xz
tar xvf xtables-addons-1.47.1.tar.xz
cd xtables-addons-1.47.1/
./configure
make && make install
cd geoip/
./xt_geoip_dl
./xt_geoip_build GeoIPCountryWhois.csv
mkdir -p /usr/share/xt_geoip/
cp -r {BE,LE} /usr/share/xt_geoip/
echo -e "\nStep 5 : iptables 설정\n"
# 설정 확인
$IPTABLES -nL --line-numbers
# 기본 정책 ACCEPT
$IPTABLES -P INPUT ACCEPT
# 체인에 정의된 모든 규칙을 삭제
$IPTABLES -F
# 사용자 정의 규칙 삭제
$IPTABLES -X
# INPUT 체인에 로컬호스트 인터페이스에 들어오는 패킷 허용
$IPTABLES -A INPUT -i lo -j ACCEPT
# INPUT 체인에 state 모듈과 매치되는 established, related 패킷 허용
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# SSH 포트 허용
$IPTABLES -A INPUT -p tcp -m state --state NEW -m tcp --dport 3030 -j ACCEPT
# HTTP 포트 허용
$IPTABLES -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
# HTTPS 포트 허용
$IPTABLES -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
# TOMCAT 포트
$IPTABLES -A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT
$IPTABLES -A INPUT -p tcp -m tcp --dport 8009 -j ACCEPT
# MySQL 포트 허용
$IPTABLES -A INPUT -p tcp --dport 3306 -j ACCEPT
# DNS
$IPTABLES -A INPUT -p tcp --dport 53 -j ACCEPT
$IPTABLES -A INPUT -p udp --dport 53 -j ACCEPT
# FTP
$IPTABLES -A INPUT -p tcp --dport 21 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --sport 21 -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 1024:65535 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --sport 1024:65535 -j ACCEPT
# NAGIOS
$IPTABLES -A INPUT -p tcp --dport 566 -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 567 -j ACCEPT
# 메일서버
# SMTP TCP 25
$IPTABLES -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
# Secure SMTP TCP 465
$IPTABLES -A INPUT -p tcp -m tcp --dport 465 -j ACCEPT
# POP3 TCP 110
$IPTABLES -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
# Secure POP3 TCP 995
$IPTABLES -A INPUT -p tcp -m tcp --dport 995 -j ACCEPT
# IMAP TCP 143
$IPTABLES -A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
# Secure IMAP TCP 993
$IPTABLES -A INPUT -p tcp -m tcp --dport 993 -j ACCEPT
# ICMP
$IPTABLES -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
$IPTABLES -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
# LDAP
$IPTABLES -A INPUT -p tcp --dport 389 -j ACCEPT
# 보안 정책 NULL 패킷 차단
$IPTABLES -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
# 보안 정책 syn-flood attack 차단
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
# 중국 접근 차단
$IPTABLES -I INPUT -m geoip --src-cc CN -j DROP
# 기본 INPUT 정책 DROP
$IPTABLES -P INPUT DROP
# FOWARD 체인 정책 DROP
$IPTABLES -P FORWARD DROP
# OUTPUT 체인에 대한 기본 정책 허용
$IPTABLES -P OUTPUT ACCEPT
# 설정 확인
echo -e "\n"
$IPTABLES -L -v
# 설정 저장
echo -e "\n"
service iptables save
# 방화벽 재시작
echo -e "\n"
service iptables restart
</code>
스크립트가 기니 7버전은 설치 부분만
CentOS 7
<code>
echo -e "\nStep 4 : geoip 설치\n"
#perl-Text-CSV_XS 설치
yum install -y kernel-devel iptables-devel
rpm -i http://packages.sw.be/rpmforge-release/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
yum install -y perl-Text-CSV_XS
#xtables-addons 설치
wget http://downloads.sourceforge.net/project/xtables-addons/Xtables-addons/2.6/xtables-addons-2.6.tar.xz
tar xvf xtables-addons-2.6.tar.xz
cd xtables-addons-2.6/
./configure
make && make install
cd geoip/
./xt_geoip_dl
./xt_geoip_build GeoIPCountryWhois.csv
mkdir -p /usr/share/xt_geoip/
cp -r {BE,LE} /usr/share/xt_geoip/
</code>
두 부분의 차이점은 설치하는 모듈 버전의 차이이다.
설치 과정에서 약 2개의 트러블슈팅을 만났는데 다음과 같다.
1. 컴파일 과정에서 특정 함수 문제 -> 해당 함수 주석
2. 커널 버전이 지원 되지 않는 경우 -> kernel-devel 버전을 uname -r 로 확인하여 동일한 버전 설치
이정도만 하면 6과 7버전에서는 크게 어려움 없이 설치할 수 있다.
다만 5버전에서는 상당히 수고로움이 동반되며 포스트가 길어지기때문에 별도로 작성한다.