Nginx, Alpine Linux 및 Docker를 사용하여 특정 국가에서 웹사이트에 액세스하지 못하도록 차단

이 게시물은 특정 국가에서 웹사이트를 사용하지 못하도록 차단하도록 알파인 리눅스에서 Nginx를 구성하는 방법을 간략하게 설명합니다. 전체 예를 보려면 this GitHub repository을 확인할 수도 있습니다.

Nginx GeoIP 모듈 설치



모듈을 설치하려면 다음을 실행하십시오.

apk --no-cache add nginx-mod-http-geoip


the old GeoIP module , not the paid-for GeoIP2 one that requires Nginx Plus 입니다.

GeoIP 데이터베이스 다운로드



GeoIP 데이터베이스는 최근에 형식을 mmdb 형식으로 전환했지만 GeoIP 모듈은 여전히 ​​레거시dat 형식을 사용합니다.

ways of converting from mmdb to dat이 있지만 운 좋게도 사용자 provides download of pre-converted files가 있으므로 거기에서 최신 버전을 다운로드할 수 있습니다.

국가 데이터베이스를 다운로드하고 압축을 풀고 경로에 넣으십시오/usr/share/GeoIPCountry.dat.

nginx.conf 수정


nginx.conf 파일을 수정하고 다음을 추가합니다.
http 블록 내부에 다음을 추가합니다.

geoip_country /usr/share/GeoIPCountry.dat;

# Allowed proxy addresses
geoip_proxy 10.0.0.0/8;
geoip_proxy 172.17.0.1/16;

# List of disallowed countries 
map $geoip_country_code $allowed_country {
    default yes;
    AL no;
    BS no;
}


역방향 프록시/로드 밸런서(예: AWS ALB) 앞에서 Nginx를 사용하는 경우에만 geoip_proxy 항목이 필요합니다. 여기에 포함된 범위의 경우 Nginx는 요청이 제공된 IP와 반대로 X-Forwarded-For 헤더에서 IP를 찾습니다. 그러한 설정이 없으면 해당 라인을 제거할 수 있습니다.

알바니아와 바하마를 나열하는 예제에서 국가 코드 목록도 수정해야 합니다. 모든 국가 코드on this site를 찾을 수 있습니다.

사이트의 server 블록 안에 다음을 추가합니다.

# Add Country header for debugging
add_header X-Cntry "$geoip_country_code";

if ($allowed_country = no) {
    return 444;
}


IP가 차단된 국가 중 하나에 속하는 경우 콘텐츠를 반환하지 않음으로써 IP 주소를 차단합니다. 또한 모든 것이 올바르게 작동하는지 확인할 수 있도록 국가 코드와 함께 X-Cntry라는 헤더를 설정합니다. 예를 들어 이제 다음 명령을 사용하여 서버와 국가 코드를 볼 수 있습니다curl.

curl https://your-site.com --HEAD --silent | grep -i X-Cntry


결과는 다음과 같습니다.

X-Cntry: SE


도커 설정



전체 Docker 예제in this repository도 볼 수 있습니다.

메모 / 감사의 말


  • https://www.howtoforge.com/nginx-how-to-block-visitors-by-country-with-the-geoip-module-debian-ubuntu
  • delfi de la Rua on Unsplash님의 사진
  • 좋은 웹페이지 즐겨찾기