Как скрыть открытые порты на VPS и остановить сканирование ботами
VPS-серверы для размещения различных проектов – от небольших сайтов до рабочих сред для разработчиков. Это удобный способ получить отдельное серверное окружение, где можно самостоятельно управлять ресурсами, устанавливать нужные сервисы и настраивать систему под себя, не завися от ограничений общего хостинга.
Однако даже самый быстрый VPS может стать уязвимым, если его сетевые порты остаются без надлежащего контроля. Открытые порты привлекают внимание ботов и автоматизированных сканеров, создавая лишнюю нагрузку и потенциальные угрозы безопасности.
В этой статье мы рассмотрим действенные подходы к управлению портами на VPS, основываясь на принципе минимизации поверхности атаки. Основной принцип заключается в минимизации всех ненужных точек входа, которые могут стать целью для атак. Мы рассмотрим, как сделать порты менее заметными для сторонних сканеров, ограничить доступ только доверенным адресам и уменьшить количество данных, которые могут подсказать ботам потенциальные уязвимости.
Как работают порты на VPS
Порты определяют, через какие каналы сервер принимает и отправляет сетевой трафик. Каждый порт имеет уникальный номер от 0 до 65535 и ассоциируется с конкретным сервисом или протоколом. IP-адрес указывает на сервер, а порт – на конкретную службу внутри него.
Сетевые порты делятся на несколько основных типов:
- Первый тип – well-known ports или известные порты (0–1023). Это порты, которые используются системными и стандартными сервисами: SSH, HTTP, HTTPS, SMTP и другие. Они обычно зарезервированы под базовые протоколы.
- Второй тип – registered ports или зарегистрированные порты (1024–49151). Это порты, которые официально зарегистрированы под определенные сервисы и приложения. Например, MySQL, PostgreSQL, различные панели управления типа cPanel или Plesk работают в этом диапазоне.
- Третий тип – динамические или частные порты (49152–65535). Это динамические или частные порты, которые используются клиентскими приложениями для установления временных сессий. Они открываются автоматически под конкретные соединения и не привязаны к определенному сервису.
Настройки открытых портов на VPS зависят от конфигурации сервера и установленных сервисов. Например, системная оболочка может открывать базовые порты для SSH или веб-сервисов, а панель управления – дополнительные порты для администрирования.
Процесс управления портами предусматривает контроль доступности сетевых портов на VPS. Вы сами определяете, какие службы должны быть доступны извне, а какие стоит изолировать, чтобы минимизировать риски и ограничить потенциальные точки атаки.
Какие порты чаще всего подвергаются атакам
Чаще всего злоумышленники сканируют серверы в поисках стандартных портов известных служб. Открытый порт сразу становится потенциальной точкой атаки, поэтому важно знать, какие из них чаще всего подвергаются атакам.
SSH (порт 22) – это одна из главных целей атак. Через него часто проводят брутфорс-атаки, пытаясь подобрать логин и пароль. Если оставить порт в стандартном виде, он мгновенно попадает в сканеры ботов.
FTP (порт 21) часто используется для массового перебора паролей. Из-за отсутствия шифрования этот порт остается уязвимым и привлекательным для атак.
RDP (порт 3389), используемый Windows-серверами, регулярно сканируется ботами. Основная цель – получить удаленный доступ к системе для вредоносных действий или установки бэкдоров.
MySQL (порт 3306) обычно должен быть закрыт извне, но все зависит от настроек самого сервера и панели управления. Если порт базы данных открыт – это создает риск брутфорса стандартных учетных записей и эксплуатации уязвимостей старых версий баз данных.
SMTP (порт 25) – этот порт используется для приема и передачи почты между серверами. Его часто сканируют для проверки на открытые реле, когда сервер позволяет отправку почты сторонним пользователям без аутентификации. Такая конфигурация может быть использована злоумышленниками для рассылки спама.
IMAP (порт 143) – используется для доступа к почте на сервере. По умолчанию этот порт передает данные в открытом виде, поэтому его стоит блокировать внешне или использовать только через SSL/TLS (порт 993) для шифрования.
Веб-порты (80 и 443) должны быть открытыми, но именно через них происходят многочисленные атаки: SQL-инъекции, brute force на логины, сканирование плагинов WordPress, попытки обнаружить конфигурационные файлы и DDoS-запросы. Важно помнить, что атака здесь направлена на приложение, а не на сам порт.
При работе с портами следует действовать осмотрительно. Полная или хаотичная блокировка всех неиспользуемых портов может мешать нормальной работе серверов и программ, а также снижать производительность сети. Лучший подход – это разумный баланс: оставлять открытыми только те порты, которые нужны для легальной работы сервисов, и одновременно ограничивать доступ к тем, которые часто становятся мишенью атак. Так вы повышаете безопасность без ущерба для функциональности и удобства пользователей. Регулярный просмотр конфигураций и аудит открытых портов помогает поддерживать этот баланс на постоянном уровне.
Как проверить открытые порты на сервере
Одним из ключевых аспектов безопасности сервера является понимание того, какие порты на нем открыты и доступны для внешних подключений. Открытый порт, при наличии уязвимостей в сервисе, который его использует, может стать точкой входа для злоумышленников. Поэтому регулярная проверка портов позволяет выявить нежелательные или лишние сервисы, а также вовремя их заблокировать, обеспечивая безопасность и стабильность работы сервера.
Когда мы говорим о портах на сервере, часто встречаются термины TCP и UDP – это два основных протокола, с помощью которых происходит обмен данными в сети.
TCP (Transmission Control Protocol) обеспечивает надежную доставку данных: он проверяет, все ли пакеты дошли, и при необходимости повторно отправляет потерянные. Именно через TCP работают такие сервисы, как веб-серверы (HTTP/HTTPS), SSH, FTP и почтовые протоколы (SMTP, IMAP). Порты TCP – это «двери», через которые эти сервисы получают и передают информацию.
UDP (User Datagram Protocol) наоборот быстрее и проще, но не гарантирует доставку пакетов. Его используют для сервисов, где скорость важнее надежности: видео- или аудиопотоки, онлайн-игры, DNS-запросы. Порты UDP – это «входные точки» для таких быстрых потоков данных.
Когда вы проверяете открытые порты, важно знать, какой протокол они используют. От этого зависит, какие типы трафика проходят через сервер и какие риски могут существовать.
На Linux-серверах для первичной проверки можно использовать одну из следующих команд: netstat или ss. Они показывают, какие порты слушают, через какие протоколы идет обмен данными и какой процесс за это отвечает.
Если вам нужно быстро выяснить, какие TCP и UDP порты открыты и прослушиваются на сервере, можно использовать такую команду:
# netstat -tulnpОна покажет протокол, номер порта, статус соединения и процесс, отвечающий за работу этого порта.

