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