Безопасное использованию сервера OpenSSH
🕛 26.08.2010, 01:19
Для начало вспомним наши конфигурационные файлы:/etc/ssh/sshd_config - конфигурационный файл сервера OpenSSH
/etc/ssh/ssh_config - конфигурационный файл клиентской части OpenSSH
~/.ssh/ - конфигурационная директория пользователей ssh.
Расмотрим несколько советов по безопасному использованию сервера OpenSSH.
Открываем наш конфиг и смотрим:
$ nano /etc/ssh/sshd_config
1. SSH порт, используемый по умолчанию: : TCP 22, меняем так как многие brute forcing заточеныпод 22 порт и по крайней мере введет в заблуждения “кул хацкеров”
# What ports, IPs and protocols we listen for
Port 2280
По умолчанию sshd принимает подключения на всех интерфейсах, если не требуется заходить на сервер “из вне”, то можно ограничить его нужным нам IP адресам, (например 192.168.100.1).
Внимание: это указание ssh-демону, какой ip-адрес использовать для входящих соединений. Т.е. если твой сервер имеет два интерфейса:
- внешний (подключение в Интернет) - с реальным ip-адресом,
- внутренний (локальная сеть) - с приватным (например 192.168.100.1) и ты хочешь, чтоб по ssh к серверу можно было добраться только c хостов, находящихся в локальной сети - в конфиге указываешь ListenAdress - адрес на котором сервер принимает запросы на соединение. И этот параметр не имеет почти никакого отношения к ограничению доступа к серверу по протоколу ssh !
ListenAddress 192.168.100.1
Дополнительно через двоеточие можно указать и номер порта. В данном примере используется значение порта, заданное глобально параметром Port.
2. Используйте только протокол SSH 2
Protocol 2
3. Ограничение доступа суперпользователя
В большинстве дистрибутивов в целях безопасности доступ суперпользователю(root) по SSH закрыт (PermitRootLogin no), и при попытке зарегистрироваться под root получаем сообщение об ошибке. Для выполнения задач, требующих привилегий администратора, приходится заходить под обычным пользователем и использовать su или sudo. Красиво выйти из ситуации поможет директива Match. В качестве аргумента ей передается критерий отбора (User, Group, Host, Address), его значение и параметр, который нужно применить. Для примера разрешим подключение под root только с localhost и из локальной подсети 192.168.100.0/24:
PermitRootLogin no
Match Host 192.168.100.*,127.0.0.1
PermitRootLogin yes
или просто запрещаем региться под root’oм
PermitRootLogin no
4. Ограничение доступа пользователей через SSH
Будет полезно всем, кто заводит пользователей в системе например для mail или ftp и etc,во многих системах по умолчанию пользователям разрешено иметь доступ через SSH с использованием пароля или открытого ключа.AllowUsers (пользователи, которым разрешен доступ).
Для того, чтобы доступ в систему через SSH был разрешен только пользователям user1,user2 и тд:
AllowUsers user1 user2
так же возможно использовать и такую конструкцию с IP-адресом
AllowUsers *@192.168.2.*
Так же можно, наоборот, разрешить всем пользователям, но для определенных запретить:
DenyUsers user10 user20
5. Авторизация и подключения
LoginGraceTime 45
Параметр LoginGraceTime определяет, по истечению какого времени простаивающее подключение будет разорвано (в секундах), т.е : позволенный для регистрации промежуток времени, за который надо ввести пароль, значение по умолчанию 120 явно завышено, думаю что будет 45 сек будет достаточно.
MaxStartups 2:50:10
Количество параллельных не идентифицированных подключений к серверу контролируется при помощи MaxStartups. Запись параметра имеет форму “start:rate:full”. В нашем случае она означает отключение с вероятностью 50% при наличии двух не идентифицированных связей, с линейным ростом вероятности до 100% при достижении 10.
Для тех у кого будет много подключений по SSH можно сконфигурировать время закрытия неработающей сессии:
ClientAliveInterval 300
ClientAliveCountMax 0
устанавливаем таймаут в секундах (300 секунд = 5 минутам). После того, как указанное время истечет, бездействующий пользователь будет отключен от системы
6. Отключение прослушивания IPv6 адресов
ИМХО IPv6 пока ни неактуальный (по крайней мере, для меня), поэтому предлагаю его отключить
По умолчанию sshd слушает как на IPv4 так и на IPv6 адресах. Для того что бы его отключить необходимо изменить параметр AddressFamily (если значение AddressFamily не указано в конфигурационном файле, то оно принимается равным any):
AddressFamily any # default (IPv4 и IPv6)
AddressFamily inet # IPv4 only
AddressFamily inet6 # IPv6 only
Ну и на последок так же можно добавьте предупреждающий баннер, расскоментируйте строчку, в sshd_config, либо указать иной путь к своему баннеру :
Banner /etc/issue