os : rocky 8.x
nginx : 기본 yum으로 설치된 버전
기본 yum으로 설치된 버전에는 geoip가 설치되이 있지 않다 설치하는 방법은 아래링크에서 확인
nginx geoip2 (yum 설치 진행시 geoip2 추가 등록 방법) ->https://xinet.kr/?p=4244
설치가 되었다는 가정하에 진행
1. 먼저 geoip2 를 nginx.conf 파일에 등록 ( 특정 국가만 차단할 경우 default -> yes , 국가코드 no 입력)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
[root@xinet ~]# vi /etc/nginx/nginx.conf ### http 부분에 입력 http { include /etc/nginx/mime.types; default_type application/octet-stream; index index.html index.htm index.php; ###GEOIP geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb { auto_reload 5m; $geoip2_country_code source=$remote_addr country iso_code; $geoip2_country_name source=$remote_addr country names en; } # GEOIP2 CODE DROP ### 지정된 국가 DROP map $geoip2_country_code $allowed_country { default yes; FR no; # 프랑스 차단 CN no; # 중국 차단 } ### http 끝부분 } |
2. 적용하려는 도메인에 적용
1 2 3 4 5 6 7 8 |
[root@xinet ~]# vi /etc/nginx/conf.d/xinet.kr.conf ### http, https 부분 중간에 입력 ### GEOIP DROP 지정된 국가 DROP if ($allowed_country = no) { return 403; } |
3. nginx 검수
1 2 3 |
[root@xinet ~]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful |
4. 서비스 새시작
1 |
[root@xinet ~]# systemctl restart nginx |
5. 웹페이지에서 프락시를 이용하거나 실제 국가에서 접속을 시도하고 로그를 확인해보면
1 2 |
176.31.227.198 - - [13/Jun/2024:12:12:19 +0900] "GET / HTTP/1.1" 403 548 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)\ Chrome/125.0.0.0 Safari/537.36" "-" FR - TLSv1.3 |
1. 반대로 한국만 접속을 허용하고 나머지 국가는 모두 DROP 처리를 진행할 경우
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
[root@xinet ~]# vi /etc/nginx/nginx.conf ### http 부분에 입력 http { include /etc/nginx/mime.types; default_type application/octet-stream; index index.html index.htm index.php; ###GEOIP geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb { auto_reload 5m; $geoip2_country_code source=$remote_addr country iso_code; $geoip2_country_name source=$remote_addr country names en; } # GEOIP2 한국만 허용 map $geoip2_country_code $allowed_access_website { default no; KR yes; # KOREA # 한국허용 } #htp 끝부분 } |
2. 원하는 사이트 http , https 에 적용
1 2 3 4 5 6 7 8 |
[root@xinet ~]# vi /etc/nginx/conf.d/xinet.kr.conf ### http, https 부분에 추가 ### 해당 국가만 허용 if ($allowed_access_website = no) { return 403; } |
3. nginx 검수 후 문제 없으면 재시작
1 2 3 4 5 |
[root@xinet ~]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful [root@xinet ~]# systemctl restart nginx |
4. 로그를 확인해보면
1 2 |
207.46.13.107 - - [13/Jun/2024:12:29:03 +0900] "GET /?p=2968 HTTP/1.1" 403 548 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) Chrome/116.0.1938.76 Safari/537.36" "-" US - TLSv1.3 54.39.107.46 - - [13/Jun/2024:12:29:05 +0900] "GET /?p=4244 HTTP/1.1" 403 548 "http://xinet.kr" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36" "-" CA Beauharnois TLSv1.3 |