Nginx에서 해외 IP 차단 설정하기

2024. 2. 24. 01:18·Nginx

문제

갑자기 개발 서버 인스턴스의 CPU 사용률이 말도 안되게 높아졌다.

원래 왼쪽이 정상적인 사용률인데, 갑자기 오른쪽처럼 100%를 찍어버린 것이다.

 

 

인스턴스에 접속하여 top 명령어를 통해 확인해 보니,

 

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를 차단한 와중에도 열심히 돌리는 나쁜놈들..

 

해외 IP 차단으로 일단락 되었지만, 방심할 수 없기 때문에 추가적인 보안설정을 하려고 한다.

이번에도 경각심을 가지면서 보안을 좀 더 강화해야겠다는 걸 뼈저리게 느꼈다.

 

 

 

참고

 

[Ubuntu] Nginx 설정

[Ubuntu] Nginx 설정 이 글에서는 Ubuntu에서 Nginx의 기본적인 설치와 설정에 대해서 정리하고자 한다. Nginx 설치 Nginx 설치를 위해서는 아래 명령어를 입력해주면 된다. sudo apt-get install nginx 설치 후 Ngin

computer-science-student.tistory.com

 

velog

 

velog.io

 

'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
'Nginx' 카테고리의 다른 글
  • Nginx Reverse Proxy로 Private Subnet의 Grafana에 연결 중 발생한 오류와 해결
  • Failed to load resource: the server responded with a status of 413 (Request Entity Too Large)
개발이조아용
개발이조아용
IT 개발에서 배운 성장의 기록을 작성합니다.
  • 개발이조아용
    계속 하다 보면?!
    개발이조아용
  • 전체
    오늘
    어제
    • 분류 전체보기 (68)
      • Tibero DB (Tmax AI Bigdata .. (7)
      • Git (2)
      • CI CD (2)
      • Redis (3)
      • SpringBoot (16)
      • SQL 문제 풀이 (8)
      • Apache Kafka (8)
        • 오류 해결 (3)
        • 개념 정리 (4)
        • 보안 (1)
      • Nginx (3)
      • SW마에스트로 (3)
      • Kubernetes (4)
      • AWS (5)
      • gRPC (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    소프트웨어 마에스트로
    Git
    redis script
    MSA
    Kafka 오류
    Kafka SASL
    SQL
    SASL 인증
    redis
    leetcode
    Redis 개념
    nginx
    Tibero
    grpc
    K8S
    SpringBoot
    Kafka 개념
    sql 문제
    DynamoDB 연동
    KAFKA
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
개발이조아용
Nginx에서 해외 IP 차단 설정하기
상단으로

티스토리툴바