Помимо netstat, в современных системах часто используют утилиту ss, которая работает быстрее и предоставляет более подробную информацию. Для проверки активных сокетов подойдет команда:
# ss -tulnpОна отображает те же данные, но в более структурированном формате.

При необходимости можно добавить ключ -a, чтобы увидеть все состояния соединений, включая неактивные:
# ss -tulnpaКроме комплексного вывода всех сетевых сокетов, иногда возникает необходимость увидеть именно активные TCP-подключения или порты, которые сейчас открыты для установки TCP-соединений. Для этого можно воспользоваться более узкоспециализированной командой:
# netstat -tnВ этом случае утилита покажет только TCP-соединения – как установленные, так и находящиеся в различных стадиях обработки. Такой подход удобен при диагностике подозрительной активности, анализе нагрузки на веб-сервер или проверке работы сервисов, использующих исключительно TCP.
Утилита ss выполняет те же задачи, но обеспечивает более быстрый вывод и более подробную информацию. Для просмотра активных TCP-сокетов можно использовать:
# ss -tnЕсли же вас интересует состояние портов, работающих по протоколу UDP, можно применить одну из аналогичных команд с другим ключом:
# netstat -un# ss -unОни выведут все UDP-сокеты, которые прослушиваются службами или используются локальными процессами. Такая проверка часто требуется при диагностике DNS-серверов, DHCP или VPN-служб, работающих поверх UDP.
Еще один удобный инструмент для детальной проверки портов – утилита lsof. Она позволяет просматривать все открытые файлы и сокеты, включая сетевые подключения. В Linux всё – даже сетевые порты – рассматриваются как файлы, поэтому lsof может отобразить, какой именно процесс использует конкретный порт.
Чтобы увидеть все сетевые соединения и прослушиваемые порты, выполните:
# lsof -iВ выводе появятся все активные TCP и UDP сокеты, а также информация о:
- PID процесса, который держит открытый порт;
- пользователе, от имени которого работает процесс;
- конкретном порте и протоколе;
- текущем состоянии соединения (LISTEN, ESTABLISHED и т.д.).

