Настраиваем SSH

Маленькое, но нужное руководство.
Оглавления:

  • Настройка iptables (netfilter) для SSH и меняем порт.
  • Убираем root и ещё кое что.
  • Делаем вход по ключу.
  • Защитим SSH.
  • Дам пару советов...


*Конфигурационный файл OpenSSH находится в /etc/ssh/sshd_config — для просмотра без комментариев следует выполнить команду(ы):

$sudo grep -v '^#' /etc/ssh/sshd_config | grep -v '^$'

Настройка iptables (netfilter) для SSH

По умолчанию для SSH соединения, используется порт ТСP-порт 22. Смена порта не является панацеей защиты. Способ смены порта хорошо известен, есть соответствующие скрипты для его поиска. Чтобы узнать какой порт слушает демон (sshd) на сервере, нужно выполнить команду:


$ sudo grep -w 'Port' /etc/ssh/sshd_config
#Port 22

Port поменяв значение, вы укажете демону (sshd) порт который нужно слушать;

Port 8822

Теперь демон (sshd) будет слушать порт 8822. Для подключения к серверу, нужно воспользоваться на клиентской машине командой:


$ ssh -p8822 user@127.0.0.1

Ключ '-p' указывает порт, вместо user пишем имя пользователя, 127.0.0.1 меняем на IP сервера.

C портами разобрались, теперь нужно настроить iptables. Можно воспользоваться средствами TUI дистрибутива.


*Внимание ! Будьте внимательны и последовательны в ваших действиях ! Неправильные действия могут привести к потере удалённого доступа.

Для Red-Hat based:

$ sudo yum install iptables system-config-securitylevel-tui
$ sudo system-config-securitylevel-tui

Нужно открыть порты (SSH ) ТСP-8822 или соответственно открыть порт который указали в директиве Port

Для SuSE:

$ sudo yast

Заходим в /Безопасность и пользователи/ Брандмауэр / Разрешённые службы - добавляем «Сервер Secure Shell» , если вы указали порт директивой Port то / Брандмауэр / Разрешенные службы /Дополнительно и добавляем порт TCP .

Для «ручной настройки» следует внимательно ознакомиться с правилами iptables вашего дистрибутива.

Приведу пример открытия порта простыми правилами:

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

*Внимание ! Следует понимать, что к примеру SuSEfirewall2 генерирует правила для iptables из конфигурационного файла /etc/sysconfig/SuSEfirewall2 , в каждом дистрибутиве есть свои особенности управления брандмауэром.

Убираем root.

Во многих дистрибутивах доступ «суперпользователю» по SSH открыт, это не совсем безопасно. За этим следит директива PermitRootLogin, чтобы посмотреть состояние:


$ sudo grep -w 'PermitRootLogin' /etc/ssh/sshd_config
PermitRootLogin no
#the setting of "PermitRootLogin without-password"

В примере показано, что значение директивы PermitRootLogin является no , значит что, авторизация под root -ом запрещена. Стоит отметить, в большинстве случаях когда доступ разрешен для root то вывод команды:


$ sudo grep -w 'PermitRootLogin' /etc/ssh/sshd_config
#PermitRootLogin yes
#the setting of "PermitRootLogin without-password

Это значит авторизация под root возможна, следует PermitRootLoginпридать значенияno.

*По умолчанию доступ к серверу разрешён всем пользователям. Что бы изменить ситуацию нам в помощь служат директива AllowUsers:


AllowUsers:
AllowUsers luser1 luser2 luser4

Пользователи luser*, которым разрешён доступ.

Другой пример:
AllowUsers luser*

Будет разрешён доступ пользователям у кого имя начинается на luser.

Для разрешения групп(ы) служит директива AllowGroups :

AllowGroups luser fuser
Перечислены разрешенные группы пробел.

Таким образом мы запретили авторизацию root по shh и указали, каким именно пользователям/группам разрешён доступ.

Вход по ключу.

Для улучшения безопасности возможна авторизация по ключу. Для генерации ключей нужно выполнить команду:

$ cd ~/.ssh
$ ssh-keygen -t rsa

