반응형

서버를 운영하다보면 상당히 많은 악의적인 접근이 있다는 것을 알 수 있다. 그중에서 가장 많은 비중을 차지하는 것이 중국이다. 그래서 이번에는 중국 ip를 차단하는 방법을 알아보도록 하겠다.

 

먼저 아래와 같이 설치한다.

 

#sudo apt-get install geoip-bin geoip-database

 

그리고 아래와 같이 쳐본다.

#geoiplookup 218.92.0.107

 

이렇게 친절하게 중국이라고 알려준다.

 

이제 이런 중국 ip는 접근을 못하게 막아보려고 한다.

 

#vi /usr/local/bin/sshfilter.sh

 

이런 파일을 만든다.그리고 아래와 같이 입력한다.

 

#!/bin/bash

# UPPERCASE space-separated country codes to ACCEPT
ALLOW_COUNTRIES="KR"
DISALLOW_COUNTRIES="CN"

if [ $# -ne 1 ]; then
  echo "Usage:  `basename $0` <ip>" 1>&2
  exit 0 # return true in case of config issue
fi

COUNTRY=`/usr/bin/geoiplookup $1 | awk -F ": " '{ print $2 }' | awk -F "," '{ print $1 }' | head -n 1`

#[[ $COUNTRY = "IP Address not found" || $ALLOW_COUNTRIES =~ $COUNTRY ]] && RESPONSE="ALLOW" || RESPONSE="DENY"
[[ $COUNTRY = "IP Address not found" || $DISALLOW_COUNTRIES != $COUNTRY ]] && RESPONSE="ALLOW" || RESPONSE="DENY"

if [ $RESPONSE = "ALLOW" ]
then
  exit 0
else
  logger "$RESPONSE sshd connection from $1 ($COUNTRY)"
  exit 1
fi

쉘 스크립트를 몰라도 php만 공부했어도 무슨 말인지 대충 감이온다. goiplookup이란 명령어를 사용해서 country 를 뽑은 다음disallow_countries가 아니면 허용을 한다는 뜻이다.

 

반대로 주석을 해 놓은 부분을 보면 allow_countries만 허용을 하겠단 뜻이다. 해외 ip를 모두 차단하겠다면 아랫부분은 주석을 해주고 윗부분 주석돼 있는 부분을 풀어주면 된다.

 

이렇게 저장하고 나온다. 그리고 해당 파일에 대한 권한을 준다.

 

# sudo chown root.root /usr/local/bin/sshfilter.sh
# sudo chmod 775 /usr/local/bin/sshfilter.sh

 

소유자를 root로 바꾸고 실행권한을 주었다.

 

#vi /etc/hosts.deny

 

이 파일을 열어서 아래 구문을 입력한다.

 

sshd: ALL

 

저장하고 나온다.

 

#vi /etc/hosts.allow

파일을 열어서

 

sshd: ALL: aclexec /usr/local/bin/sshfilter.sh %a

 

이렇게 입력하고 저장한다.

 

이제 다음을 실행한다.

 

#/usr/local/bin/sshfilter.sh 218.92.0.107

 

그리고 아래 파일을 열어본다.

 

#vi /var/log/syslog

 

맨 아랫줄에 보면

 

aaa 11 15:24:10 ooooo root: DENY sshd connection from 218.92.0.107 (CN)

 

이렇게 해당 ip를 차단했다는 기록이 남는다.

 

설정을 다하고 나면 중국에서 접근하는 ip는 모두 차단이 된다. 모니터링을 해보자.

 

#tail -f /var/log/syslog

 

이렇게 쳐보고 기다려보면 차단 되는 ip들이 나타난다. 처음 설치하고 나면 충격을 받는다. 진짜 많이 들어오거든...

 

마지막으로 ip database를 주기적으로 업데이트 해준다.

 

#vi /etc/cron.monthly/updatingGeoIP

 

#!/bin/bash

cd /tmp


if [ -f GeoIP.dat.gz ]
then
    gzip -d GeoIP.dat.gz
    rm -f /usr/share/GeoIP/GeoIP.dat
    mv -f GeoIP.dat /usr/share/GeoIP/GeoIP.dat
else
    echo "The GeoIP library could not be downloaded and updated"
fi


이렇게 저장한다.

 

이제 한달에 한번씩 업데이트를 수행하게 된다.

 

물론 이렇게 해도 vpn같은거 쓰면 소용없다. 그래도 최소한의 방어책은 마련해두는 것이 좋다.

 

이 모든 정보는 아래 블로그에서 가져왔다. 이분께 감사드립니다.

 

https://shutcoding.tistory.com/24

 

우분투 해외ip ssh차단

우분투에서 해외ip ssh접속을 차단하기. 1. GEOIP DATABASE 설치 geoiplookup 명령어와 GeoIP country (free) database를 설치합니다. $ sudo apt-get install geoip-bin geoip-database 잘 설치 되었는지 다음과 같이 테스트를

shutcoding.tistory.com

 

반응형

+ Recent posts