Настройка SSH в FreeBSD, Ubuntu. Настройка безопасности, ipfw [2010]
Будем брать во внимание ОС 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.
Здесь вы видим, что пользователь 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
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. Использовать эти директивы просто:
Дополнительную информацию можно почерпнуть из man sshd_config Говоря о настройке SSHd нельзя не упомянуть о том, что авторизация может происходить по имени пользователя и паролю (интерактивная атовризация), а может осуществляться по ключу. Какой способ ограничения доступа использовать зависит от поставленных вами задач. Иногда подходит один способ, иногда другой, иногда используется сочетание.