-
Nginx에서 해외 IP 차단 설정하기Nginx 2024. 2. 24. 01:18
문제
갑자기 개발 서버 인스턴스의 CPU 사용률이 말도 안되게 높아졌다.
원래 왼쪽이 정상적인 사용률인데, 갑자기 오른쪽처럼 100%를 찍어버린 것이다.
인스턴스에 접속하여 top 명령어를 통해 확인해 보니,
프로세스를 실행한 커맨드를 의미하는 COMMAND에 java라고 써져있는 프로세스가
CPU 사용량이 90 ~ 100을 왔다 갔다하고 있었는데, 스프링부트쪽인거 같았다.
이런적이 한번도 없었는데 뭔가 느낌이 이상해서 nginx log를 살펴보니...
해외 IP에서 각종 취약점을 악용하여 우리쪽으로 API 요청을 보내고 있었고
대부분의 API 요청은 막혔지만, 어느 하나 걸려서 서버에 과부화가 걸린 것으로 파악된다.
Nginx 해외 IP 차단
현재 서버는 해외 접속을 허용할 필요가 전혀 없기 때문에
해외 IP를 전부 차단하는 방법을 적용하게 되었다.
GeoIP 사용하기
1. geoip 설치
$ sudo apt install libnginx-mod-http-geoip geoip-database
2. nginx 설정 파일 수정
$ sudo vi /etc/nginx/nginx.conf
이제 http { 로 시작하는 블럭안에 아래 내용을 넣고 저장해준다.
한국 IP만 허용할 것이기 때문에 아래와 같이 작성해주면 된다.
http { ## # Blocking overseas ip access ## geoip_country /usr/share/GeoIP/GeoIP.dat; map $geoip_country_code $allowed_country { default no; KR yes; } ..... }
이제 $allowed_country 값이 no인 IP에 대한 차단을 수행해야 하므로
/etc/nginx/sites-available/default 또는 자신이 설정한 nginx의 server 블럭 안에
$ sudo vi /etc/nginx/sites-available/default
아래 내용을 추가해준다.
if ($allowed_country = no) { return 403; }
3. nginx 리로드
리로드 전에, 수정한 nginx 설정 파일이 문법 문제가 없는지 확인하기
$ sudo nginx -t
리로드
$ sudo service nginx reload
확인
VPN을 키고 접속을 해보면 403 forbidden 페이지가 뜨면서 요청을 거부하는 것을 확인할 수 있다.
해외 IP 차단으로 일단락 되었지만, 방심할 수 없기 때문에 추가적인 보안설정을 하려고 한다.
이번에도 경각심을 가지면서 보안을 좀 더 강화해야겠다는 걸 뼈저리게 느꼈다.
참고
'Nginx' 카테고리의 다른 글
Nginx Reverse Proxy로 Private Subnet의 Grafana에 연결 중 발생한 오류와 해결 (0) 2024.09.26 Failed to load resource: the server responded with a status of 413 (Request Entity Too Large) (0) 2024.02.24