가능한 ssh 공격자의 IP 주소를 검색하는 방법은 무엇입니까?


17

나는 단지 cat /var/log/auth.log기록하고 많은 | grep "Failed password for"레코드 가 있다는 것을 알았습니다 .

그러나 유효한 / 유효하지 않은 사용자를위한 두 가지 가능한 레코드 유형이 있습니다. 그것은 | cut그들에게 나의 시도를 복잡하게 한다.

가능한 공격자의 IP 주소와 각 IP 주소에 대한 시도 횟수를 가진 목록 (텍스트 파일)을 만들고 싶습니다. 그것을 만드는 쉬운 방법이 있습니까?

또한, 관련 정보 ssh: /var/log/auth.log가능한 공격자 목록을 만들 때 고려해야 할 모든 기록은 무엇입니까 ?

숨겨진 숫자가있는 내 'auth.log'의 예 :

cat /var/log/auth.log | grep "Failed password for" | sed 's/[0-9]/1/g' | sort -u | tail

결과:

Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user ucpss from 111.11.111.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user vijay from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user webalizer from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user xapolicymgr from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user yarn from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user zookeeper from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user zt from 111.11.111.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for mysql from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for root from 111.11.111.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for root from 111.111.111.1 port 11111 ssh1

난 당신이, SSH 키를 생성 전체 서버의 sshd 설정 파일에 서버와 비활성화 암호에 그들을 설치 제안 /etc/ssh/sshd_config... 조회 설정을 PasswordAuthentication no하고 PermitRootLogin without-password 그러한 모든 암호 시도가 이전에 방해 될 것 이제까지 auth.log를 입력 ...
Scott Stensland

답변:


19

다음과 같은 것을 사용할 수 있습니다.

grep "Failed password for" /var/log/auth.log | grep -Po "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" \
| sort | uniq -c

문자열을 grep 하고 ip 주소를 Failed password for추출합니다 ( -o). 정렬되어 uniq발생 횟수를 계산합니다.

출력 결과는 다음과 같습니다 (예 : 입력 파일).

  1 111.111.111.1
  3 111.11.111.111
  6 111.111.11.111

출력의 마지막 것은 6 번 시도했습니다.


이것은 @chaos의 가장 좋은 답변입니다-유용한 oneliners 상자에 추가되었습니다-감사합니다!
Jake

훌륭한 솔루션. grep이 필터 라인뿐만 아니라 정규 표현식을 추출 할 수 있다는 것을 몰랐습니다. 방금 | sort -n체인에 추가 했습니다.
kravemir

1
좋은 대답-여러 greps는 일반적으로 sed를 사용하는 표시입니다. sed -nr '/Failed/{s/.*([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*/\1/;p}'두 손잡이를 교체합니다.
오리온

1
@ orion true이지만 첫 번째 grep zgrep "Failed" /var/log/auth.log*이 압축 로그 아카이브를 통해 검색 할 수도 있다고 상상해보십시오 sed.
혼돈

1
IPv6은 어떻습니까?
Ortomala Lokni

6

팽창 된 솔루션 일 수도 있지만 Fail2Ban 과 같은 것을 설치하는 것이 좋습니다.

이러한 종류의 로깅을 위해 만들어졌으며 방화벽에 (임시) 규칙을 추가하여 반복적 인 위반자를 차단할 수있는 보너스를 추가합니다. 그래도 자신의 IP를 허용 목록에 추가하십시오.


좋은 논평이지만 질문에 대한 대답은 아닙니다. 질문의 필요성을 제거 할 수있는 제안과 비슷하지만 파일을 모니터링하는 데몬이 필요하지 않습니다. 스크립트로만 목록을 텍스트 파일로 만들어야하는 이유가 있습니다. :)
kravemir

@Miro에 동의합니다. 여기에 언급하지 않은 경우 의견에 추가했습니다.
SailorCire

@Miro, 당신은 옳습니다. 질문 자체에 대한 대답은 아닙니다. 이러한 종류의 로깅을위한 편리한 도구로 생각났습니다.
Jake

0

이것은 나를 위해 잘 작동했습니다. (유죄를 보호하기 위해 IP가 변경되었습니다)

$ awk '/Failed/ {x[$(NF-3)]++} END {for (i in x){printf "%3d %s\n", x[i], i}}' /var/log/auth.log | sort -nr
 65 10.0.0.1
 14 10.0.0.2
  4 10.0.0.3
  1 10.0.0.4

0
grep "Failed password for" /var/log/auth.log |
    awk -F"from" {'print $2'} |
    awk {'print $1'} |
    sort -u

결과는 password작동하지 않습니다. 다른 입력 유형도 다루지 않으며 awk인쇄 열은 cut솔루션이 아니라의 대안 입니다.
kravemir

실제 /var/log/auth.log 위의 샘플 중 하나에서 작동합니다.
Archemar

글쎄, 주석이 만들어 졌을 때 편집하기 전에는 작동하지 않았습니다. 이제 제대로 작동합니다. 그러나 uniq -c가장 좋은 대답처럼 그리워 합니다.
kravemir
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.