Как получить IP-адреса возможных злоумышленников SSH?


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 ...
Скотт

Ответы:


19

Вы можете использовать что-то вроде этого:

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

Он ищет строку Failed password forи извлекает ( -o) IP-адрес. Он сортируется и uniqподсчитывает количество случаев.

Вывод будет выглядеть следующим образом (с вашим примером в качестве входного файла):

  1 111.111.111.1
  3 111.11.111.111
  6 111.111.11.111

Последний в выводе пробовал 6 раз.


это лучший ответ @chaos - добавил в мой ящик полезных вкладчиков - спасибо!
Джейк

Отличное решение. Я не знал, что grep может извлекать совпадения регулярных выражений, а не только фильтровать строки. Я только что добавил | sort -nв цепочку.
Кравемир

1
Хороший ответ - множественные greps обычно являются признаком использования sed. sed -nr '/Failed/{s/.*([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*/\1/;p}'заменяет оба greps.
Орион

1
@orion true, но представьте, что первым grep также может быть zgrep "Failed" /var/log/auth.log*поиск в архивах сжатых журналов, чего sedнельзя.
хаос

1
А как насчет IPv6?
Ортомала Локни

6

Это может быть раздутым решением, но я предлагаю вам взглянуть на установку что-то вроде Fail2Ban

Это сделано для такого рода журналирования + добавляет бонус в виде возможности добавлять (временные) правила в ваш брандмауэр, чтобы блокировать повторяющихся нарушителей. Обязательно внесите в белый список свои собственные IP-адреса, хотя мне несколько раз удавалось временно заблокировать себя


Ну, хороший комментарий, но не ответ на вопрос. Это больше похоже на предложение, которое может убрать вопрос, но мне не нужен демон для контроля моих файлов. У меня есть причины, по которым мне нужно сделать этот список в виде текстового файла только по сценариям. :)
Кравемир

Я согласен с @Miro, если бы вы не упомянули об этом здесь, я бы добавил это в комментарии.
SailorCire

@Miro, вы правы, а не ответ на сам вопрос, он просто пришёл в голову как удобный инструмент для такого рода регистрации.
Джейк

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, а не решением.
Кравемир

У меня это работает либо с примером выше, либо реальным /var/log/auth.log
Archemar

Ну, это не сработало до редактирования - когда был сделан комментарий. Теперь это работает правильно. Тем не менее, это не так, uniq -cкак в лучшем ответе.
Кравемир
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.