Эта команда удобна, когда вам нужно быстро определить, какая служба занимает определенный порт.
Также можно фильтровать вывод под конкретный порт. Например, чтобы проверить, что использует 80-й порт:
# lsof -i :80Или просмотреть все TCP-соединения:
# lsof -i tcplsof дает возможность глубже проанализировать состояние сетевых портов, особенно тогда, когда netstat или ss показывают только общую информацию, а нужно найти точный процесс, который блокирует или использует порт.
Для оценки доступности портов из внешней сети можно использовать сканирование с помощью nmap. Этот инструмент позволяет проверять, какие порты доступны извне и какие службы отвечают на подключение.
В отличие от netstat, ss или lsof, команды Nmap нужно запускать не на самом сервере, а с другой машины – например, с компьютера администратора. Это позволяет увидеть доступность портов именно со стороны внешнего мира.
Обратите внимание! Запускать Nmap с другого VPS или хостинга нежелательно. Сканирование портов может быть расценено как подозрительная активность, из-за чего может быть отправлено предупреждение или вы можете получить жалобу от стороны, чей сервер был просканирован, и как следствие ваш сервер может быть заблокирован. Для проверок лучше использовать собственный локальный компьютер.
Для стандартного сканирования открытых портов используется команда:
# nmap your_server_ipЭто базовый обзор, который покажет самые распространенные порты, отвечающие на запросы.
Чтобы выполнить более детальное сканирование всех TCP-портов, можно применить:
# nmap -sT your_server_ip
При необходимости можно указать конкретные порты:
# nmap -p 22,80,443 your_server_ipNmap позволяет оценить реальную картину и помогает выявить случайно открытые порты, некорректные правила firewall или неправильную конфигурацию сервисов.
Если нет возможности выполнить сканирование самостоятельно, существуют онлайн-сервисы для проверки портов, такие как YouGetSignal Port Checker или Canyouseeme. Они позволяют быстро проверить конкретный порт на открытость из внешней сети.
Таким образом, после проверки доступности портов можно сделать выводы о том, какие службы действительно должны быть открыты для внешнего доступа, а какие стоит ограничить или полностью закрыть.
Ограничение доступа с помощью фаервола
Фаервол или брандмауэр является базовым уровнем защиты сервера, который контролирует весь входящий и исходящий трафик. Он позволяет открывать только нужные порты и блокировать остальные, снижая риск атак и несанкционированного доступа. На серверах Linux вы можете рассмотреть использование популярных инструментов для настройки ограничений портов.
Блокировка порта с помощью iptables
Среди наиболее распространенных инструментов для этого есть iptables и nftables, которые позволяют детально контролировать сетевой трафик, поступающий и исходящий с сервера.
Важно понимать, что эти утилиты работают на очень низком уровне сетевого стекового взаимодействия, то есть они фильтруют пакеты еще до того, как они попадут в любой серверный процесс или приложение. Именно поэтому они являются очень мощным, но в то же время сложным инструментом – неправильная конфигурация может заблокировать доступ к серверу, включая собственное SSH-соединение.
Iptables – это классический инструмент для управления правилами фаервола на Linux. Он работает с таблицами, цепями и правилами. Каждая таблица отвечает за определенный тип обработки пакетов, например:
- filter – для блокировки или разрешения трафика;
- nat – для трансляции адресов.
Цепочки (INPUT, OUTPUT, FORWARD) определяют, на каком этапе прохождения пакет проверяется. Чтобы заблокировать порт, например 22 (SSH), используется команда:
# iptables -A INPUT -p tcp --dport 22 -j DROPЗдесь -A INPUT добавляет правило в цепь INPUT, -p tcp означает протокол TCP, —dport 22 – порт назначения, а -j DROP определяет действие – отбросить пакет.
Важно помнить! iptables применяет правила в порядке их добавления, поэтому очередность имеет значение.
Для проверки действующих правил используется команда:
# iptables -L -n -vNftables – более современная замена iptables, которая более гибкая для сложных сценариев. Она объединяет различные типы обработки пакетов в единую конфигурационную систему и использует другой синтаксис. Правило для блокировки порта 22 в nftables выглядит так:
# nft add rule inet filter input tcp dport 22 dropЗдесь inet – семейство протоколов IPv4/IPv6, filter – таблица для фильтрации, input – цепочка, tcp dport 22 – условие для TCP-пакетов на порт 22, drop – действие.
Nftables позволяет строить более сложные структуры, например, группы IP-адресов или динамические наборы, что делает его мощным инструментом для опытных администраторов.
Полагаться исключительно на iptables в современных условиях не стоит, поскольку этот инструмент имеет сложный синтаксис и требует глубокого понимания сетевых процессов для безопасной работы. Гораздо более рациональным является сочетание базовых правил блокировки портов с высокоуровневыми средствами управления, такими как Firewalld или UFW, которые упрощают внесение и поддержку политик доступа. Вместе с этим могут применяться и дополнительные механизмы автоматизированной защиты, реагирующие на подозрительную активность без необходимости вручную формировать большое количество правил. Такой подход повышает стабильность и безопасность работы сервера, уменьшая риск ошибок в конфигурации и чрезмерной сложности настроек.
Особенностью iptables и nftables является то, что они работают на низком уровне ядра и влияют на все сетевые сервисы одновременно. Это означает, что блокировка одного порта на этих уровнях является более надежной, чем ограничение доступа внутри приложений. Однако такая специфика требует внимательности: администратору нужно учитывать все открытые порты, протоколы и направления трафика, чтобы не помешать легитимной работе серверных сервисов.
Блокировка порта с помощью Firewalld
Firewalld – это популярная система управления фаерволом в Linux, которая использует динамические правила и зоны безопасности. Firewalld позволяет вносить изменения в правила без необходимости полной перезагрузки брандмауэра, что обеспечивает непрерывность работы сетевых служб. Основным инструментом для работы с ним является утилита firewall-cmd.
Firewalld является стандартным брандмауэром в большинстве дистрибутивов Linux, в частности:
- RHEL (Red Hat Enterprise Linux) 7+ и более поздние версии;
- Rocky Linux и AlmaLinux – актуальные замены CentOS с полной поддержкой;
- Fedora 18+;
- openSUSE Leap и т.д.
Прежде чем приступать к работе с Firewalld, необходимо убедиться, что пакет доступен в вашей системе. Firewalld входит в стандартные репозитории практически всех актуальных Linux-дистрибутивов, поэтому его можно установить с помощью пакетного менеджера, используемого в вашей системе.
После установки Firewalld станет доступен как системный сервис, который можно запускать, останавливать и управлять им через systemctl. Это позволяет централизованно управлять правилами брандмауэра и применять их без перезапуска всей системы.
В системах на основе Red Hat (RHEL/ AlmaLinux/ Rocky Linux/ CentOS) используется пакетный менеджер yum или его актуальная замена dnf. Для установки Firewalld выполните:
# dnf install firewalld -yВ дистрибутивах Debian-семейства для работы с пакетами используется apt. Firewalld доступен в официальных репозиториях, поэтому достаточно выполнить:
# apt install firewalld -yПосле установки Firewalld нужно включить как системный сервис. Это позволит управлять брандмауэром и применять правила сразу после перезагрузки сервера.
Чтобы запустить Firewalld и добавить его в автозагрузку, выполните следующие команды:
# systemctl start firewalld# systemctl enable firewalldДля проверки, работает ли сервис корректно:
# systemctl status firewalldПосле данных настроек можно приступать к работе с файерволом.
Чтобы разрешить доступ к определенному порту (например, 8080 TCP), используется команда:
# firewall-cmd --permanent --add-port=8080/tcp# firewall-cmd --reloadКлюч —permanent – делает правило постоянным после перезагрузки сервера, —reload – применяет изменения без остановки брандмауэра.
Для нескольких портов можно использовать диапазон:
# firewall-cmd --permanent --add-port=3000-3010/tcp# firewall-cmd --reloadЕсли порт больше не нужен или его нужно заблокировать:
# firewall-cmd --permanent --remove-port=8080/tcp# firewall-cmd --reloadЭто удаляет доступ к порту для всех внешних подключений.
Чтобы порт был открыт только для определенного IP-адреса, используется следующее правило, рассмотрим его на примере порта SSH:
# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="здесь_должен_быть_ваш_IP" port port="22" protocol="tcp" accept'# firewall-cmd --reloadsource address – IP, которому разрешен доступ, port и protocol – порт и протокол.
Таким образом, доступ по SSH будет доступен с IP-адреса, который добавлен в список исключений, все остальные подключения к этому порту будут заблокированы.
Для ограничения доступа для подсети можно указать CIDR, например:
# firewall-cmd --permanent --add-rich-rule=„rule family="ipv4" source address="203.0.113.0/24" port port="22" protocol="tcp" accept“# firewall-cmd --reloadЧтобы полностью отказать в доступе к определенному порту, используется правило на запрет:
# firewall-cmd --permanent --add-rich-rule=„rule family="ipv4" port port="12345" protocol="tcp" reject“# firewall-cmd --reloadПо приведенному выше правилу все подключения к порту 12345 будут отклонены.
Чтобы проверить, открыт или заблокирован порт:
# firewall-cmd --query-port=22/tcpyes – порт открыт, no – порт закрыт.
Блокировка порта с помощью UFW
UFW (Uncomplicated Firewall) – это простой в использовании инструмент для управления брандмауэром на Linux-серверах. Его главное преимущество заключается в удобстве и понятном синтаксисе, что позволяет даже новичкам без проблем настраивать доступ к портам и контролировать сетевой трафик. UFW работает как фронтенд для iptables, упрощая создание правил без необходимости вручную прописывать сложные команды. Он подходит как для VPS, так и для физических серверов, где нужно обеспечить базовый уровень защиты от несанкционированного доступа.
UFW (Uncomplicated Firewall) доступен на Linux-дистрибутивах, которые базируются на Debian/Ubuntu.
Главное преимущество UFW в том, что он упрощает управление правилами брандмауэра, не требуя знания синтаксиса iptables.
На Ubuntu или Debian установка выполняется через стандартный пакетный менеджер:
# apt install ufwПосле установки нужно разрешить критические порты, чтобы не потерять доступ к серверу. Например, для SSH это:
# ufw allow 22/tcp# ufw allow 80/tcp# ufw allow 443/tcpПосле этого можно активировать UFW командой:
# ufw enableПри первой активации UFW отображает сообщение о том, что все порты, которые явно не разрешены, будут заблокированы. Это обеспечивает базовый уровень безопасности сразу после включения.
После активации важно убедиться, что UFW работает и правила применены правильно. Для этого используются команды:
# ufw statusОна показывает список разрешенных и заблокированных портов в простом виде, например:

