Открытые порты в Linux

Linux

Прежде чем научиться открывать порты в Linux, давайте разберемся, что такое сетевой порт. Порты являются конечными точками связи. В операционной системе порты позволяют передавать пакеты определенным процессам или сетевым службам. Как правило, порты идентифицируют определенные сетевые службы, назначенные им. Этот параметр можно изменить, вручную настроив службу на использование другого порта, но обычно можно использовать значение по умолчанию.

Первые 1024 порта (порты 0–1023) называются общеизвестными номерами портов и зарезервированы для наиболее часто используемых сервисов, включая SSH (порт 22), HTTP и HTTPS (порты 80 и 443) и т. д. Номера портов больше 1024 называются эфемерными портами. Среди эфемерных портов номера портов 1024-49151 называются зарегистрированными/пользовательскими портами. Остальные порты 49152-65535 называются динамическими/выделенными портами.

В этом руководстве мы покажем, как открывать эфемерные порты в Linux, поскольку наиболее часто используемые службы используют хорошо известные порты.

1 Список всех открытых портов

Прежде чем открывать порты в Linux, давайте сначала проверим список всех открытых портов и выберем временный порт для открытия из этого списка. Мы можем использовать команду netstat для получения списка всех открытых портов, в том числе для TCP, UDP, которые являются наиболее распространенными протоколами, используемыми на сетевом уровне для передачи пакетов.

**Примечание:** Если в вашем дистрибутиве нет netstat, это не проблема. Вы можете использовать команду ss для отображения открытых портов через прослушиваемый сокет.

netstat -lntu

Это напечатает все прослушивающие сокеты (-l) и номер порта (-n), и в выводе также будет списокTCPпорт(-tUDPпорт(-u).

Чтобы убедиться, что мы получаем согласованный вывод, давайте используемssкоманда, чтобы проверить это, чтобы вывести список прослушиваемых сокетов с открытыми портами.

Это обеспечивает почти одинаковыйnetstatТакие же открытые порты, так что мы счастливы!

2 Откройте порты в Linux, чтобы разрешить TCP-соединения

В этом примере мы открываем закрытый порт и заставляем его слушатьTCPсоединять.

Так как порт не используется в системе4000, поэтому я выбираю открыть порт4000. Если в вашей системе порт не открыт, смело выбирайте другой закрытый порт. Просто убедитесь, что оно больше, чем1023 может!

Опять же, просто чтобы убедиться, используйтеnetstatилиssкоманду, чтобы убедиться, что порт 4000 не используется.

netstat -na | grep :4000
ss -na | grep :4000

Вывод должен оставаться пустым, подтверждая, что он в настоящее время не используется, чтобы мы могли вручную добавить правило порта в системный брандмауэр iptables.

2.1 Для пользователей Ubuntu и систем на основе брандмауэра ufw

У Ubuntu естьufwбрандмауэр, который заботится об этих правилах для портов и соединений, а не старыйiptablesмежсетевой экран. Если вы пользователь Ubuntu, вы можете использоватьufwоткрывать напрямуюufw

sudo ufw allow 400

Вы можете пропустить следующие несколько шагов и сразу перейти к тестированию только что открытого порта!

2.2 Для систем на базе CentOS и Firewalld

Для таких систем, еслиfirewalldявляется основным брандмауэром, рекомендуется использоватьfirewall-cmdобновить правила брандмауэра вместо старыхiptablesмежсетевой экран.

firewall-cmd --add-port=4000/tcp

Вы можете пропустить следующие несколько шагов и сразу перейти к тестированию только что открытого порта!

2.3 Для других дистрибутивов Linux

Итак, давайте использоватьiptablesКоманда, чтобы добавить этот новый порт в системные правила iptables. Если эта команда еще не установлена, используйте менеджер пакетов, чтобы получить ее.

iptables -A INPUT -p tcp --dport 4000 -j ACCEPT

Это заставит брандмауэр добавлять новые правила (-A), для прохождения протокола (-p) TCP принимает входящие пакеты, где порт назначения (--dport) составляет 4000 и перескакивает через цель (-j) правила указаны как ACCEPT.

Чтобы обновить правила брандмауэра, перезагрузитеiptablesСлужить.

sudo service iptables restart

или использоватьsystemctlЕсли есть).

