Work/LINUX+SERVER

리눅스에 geoip 모듈 설치하기

보안감사를 대비하기 위해 전산실 내에 서버들에 보안설정을 하고 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버전에서는 상당히 수고로움이 동반되며 포스트가 길어지기때문에 별도로 작성한다.

반응형