GeoIP, iptables 로 국가별 접속 제한하기
페이지 정보
본문
###########################################
## 기본 방화벽 수정
####
# GeoIP, iptables 로 국가별 접속 제한하기
# http://webzero.tistory.com/653 (명령어 위주로 설명되어 있음)
# http://blog.cafe24.com/m/post/2023# (좀더 자세함)
####
#컴파일러 설치, 커널컴파일, 필요 패키지 설치, iptable 패치
root]# yum install gcc gcc-g++ make automake unzip zip xz kernel-devel-'uname -r' iptables-devel
#rpm 모듈 설치 (# getconf LONG_BIT 로 비트 확인)
root]# rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.i686.rpm (32bit)
root]# rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm (64bit)
--> 에러 시 http://pkgs.repoforge.org/rpmforge-release/ 에서 파일 다운 후 rpm 설치
#파일 라이브러리 설치
root]# yum install perl-Text-CSV_XS
#iptables 에드온 설치
root]# cd /usr/local/src
root]# wget http://downloads.sourceforge.net/project/xtables-addons/Xtables-addons/1.37/xtables-addons-1.37.tar.xz
root]# tar xvf xtables-addons-1.37.tar.xz
root]# cd xtables-addons-1.37
root]# ./configure --libdir=/usr/lib64
root]# make
root]# make install
- 정상적으로 컴파일이 되었다면 /lib64/xtables/libxt_geoip.so 파일이 생성되어있어야 한다.
1. 에러시 조치방법
[root@fullsearch ~]# rpm -qa gcc*
gcc-java-4.4.7-11.el6.i686
gcc-4.4.7-11.el6.i686
gcc-c++-4.4.7-11.el6.i686
gcc-gfortran-4.4.7-11.el6.i686
2. 설치중 아래와 같은 에러가 발생할 경우 해당 소스를 # 처리해주면 된다]
Xtables-addons 1.37 - Linux 2.6.32-431.el6.x86_64
if [ -n "/lib/modules/2.6.32-431.el6.x86_64/build" ]; then make -C /lib/modules/2.6.32-431.el6.x86_64/build M=/usr/local/src/xtables-addons-1.37/extensions modules; fi;
make[3]: Entering directory `/usr/src/kernels/2.6.32-431.el6.x86_64'
CC [M] /usr/local/src/xtables-addons-1.37/extensions/xt_RAWNAT.o
/usr/local/src/xtables-addons-1.37/extensions/xt_RAWNAT.c: In function ‘rawnat6_prepare_l4’:
/usr/local/src/xtables-addons-1.37/extensions/xt_RAWNAT.c:183: error: too few arguments to function ‘ipv6_find_hdr’
make[4]: *** [/usr/local/src/xtables-addons-1.37/extensions/xt_RAWNAT.o] 오류 1
make[3]: *** [_module_/usr/local/src/xtables-addons-1.37/extensions] 오류 2
make[3]: Leaving directory `/usr/src/kernels/2.6.32-431.el6.x86_64'
make[2]: *** [modules] 오류 2
make[2]: Leaving directory `/usr/local/src/xtables-addons-1.37/extensions'
make[1]: *** [all-recursive] 오류 1
make[1]: Leaving directory `/usr/local/src/xtables-addons-1.37'
make: *** [all] 오류 2
해결을 위해서는 mconfig 라는 파일에서 아래 세개를 주석처리해주면 된다.
하다보면 몇개정도 에러가나는데 그때마다 해당 모듈을 주석처리한다.
build_RAWNAT=m
build_SYSRQ=m
build_length2=m
# geoip 모듈 셋팅!
root]# cd geoip
root]# ./xt_geoip_dl
-- xt_geoip_dl 스크립트 에러시 ----------
rm -f GeoIPv6.csv{,.gz} GeoIPCountryCSV.zip GeoIPCountryWhois.csv
wget http://geolite.maxmind.com/download/geoip/database/GeoIPv6.csv.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip
gzip -d GeoIPv6.csv.gz
unzip GeoIPCountryCSV.zip
------------------------------------
root]# ./xt_geoip_build GeoIPCountryWhois.csv
--> ls -al 명령어로 보면 2개의 파일이 생성되고 BE,LE 라는 디렉토리가 볼 수 있을것이다.
root]# mkdir -p /usr/share/xt_geoip/
root]# cp -r {BE,LE} /usr/share/xt_geoip/
root]# cd /lib64/xtables/
root]# cp libxt_geoip.so libipt_geoip.so
# iptables 스크립트 샘플 (하단에 스크립트에 추가)
#
# iptables -A INPUT -p tcp -m geoip ! --src-cc KR -j DROP (국내 이외의 접근 막음)
# iptables -A INPUT -p tcp --dport 22 -m geoip --src-cc KR -j ACCECP (국내 IP만 22번 포트 허용)
# iptables -I INPUT -m geoip --src-cc CN -j DROP (중국아이피 막기)
#############################################################################
# Generated by iptables-save v1.4.7 on Wed Aug 6 13:58:14 2014
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1:132]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
## home
-A RH-Firewall-1-INPUT -p tcp -m tcp -s 111.111.111.111 -j ACCEPT
## backup server
-A RH-Firewall-1-INPUT -m state --state NEW -s 111.111.111.111 -m tcp -p tcp -j ACCEPT
##mDNS
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 53 --syn -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 25 --syn -j ACCEPT
###### GeoIP Start #####
### 구글허용
-A RH-Firewall-1-INPUT -m iprange --src-range 66.249.64.0-66.249.95.255 -m tcp -p tcp --dport 80 -j ACCEPT
### 트위트 허용
-A RH-Firewall-1-INPUT -m iprange --src-range 199.59.148.0-199.59.150.255 -m tcp -p tcp --dport 80 -j ACCEPT
###페이스북 허용
-A RH-Firewall-1-INPUT -m iprange --src-range 31.13.0.0-31.13.255.255 -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m iprange --src-range 66.220.144.0-66.220.160.255 -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m iprange --src-range 69.63.176.0-69.63.186.255 -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m iprange --src-range 69.171.224.0-69.171.255.255 -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m iprange --src-range 74.119.76.0-74.119.76.22 -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m iprange --src-range 173.252.64.0-173.252.255.255 -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m iprange --src-range 103.4.96.0-103.4.96.22 -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m iprange --src-range 204.15.20.0-204.15.20.22 -m tcp -p tcp --dport 80 -j ACCEPT
## 모든 해외 트래픽 차단
-A RH-Firewall-1-INPUT -p tcp -m geoip ! --src-cc KR -j DROP
###### GeoIP End #####
## 서비스포트
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 80 --syn -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 443 --syn -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Wed Aug 6 13:58:14 2014
## 기본 방화벽 수정
####
# GeoIP, iptables 로 국가별 접속 제한하기
# http://webzero.tistory.com/653 (명령어 위주로 설명되어 있음)
# http://blog.cafe24.com/m/post/2023# (좀더 자세함)
####
#컴파일러 설치, 커널컴파일, 필요 패키지 설치, iptable 패치
root]# yum install gcc gcc-g++ make automake unzip zip xz kernel-devel-'uname -r' iptables-devel
#rpm 모듈 설치 (# getconf LONG_BIT 로 비트 확인)
root]# rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.i686.rpm (32bit)
root]# rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm (64bit)
--> 에러 시 http://pkgs.repoforge.org/rpmforge-release/ 에서 파일 다운 후 rpm 설치
#파일 라이브러리 설치
root]# yum install perl-Text-CSV_XS
#iptables 에드온 설치
root]# cd /usr/local/src
root]# wget http://downloads.sourceforge.net/project/xtables-addons/Xtables-addons/1.37/xtables-addons-1.37.tar.xz
root]# tar xvf xtables-addons-1.37.tar.xz
root]# cd xtables-addons-1.37
root]# ./configure --libdir=/usr/lib64
root]# make
root]# make install
- 정상적으로 컴파일이 되었다면 /lib64/xtables/libxt_geoip.so 파일이 생성되어있어야 한다.
1. 에러시 조치방법
[root@fullsearch ~]# rpm -qa gcc*
gcc-java-4.4.7-11.el6.i686
gcc-4.4.7-11.el6.i686
gcc-c++-4.4.7-11.el6.i686
gcc-gfortran-4.4.7-11.el6.i686
2. 설치중 아래와 같은 에러가 발생할 경우 해당 소스를 # 처리해주면 된다]
Xtables-addons 1.37 - Linux 2.6.32-431.el6.x86_64
if [ -n "/lib/modules/2.6.32-431.el6.x86_64/build" ]; then make -C /lib/modules/2.6.32-431.el6.x86_64/build M=/usr/local/src/xtables-addons-1.37/extensions modules; fi;
make[3]: Entering directory `/usr/src/kernels/2.6.32-431.el6.x86_64'
CC [M] /usr/local/src/xtables-addons-1.37/extensions/xt_RAWNAT.o
/usr/local/src/xtables-addons-1.37/extensions/xt_RAWNAT.c: In function ‘rawnat6_prepare_l4’:
/usr/local/src/xtables-addons-1.37/extensions/xt_RAWNAT.c:183: error: too few arguments to function ‘ipv6_find_hdr’
make[4]: *** [/usr/local/src/xtables-addons-1.37/extensions/xt_RAWNAT.o] 오류 1
make[3]: *** [_module_/usr/local/src/xtables-addons-1.37/extensions] 오류 2
make[3]: Leaving directory `/usr/src/kernels/2.6.32-431.el6.x86_64'
make[2]: *** [modules] 오류 2
make[2]: Leaving directory `/usr/local/src/xtables-addons-1.37/extensions'
make[1]: *** [all-recursive] 오류 1
make[1]: Leaving directory `/usr/local/src/xtables-addons-1.37'
make: *** [all] 오류 2
해결을 위해서는 mconfig 라는 파일에서 아래 세개를 주석처리해주면 된다.
하다보면 몇개정도 에러가나는데 그때마다 해당 모듈을 주석처리한다.
build_RAWNAT=m
build_SYSRQ=m
build_length2=m
# geoip 모듈 셋팅!
root]# cd geoip
root]# ./xt_geoip_dl
-- xt_geoip_dl 스크립트 에러시 ----------
rm -f GeoIPv6.csv{,.gz} GeoIPCountryCSV.zip GeoIPCountryWhois.csv
wget http://geolite.maxmind.com/download/geoip/database/GeoIPv6.csv.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip
gzip -d GeoIPv6.csv.gz
unzip GeoIPCountryCSV.zip
------------------------------------
root]# ./xt_geoip_build GeoIPCountryWhois.csv
--> ls -al 명령어로 보면 2개의 파일이 생성되고 BE,LE 라는 디렉토리가 볼 수 있을것이다.
root]# mkdir -p /usr/share/xt_geoip/
root]# cp -r {BE,LE} /usr/share/xt_geoip/
root]# cd /lib64/xtables/
root]# cp libxt_geoip.so libipt_geoip.so
# iptables 스크립트 샘플 (하단에 스크립트에 추가)
#
# iptables -A INPUT -p tcp -m geoip ! --src-cc KR -j DROP (국내 이외의 접근 막음)
# iptables -A INPUT -p tcp --dport 22 -m geoip --src-cc KR -j ACCECP (국내 IP만 22번 포트 허용)
# iptables -I INPUT -m geoip --src-cc CN -j DROP (중국아이피 막기)
#############################################################################
# Generated by iptables-save v1.4.7 on Wed Aug 6 13:58:14 2014
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1:132]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
## home
-A RH-Firewall-1-INPUT -p tcp -m tcp -s 111.111.111.111 -j ACCEPT
## backup server
-A RH-Firewall-1-INPUT -m state --state NEW -s 111.111.111.111 -m tcp -p tcp -j ACCEPT
##mDNS
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 53 --syn -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 25 --syn -j ACCEPT
###### GeoIP Start #####
### 구글허용
-A RH-Firewall-1-INPUT -m iprange --src-range 66.249.64.0-66.249.95.255 -m tcp -p tcp --dport 80 -j ACCEPT
### 트위트 허용
-A RH-Firewall-1-INPUT -m iprange --src-range 199.59.148.0-199.59.150.255 -m tcp -p tcp --dport 80 -j ACCEPT
###페이스북 허용
-A RH-Firewall-1-INPUT -m iprange --src-range 31.13.0.0-31.13.255.255 -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m iprange --src-range 66.220.144.0-66.220.160.255 -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m iprange --src-range 69.63.176.0-69.63.186.255 -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m iprange --src-range 69.171.224.0-69.171.255.255 -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m iprange --src-range 74.119.76.0-74.119.76.22 -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m iprange --src-range 173.252.64.0-173.252.255.255 -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m iprange --src-range 103.4.96.0-103.4.96.22 -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m iprange --src-range 204.15.20.0-204.15.20.22 -m tcp -p tcp --dport 80 -j ACCEPT
## 모든 해외 트래픽 차단
-A RH-Firewall-1-INPUT -p tcp -m geoip ! --src-cc KR -j DROP
###### GeoIP End #####
## 서비스포트
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 80 --syn -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 443 --syn -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Wed Aug 6 13:58:14 2014
댓글목록
등록된 댓글이 없습니다.