Настройка брандмауэра для SSH в Linux
Как правило «хостер» предоставляет Вам доступ по SSH с отключенным брандмауэром — его надо включить и настроить.
Конфигурационный файл OpenSSH находится в /etc/ssh/sshd_config — для просмотра без комментариев следует выполнить команду(ы):
$sudo grep -v '^#' /etc/ssh/sshd_config | grep -v '^$'
1. Настройка Брандмауэра (netfilter) для SSH и тырем порт
2. Убираем «рута» и ещё кое что
3. Делаем вход по ключу
4. Защита SSH
5. Советы для админов
1. Настройка Брандмауэра (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 портами разобрались, теперь нужно настроить брандмауэр. Можно воспользоваться средствами TUI дистрибутива.
Внимание! Будьте внимательны и последовательны в ваших действиях ! Неправильные действия могут привести к потере удалённого доступа.
Для Red-Hat based:
$ sudo yum install iptables system-config-securitylevel-tui
$ sudo system-config-securitylevel-tui
Нужно открыть порты (SSH) ТСP-22, UDP-22 или соответственно открыть порт который указали в директиве Port
Для SuSE:
$ sudo yast
Заходим в /Безопасность и пользователи/ Брандмауэр / Разрешённые службы — добавляем «Сервер Secure Shell», если вы указали порт директивой Port
то / Брандмауэр / Разрешенные службы /Дополнительно и добавляем порт TCP и UDP
.
Для «ручной настройки» следует внимательно ознакомиться с правилами iptables
и настройкой брандмауэра вашего дистрибутива.
Приведу пример открытия портов простыми правилами:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p udp --sport 22 -j ACCEPT
Внимание ! Следует понимать, что к примеру SuSEfirewall2 генерирует правила для iptables из конфигурационного файла /etc/sysconfig/SuSEfirewall2, в каждом дистрибутиве есть свои особенности управления брандмауэром.
2. Убираем «рута» и ещё кое что
Во многих дистрибутивах доступ «суперпользователю» по SSH открыт, это не совсем безопасно. За этим следит директива PermitRootLogin
, чтобы посмотреть состояние:
$ sudo grep -w 'PermitRootLogin' /etc/ssh/sshd_config
PermitRootLogin no
#the setting of "PermitRootLogin without-password"
В примере показано, что значение директивы PermitRootLogin
является no
, значит что, авторизация под 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
Приведены пользователи через пробел, которым разрешён доступ.
Другой пример:
AllowUsers luser*
Будет разрешён доступ пользователям у кого имя начинается на luser.
Для разрешения групп(ы) служит директива AllowGroups
:
AllowGroups luser fuser
Перечислены разрешённые группы через пробел.
Таким образом мы запретили «root» и указали каким именно пользователям/группам разрешён доступ.
3. Делаем вход по ключу
Для улучшения безопасности, рекомендуется авторизация по ключам. Для генерации ключей нужно выполнить команду:
$ 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_confi
:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
Для запрета авторизации по паролям, добавляем в /etc/ssh/sshd_confi
:
PasswordAuthentication no
PermitEmptyPasswords no
Будете внимательны, проверьте конфигурации, для вступления изменений в силу нужно сделать рестарт службы(демона) sshd
:
$ sudo /etc/init.d/sshd restart
4. Защита 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
— разрешённые адреса.
5. Советы для админов
Создаём директорию ~/bin
туда будем складывать скрипты :
$ mkdir ~/bin
Убеждаемся что в вашем профиле bash, переменная PATH
содержит ~/bin
.
$ echo $PATH
Пишем скрипт, делаем исполняемым:
$ vim ~/bin/gosrv.sh
#!/bin/bash
#file:gosrv.sh
ssh user@ваш_IP
$ chmod a+x ~/bin/gosrv.sh
Теперь можем набрав gosrv.sh
подключаться к серверу.
Как делать sudo это баян, расскажу как сделать автодополнение после sudo. Вставляем в ~/.bashrc
:
complete -cf sudo