Прежде чем научиться открывать порты в 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порт(-t
)иUDPпорт(-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/открыть я…