Shell Script

국가 차단(ipdeny.com)

1. 개요

IP 기반으로 차단하다보면 국가차단이 필요할 때가 있다.

이 때 사용할 수 있는 방법은 2가지다. 1.GeoIP, 2. ipdeny.com

보통 GeoIP를 많이 사용하는데 ipdeny.com에서 DB를 받아서 ufw로 차단할 수도 있다.

2017.8.16. 현재 ipdeny.com DB에 등록된 IP 대역은 총 178237개 이다.

 

2. Source code

#!/bin/bash
 
# Maker : LT
# Date : 2017.08.16
# Description : block ip by ipdeny DB
 
FILE_NAME="all-zones.tar.gz"
DIR_NAME="all-zone"
 
# Get root permission
sudo cat /dev/null 1> /dev/null 2>&1
 
echo -e "\E[;36m === Status Firewall === \033[0m"
sudo ufw status
 
 
echo -e "\n\E[;36m === Download IP_Deny file === \033[0m"
if [ -f $FILE_NAME ]; then
        rm -rf $FILE_NAME
fi
if [ -d $DIR_NAME ]; then
        rm -rf $DIR_NAME
fi
 
wget http://www.ipdeny.com/ipblocks/ 2> /dev/null
update_date=`cat index.html | grep "Zone files last updated" | cut -c 35-`
echo " DB Date : $update_date "
rm -rf index.html
 
wget http://www.ipdeny.com/ipblocks/data/countries/all-zones.tar.gz 2> /dev/null
if [ ! -d $DIR_NAME ]; then
        mkdir $DIR_NAME
fi
 
tar xvf all-zones.tar.gz -C all-zone > /dev/null
 
echo -e " Download Complete!"
 
 
echo -e "\n\E[;36m === Add Rule to Firewall === \033[0m"
echo -ne " Input Country Code(All : *) : "
read cc_in
 
DENY_FILE="$DIR_NAME/$cc_in.zone"
 
if [ -f $DENY_FILE ]; then
        deny_list=`cat $DENY_FILE`
 
        for deny_ip in $deny_list
        do
                check_firewall=`sudo ufw status | grep DENY | grep $deny_ip`
 
                if [ -z "$check_firewall" ]; then
                        echo -e " + $deny_ip"
                        sudo ufw deny from $deny_ip to any > /dev/null
                else
                        echo -e " = $deny_ip"
                fi
        done
fi
 
rm -rf $FILE_NAME
rm -rf $DIR_NAME
 
 
echo -e "\n\E[;36m === Result Firewall === \033[0m"
sudo ufw status

 

 

Back To Top