Linux
Rocky Linux 에서 현재 웹포트(80,443) 에 접속해있는 아이피 상위 N개 출력하기
- 2025.11.12 00:03:42
![]() 현재 서버의 웹포드(80, 443)에 접속해 있는 클라이언트 IP를 상위 N개를 출력하는 셸 스크립트. 서버에 DDOS가 들어온 것으로 추측되는 경우 빠르게 스캔하여 접속량이 많은 상위 IP를 차단하는데 도움을 줄 수 있다. [!]셸 스크립트 파일 작성[/!] 아래 내용으로 스크립트 파일을 작성한다. # vi ~/2.top_clients_80_443.sh
파일을 먼저 만든 후 아래 내용을 복사 붙여넣기! #!/usr/bin/env bash
# 80/443로 열린 TCP 연결의 클라이언트 IP 상위 N개 # - 상태 필터 X (ss 구문 오류 회피), LISTEN만 제외 # - LocalAddress:Port가 :80 또는 :443으로 끝나는 것만 카운트 # - IPv4/IPv6/스코프 처리 set -euo pipefail LIMIT="${LIMIT:-50}" # 상위 N개 PORTS_REGEX="${PORTS_REGEX:-:(80|443)$}" # 로컬 포트 필터 SS="${SS:-ss}" # ss 경로 커스텀 가능(예: /usr/sbin/ss) command -v "$SS" >/dev/null 2>&1 || { echo "ss 명령(iproute2)이 필요합니다."; exit 1; } # -a: 모든 소켓(리슨 포함), -H: 헤더 제거, -n: 숫자 # awk에서 1열(state)이 LISTEN인 건 제외 "$SS" -a -H -n -t \ | awk -v rp="$PORTS_REGEX" ' $1 == "LISTEN" { next } # LISTEN 제외 { # 일반 형식: State Recv-Q Send-Q LocalAddress:Port PeerAddress:Port local=$4; peer=$5 # 로컬 포트가 80/443 아니면 제외 if (local !~ rp) next # peer 정리: users:(...) 꼬리 제거 sub(/,.*$/, "", peer) # IPv6 대괄호 제거 gsub(/^\[/, "", peer); gsub(/\]$/, "", peer) # 인터페이스 스코프(%eth0 등) 제거 sub(/%.+$/, "", peer) # 끝의 :포트 제거 sub(/:[0-9]+$/, "", peer) # 로컬루프백 제외(원하면 주석) if (peer == "127.0.0.1" || peer == "::1") next cnt[peer]++ } END { for (ip in cnt) printf "%7d %s\n", cnt[ip], ip } ' \ | sort -nr \ | head -n "$LIMIT" [!]결과 화면[/!] 셸 스크립트를 실행하면 아래와 같이 요약 정보를 보여준다. # ~/2.top_clients_80_443.sh
![]() |


