Очень настойчивый человек пытается постоянно получить (несанкционированный) доступ к моей системе в течение последних нескольких дней... Существует миллиард записей, например /var/log/auth.log
:
Jun 21 03:55:15 cloudy sshd[32487]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=116.31.116.20 user=root
Jun 21 03:55:16 cloudy sshd[32487]: Failed password for root from 116.31.116.20 port 30629 ssh2
Jun 21 03:55:19 cloudy sshd[32487]: Failed password for root from 116.31.116.20 port 30629 ssh2
Jun 21 03:55:21 cloudy sshd[32487]: Failed password for root from 116.31.116.20 port 30629 ssh2
Jun 21 03:55:21 cloudy sshd[32487]: Received disconnect from 116.31.116.20: 11: [preauth]
Jun 21 03:55:21 cloudy sshd[32487]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=116.31.116.20 user=root
Я хотел бы попросить совета, как заблокировать этого человека от потребления ресурсов компьютера, есть ли возможность "жестко заблокировать" IP даже от открытия ssh-соединения? Обратите внимание, я использую Debian 8 в качестве ОС.
решение1
добавить sshd: 116.31.116.20
в/etc/hosts.deny
решение2
Вы также можете использоватьiptables
Создайте файл с IP-адресами, которые вы хотите заблокировать.blocked.ips.txt
Теперь создайте и запустите скрипт, содержащий следующее:
blocked=$(egrep -v -E "^#|^$" ./blocked.ips.txt)
for ip in $blocked
do
iptables -I INPUT -s $ip -p tcp --dport ssh -j DROP
done
Запуск iptables -L
должен выдать отброшенные пакеты.
решение3
Подход iptables — самый прямой путь. Эрик Хандрикс предложил его в виде скрипта.
Два «но»: - скрипт придется запускать после каждого перезапуска (если таблицы не резервируются внутренне с помощью iptables). - вызов скрипта в том виде, в котором он есть, дважды или более приведет к дублированию записей.
Попробуйте просто прижать плохого парня с помощью:
iptables -I ВВОД -s ПЛОХОЙ_IP -p tcp --dport ssh -j ОТКАЗ
В большинстве дистрибутивов iptables имеет собственный механизм rules-save-restore. Посмотрите, присутствует ли '/var/lib/iptables/rules-save'. Для вашего дистрибутива он может находиться где-то еще (gentoo здесь).
После добавления каждого ПЛОХОГО IP-адреса попробуйте:
iptables-сохранить > /var/lib/iptables/rules-сохранить
После перезапуска проверьте с помощью «iptables -L», что там...
решение4
На моем сервере (Ubuntu 16.04) я использую UFW (UncomplicatedFireWall), упрощенный слой поверх iptables, который, похоже, является стандартной проблемой на серверах Ubuntu (но должен быть доступен и для других дистрибутивов). Для этих случаев я использую:
ufw insert 1 deny from nnn.nnn.nnn.nnn
UFW также позволяет ограничить количество подключений.
ufw limit ssh/tcp
Обратите внимание, что это также относится к успешным соединениям, поэтому, если вы используете скрипты, использующие несколько команд ssh, вам необходимо отключить это ограничение для вашего IP-адреса, выполнив команду:
ufw insert 1 allow in from nnn.nnn.nnn.nnn