개발
Nginx 운영중 아이피로 접근하는 요청에 대한 차단 작업
by
나는 Nginx 서버를 운영중이다.
단일 프로덕션용 서버는 아니도 하나의 Nginx 서버에서 여러 사이트를 제공하는 다중 프로덕션용 환경을 구축해 사용하고있다.
이렇게 하나의 서버에서 여러 사이트를 운용하다보면 자연스럽게 이 서버가 여러가지 트래픽에 시달리는 현상이 발생한다.
정상적인 트래픽이야 전혀 문제될건 없다만, 운영하는 사이트가 몇백개가 되다보니 흔한 브루트포스 공격에 대해서도 내가 운용하는 서버가 노출되기 십상이다.
이바닥에서 취약점 공격이야 심심하면 나오는 일이니 별문제는 없긴해도 가끔은 해커들도 너무하다 싶을정도로 엑세스를 많이 해오는 경우가 있다.
어느정도냐면 동시처리 속도가 늦어져 사이트 속도가 느려지는 수준이랄까.
물론 이런경우에 최대 접속에 대한 제한을 둬서 막는 기법이 있긴한데, 내 환경에서는 득보단 실이 좀더 있다보니까 그렇게까지 해두지는 않고, 여러 조건을 걸어서 제한을 걸어두는 방식을 사용하고있다.
매일매일 질리지도 않는구나 이녀석들은그런데 오늘은 좀 특이한 공격이 왔다.
하나의 서버다보니 한개의 아이피에서 여러 사이트를 운영하다보니 자연스럽게 요청 도메인을 기반으로하는 역방향 프록시 서버를 운용중인데, 어떻게 이 '아이피'를 직접 찍고 들어오는 웃긴 상황이 발생한것이다.
보통은 도메인찍고 공격이들어오는데, 아이피찍고 들어오는 공격에 대해서는 필터링이 안걸린것을 발견한것이다.
확인후 다른 도메인과같이 디폴트 서버에 대해서도 필터링을 걸어두긴했는데, 한편으로는 웹서버가 굳이 아이피로 요청하는경우도 드물다보니까 아예 아이피로 요청된 건에 대해서는 차단을 거는게 맞는거같은 느낌이 들었다.
그래서 아래와 같이 IP로 요청되었을 경우에 바로 요청에 대해 차단 반환을 할 수 있는 설정을 추가해보았다.
# IP Access HTTP 80
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 444;
}
# IP Access HTTPS 443
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name _;
ssl_certificate /etc/ssl/dummy/dummy.crt;
ssl_certificate_key /etc/ssl/dummy/dummy.key;
ssl_protocols TLSv1.2 TLSv1.3;
return 444;
}Copy이 코르르 이용한다면 쉽게 지정된 도메인을 제외한 나머지 요청이 서버로 올때 444 차단 요청을 요청자에게 반환할 수 있다.
물론 아이피를 기반으로 API 서비스를 구현해둔 서버가 있다면 그 요청까지도 막아버리기 때문에 전체적인 요청 점검은 해봐야겠지만 말이다.
여기서 443, 그러니까 HTTPS 요청에 대해서도 아이피를 물고오는건에 대해서도 처리가 가능한데, 이때 비어있는 더미용 SSL 파일이 필요하다.
최신버전의 Nginx 에서는
ssl_reject_handshake on; 명령어 한줄로 SSL 쉐이크를 중단하는 방법이 있긴한데, 나의 경우엔 지원하지 않는 버전이었다.이럴땐 더미로 인증서 파일을 하나 만들어야 한다.
아래 순서대로 해보자.
# 더미 인증서 담을 폴더
sudo mkdir -p /etc/ssl/dummy
# 더미 인증서와 키파일 생성 (1회만)
sudo openssl req -x509 -nodes -newkey rsa:2048 -days 3650 \
-keyout /etc/ssl/dummy/dummy.key \
-out /etc/ssl/dummy/dummy.crt \
-subj "/CN=invalid"
# 더미 키파일 권한 변경
sudo chmod 600 /etc/ssl/dummy/dummy.keyCopy얼추 이렇게 하니 아이피를 물고들어오는 브루탈포스 공격이 중단되었다.
그도그럴게 전부 444로 차단되니까...!
#Nginx #문제해결
0
개의 댓글