빈번한 IP에 대한 로그 파일 구문 분석


12

그래서 DDOS 공격을받는 동안이 로그를 해킹하여 로그에서 장난 꾸러기 IP 를 가져옵니다 . 누구든지 그것을 개선하기 위해 개선이나 다른 제안이 있습니까?

일반적인 아이디어는 다음과 같습니다.

  1. IP를 로그 파일에서 꺼내기
  2. 그들을 정렬
  3. 유니크와 그들을 계산
  4. 다시 정렬

그리고 문자열 o'pipes :
cut --delim " " -f7 /var/log/apache_access | sort | uniq -c | sort -rn > sorted-ips.txt


이것이 웹 마스터에게 더 잘 될지 확신 할 수 없지만 ... 유닉스 유틸리티와 명령 줄을 모두 사용하고 있기 때문에 여기에 더 적합하다고 생각했습니다.
개브.

여기 괜찮아 보인다. 유닉스 기반이며 웹에 특화되어 있지 않다 (아파치 나 방화벽 로그 IP의 많은 다른 것들에 적용될 수있다)
Stefan Lasiewski

답변:


7

나는 항상 이것을 사용했다 :

tail -1000 /var/log/apache_access | awk '{print $1}' | sort -nk1 | uniq -c | sort -nk1

함께 tail내가 정말 가고 싶어 얼마나 멀리 뒤쪽의 한계를 설정할 수있어 - 좋은 당신이 (어떤 이유) 로그 회전을 사용하지 않는 경우, 두 번째 나는의 사용을 만들고있어 awk- 대부분의 로그 공간이 I를 구분하기 때문에 ' ve는 적절한 $변수 를 추가하여 추가 정보를 끌어낼 수있는 능력 (내가 어떤 URL, 상태, 브라우저 등)을 끌어낼 수있는 능력을 가지게되었습니다 . 마지막으로 결함은 uniq쌍을 만지는 경우에만 작동합니다-IE :

A
A
A
A
B
A
A

생산할 것이다 :

4 A
1 B
2 A

원하는 출력이 아닙니다. 따라서 첫 번째 열 (이 경우 ips를 정렬하지만 다른 열을 정렬 할 수 있음)을 정렬 한 다음 uniq마지막으로 카운트를 오름차순으로 정렬하여 가장 높은 위반자를 볼 수 있습니다.


예, uniq의 문제도 깨달았습니다. 따라서 모든 IPS를 순서대로 배치하여 복제본이 나란히 배치되도록하는 첫 번째 종류입니다. 테일 팁은 훌륭합니다. 전체 로그를 약 4GB로 파싱하는 데 시간이 걸릴 수 있기 때문에 좋습니다. 감사합니다
개브.

-k1(1) 하나의 키만 있습니다 (2) sort어쨌든 첫 단어를 키로 사용하기 시작합니다.
Lekensteyn

7

fail2ban 휠 을 재창조하는 중입니다 .

fail2ban을 보라. 이미 원하는 것을 수행하고, 그렇지 않은 경우 쉽게 사용자 정의 할 수 있습니다.


1
그것은 내가 알지 못했던 꽤 흥미로운 프로젝트입니다. 감사합니다. 동시에, 필요하지 않은 로그 서버에 아무것도 설치하고 싶지 않으며 이미하고있는 일을하기가 쉽습니다. 개선에 대한 제안을 찾고 있습니다. 감사!
개브.

이것은 정말 시원하고 GPL도 좋습니다.
Eli Frey

7

마르코 Ceppi은 약 권리 awk이것에 대한 더 나은 도구가되는하지만, AWK는보다 더 나은 도구 sortuniq그 논리에 이동 할 수 있기 때문에 awk. 1000 줄을 테일링하는 경우 큰 차이가 없지만 거대한 멀티 공연 로그 파일을 보려면 파일을로 이동하는 것이 훨씬 빠릅니다 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에서 여러 패스를 파이핑 / 파이핑하는 대신 awk는 한 번의 패스로 거의 모든 것을 수행합니다.

내 노트북에서 5,513,132 라인 아파치 로그 (1.1 기가)를 사용하는 속도 비교는 다음과 같습니다.

  • 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

매우 시원합니다. 나는 이것을 속임수 가방에 추가하고 있습니다.
개브.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.