Для более подробной информации можно добавить ключ verbose:
# ufw status verboseЭто позволяет увидеть протоколы, IP-адреса и дополнительные параметры правил. Также можно проверить, активен ли UFW как сервис:
# systemctl status ufwЕсли сервис запущен и статус показывает active (exited) или active (running), это означает, что брандмауэр работает корректно.
UFW позволяет не только открывать или блокировать порты для всех пользователей, но и применять более точечные правила – например, ограничивать доступ для отдельных IP-адресов или подсетей. Это удобно, когда определенный сервис должен быть доступен только узкому кругу пользователей. Например, база данных, панель управления или внутренний API могут быть открыты только для определенных серверов или офисных IP-адресов.
Базовый пример блокировки доступа для конкретного IP выглядит так:
# ufw deny from 192.168.1.50 to any port 3306В этом случае UFW блокирует доступ к порту 3306 для IP-адреса 192.168.1.50, оставляя порт доступным для других пользователей. Также можно ограничивать доступ для целой подсети:
# ufw deny from 192.168.1.0/24 to any port 3306Такое правило блокирует подключение к MySQL-порту для всех хостов подсети 192.168.1.0/24. Это полезно, когда нужно отсечь трафик с определенного сетевого участка, например, если он генерирует подозрительную активность.
UFW также позволяет создавать исключения из блокировок. То есть можно заблокировать порт для всех, но разрешить доступ отдельным IP-адресам. Это очень практичный подход для критических сервисов, которые должны быть закрыты в целом, но доступны администраторам или внутренним серверам.
То есть, сначала блокировка для всех:
# ufw deny 3306/tcpТолько после блокировки доступа к порту разрешаем доступ определенному IP:
# ufw allow from 203.0.113.10 to any port 3306Важно понимать, что UFW обрабатывает правила согласно своему внутреннему порядку, где allow для конкретного IP выступает исключением из общего deny. Благодаря этому администратор может одновременно защитить порт от посторонних подключений и сохранить доступ там, где это необходимо.
Еще один распространенный сценарий – когда сервис должен работать только в пределах внутренней сети:
# ufw allow from 10.0.0.0/24 to any port 5432 proto tcpЗдесь порт 5432 (PostgreSQL) будет доступен только из локальной подсети, а все остальные подключения автоматически блокируются.
Как заблокировать или разрешить порт TCP/IP в брандмауэре Windows
Брандмауэр Windows – это встроенный инструмент безопасности, который контролирует входящий и исходящий трафик на сервере под управлением Windows. Он позволяет создавать точные правила для отдельных программ, портов, IP-адресов или протоколов. Это особенно важно для контроля доступа к определенным службам, таким как RDP, FTP, SQL Server или внутренние API. Брандмауэр работает по принципу списка разрешений и блокировок: если для порта или программы существует явное правило, оно имеет приоритет над общими настройками.
В Windows наиболее гибкой является конфигурация через инструмент «Windows Defender Firewall with Advanced Security». Это расширенная консоль, где можно создавать правила для входящих и исходящих подключений, указывать тип протокола, номер порта, направление трафика, IP-адреса источника и назначения. Все правила работают на уровне ядра системы, поэтому изменения вступают в силу мгновенно и влияют на все сетевое оборудование компьютера.
Чтобы разрешить доступ к определенному порту в Windows Firewall, нужно создать правило для входящих подключений. Это полезно для таких сервисов, как веб-серверы (порт 80/443), SQL Server (1433), службы удаленного администрирования, игр или любых кастомных приложений.
Откройте меню Пуск → введите «Брандмауэр Windows с расширенной безопасностью» и запустите консоль.

