
그래서 DDOS 공격을 받으면서 이걸 같이 해킹해서못된내 로그에서 IP가 빠져나왔습니다. 개선을 위한 개선 사항이나 기타 제안 사항이 있는 사람이 있나요?
일반적인 아이디어는 다음과 같습니다.
- 로그 파일에서 IP만 가져오기
- 정렬해 보세요
- 고유하고 세어보세요
- 다시 정렬해 보세요
그리고 스트링 오파이프(string o'pipes):
cut --delim " " -f7 /var/log/apache_access | sort | uniq -c | sort -rn > sorted-ips.txt
답변1
나는 항상 이것을 사용해 왔습니다:
tail -1000 /var/log/apache_access | awk '{print $1}' | sort -nk1 | uniq -c | sort -nk1
tail
얼마나 멀리 뒤로 가고 싶은지에 대한 제한을 설정할 수 있습니다. (어떤 이유로든) 로그 회전을 사용하지 않는 경우 좋습니다. 두 번째로 사용하고 있는 것은 대부분 awk
의 로그가 공백으로 구분되어 있기 때문입니다. 적절한 변수를 추가하여 추가 정보(아마도 어떤 URL에 도달했는지, 상태, 브라우저 등)를 끌어낼 수 있는 기능을 스스로 남겨 두었습니다 $
. 마지막으로 결함은 uniq
접촉 쌍에서만 작동합니다 - IE:
A
A
A
A
B
A
A
생산 예정:
4 A
1 B
2 A
원하는 출력이 아닙니다. 따라서 첫 번째 열(이 경우에는 ip이지만 다른 열도 정렬할 수 있음)을 정렬한 다음 uniq
마지막으로 가장 높은 위반자를 볼 수 있도록 개수를 오름차순으로 정렬합니다.
답변2
재창조하는 중이신 것 같군요.실패2금지바퀴.
Fail2ban을 살펴보세요. 이미 원하는 기능을 수행할 수도 있고, 그렇지 않은 경우 사용자 정의하기도 쉽습니다.
답변3
awk
Marco Ceppi는 이를 위한 더 나은 도구라는 점에서 옳지 만 awk는 그 논리 sort
를 . 단지 1000줄을 추적하는 경우에는 큰 차이가 없지만 대규모 멀티 긱 로그 파일을 보고 싶다면 해당 파일을 .uniq
awk
awk
cat /var/log/apache_access | awk '{freq[$1]++} END {for (x in freq) {print freq[x], x}}' | sort -n
필요한 작업을 수행하지만 대용량 파일의 경우 훨씬 빠릅니다. IP 주소를 키로 사용하고 IP 발생 횟수를 값으로 사용하여 awk에 IP 배열을 생성합니다.
속도가 빨라지는 이유는 awk가 데이터를 한 번만 전달하고 최종 출력 정렬을 제외한 대부분의 작업을 수행하기 때문입니다. 다른 방법을 사용하면 전송 로그에 1,000,000개의 라인이 있는 경우 awk는 1,000,000개의 IP를 뱉어내는 1,000,000개의 라인을 읽은 다음 전체 1,000,000개의 IP를 처리하여 정렬된 1,000,000개의 IP를 uniq로 보내 훨씬 더 작은 크기로 줄입니다. 정렬하기 전에 데이터의 양. 1,000,000개의 IP에 대해 여러 패스를 파이핑/수행하는 대신 awk는 한 패스에서 거의 모든 작업을 수행합니다.
내 노트북에서 5,513,132줄의 Apache 로그(1.1GB)를 사용하여 속도를 비교하면 다음과 같습니다.
- 2분 45초
cat ./apache_access | awk '{print $1}' | sort -nk1 | uniq -c | sort -nk1
- 0분 40초
cat ./apache_access | awk '{freq[$1]++} END {for (x in freq) {print freq[x], x}}' | sort -n