Настраиваем SSH
Маленькое, но нужное руководство.
Оглавления:
- Настройка iptables (netfilter) для SSH и меняем порт.
- Убираем root и ещё кое что.
- Делаем вход по ключу.
- Защитим SSH.
- Дам пару советов...
$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
________________________________________
Что поменял? )))
Убрал слова, про интерфейс -- могут расценить как доверенный сетевой интерфейс.
бесполезно
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 все проще, а если надо, всегда и порт перенаправить можно и ключами обмен сделать нормальный.
на gosrv логичней повесить алиас
в файл /etc/bash.bashrc
alias gosrv="ssh ip.server"
признателен



Про ssh вроде и сказать больше нечего.
______________________________
In the world without walls, who needs windows?