Настройка SSH сервера в RHEL, CentOS, Scientific, Fedora, WhiteBox, ASPLinux

ssh - это программа для удаленного входа в другой компьютер через сеть, удаленного исполнения команд и копирования файлов между компьютерами.

"SSH" расшифровывается как "Secure Shell".

ssh обеспечивает надежную авторизацию и безопасную передачу данных по открытым каналам связи. Для обеспечении безопасности необходимо настроить iptables, чтобы разрешить входить по SSH-протоколу только с разрешенных IP-адресов.

Управление доступом

Пример правил для iptables, приведенный ниже, предполагает, что из локальной сети 10.0.0.0/24 соединения по SSH-протоколу разрешены, также разрешено соединяться по SSH с IP-адреса 192.168.0.100.

В данном фрагменте правил предполагается, что:

iptables

*filter 
 :INPUT DROP [0:0]
 :FORWARD DROP [0:0]
 :OUTPUT DROP [0:0]
 #Разрешаем соединения по SSH только с IP-адреса 192.168.0.100 из Internet:
 -A INPUT -i eth0 -s 192.168.0.100/32 -d 192.168.0.10/32 -p tcp --dport 22 --sport 1025:65535 -j ACCEPT
 -A OUTPUT -o eth0 -d 192.168.0.100/32 -s 192.168.0.10/32 -p tcp --sport 22 --sport 1025:65535 -j ACCEPT
 #Разрешаем SSH коннекты с любого IP-адреса из внутреней сети:
 -A INPUT -i eth1 -s 10.0.0.0/24 -d 10.0.0.1/32 -p tcp --dport 22 --sport 1025:65535 -j ACCEPT
 -A OUTPUT -o eth1 -d 10.0.0.0/24 -s 10.0.0.1/32 -p tcp --sport 22 --sport 1025:65535 -j ACCEPT

hosts.allow, hosts.deny

Также необходимо настроить сети, которым разрешен доступ по SSH с помощью файлов hosts.allow и hosts.deny, которые находятся в каталоге /etc.

В файле hosts.allow ставим: sshd: 10.0.0.0/255.255.255.0, 192.168.0.100/255.255.255.255

В файле hosts.deny ставим: sshd: ALL@ALL

Настройки SSH-сервера

Настройки SSH-сервера хранятся в файле /etc/ssh/sshd_config.

Для приведенного выше примера он может быть следующим:

Port 22 
 Protocol 2
 ListenAddress 0.0.0.0
 SyslogFacility AUTHPRIV
 LogLevel INFO
 LoginGraceTime 60
 PermitRootLogin no
 AllowUsers admin
 MaxAuthTries 3
 PrintLastLog yes
 PasswordAuthentication yes
 ChallengeResponseAuthentication no
 GSSAPIAuthentication yes
 GSSAPICleanupCredentials yes
 UsePAM yes
 X11Forwarding no
 Subsystem       sftp    /usr/libexec/openssh/sftp-server

Наиболее важные опции с точки зрения безопасности:

Посмотреть в каком файле окажется логируемая информация можно посмотрев опции syslogd в файле /etc/syslog.conf

syslog-сервер

Я настоятельно рекомендую установить в сети syslog-сервер, на который будет производиться журналирование важных событий с ваших серверов. Основным отличием данной системы от стандартного syslog-сервера является возможность логировать события от каждого из источников в отдельный каталог/файл.

Сохранение логов на удаленном сервере

Допустим в sshd_config опциям LogLevel, SyslogFacility присвоены значения:

LogLevel INFO 
 SyslogFacility AUTHPRIV

тогда в /etc/syslog.conf после:  authpriv.* /var/log/secure добавим строку:  authpriv.* @10.0.1.2 где:

Таким образом, события от SSH-сервера логируются на локальном сервере и на syslog-сервере.

Бывают ситуации, когда администрирование сервера должно осуществляться с любого места в сети интернет. Соответственно, необходимо разрешить входить на сервер по SSH с любого IP-адреса. С данным обстоятельством связанна некоторая опасность. В сети работает множество "ботов" которые сканируют сети на предмет наличия SSH-сервера, и при нахожднении такого эти программы пытаются подобрать имя пользователя и пароль для входа на сервер.

Блокирование попыток перебора паролей

Таким образом перед системным администратором встает проблема блокирования попыток подбора пароля. Решение данной проблемы есть.

Изменение номера порта

Во первых, повесить ssh на нестандартный порт например 2022. Этот метод не очень надежен т.к. любой сканер покажет что этот порт открыт, а по банеру либо по возвращаемым ответам сервера на команды можно определить, что это ssh сервер.

Ограничение количества подключений

Во вторых, обязательно установить опцию MaxAuthTries. Чем меньше значение этого параметра тем чаше: наш сервер будет разрывать соединение от брутфорс-робота. Таким образом значительно замедляется скорость перебора значений имя/пароль, но и использование данного метода полностью не исключает возможность подбора пароля. Обязательно установить опцию AllowUsers.