sudo systemctl restart iptables

3 Проверьте TCP-соединение только что открытого порта.

Теперь, когда мы успешно открыли новый порт TCP (в моем случае это порт 4000), давайте проверим его.

Сначала запустим netcat (nc) и слушать на порту 4000, поставив при этомlsВывод отправляется любому подключенному клиенту. Итак, после того, как клиент откроет TCP-соединение на порту 4000, он получитlsВывод.

ls | nc -l -p 4000

Это заставляет netcat прослушивать порт 4000. Эта сессия временно отключена.

Откройте другой терминальный сеанс на том же компьютере.

Поскольку порт TCP открыт, я буду использоватьtelnetдля проверки TCP-соединения. Если команда не существует, установите ее снова с помощью диспетчера пакетов.

формат телнета:

telnet [hostname/IP address] [port number]

Поэтому введите IP-адрес вашего сервера и номер порта (в моем случае 4000) и запустите эту команду.

telnet localhost 4000

Это попробует порт 4000localhostОткройте TCP-соединение.

Вы получите вывод, аналогичный этому, указывающий, что слушатель (nc) установил соединение.

Как вы видете,ls(в моем случае этоwhile.sh) вывод также был отправлен клиенту, что свидетельствует об успешном подключении TCP!

Чтобы сообщить вам, что порт действительно открыт, мы можем использоватьnmapПроверять.

 nmap localhost -p 4000

Действительно, наш порт открыт! Мы успешно открыли новый порт в нашей системе Linux!

Уведомление:nmapВ списке перечислены только открытые порты с прослушивающими в данный момент приложениями. Если вы не используете какое-либо приложение для прослушивания (например, netcat), порт 4000 будет отображаться как закрытый, поскольку в настоящее время ни одно приложение не прослушивает этот порт. Кроме того, telnet не работает, поскольку его также необходимо привязать к прослушивающему приложению. ЭтоncПричина такого полезного инструмента. Это имитирует эту среду с помощью одной простой команды.

Но это временно, так как изменения будут сбрасываться каждый раз при перезагрузке системы.

4 Правила необходимо обновлять после каждой перезагрузки

Метод, описанный в этой статье, только временно обновляет правила брандмауэра, пока система не будет выключена/перезагружена. Следовательно, аналогичные шаги необходимо повторить, чтобы снова открыть тот же порт после перезагрузки.

4.1 Для брандмауэра ufw

ufwПравила не сбрасываются при перезагрузке, поэтому, если вы пользователь Ubuntu, не беспокойтесь об этом! Это связано с тем, что он интегрирован в процесс загрузки и ядро ​​используетufwПравила брандмауэра сохраняются с соответствующими файлами конфигурации.

4.2 Для брандмауэров

Как упоминалось ранее,firewalldТакая же проблема существует, но при открытии порта или настройке любых других правил это можно сделать, добавив после исходной команды--permananentфлаг, чтобы избежать этой проблемы.

Например, вы можете навсегда открыть порт TCP с помощью4000:

 firewall-cmd --zone=public --add-port=400/tcp --permanent

4.3 Для iptables

заiptablesБрандмауэры, хотя этого неудобства нельзя избежать, но мы можем свести его к минимуму. мы можем поставитьiptablesПравила сохраняются в файле конфигурации, например./etc/iptables.conf.

 sudo iptables-save | sudo tee -a /etc/iptables.conf

После перезагрузки мы можем получить его из файла конфигурации с помощью:

 sudo iptables-restore < /etc/iptables.conf

в настоящее время,iptablesПравила обновлены, и наши порты снова открыты!

5. Вывод

В этом руководстве мы показали вам, как открыть новый порт в Linux и настроить его для входящих подключений.

Адрес статьи:woohoo.journal Dev.com/34113/открыть я…