Смена порта 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