PAM-модуль pam_abl

Ну и напоследок, для блокирования надоедливых ботов нам необходимо автоматически блокировать их ip адреса. В этом нам поможет модуль pam_abl, работающий через PAM. Взять его можно здесь. Компилируется и настраивается данный модуль очень просто: в файл /etc/pam.d/system-auth необходимо внести строку:  auth required pam_abl.so config=/etc/security/pam_abl.conf т.е. файл будет выглядеть следующим образом:

auth        required      pam_env.so 
 auth        required      pam_abl.so config=/etc/security/pam_abl.conf
 auth        sufficient    pam_unix.so likeauth nullok
 auth        required      pam_deny.so
 account     required      pam_unix.so
 password    required      pam_cracklib.so retry=3
 password    sufficient    pam_unix.so nullok use_authtok md5
 password    required      pam_deny.so
 session     required      pam_limits.so
 session     required      pam_unix.so

Затем внесите изменения в файл /etc/security/pam_abl.conf.

По умолчанию файл выглядит следующим образом:

# /etc/security/pam_abl.conf 
 # debug
 host_db=/var/lib/abl/hosts.db #Файл в котором будет храниться "черный" список хостов.
 host_purge=2d # Период устаревания записей о хостах. Т.е. если после неудачной попытки
 входа прошло более 2-х суток, то запись удаляется из базы.
 host_rule=*:10/1h,30/1d # Параметры блокировки хостов. Данная запись означает следующее:
 блокировать любой хост с которого сделано 10 неудачных соединений в течении одного часа,
 либо 30 неудачных соединений в течении суток.
 user_db=/var/lib/abl/users.db #Файл в котором будет храниться "черный" список пользователей.
 user_purge=2d # Период устаревания записей о пользователях.
 user_rule=!root:10/1h,30/1d # Параметры блокировки пользователей. Данная запись означает: 
 блокировать любого пользователя кроме root, под которым сделано 10 неудачных
 соединений в течении одного часа, либо 30 неудачных соединений в течении суток.

Просмотреть информацию о неудачных попытках входа и заблокированных хостах можно набрав в консоли команду pam_abl.

Если вы хотите удалить хост из "черного" списка наберите в консоли:  pam_abl -v --okhost=test.host.ru

Если вы хотите удалить пользователя из "черного" списка наберите в консоли:  pam_abl -v --okuser=test

DenyHosts

Существует утилита выполняющая аналогичные действия, но работающая по другому принципу. Называется она DenyHosts.

Данная программа анализирует файл, в котором хранятся попытки входа в систему по SSH и, в случае обнаружения в нем попыток перебора пароля, заносит "надоедливый" хост в файл hosts.deny и отправляет администратору системы уведомление об этом по почте. Рабочие параметры программы настраиваются в файле конфигурации /etc/denyhosts.cfg.

Разберем некоторые параметры DenyHosts более подробно:

Можно запретить доступ к любым (работающим через механизм tcp_wrappers) сервисам.

Пример: Значение MaxAuthTries задано в 3, а значение DENY_THRESHOLD_INVALID=2. Тогда в случае, если вы ошиблись в наборе имени пользователя и 3 раза ввели пароль - вы автоматически попадете в "черный" список и не сможете более зайти на свой сервер.

(не учитываются попытки входа под пользователем root см. ниже). При указании этого параметра руководствуйтесь предыдущим советом и устанавливайте значение данного параметра как минимум на 1 больше чем MaxAuthTries.

сервера ssh установленно, что входить пользователю root запрещено, то выставьте значение данного параметра в 2 или даже в 1.

Значения применяется для имен пользователей перечисленных только в WORK_DIR/restricted-usernames.

Пример: С IP адреса 10.0.0.2 была сделана неверная попытка входа.

Счетчик неверных попыток для этого адреса установился в 1.

Если в течении периода времени заданного параметром AGE_RESET_VALID с этого ip адреса не будет других неуспешных попыток, то счетчик сбросится на 0.

времени через который будет перечитана информация из SECURE_LOG т.е. как часто будет демон получать информацию о попытках входа в систему. Рекомендую поставить это параметр не более 1 минуты? т.к. в течении этого интервала пока еще не заблокированный атакующий может предпринять сколь угодно большое кол-во попыток входа в систему.

Ну и последнее правило. Все перечисленное не имеет смысла если вы используете простые пароли типа admin, administrator,root,12345,qwerty,asdfg и им подобные. Бинарные пакеты и пакеты для сборки pam_abl и denyhosts можно взять здесь

Может распространяться свободно при указании авторства.

Автор: Фролов Денис

Articles/DenisFrolov/SSHConfiguration (last edited 2008-05-18 11:12:52 by NikolayUlyanitsky)