Я добавил строку
auth required pam_tally2.so deny=3 unlock_time=180
в мой /etc/pam.d/login
файл, и это прекрасно и замечательно в tty, после 3 попыток testuser
блокируется.
Однако эта же строка /etc/pam.d/sshd
не производит никакого эффекта.
xieerqi:$ ssh testuser@localhost
Password:
Password:
Password:
Permission denied (publickey,keyboard-interactive).
xieerqi:$ ssh testuser@localhost
Password:
Password:
Password:
Permission denied (publickey,keyboard-interactive).
Как видите, после 3 неудачных попыток пользователь все еще может попытаться ввести пароль.
Как забанить ssh
пользователя после 3 предупреждений?
решение1
Для SSH может быть лучше использовать что-то другое, чем pam, есть отличное решение, сделанное через iptables и sshd_config
файл. Это только один из способов получить то, что вы хотите, также основываясь на документации, обычно рекомендуется использовать ключи SSH вместо проверки метода аутентификации по паролюhttps://help.ubuntu.com/community/SSH/OpenSSH/Настройка.
Вам нужно будет изменить
/etc/ssh/sshd_config
добавление строкиMaxAuthTries 1
Вам необходимо создать следующие правила брандмауэра
Создать новую цепочку
iptables -N SSHATTACK iptables -A SSHATTACK -j LOG --log-prefix "Possible SSH attack! " --log-level 7 iptables -A SSHATACK -j DROP
Блокировать каждый IP-адрес на 120 секунд, который устанавливает более трех подключений в течение 120 секунд. В случае четвертой попытки подключения запрос делегируется цепочке SSHATTACK, которая отвечает за регистрацию возможной атаки ssh и в конечном итоге отбрасывает запрос.
iptables -A INPUT -i eth0 -p tcp -m state --dport 22 --state NEW -m recent --set iptables -A INPUT -i eth0 -p tcp -m state --dport 22 --state NEW -m recent --update --seconds 120 --hitcount 4 -j SSHATTACK
Вы можете проверить попытки, предпринятые в отношении файла
/var/log/syslog
.
решение2
Распространенной практикой является использование fail2ban
, которое работает на уровне сети, а не на уровне PAM, и которое экономит ваши ресурсы для всей той криптографии, которую выполняет sshd
.
В любом случае, вы пробовали после этой неудачной аутентификации ввести правильный пароль? Он принят? Что входит в систему /var/log/auth.log
?
sshd
сервер всегда запускает весь стек pam, даже если пользователь не существует, приостановлен или заблокирован, чтобы исключить атаки с использованием побочных каналов (например, идентификация существующих пользователей). Это та проблема, с которой вы, похоже, столкнулись. Это может работать, но вы не можете это увидеть из- ssh
за безопасности.
решение3
Попробуйте изменить порядок строк, PAM выполнит их одну за другой.
Например:
/etc/pam.d/common-auth
auth required pam_tally2.so deny=3 onerr=fail unlock_time=300 debug
auth [success=1 default=ignore] pam_unix.so nullok
auth requisite pam_deny.so
auth required pam_permit.so
auth optional pam_cap.so
работает для меня.