В левой части окна выберите Inbound Rules (Входящие правила) и в правой колонке нажмите New Rule… (Создать правило).
В выборе типа правила выберите Port (Порт) и нажмите Next, после чего выберите протокол: TCP или UDP.
В поле портов укажите конкретный порт (например, 443) или диапазон портов. Выберите Allow the connection (Разрешить подключение).
Укажите профили, для которых правило должно действовать – Domain, Private, Public.
Также задайте название правила, чтобы легко его найти в будущем (например, «Allow HTTPS»).
После внесения всех настроек подтвердите создание правила.

После сохранения правило сразу активируется и Windows Firewall начинает пропускать весь входящий трафик на указанный порт. Это стандартная практика при настройке серверов Windows, когда порты сервисов должны быть доступны клиентам или другим серверам.
Процедура блокировки практически идентична предыдущей, но с противоположным эффектом. Это используется для отсечения нежелательного трафика, закрытия неиспользуемых портов или защиты внутренних служб от внешнего доступа.
Для настройки правила блокировки трафика выполняйте аналогичные действия, как и в предыдущем описании, однако на этапе выбора действия выберите Block the connection (Блокировать подключение) и задайте название правилу (например, «Block RDP External»).
После этого весь трафик, который будет поступать на выбранный порт, будет автоматически отклонен. На практике блокировку часто сочетают с разрешениями для отдельных IP, чтобы создать исключения – так же, как в Linux-брандмауэрах.
Брандмауэр Windows позволяет делать точечные ограничения, например:
- полностью заблокировать порт для всех, кроме выбранных IP;
- разрешать или блокировать доступ только для определенных диапазонов адресов;
- создавать отдельные правила для внутренней и внешней сети.
Это настраивается в разделе Scope (Область). Во свойствах созданного правила перейдите на вкладку Scope и в секции Remote IP address выберите блок «These IP addresses», в который добавьте нужные адреса или подсети (например, 203.0.113.10 или 192.168.1.0/24). После этого примените правило и сохраните его.

