📢 이 게시글은 아래의 사양을 기준으로 작성되었습니다.
Server OS : Ubuntu 20.04.3 LTS
WebServer : Apache 2.4
목차
개인용 또는 개발용 웹서버의 로그를 확인하면 이상한 주소로 접속을 한 기록이 많이 있다. 대부분이 해외 해커들이다. 오래된 버전의 웹서버를 사용하는 곳의 취약점을 노리는 것으로 하루에 몇번이고 공격을 시도한다.
해외에서 접속을 할 일이 없기에 완전히 차단을 하려면 IP로 구별을 해야하는데 일일이 해외IP를 구분해서 접속 금지 목록에 추가를 하는 것은 불가능한 일이다.
이럴 때 GeoIP를 사용하면 쉽게 접속자 IP의 국가를 확인할 수 있다.
1. 회원가입
GeoIP는 MaxMind라는 회사에서 관리를 하고 있다. 조금 오래된 글들을 보면 쉽게 관련 파일을 받을 수 있었지만 지금은 회원가입을 한 후에 파일을 받을 수 있다.
MaxMind 가입 링크 : https://www.maxmind.com/en/geolite2/signup
GeoLite2 Sign Up | MaxMind
Revised on December 7, 2020 By downloading or using our GeoLite2 Database, you are accepting and agreeing to the terms and conditions set forth in this GeoLite2 End User License Agreement (this "Agreement"). MaxMind, Inc. ("MaxMind"), a Delaware Corpora
www.maxmind.com
가입 폼에 이름, 회사명(적당히 입력), 국가(한국은 South Korea), 사용 목적(필자는 Internet Security로 선택), 이메일을 입력하고 가입을 누르면 입력한 이메일 주소로 인증 메일이 전송된다.
메일에 링크가 하나 있는데 패스워드를 설정하는 링크로 클릭후 사용할 패스워드를 설정하면 계정에 로그인을 할 수 있다.
패스워드를 설정했다면 오른쪽 위의 사람 아이콘을 클릭해 로그인을 하거나 로그인 주소(https://www.maxmind.com/en/account/login)에서 로그인을 한다.
2. 액세스 키 생성
회원가입에 성공을 했다면 IP 데이터 베이스에 접근을 할 수 있는 액세스 키를 생성해야 한다.
Account Summary 화면에서 왼쪽의 메뉴에서 Account->Manage License Keys 항목을 클릭한다.

아래쪽에 Generate New license key 라는 버튼을 누른다.

라이센스 키의 간단한 설명을 입력하는 칸이 있고 아래에는 업데이트에도 사용할 것인지 선택을 해야 한다. 업데이트를 해야 새로운 데이터가 추가되므로 업데이트를 사용하는 쪽으로 선택하고 Confirm을 누른다.

그러면 라이센스키가 생성이되어 화면에 출력이 된다. 이렇게 출력된 키는 다음에 다시 확인을 할 수 없다. 그러니 메모장 같은 곳에 기록을 해 둔 후 따로 저장을 해 두어야 추후에도 사용이 가능하다.
저장할 때 UserID도 함께 저장을 해 두는 편이 좋다. 라이센스키를 사용할 때 UserID와 라이센스키를 같이 입력해야 하기 때문이다.
3. GeoIP update 설치
웹서버에 GeoIP를 설치하기 위해서는 MaxMind의 repository를 추가 후 geoipupdate라는 패키지를 설치해야 한다. 이 패키지를 사용하면 GeoIP 데이터베이스 설치와 업데이트를 쉽게 할 수 있다.
# repository 추가
sudo add-apt-repository ppa:maxmind/ppa
# apt update 및 geoipupdate 설치
sudo apt update
sudo apt install geoipupdate
설치가 되었다면 발급받은 라이센스키와 UserID를 geoipupdate의 구성파일에 입력한다.
# GeoIP 설정파일 수정
sudo vi /etc/GeoIP.conf
GeoIP.conf 파일을 보면 바로 AccountID와 LicenseKey 항목이 보인다. 여기에 발급 받은 ID와 키를 입력한다.
# 입력 예시
AccountID 123456
LicenseKey AAAAAAAAAAAAAAAA
설정 저장 후 GeoIP2의 데이터베이스를 업데이트 한다.
# 데이터베이스 업데이트
sudo geoipupdate -v
# 설치 확인
ls -la /usr/share/GeoIP

설치가 제대로 되었다면 위 화면처럼 GeoLite2-City.mmdb와 GeoLite2-Country.mmdb 파일이 생성된다.
4. apache 모듈 설치
apache에 적용을 하기 위해서 관련 패키지를 설치한다.
# apache2-dev 및 maxmind 관련 패키지 설치
sudo apt install apache2-dev libmaxminddb0 libmaxminddb-dev mmdb-bin
MaxMind의 github에서 apache module을 받아 설치한다. 현재 최신 버전이 1.2.0이라서 1.2.0버전을 받는다.
# wget으로 압축파일 다운로드
wget https://github.com/maxmind/mod_maxminddb/releases/download/1.2.0/mod_maxminddb-1.2.0.tar.gz
# 압축 해제 후 설치
tar -zxvf mod_maxminddb-1.2.0.tar.gz
cd mod_maxminddb-1.2.0/
./configure
make
sudo make install
5. 적용하기
설치가 문제없이 되었다면 maxminddb 모듈을 활성화 한다.
sudo a2enmod maxminddb
적용할 웹사이트 설정 파일을 수정한다.
# 적용할 사이트 설정 파일 수정
sudo vi /etc/apache2/sites-available/000-default.conf
전역적으로 설정을 할 것이기 때문에 Location을 사용하여 아래와 같은 내용을 추가한다.
<VirtualHost>
# ...설정내용...
# 특정 국가 차단
<Location />
MaxMindDBEnable On
MaxMindDBFile DB /usr/share/GeoIP/GeoLite2-Country.mmdb
MaxMindDBEnv MM_COUNTRY_CODE DB/country/iso_code
SetEnvIf MM_COUNTRY_CODE ^(BR|US|EU|CN) BlockCountry
Deny from env=BlockCountry
</Location>
</VirtualHost>
위 설정은 특정 국가를 차단하는 설정으로 IP주소의 국가가 브라질, 미국, 유럽, 중국일 경우 웹서버의 접속을 차단한다.
특정 국가만 허용을 한다면 Allow를 사용하면 된다.
<VirtualHost>
# ...설정내용...
# 특정 국가만 허용
<Location />
MaxMindDBEnable On
MaxMindDBFile DB /usr/share/GeoIP/GeoLite2-Country.mmdb
MaxMindDBEnv MM_COUNTRY_CODE DB/country/iso_code
SetEnvIf MM_COUNTRY_CODE ^(KR|US) AllowCountry
Allow from env=AllowCountry
</Location>
</VirtualHost>
위 설정은 한국, 미국만을 웹서버 접근 가능 국가로 지정한다.
두 설정 중 상황에 따라 편한 방식을 사용하여 국가별로 웹서버 접근을 제어할 수 있다.
설정을 적용하기 위해 apache 서버를 재시작한다.
sudo service apache2 restart
이제 vpn 등을 활용하여 해외 IP로 웹서버에 접속을 하여 설정이 올바르게 되었는지 확인한다.
※ 모든 IP의 국가가 분류된 것이 아니여서 완벽하게 차단이 되지는 않는다. 무료버전이여서 그런건지는 모르겠지만 그래도 대부분의 IP는 분류가 되어 있고 기본적인 차단은 가능하므로 유용하게 사용할 수 있다.
6. apache 로그에 국가 표시
GeoIP 모듈을 설치했다면 apache 로그 포맷을 수정하여 로그에도 국가를 표시할 수 있다.
# apache 설정 파일 수정
sudo vi /etc/apache2/apache2.conf
아파치 설정 파일에서 240 Line 쯤을 보면 LogFormat이 설정된 항목이 있다. 거기에 아래 값을 추가한다.
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{MM_COUNTRY_CODE}e" geoip
LogFormat 중 combined에 %{MM_COUNTRY_CODE}e 를 추가하였다.
로그 포맷을 추가한 후 사이트 설정 파일에 로그 포맷을 위 설정값으로 변경한다.
# 기존 설정
CustomLog ${APACHE_LOG_DIR}/access.log combined
# 변경 설정
CustomLog ${APACHE_LOG_DIR}/access.log geoip
CustomLog 항목의 마지막 값인 combined를 geoip 포맷으로 변경한다. 아파치를 재시작 한 후 웹서버에 접속을 하면 로그 마지막에 국가가 표시된다.

GeoIP 데이터베이스에 없는 IP나 192.168 대역으로 접속을 했다면 '-'로 출력이 된다.
'Ubuntu > Apache 웹서버' 카테고리의 다른 글
[Ubuntu]apache 서버로 webdav 적용하기 (14) | 2021.02.02 |
---|