|
|
|
|
|

월간 인기 게시물

게시물 57건
   
국가코드값을 이용해서 국가별 트래픽제어 스크립트
글쓴이 : 최고관리자 날짜 : 2010-04-01 (목) 12:49 조회 : 7787
글주소 :
                          

요구조건
OS : Linux
Netfilter (ipt_iprange)
iptables

국제표준화기구에서 정한 국가코드와 MaxMind 에서 배포하는 국가아이피 데이타를 가지고 시스템에서 차단/허용 유무를 적용하는 스크립트입니다.
MaxMind 에서 배포하는 데이타는 상용버전과 Free 번으로 구분되어지며 Free 버전은 1달에 한번(매월초) 아이피 데이타가 업데이트 됩니다.
참고 : http://www.maxmind.com/app/geolitecountry

매월 데이타를 업데이트해서 사용하실것을 권장하며 해당스크립트를 변형해서 CRON 과 함께 이용하시면 매달 업데이트된 데이타를 사용할수 있습니다.


현방화벽 정책은 ipt_backup 폴더에 시간별로 저장되며 기존룰 복구방법은 복구시점에 파일명으로 아래와같이 해주시면 됩니다.


[root@mojily ipt_backup]# iptables-restore > IPTABLES.2010-0331-1754-29


해당 방화벽 정책은 국가별로 체인을 나눠서 아이피 대역을 관리합니다.
설정한 국가에 설정이 필요하지 않을경우에는 기존시점으로 복구하시던지 아래 명령어를 통해서도 가능합니다.

EX) 중국 국가코드 : CN
[root@mojily ]# iptables -nL |more       현 방화벽 정책확인


[root@mojily ]# iptables -D INPUT -j CN_ZONE
[root@mojily ]# iptables -F CN_ZONE
[root@mojily ]# iptables -X CN_ZONE


※ 국내사용자 이외에 차단을 하고 싶으시면 아래부분에 DROP --> ACCEPT 로 수정하시고 KR 로 국가코드를 삽입하시고 그외에 막는룰을 추가하시면 됩니다.
 iptables -A KR_ZONE -j DROP

cat $CUR_DIR/iplist_range|while read ip ;do iptables -A "$COUNTRY"_ZONE -m iprange --src-range $ip -j DROP ;done


※ 스크립트를 사용함으로써 발생되는 피해에 대해서는 책임을 지지 않습니다.
    적용전/후 필히 확인해보시기 바랍니다.


#!/bin/bash
#
# Author : SMILESERV Security & Monitoring Team
# Mail : securitymon@smileserv.com
# Last modified :  May 31, 2010
#
# Requirement
# * OS : Linux
# * Netfilter (ipt_iprange)
# * iptable
# directory ipt_backup : iptable backup data
#
DATE=`date +'%Y-%m%d-%H%M-%S'`
IPTABLES=`which iptables`
IPTABLES_SAVE=`which iptables-save`
CUR_DIR=`pwd`

### 현재 설정 백업 ###
RULE_BACKUP=$CUR_DIR/ipt_backup
if [ ! -d $RULE_BACKUP ]
        then
        mkdir -p $RULE_BACKUP
fi
$IPTABLES_SAVE > $RULE_BACKUP/IPTABLES.$DATE

### 국가코드값 체크
function code_check
{
        echo -n "Insert CountryCode (ex : CN): "
        read COUNTRY
        change=`echo $COUNTRY |tr a-z A-Z`
        check=`echo $change |grep [^A-Za-z]`
        char_count=`expr length $change`

        if [ $char_count -ne 2 ] ; then
        echo "Error : Countrycode is made up 2 Alphabet character."
        echo ""
        code_check
        fi

        if [ "$check" ] ; then
        echo "Error : Not Alphabet."
        echo ""
        code_check
        fi
}

### 국가코드 중복점검 및 초기화 ###
function iptable_check
{
        CHECK=`$IPTABLES -nL |grep $COUNTRY |wc -l`
        if [ "$CHECK" -ne "0" ] ; then
        $IPTABLES -D INPUT -j $COUNTRY"_ZONE"
        $IPTABLES -F $COUNTRY"_ZONE"
        $IPTABLES -X $COUNTRY"_ZONE"
        fi
}

### 해당국가코드 존재유무 확인
function code_match {
cat $CUR_DIR/GeoIPCountryWhois.csv  | grep $COUNTRY > $CUR_DIR/iplist
if [ ! -s $CUR_DIR/iplist ] ; then
        echo "Error : The Countrycode does not match."
        exit
fi
}

code_check
wget -O  $CUR_DIR/IP_DB.zip http://www.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip
unzip $CUR_DIR/IP_DB.zip
code_match

### 적용 ###
iptable_check
$IPTABLES -N $COUNTRY"_ZONE"
$IPTABLES -A INPUT -j $COUNTRY"_ZONE"
cat $COUR_DIR iplist | perl -pi -e 's/,/ /g'  | perl -pi -e 's/"/ /g' | awk '{print $1"-" $2}' > iplist_range
cat $CUR_DIR/iplist_range |while read ip ;do iptables -A "$COUNTRY"_ZONE -m iprange --src-range $ip -j DROP ;done

### 로그삭제 ###
rm -rf $CUR_DIR/iplist
rm -rf $CUR_DIR/iplist_range





이름 패스워드
비밀글 (체크하면 글쓴이만 내용을 확인할 수 있습니다.)
왼쪽의 글자를 입력하세요.
   

 



 
사이트명 : 모지리네 | 대표 : 이경현 | 개인커뮤니티 : 랭키닷컴 운영체제(OS) | 경기도 성남시 분당구 | 전자우편 : mojily골뱅이chonnom.com Copyright ⓒ www.chonnom.com www.kyunghyun.net www.mojily.net. All rights reserved.