SSH достаточно безопасен, чтобы не беспокоиться о атаках на порт 22, верно?
После подключения одной машины к серверу SSH есть ли в файлах sshd-config или SSH-config параметр, который необходимо изменить после создания ключа?
Перемещение sshd в другой порт - это просто безопасность из-за неясности. Лучший подход - создать многоуровневую защиту. Начните с отключения аутентификации по паролю и ограничения списка пользователей, которые могут войти через ssh. Затем ограничьте исходные IP-адреса или сети, которые могут подключаться, и установите правило регулирования. Убедитесь, что вы регистрируете неудачные попытки и регулярно просматриваете ваши журналы. Еще лучше, если вы можете предупредить о грубой атаке. Есть довольно много инструментов, которые могут сделать это.
Если вы можете сэкономить сервер для использования в качестве хоста-бастиона, то вы можете удалить прямой ssh-доступ к вашим серверам и принудительно заставить всех своих клиентов проходить через один хост, который вы можете отслеживать. Как только клиент успешно войдет в систему, вы можете ограничить переход к нему, добавив исходящие правила iptables, которые ограничены пользователем или группой.
Если вы отключите аутентификацию по паролю, то вы в хорошей форме. Если вы разрешите это, используйте fail2ban, чтобы остановить взлом паролей. Вы получите их через открытый порт ssh.
Если вы отключите пароли, это должно быть хорошо. Вы также можете ограничить учетные записи пользователей в файле sshd_config.
MaxStartups 3:60:8
AllowUsers myaccount
Как дальнейшее ограничение. Вы также можете ограничить хосты, которые могут подключаться, но вы можете этого не делать.
MaxStartups - это моя попытка простой формы "защемления" соединения, но я не уверен, насколько хорошо это работает.
Что касается атак методом перебора, вот простое правило для настройки с помощью Iptables:
# we create a new chain for bruteforce attack detection
iptables -N BRUTE
# allow 10 new connections in a timeframe of 60 seconds
iptables -A BRUTE -m recent --set --name CHECK --rsource
iptables -A BRUTE -m recent --update --seconds 60 --hitcount 10 \
--name BRUTE --rsource -j DROP
# add a rule in the INPUT chain to check for SSH against the BRUTE chain
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j BRUTE
Это работает с модулем Iptables "ipt_recent", который фактически хранит файл в «/proc/net/ipt_recent/name » (в данном случае имя - BRUTE).
Эти правила разрешают новые подключения с задержкой в одну минуту с того же IP-адреса, в противном случае он будет временно заблокирован и IP-адрес должен прекратить попытки нового подключения к услуге. Хотя его очень просто настроить в отличие от fail2ban, он не позволяет различать успешные соединения и неудачные попытки.