Таким образом можно, например, заблокировать порт 1433 для всех, но разрешить доступ к SQL Server только офисной сети.
Изменение стандартного порта
Изменение стандартного порта – это один из базовых, но эффективных способов уменьшения количества автоматизированных атак на сервер. Не все порты одинаково критичны, и не все стоит менять. Обычно меняют те порты, которые часто становятся мишенью для ботов и автоматических атак, но не влияют на базовую работу сервера и сетевых сервисов. К ним относятся:
- SSH (22/tcp) – стандартный порт для удаленного управления Linux-серверами – наиболее популярная цель для brute-force атак.
- RDP (3389/tcp) – порт для удаленного доступа на Windows VPS – часто сканируется сторонними ботами.
Перед изменением порта важно продумать порядок действий, поскольку неправильная конфигурация может привести к потере доступа к серверу. Сначала нужно открыть новый порт в фаерволе, убедиться, что сервис действительно работает на нем, а уже потом закрывать старый порт. Это касается прежде всего SSH, с помощью которого администраторы управляют сервером.
Изменение порта SSH (Linux VPS)
Изменение стандартного порта SSH – один из самых простых способов уменьшить количество автоматизированных атак на сервер. По умолчанию SSH работает на порту 22, в результате чего большое количество ботов постоянно сканирует именно его, выполняя brute-force атаки. Перенос SSH на другой порт не является полноценным методом защиты, но эффективно сокращает количество нежелательных запросов и облегчает анализ логов. Перед внесением изменений важно подготовить фаервол: новый порт нужно разрешить заранее, чтобы не потерять доступ к серверу во время перезапуска SSH.
Процесс изменения порта начинается с редактирования конфигурационного файла /etc/ssh/sshd_config. В этом файле нужно найти параметр Port или добавить его, если он отсутствует. Например, чтобы установить новый порт 2222, добавляется или изменяется строка:
# Port 2222После сохранения файла нужно настроить фаервол. Например, если используется UFW, командой ufw allow 2222/tcp открывается доступ к новому порту.
Перед тем как закрывать старый порт, важно протестировать подключение в отдельной сессии SSH – это позволит убедиться, что сервер действительно принимает подключения через новый порт. Когда работа подтверждена, старый порт можно удалить – ufw delete allow 22/tcp.
Завершающий шаг – перезапуск SSH, который активирует новые настройки. Для этого выполняется команда:
# systemctl restart sshdПосле перезапуска сервер будет принимать соединения только через новый порт. Такой подход помогает повысить уровень безопасности Linux VPS и уменьшает количество автоматических атак.
Изменение порта RDP (Windows VPS)
Изменение стандартного порта RDP – это один из базовых, но эффективных способов повысить безопасность Windows-сервера. По умолчанию подключение к Remote Desktop работает на порту 3389, который активно сканируется ботнетами и автоматизированными сканерами. Использование нестандартного порта уменьшает количество автоматических brute-force попыток и шума в логах, хотя и не заменяет полноценной защиты.
Важные предостережения перед началом работ!
Прежде чем изменять порт RDP, обязательно имейте активную RDP-сессию и второй способ доступа, например, консоль из панели управления VPS. Если что-то пойдет не так (ошибка в реестре, заблокированный порт), вы не потеряете доступ к серверу.
Выберите любой свободный TCP-порт, кроме зарезервированных системных и тех, которые используются другими службами. Рекомендуем обратить внимание на диапазон 1024–49151 (registered ports), избегайте 3389 и популярных портов (22, 80, 443, 3306 и т.д.). И проверьте, свободен ли порт, на сервере это можно сделать через PowerShell командой:
# netstat -ano | findstr :PORT
Изменение порта RDP в Windows выполняется с помощью редактирования параметра PortNumber в системном реестре. Этот параметр определяет, на каком TCP-порту служба Remote Desktop Services принимает входящие подключения.
Для изменения порта необходимо запустить редактор системного реестра. Для этого нажмите комбинацию клавиш Win + R, чтобы открыть окно Run (Выполнить).
В поле введите команду:
# regeditНажмите Enter или кнопку OK.
Если появится запрос UAC (Контроль учетных записей), выберите Yes – редактор реестра требует права администратора.
Обратите внимание! Редактор реестра (regedit) позволяет изменять критически важные системные параметры. Ошибки могут привести к проблемам с доступом или работой служб, поэтому работайте внимательно.
В левой части окна вы увидите дерево каталогов реестра. Двигайтесь по нему шаг за шагом:
HKEY_LOCAL_MACHINE
└── System
└── CurrentControlSet
└── Control
└── Terminal Server
└── WinStations
└── RDP-TcpТо есть, нас интересует переход к ветке:
# HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp
Для более подробного понимания рассмотрим каждый раздел:
- Terminal Server – раздел, содержащий настройки службы Remote Desktop.
- WinStations – конфигурации различных сеансов терминального доступа.
- RDP-Tcp – профиль подключения, который используется для RDP через TCP-протокол.
В правой части окна реестра найдите параметр:
# PortNumber# Тип: REG_DWORDЭто системный параметр, задающий TCP-порт, на котором сервер RDP прослушивает входящие соединения.
Обратите внимание! По умолчанию значение PortNumber – это 3389, но в реестре оно показано в шестнадцатеричной системе.
Для редактирования данного параметра дважды нажмите на PortNumber, чтобы открыть окно редактирования. В окне «Edit DWORD (32-bit) Value» вы увидите два варианта:
- Hexadecimal (шестнадцатеричный)
- Decimal (десятичный)
Переключите режим в Decimal, чтобы вводить порт в привычном формате (как в firewall и RDP-клиенте).

