Помощник веб-разработчикаИнструментыИнструкции

Смена порта SSH-сервера.

Стандартным SSH-портом является TCP порт 22 и он постоянно обходится большим количеством ботов ищущих уязвимые SSH-сервера. Эти боты не представляют угрозы для правильно настроенных серверов, но создают нагрузку на сервер. Важно учитывать, что существуют боты ищущие уязвимости в CMS, phpMyAdmin и прочие, вместе они создают большую нагрузку, что приводит к замедлению, а иногда и лёгкому торможению даже простых, малопосещаемых сайтов, потому защита от автоматических запросов является важной частью настройки серверов.

Боты ищущие SSH-сервера, обычно проверяют только порт 22, т. к. наличие на нём SSH-сервера говорит о том, что с большой вероятностью он не настроен должным образом и потенциально уязвим, в то время как проверять все порты на большом количестве устройств долгое и почти всегда бессмысленное дело. Из этого следует: для уменьшения автоматических запросов лучшим решением является смена SSH-порта. Важно понимать, что изменение порта SSH-сервера не влияет на его защищённость, т. к. в случае целенаправленной атаки, он легко и быстро обнаруживается.

Перед сменой порта желательно убедиться, что Вы имеете возможность получить доступ к консоли удалённой машины не только по SSH, иначе, в случае ошибки, Вы рискуете потерять управление удалённой машиной.

Первым делом нужно определиться с портом, его следует выбирать из числа свободных в диапазоне 1024-49151. Стоит учитывать, что боты проверяют не только 22-ой порт, но и те, на которых обычно работают другие службы, поэтому нужно выбирать не используемый никакими службами порт, иначе, боты будут постоянно тревожить SSH-сервер. Просмотреть список зарегистрированных и распространённых портов можно введя команду:

cat /etc/services

Перед переносом, стоит убедиться что выбранный порт открыт и открыть, если он закрыт. Ниже на странице приведены инструкции для Iptables (Ubuntu и Debian) и FirewallD (CentOS и RHEL).

Если порт открыт, откройте конфигурационный файл OpenSSH-сервера командой:

sudo vi /etc/ssh/sshd_config

Найдите в нём директиву «Port» и приведите её к виду (как пользоваться vi?):

Port номер_порта

После чего перезагрузите SSH-сервер:

sudo systemctl restart sshd

Теперь к удалённому компьютеру можно подключиться с помощью команды:

ssh пользователь@адрес -p порт

Чтобы не указывать номер порта при каждом подключении, укажите опцию «Port» в конфигурационном файле SSH-клиента, о настройке OpenSSH-клиента можно прочитать здесь.

Открытие SSH-порта в Iptables.

На Ubuntu и Debian для настройки межсетевого экрана используется Iptables. Сейчас необходимо узнать какие в нём установлены политики для цепочек, для этого введите команду:

sudo iptables -L | grep policy

Вывод будет примерно таким:

Chain INPUT (policy ACCEPT)
Chain FORWARD (policy ACCEPT)
Chain OUTPUT (policy ACCEPT)

Если политики для цепочек «INPUT» и «OUTPUT» (подчёркнуты красным) — «ACCEPT», брандмауэр проблем не создаст и можно приступить к смене SSH-порта. Если одна из подчёркнутых политик — «DROP» или «REJECT», тогда в цепочки необходимо добавить правила:

$ sudo iptables -A INPUT -p tcp --dport порт -j ACCEPT
$ sudo iptables -A OUTPUT -p tcp --sport порт -j ACCEPT

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

Открытие порта в FirewallD.

В CentOS и RHEL для настройки межсетевого экрана по умолчанию используется FirewallD. FirewallD и Iptables имеются одновременно, но если FirewallD запущен, то настраивать можно только FirewallD, в противном случае возникнет конфликт.

Сейчас необходимо узнать какая зона активирована в FirewallD, для этого введите в терминале:

sudo firewall-cmd --get-active-zones

Вывод будет примерно таким:

sudo firewall-cmd --get-active-zones
public
interfaces: ens3

Красным подчёркнута активная зона, в данном случае это public, в эту зону необходимо добавить порт и перезагрузить FirewallD:

$ sudo firewall-cmd --permanent --zone=public --add-port=порт/tcp
$ sudo firewall-cmd --reload

Для проверки можно посмотреть список портов для активной зоны:

sudo firewall-cmd --zone=зона --list-ports

Далее требуется настроить SELinux, для этого необходим набор инструментов, который устанавливается командой:

sudo yum install setroubleshoot

После установки инструментов, разрешаем использование порта в SELinux:

sudo semanage port -a -t ssh_port_t -p tcp порт

Теперь можно сменить порт SSH-сервера и проверить работоспособность, если всё работает, стоит закрыть используемый ранее порт:

$ sudo firewall-cmd --permanent --zone=public --remove-service=ssh
$ firewall-cmd --permanent --zone=public --remove-port=ст._порт/tcp
$ sudo firewall-cmd --reload