freebsd

Будем брать во внимание ОС FreeBSD и немного Linux Ubuntu . При установке все необходимое нами уже поставлено, нам только остается активировать данный сервис и правильно настроить его.

Для того чтобы активировать, нужно в файл /etc/rc.conf прописать следующее:

sshd_enable=”YES”

теперь, после перезагрузки, система создаст все необходимые ключи и активирует нам sshd сервис, после чего мы можем удаленно заходить на сервер с помощью security shell.
Рассмотрим настройку демона sshd с точки зрения безопасности:
Первое, что необходимо сделать, это указать, что использоваться будет только версия 2, т.к. версия 1 имеет достаточно много уязвимостей.
Для этого необходимо отредактировать sshd_config . По умолчанию , конфигурационный файл находится по пути: /etc/ssh/
Версия протокола указывается следующим образом:

Protocol 2

Необходимо проверить, так ли у вас в вашем конфигурационном файле. В ранних версиях для совместимости использовалась деректива:

Protocol 1,2

Это говорило о том, что может использоваться как версия 1, так и версия 2.
Далее, проверяем в этом же конфиге чтоб PermitRootLogin было установлено в значении no, это запращает под пользователем root входить на ssh напрямую (можно залогиниться под обычным юзером, после через su сделаться рутом), это более правильный вариант.

В последних версиях OpenSSH всё это уже установлено (но мало ли, может кто-то тюнит старый сервер).
Ограничение доступа по SSH по IP.
Если возможно, разрешайте подключаться по ssh только определенным IP. Сделать это можно несколькими способами:

  • с помощью Firewall
  • с помощью tcpwrapper

Можно объеденить оба способа и использовать их совместно. Рассмотрим по порядку.
1. Будем рассматривать ipfw файрволл, который входит в систему по умолчанию (так же может использоваться pf – packet filter)
Допустим у нас есть машина, с которой осуществляется управление, так наываемая management-pc, в том числе и нашим сервером. На сервере мы должны ограничить доступ, только по IP адресу нашей управляющей системы.
Создадим правила для ssh:

ipfw add allow log tcp from 10.0.0.2 to me 22 keep-state

ipfw add deny log tcp from any to me 22

Эти два правила говорят нам о том, что доступ к ssh на сервере можно осуществлять только с ip адреса 10.0.0.2. , причем все попытки авторизации, в том числе и разрешенные нам (тоесть с «правильного» IP) будут логироваться. По умолчанию, логируется в /var/log/security

2. TCPWRAPPER
Для того что бы запретить доступ по SSH всем, кроме определенного IP, в /etc/hosts.allow прописываем:

sshd2 : x.x.x.x/y.y.y.y : allow
sshd2 : ALL : deny

, где x.x.x.x – ваш IP , y.y.y.y – маска подсети.
Манипулируя этими значениями можно не только разрешить конкретному IP ходить по SSH на данный сервер, но и разрешить это делать всей сети.
Т.е. получилось два правила, первое – разрешает кому-то, второе – запрещает всем остальным.

Так же многие меняют порт по умолчанию, который слушает SSHd, но я не считаю это какой-то защитой. Если кому понадобится то, порт можно изменить в этом же sshd_config файле используя директиву Port. По умолчанию выглядит так:

bsd# grep Port /etc/ssh/sshd_config
#Port 22
#GatewayPorts no
bsd#

