Dev/Web
Nginx geoip 연동
newtype
2022. 11. 17. 11:06
Lightsail 셋팅을 하고 나니, 해킹 시도로 의심되는 해외에서 접속이 많았습니다. geoip를 사용해서 해외 접속을 막아 보겠습니다.
차단 방법
maxmind 에 가입하고 License key를 발급
https://dev.maxmind.com/geoip/geolite2-free-geolocation-data?lang=en 중간 배너를 클릭해서 계정을 만들고, License key를 발급 받습니다.
geoipupdate 설치
geoip 연동을 위해 geoipupdate를 설치합니다.
apt-get install build-essential
apt-get install libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev
add-apt-repository ppa:maxmind/ppa
apt update
apt install geoipupdate libmaxminddb0 libmaxminddb-dev mmdb-bin
자동으로 update 받도록 crontab에 추가
매주 오전 3시에 update 받습니다.
0 3 * * Mon /usr/bin/geoipupdate 2> /dev/null
geoip 모듈 설치
git에서 nginx 코드를 내려받아 직접 빌드 할 수도 있고, 설치해도 됩니다.
apt-get install nginx-plus-module-geoip2
설치 후 설정 파일에 발급받은 key를 넣여야 합니다.
vi /etc/GeoIP.conf
# are available from https://www.maxmind.com/en/my_license_key.
AccountID NNNNNNNN
LicenseKey XXXXXXXXXXXX
geoip 모듈 로드
nginx.conf 가장 위에 추가 합니다.
load_module modules/ngx_http_geoip2_module.so;
공통 설정
/etc/nginx/conf.d/geoip2.conf 파일을 추가합니다.
한국만 접속 되도록 설정했습니다.
geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb {
auto_reload 60m;
$geoip2_metadata_country_build metadata build_epoch;
$geoip2_data_country_code country iso_code;
$geoip2_data_country_name country names en;
}
geoip2 /usr/share/GeoIP/GeoLite2-City.mmdb {
auto_reload 60m;
$geoip2_metadata_city_build metadata build_epoch;
$geoip2_data_city_name city names en;
}
fastcgi_param COUNTRY_CODE $geoip2_data_country_code;
fastcgi_param COUNTRY_NAME $geoip2_data_country_name;
fastcgi_param CITY_NAME $geoip2_data_city_name;
map $geoip2_data_country_code $domain_allowed_country {
default no;
KR yes;
RU no;
CN no;
}
server별 설정
server.location에 허용된 국가 아니면 444를 응답하도록 설정을 추가합니다.
server {
listen 80;
server_name mydomain.com;
location / {
if ($domain_allowed_country = no) {
return 444;
}
root /home/bitnami/htdocs;
index index.html index.htm;
}
}
- conf reload
sudo nginx -s reload
참고
- https://dev.maxmind.com/geoip/geolite2-free-geolocation-data?lang=en
- https://blog.kinsdayz.com/2020/07/25/nginx-geoip2%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-%EB%B6%88%EB%9F%89%ED%95%9C-%EC%A0%91%EC%86%8D%EA%B5%AD%EA%B0%80-%EB%A7%89%EB%8A%94-%EB%B0%A9%EB%B2%95/
- https://docs.nginx.com/nginx/admin-guide/dynamic-modules/geoip2/
반응형