newtype
::: newtype의 지식창고 :::
newtype
전체 방문자
605,344
오늘
5
어제
7
  • 분류 전체보기 (390)
    • it (212)
      • c (43)
      • VB (5)
      • csharp (2)
      • java (2)
      • etc (32)
      • www (48)
      • emb (25)
      • win (4)
      • db (20)
      • sqlce (7)
      • devOps (8)
      • gmap (6)
      • python (2)
      • cygwin (2)
      • go (5)
      • ruby (1)
    • 명언 (10)
    • 모임 (18)
      • 붕주회 (3)
      • 신흥컴정 (14)
      • 웹20기 (1)
    • 사진 (8)
    • 불펌 (29)
    • 막글 (98)
    • 게임 (6)
    • 여행 (8)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 관리

공지사항

  • whoami
03-26 16:54
hELLO · Designed By 정상우.
newtype

::: newtype의 지식창고 :::

Nginx geoip 연동
it/www

Nginx geoip 연동

2022. 11. 17. 11:06

Lightsail 셋팅을 하고 나니, 해킹 시도로 의심되는 해외에서 접속이 많았습니다. geoip를 사용해서 해외 접속을 막아 보겠습니다.

차단 방법

  1. maxmind 에 가입하고 License key를 발급

    • https://dev.maxmind.com/geoip/geolite2-free-geolocation-data?lang=en 중간 배너를 클릭해서 계정을 만들고, License key를 발급 받습니다.

  2. 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
  1. 자동으로 update 받도록 crontab에 추가

    매주 오전 3시에 update 받습니다.

0 3 * * Mon /usr/bin/geoipupdate 2> /dev/null
  1. 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
  1. geoip 모듈 로드

    nginx.conf 가장 위에 추가 합니다.

load_module modules/ngx_http_geoip2_module.so;
  1. 공통 설정

    /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;
    }
  1. 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;
    }
}
  1. 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/
반응형
저작자표시
    'it/www' 카테고리의 다른 글
    • Nginx SSL 설정
    • Code Finder
    • FAQ html 템플릿
    • 카카오톡 그룹 채팅방 통계
    geoip, nginx
    newtype
    newtype
    지극히 개인적인 지식의 창고
    댓글쓰기
    이전 글
    Nginx SSL 설정

    티스토리툴바