반응형
Nginx의 액세스 로그에서 공격자 IP(attacker ip) 주소를 추출하는 방법
tail -n 10000 access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -n 10
$ tail -n 10000 /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -n 10
554 111.111.111.111
210 222.222.222.222
57 222.222.222.223
56 222.222.222.224
50 222.222.222.225
48 222.222.222.226
48 222.222.222.227
45 222.222.222.228
44 222.222.222.229
44 222.222.222.230
구성 예)
Nginx 환경 설정
server {
...
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
allow 2001:0db8::/32;
deny all;
}
공격자 IP 주소를 추출하는 명령어
grep -E " 4[0-9]{2} " /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -n
728x90
공격자 IP 주소를 추출하는 스크립트
- 스크립트 작성
vim deny_ip.sh
#!/bin/bash
# 텍스트 출력의 색상 정의
C_DEFAULT="\033[0m"
C_RED="\033[1;31m"
# 스크립트 인수의 기본값
RANK="${1:-10}"
LOGLINE="${2:-10000}"
LOGFILE="${3:-/var/log/nginx/access.log}"
# 요청 횟수(request count)별 상위 IP 주소 표시
echo -e "\n${C_RED}Top ${RANK} IP Addresses by Request Count${C_DEFAULT}"
echo -e "---------------------------------------"
# 로그 파일에서 고유 IP 주소 추출 및 계산
tail -n ${LOGLINE} ${LOGFILE} | awk '{print $1}' | sort | uniq -c | sort -nr | head -n ${RANK}
# HTTP 응답 코드별 상위 IP 주소 표시(HTTP response code)
echo -e "\n${C_RED}Top ${RANK} IP Addresses by HTTP Response Code${C_DEFAULT}"
echo -e "--------------------------------------------"
# HTTP 응답 코드와 함께 고유 IP 주소 추출 및 계산
tail -n ${LOGLINE} ${LOGFILE} | awk '{print $1, $9}' | sort | uniq -c | sort -nr | head -n ${RANK}
echo -e "\n"
- 스크립트 실행 방법
./deny_ip.sh 10 10000 /var/log/nginx/access.log
이 결과는 주어진 로그 파일에서 상위 IP 주소 및 HTTP 응답 코드를 요청 횟수 순으로 보여줍니다. RANK, LOGLINE, LOGFILE을 필요에 따라 조절하여 원하는 결과를 얻을 수 있습니다.
더보기
- deny_ip.sh 스크립트 생성
vim deny_ip.sh
#!/bin/bash
# define colors
C_DEFAULT="\033[0m"
C_BLACK="\033[30m"
C_RED="\033[1;31m"
C_GREEN="\033[32m"
C_YELLOW="\033[33m"
C_BLUE="\033[34m"
C_PURPLE="\033[35m"
C_CYAN="\033[36m"
C_WHITE="\033[0;37m"
C_BG_BLACK="\033[40m"
C_BG_RED="\033[41m"
C_BG_GREEN="\033[42m"
C_BG_YELLOW="\033[43m"
C_BG_BLUE="\033[44m"
C_BG_PURPLE="\033[45m"
C_BG_CYAN="\033[46m"
C_BG_LIGHTGRAY="\033[47m"
RANK="${1:-10}"
LOGLINE="${2:-10000}"
LOGFILE="${3:-/var/log/nginx/access.log}"
echo -e "\n${C_RED}Count\tIP${C_DEFAULT}"
tail -n ${LOGLINE} ${LOGFILE} | awk '{printf ("%5s\t\n", $1)}' | sort | uniq -c | sort -nr | head -n ${RANK}
echo -e "\n${C_RED}Count\tIP\t\tHTTP Code${C_DEFAULT}"
tail -n ${LOGLINE} ${LOGFILE} | awk '{printf ("%5s\t%s\n", $1, $9)}' | sort | uniq -c | sort -nr | head -n ${RANK}
echo -e "\n"
- deny_ip.sh 실행
./deny_ip.sh
./deny_ip.sh 5 10 /var/nginx/access.log
참고URL
- NGINX Docs : Module ngx_stream_access_module
728x90
반응형
'리눅스' 카테고리의 다른 글
CentOS 7에서 vsftpd 데몬을 추가 구성하는 방법 (0) | 2021.05.18 |
---|---|
rsync 명령어 (0) | 2021.05.13 |
timedatectl 명령어 (0) | 2021.04.26 |
일반적으로 권장되는 웹 서버의 SSL 프로토콜과 암호화 알고리즘(Cipher Suite) 설정 (0) | 2021.04.21 |
[리눅스] centos8 network 재기동 (0) | 2021.04.12 |