Почему важно переключаться на Decimal?
В формате hex число 3389 выглядит как D3D. Если случайно ввести «удобное» десятичное значение в hex-режиме, оно конвертируется в совершенно другой порт.
То есть, вы вводите 49210 в hex → сервер пытается открыть порт 300,048 (потеря доступа гарантирована). Поэтому всегда переключайтесь на Decimal!
В поле Value data введите новый порт, например, 49210, после чего нажмите OK, чтобы сохранить изменения. После подтверждения значение в реестре обновлено, но система пока еще работает на старом порту. Чтобы система действительно начала слушать новый порт – нужно выполнить два обязательных шага.
Первым шагом нужно разрешить новый порт в Windows Firewall, который по умолчанию пропускает только стандартный порт 3389. Если вы не создадите правило для нового порта, сервер будет слушать порт, но подключения извне будут блокированы.
Правило для открытия нового порта для подключения по RDP можно добавить через графический интерфейс. Для этого вы можете воспользоваться поиском, введя «Брандмауэр Windows» или «Безопасность Windows», или открыть «Панель управления», перейти в «Система и безопасность» и выбрать «Брандмауэр».
Создайте новое правило со следующими параметрами:
- Inbound Rules → New Rule
- Тип: Port
- Протокол: TCP
- Порт: введите новое значение
- Разрешить подключение (Allow connection)
- Профили: Domain / Private / Public (рекомендуется отметить все)
- Название: например RDP New Port 49210
В качестве альтернативного способа можно использовать командную строку или PowerShell, что особенно удобно на серверах, где нет графического интерфейса. В PowerShell это выполняется одной командой, которая сразу создает соответствующее правило брандмауэра с разрешением входящих соединений на ваш новый порт.
# New-NetFirewallRule -DisplayName «RDP New Port 49210» -Direction Inbound -Protocol TCP -LocalPort 49210 -Action AllowВ командной строке доступна аналогичная команда через утилиту netsh:
# netsh advfirewall firewall add rule name="RDP New Port 49210" dir=in action=allow protocol=TCP localport=49210Оба варианта работают одинаково, разница только в том, какой инструмент вам удобнее использовать.
После того как правило создано, брандмауэр уже не будет блокировать подключение к новому порту, но это еще не означает, что изменение начало действовать. Служба Remote Desktop Services считывает порт только при запуске, поэтому необходимо либо перезапустить саму службу, либо выполнить полную перезагрузку сервера. Самый распространенный и безопасный способ – именно перезагрузка, поскольку она гарантирует корректное применение изменений и исключает риск потери доступа, который может возникнуть при ручном перезапуске службы.
После перезапуска сервера попробуйте подключиться по RDP уже с использованием нового порта.
Port Knocking – скрытый доступ к серверным портам
Еще один эффективный инструмент для скрытия портов – Port Knocking. Это метод скрытия открытых портов, который позволяет оставлять их полностью недоступными для посторонних пользователей и ботов, пока клиент не отправит специальную «секретную» последовательность пакетов. Фактически, это механизм «стука в дверь»: сервер реагирует только тогда, когда последовательность совпадает с определенной в конфигурации. До момента правильного обращения порт выглядит закрытым – он не отвечает на сканирование, не принимает подключений и не выдает никакой информации о себе.
Основная идея Port Knocking заключается в том, чтобы скрыть критические службы, такие как SSH или панели управления, от внешнего трафика. В обычной конфигурации открытый порт доступен для всех, и боты постоянно предпринимают попытки сканирования и подбора паролей. Если же порт работает только после «стука», он остается невидимым в глобальной сети, что практически полностью устраняет автоматизированные атаки и значительно снижает нагрузку на сервер.
Механизм работы Port Knocking достаточно прост – на сервере устанавливается специальная служба, которая отслеживает пакеты, поступающие на определенные порты в определенной последовательности. Когда клиент отправляет эту последовательность, служба временно открывает доступ к целевому порту для IP-адреса отправителя. Клиент получает возможность подключения, но только в течение определенного времени, после чего порт снова закрывается. Все это происходит автоматически и не влияет на работу других сервисов.
Самым популярным инструментом является утилита knockd, которая работает как фоновый демон. Она внимательно анализирует пакеты, приходящие на сервер, и при совпадении с определенной последовательностью выполняет команду – обычно это открытие SSH или другого порта в брандмауэре. Этот механизм не требует модификации самих служб – конфигурация касается исключительно уровня фаервола.
Процесс установки knockd на большинстве Linux-дистрибутивов сводится к инсталляции пакета и включению службы. На Ubuntu или Debian инструмент устанавливается стандартными командами:
# apt update# apt install knockdНа CentOS, Rocky Linux или AlmaLinux используется менеджер пакетов dnf:
# dnf install knockПосле установки служба по умолчанию отключена. Ее нужно активировать и разрешить запуск при старте системы:
# systemctl enable knockd# sudo systemctl start knockdПосле запуска сервис будет работать в фоновом режиме и отслеживать knock-последовательности.
На данном этапе также важно настроить фаервол – закрыть для всех нужный протокол.
# iptables -A INPUT -p tcp --dport 22 -j DROPДалее можно переходить к созданию конфигурации, в которой описываются порты для knock-последовательности, действия при открытии доступа и ограничения по времени. В конфигурационном файле knockd хранится логика работы: события открытия порта, закрытия доступа и контроль за последовательностью пакетов.
Главный файл конфигурации находится в каталоге:
/etc/knockd.confИменно здесь описываются knock-последовательности, время для их выполнения, а также команды, которые knockd будет запускать после успешного совпадения. Конфигурация может выглядеть примерно так:
[openSSH]
sequence = 7000,8000,9000
seq_timeout = 15
command = /usr/sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn[closeSSH]
sequence = 9000,8000,7000
seq_timeout = 15
command = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = synВ этом примере knockd ожидает последовательность из трех портов – 7000, 8000 и 9000. Если клиент отправляет пакеты в правильном порядке, knockd выполняет команду, которая добавляет правило в фаервол, разрешая доступ по SSH (порт 22) с IP-адреса, выполнившего knock. Команда для закрытия доступа инвертирована и удаляет правило из фаервола.
Параметр seq_timeout определяет, за сколько секунд должна быть завершена последовательность. Если пользователь задерживается, knockd сбрасывает буфер и ожидает новый «стук».
Обратите внимание! Knock-порты должны быть полностью закрыты в фаерволе, поскольку их основная функция – не принимать соединения, а фиксировать сам факт попытки доступа. Для port knocking важно, чтобы порты были полностью закрыты. Именно состояние DROP делает порт «невидимым» в сети: клиент видит только отсутствие ответа, но knockd в фоновом режиме регистрирует поступление SYN-пакета и добавляет его в последовательность. Благодаря этому knock‑порты не выдают никакой информации о сервере и не создают поверхностных точек атаки, оставаясь скрытым механизмом управления доступом.
После редактирования конфигурации knockd нужно перезапустить, чтобы применить новые правила:
# systemctl restart knockdПосле этого сервер начнет работать по обновленной логике.
На клиентской стороне процесс выглядит просто: пользователь запускает команду, которая отправляет knock-последовательность. В большинстве случаев для этого используют утилиту knock, которая позволяет очень быстро отправить нужные пакеты. После успешной последовательности пользователь может открывать SSH-сессию стандартным способом. Подключение происходит без задержек, а knock-последовательность не оказывает никакого влияния на качество соединения.
В Debian/Ubuntu она устанавливается командой:
# apt install knockdПосле установки knock-последовательность отправляют так:
# knock your-server-ip 7000 8000 9000Knockd автоматически выполнит команду удаления правила, и порт снова станет невидимым для всех остальных.
Как только knockd примет последовательность, в фаерволе появится правило, и SSH станет доступным только для этого IP-адреса. Через необходимый период можно закрыть доступ, отправив «заключительную» последовательность:
# knock your-server-ip 9000 8000 7000Вы можете выполнять Port Knocking без установки специального клиента – достаточно воспользоваться стандартными инструментами типа telnet, curl или любым другим способом инициировать TCP-запрос на нужный порт. Если ваша knock-последовательность основана исключительно на TCP-портах, такой подход будет работать корректно: knockd зафиксирует сам факт SYN-попытки и добавит ее в буфер последовательности. Однако для регулярного или автоматизированного использования желательно иметь утилиту knock, поскольку она позволяет отправлять последовательности быстрее, стабильнее и без ошибок в порядке портов.
Особенность Port Knocking заключается в том, что он не является отдельным средством безопасности, а работает как дополнительный слой защиты. Если злоумышленник не знает knock-последовательность, он не сможет даже увидеть, что SSH или другие порты работают. Это защищает не только от brute-force атак, но и от сканирований типа Shodan, Masscan или ботнетов, которые автоматически проверяют серверы на наличие открытых точек входа.
Однако Port Knocking не является абсолютной заменой классической безопасности, но выступает как дополнительный уровень, который делает сервер менее заметным для потенциальных атак. В сочетании с фаерволом, ограничением IP-адресов, двухфакторной аутентификацией и современными алгоритмами шифрования он формирует многоуровневый барьер, преодолевать который большинству ботов просто нецелесообразно.
Вывод
Защита сервера в значительной степени зависит от того, насколько открытые порты видны внешнему миру. Когда доступ к ним контролируется и ограничивается корректными настройками, сервер становится менее заметным для сканеров и целенаправленных атак. Даже небольшие настройки фаервола и скрытие портов способны существенно уменьшить риск нежелательных подключений, оставляя рабочую среду безопасной и стабильной.
Возможно, вас заинтересует
Подключение к удаленному Windows-серверу (VPS) по RDP
Подключение к Windows VPS происходит через протокол RDP (Remote Desktop Protocol), который позволяет работать...
| Обновлено: 24.10.2025
Установка TeamSpeak 3 на сервер VPS
Из этой статьи вы узнаете, как установить TeamSpeak 3 на сервер VPS с ОС...
| Обновлено: 27.08.2025
Localhost не работает – причины и решения
Сообщение «Localhost отклонил подключение» сигнализирует о том, что сервер не смог установить внутреннее соединение...
| Обновлено: 13.08.2025
Как распаковать и создать архивы в Linux: .zip, .tar, .gz, .rar
Когда нужно объединить данные в одном файле, незаменимым инструментом являются утилиты для архивирования. Архив...
| Обновлено: 13.02.2025
Наш телеграм
с важными анонсами, розыгрышами и мемами
Присоединиться