Автоматизация блокировки нежелательных SSH запросов с помощью BASH : Centos8

Автоматизация процесса пополнения перечня нежелательных IP адресов, с которых производится сканирование SSH сервиса на 22 порту сервера и попытки подобрать пароль для доступа к серверу через 22 порт на котором по умолчанию работает SSH , и дальнейшей их блокировки, пример для Centos8

(по умолчанию SSH работает на 22 порту)

Для автоматизации процесса создадим два скрипта, один скрипт bad_ip.sh будет собирать IP адреса, с которых производится сканирование, а другой rules_ssh_ip_deny.sh будет добавлять собранные адреса в цепочку правил , блокирующих запросы с помощью правил rich-rule встроенных в firewall-cmd , для правильной работы выполняем для обоих файлов возможность запуска на исполнение командой chmod +x .

чтобы все работало по расписанию добавляем выполнение скриптов в crontab , командой crontab -e

(в нашем примере , предварительно создаем в коневой директории папку script, в которую помещаем созданные два файла bad_ip.sh и rules_ssh_ip_deny.sh)

58 23 * * * /scripts/bad_ip.sh
59 23 * * * /scripts/rules_ssh_ip_deny.sh

bad_ip.sh

#!/bin/bash

# Название файла с адресами, включающее дату
IP_BLACKLIST="/scripts/blacklist-`date "+%Y-%m-%d"`.txt"

# Фильтрация ошибок аутентификации

grep "res=failed" /var/log/audit/audit.log | grep terminal=ssh | cut -d" " -f 11 | sed 's/addr=//' | sed 's/hostname=//' | sort | uniq -c >> $IP_BLACKLIST


# Добавление в большой список только IP-адресов из сегодняшнего лога
awk '{print $2}' $IP_BLACKLIST >> /scripts/blacklist-full.txt
# После добавления сортируем и убираем не уникальные адреса
cat /scripts/blacklist-full.txt | sort | uniq >> /scripts/blacklist-full.txt.new
rm /scripts/blacklist-full.txt
mv /scripts/blacklist-full.txt.new /scripts/blacklist-full.txt
rules_ssh_ip_deny.sh

#!/bin/bash

DENY_IP_FILENAME='/scripts/blacklist-full.txt'

IPLIST=$(awk '{print $1}' ${DENY_IP_FILENAME})

# создаем цикл добавления правил в firewall-cmd --add-rich-rule
for IP in ${IPLIST}
do

    firewall-cmd --add-rich-rule='rule family="ipv4" source address="'${IP}'" service name=ssh reject' ;

done

Если все сделали верно , то ежедневно будет происходить добавление в правила ограничивающие доступ к 22 ому порту (SSH сервису), новых вредоносных IP адресов, с которых происходит сканирование 22 ого порта.

Если в файле rules_ssh_ip_deny.sh произвести изменения и дополнить его информацией о других портах , то можно и другие порты/сервисы так-же блокировать, например RDP на порту 3389