обычно ключи(публичный и секретный) генерируются автоматически при установке ssh клиента/сервера.
на сервере в /etc/ssh/sshd_config надо добавить/изменить
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
публичный ключ клиента отправить в .ssh/authorized_keys (который находится на сервере)
если настроена аутентификация по ключам, советую отключить аутентификацию по паролю.
в /etc/ssh/sshd_config
PasswordAuthentication no
PermitEmptyPasswords no
UsePAM no
но для не которых не всегда удобно использовать авторизацию по ключам.
2.Запуск sshd на не стандартном порту.
/etc/ssh/sshd_config надо изменить
#Port 22
Port 2222
ПыСы не забудьте при подключении указать порт.
example: ssh -p 2222 exelens@welinux.ru
3.Использовать только Protocol 2.
в /etc/ssh/sshd_config надо изменить
#Protocol 2,1
Protocol 2
4.Использовать denyhosts.
Демон просматривает логи и в случае нескольких неправильных попыток
ввода пароля блокирует доступ для ssh с атакующего ip адреса.
apt-get install denyhosts
/etc/init.d/denyhosts start
ПыСы: можно еще использовать Fail2ban
5.Запретить авторизацию root-пользователю
в /etc/ssh/sshd_config надо изменить
PermitRootLogin no
6.Запретить авторизацию по пустому паролю...
в /etc/ssh/sshd_config надо проверить!
PermitEmptyPasswords no
7.Установть пользователей/группу пользователей, которые могут входить в систему.
по пользователям:
AllowUsers user user1 user2 weuser
по группе пользователей:
AllowGroups groupuser
А также можно указать с каких адресов пользователь может входить в систему.
AllowUsers weuser@192.168.1.2
8.Использовать iptables.
A.с помощью iptables можно фильтровать соединения по ip и по mac`y
советую по mac`y так как в Linux`e сменить мак на сетевом интерфейсе не проблема. example: ЖДУ ОТ АУДИТОРИИ.
B.также можно рубить ботов которые ломятся ежесекундно на порт.
example:
iptables -A INPUT -p tcp -m state --state NEW --dport 22 -m recent --update --seconds 20 -j DROP
iptables -A INPUT -p tcp -m state --state NEW --dport 22 -m recent --set -j ACCEPT
9.Можно использовать port knocking.
К примеру: KNOCKD
- Простой "port knocking" сервер. Осуществляет запуск указанной в
конфигурации команды, если в пределах заданного таймаута было
произведено соединение к заданной последовательности сетевых портов.
ПыСы: ставил год назад knockd...не стабильно работал!
можно выкрутится с помощью iptables и модулем recent example: ЖДУ ОТ АУДИТОРИИ.