Вам будет предложено ввести защитную фразу, если вы не хотите набирать её каждый раз перед авторизацией, можете нажать «ввод». Учтите, если кто нибудь завладеет ключом (непубличным), то он беспрепятственно авторизуется, я рекомендую использовать защитную фразу. После генерации ключей вы обнаружите в каталоге ~/.ssh два ключа:

id_rsa - приватный ключ, клиентская часть
id_rsa.pub - публичный ключ для сервера

Теперь нужно передать ключ id_rsa.pub на сервер ~/.ssh/authorized_keys делаем:


$ scp ~/.ssh/id_rsa.pub IP_сервера:\
~/.ssh/authorized_keys2

Для работы нужно на севере добавить или изменить параметры в /etc/ssh/sshd_config:


RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

Для запрета авторизации по паролю, добавляем в /etc/ssh/sshd_confi:


PasswordAuthentication no
PermitEmptyPasswords no

Будете внимательны, проверьте конфигурации, для вступления изменений в силу нужно сделать рестарт службы(демона) sshd:

$ sudo /etc/init.d/sshd restart

Защитим SSH.

Для защиты от перебора пароля и назойливых "брутфорсеров", можно и нужно использовать

«denyhostdenyhosts»;

Для SUSE:

$ sudo zypper ar http://download.opensuse.org/repositories/\
network:/utilities/openSUSE_11.0/network:utilities.repo
$ sudo chkconfig denyhosts on
$ sudo rcdenyhosts start

Для Debian-based:

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

Для Red-Hat based:

$ sudo yum install denyhosts
$ sudo chkconfig denyhosts on
$ sudo service denyhosts start

После установки denyhost все надоевшие клиенты будут посылаться в /etc/hosts.deny , блокироваться.

Следует занести свой IP в файл /etc/hosts.allow - разрешённые адреса.
Здесь http://denyhosts.sourceforge.net/ можно и нужно найти более подробную информацию.

Совет, для облегчения работы с sudo.

Таким способом делается авто дополнение после sudo. Вставляем в
~/.bashrc:


complete -cf sudo

Прошу, задавайте вопросы и пишите дополнения к теме в комментариях.
_____________________________________________________________________
Жаров Сергей srgazh(@)gmail(.)com
Копирование материала разрешено только при наличии ссылки на источник:
неофициальный проект GNU/Linux ХМАО-Югра www.oslinux.ru

________________________________________

9.4
в среднем: 9.4 (10 votes)
sa
sa аватар
User offline. Last seen 5 дней 1 час ago. Offline
Зарегистрирован: 05/11/2008
Спасибо!

Про ssh вроде и сказать больше нечего.

______________________________
In the world without walls, who needs windows?

sa
sa аватар
User offline. Last seen 5 дней 1 час ago. Offline
Зарегистрирован: 05/11/2008
Что нового?

Что поменял? )))

______________________________
In the world without walls, who needs windows?

srgaz аватар
User offline. Last seen 17 недель 1 день ago. Offline
Зарегистрирован: 05/14/2008
Убрал слова, про интерфейс --

Убрал слова, про интерфейс -- могут расценить как доверенный сетевой интерфейс.

______________________________
Who killed Kenny ??

Гость
бесполезно debian посылает на

бесполезно

debian посылает на все три буквы, как будто конфиг /etc/ssh/sshd_config вообще не при делах

с клиента:

ssh user@ip (не придираемся. я не буду писать имя пользователя и ip)
Password:
Password:
Password:
Permission denied (publickey,keyboard-interactive).

да. sshd был перезагружен. обмен ключами произведен был. заход шел с opensuse.

напомнило Micro$oft, где пока не сломаешь замок в двери сам и не поломаешь стены, чтоб лишь бы открыть ее, толку 0. зато, кому надо потом - спокойно зайдет.

debian -
opensuse+
в opensuse все проще, а если надо, всегда и порт перенаправить можно и ключами обмен сделать нормальный.

Гость
goserver

на gosrv логичней повесить алиас

в файл /etc/bash.bashrc

alias gosrv="ssh ip.server"

Гость
Сусе полечило

признателен