После того, как изменили значение, не забываем убирать комментарий (символ #)

Следующее что необходимо сделать. По умолчанию, при создании пользователя, пользователю устанавливается шелл по умолчанию, например /bin/bash (или другое, в зависимости от настроек системы), и пользователь, зная имя пользователя и пароль, может подключиться по ssh к серверу.
Если это пользователю не нужно, то необходимо поменять шелл пользователя. Рассмотрим на примере FreeBSD.

bsd# grep sasha /etc/passwd
sasha:*:1001:0:Alexander A:/home/sasha:/bin/csh
bsd#

Здесь вы видим, что пользователь sasha, имеет оболочку C-shell.
Для того, чтоб её заменить, и чтоб этот пользователь не мог подключиться к ssh необходимо убрать эту оболочку с /etc/passwd. Вопрос в том, на что заменить? Я использую nologin.

bsd# which nologin
/sbin/nologin
bsd#

Но перед тем как это делать, необходимо указать в системе, что существует такой шелл как /sbin/nologin для этого необходимо добавить в /etc/shells путь к нашей оболочке.
Посмотрим что у нас получилось:

bsd# more /etc/shells
# $FreeBSD: src/etc/shells,v 1.5 2000/04/27 21:58:46 ache Exp $
#
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/sh
/bin/csh
/bin/tcsh
/sbin/nologin
bsd#

bsd# grep sasha /etc/passwd
sasha:*:1001:0:Alexander:/home/sasha:/sbin/nologin
bsd#

Теперь этот пользователь не сможет использовать ssh подключение к нашему серверу, но может пользоваться другими сервисами, тем же FTP (если это не исключено самим FTP сервисом).

Теперь поговорим о защите против брутфорсеров на наш SSH. Если нет возможности ограничить доступ по IP то встает такая проблема.
Единственная на мой взгляд защита от брутфорсеров на сегодняшний момент состоит в элементарных вещах – блокирование IP адреса после нескольких раз неуспешной авторизации.
Для этого мы будем использовать: denyhosts. Как на Linux системах, так и на BSD.
Установка не должна вызвать никаких трудностей.
В FreeBSD можно воспользоваться системой портов:
cd /usr/ports/security/denyhosts
make install clean
rehash

Для введения в эксплуатацию данного демона необходимо в /etc/rc.conf указать:
denyhosts_enable=»YES»


1. В /etc/hosts.allow

2. sshd : /etc/hosts.deniedssh : deny
sshd : ALL : allow
3. Если файл /etc/hosts.deniedssh не существует (а ему неоткуда взяться) необходимо его создать: touch /etc/hosts.deniedssh
4. Желательно запустить syslogd с опцией “-c”, прописать это нужно в /etc/rc.conf
syslogd_flags=»-c»
Для запуска: /usr/local/etc/rc.d/denyhosts start
Как мы видим, этот демон работает с уже знакомым нам TCPWRAPER’ом. Все хосты, которые были забанены помещаются в /etc/hosts.deniedssh, которые будут блокироваться, все остальные хосты он будет пускать нормально.
Основной конфигурационный файл находится здесь: /usr/local/etc/denyhosts.conf
Там можно указать сколько попыток нужно, чтоб попасть в hosts.deniedssh, сколько по времени будет действовать бан, и так далее.

В Linux так же нет никаких сложностей, в зависимости от того что используете, устанавливаем через yum или через apt-get , либо всё установить их исходных текстов самостоятельно.
Настройка практически идентична с FreeBSD, меняется только имена конфигурационных файлов системы.
Примеры:

yum install denyhosts
chkconfig denyhosts on
service denyhosts start

Ещё один способ ограничения доступа к SSH на уровне sshd.
По умолчанию, все пользователи могут подключаться по SSH и даже попадать в систему (если у них есть своя оболочка).
В конфигурационном файле sshd_config можно указать список пользователей или грппы, которые могут работать с демоном. Делается это с помощью директив: AllowUsers и AllowGroups. Использовать эти директивы просто:

apt-get install denyhosts
/etc/init.d/denyhosts start

AllowUsers sasha
AllowGroups sshusers

Дополнительную информацию можно почерпнуть из man sshd_config

Говоря о настройке SSHd нельзя не упомянуть о том, что авторизация может происходить по имени пользователя и паролю (интерактивная атовризация), а может осуществляться по ключу.

Какой способ ограничения доступа использовать зависит от поставленных вами задач.
Иногда подходит один способ, иногда другой, иногда используется сочетание.

p.s. Так же могу порекомендовать хороший ресурс по теме Настройка серверов, ОС: Windows, FreeBSD, linux, cisco