Как открыть порт в Linux

0 Акции
0
0
0
0

Введение

Порт — это точка связи. В операционной системе порт открывается или закрывается для приема пакетов данных для определенных процессов или сетевых служб.

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

Первые 1024 порта (номера портов от 0 до 1023) называются общеизвестными номерами портов и зарезервированы для наиболее распространенных служб. К ним относятся SSH (порт 22), HTTP (порт 80), HTTPS (порт 443).

Порты с номерами выше 1024 называются временными портами.

  • Порты с 1024 по 49151 называются зарегистрированными/пользовательскими портами.
  • Порты с 49152 по 65535 называются динамическими/частными портами.

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

Предпосылки
  • Умение пользоваться терминалом.

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

Перед открытием порта в Linux следует проверить список всех открытых портов и выбрать для открытия временный порт, которого нет в этом списке.

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

netstat -lntu

Это напечатает:

  • Все разъемы для прослушивания (-l)
  • Номер порта (-n)
  • TCP-порты (-t)
  • UDP-порты (-u)
Output
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp6 0 0 ::1:5432 :::* LISTEN
tcp6 0 0 ::1:6379 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
udp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN

Убедитесь, что вы получаете стабильный результат, используя команду `ss` для вывода списка прослушиваемых сокетов с открытыми портами:

ss -lntu

Это напечатает:

Output
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:5432 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:27017 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:6379 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.53%lo:53 0.0.0.0:*
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp LISTEN 0 128 [::1]:5432 0.0.0.0:*
tcp LISTEN 0 128 [::1]:6379 0.0.0.0:*
tcp LISTEN 0 128 [::]:22 0.0.0.0:*

Это позволяет получить примерно такое же количество открытых портов, как и netstat.

Откройте в Linux порт, разрешающий TCP-соединения.

Теперь откройте закрытый порт и настройте его на прием TCP-соединений.

В рамках этого руководства вам потребуется открыть порт 4000. Однако, если этот порт не открыт в вашей системе, вы можете выбрать другой закрытый порт. Главное, чтобы его значение было больше 1023.

Убедитесь, что порт 4000 не используется, с помощью команды netstat:

netstat -na | grep :4000

Или команда ss:

ss -na | grep :4000

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

Для пользователей Ubuntu и систем на базе ufw

Используйте ufw — клиент командной строки для создания простого в использовании брандмауэра.

Ваши команды выглядят примерно так:

sudo ufw allow 4000
Для систем CentOS и систем на основе брандмауэра

Используйте firewall-cmd – клиент командной строки для демона firewalld.

Ваши команды выглядят примерно так:

firewall-cmd --add-port=4000/tcp
Для других дистрибутивов Linux

Используйте iptables для изменения правил фильтрации IPv4-пакетов в системе.

iptables -A INPUT -p tcp --dport 4000 -j ACCEPT
Проверьте наличие TCP-соединений на недавно открытом порту.

Теперь, когда вы успешно открыли новый TCP-порт, пришло время его протестировать.

Сначала запустите netcat (nc) и прослушивайте (-l) порт (-p) 4000, отправляя при этом вывод команды ls каждому подключенному клиенту:

ls | nc -l -p 4000

Теперь, после того как клиент установит TCP-соединение на порту 4000, он получит вывод команды ls. Пока что оставьте эту сессию открытой.

Откройте еще одну терминальную сессию на том же устройстве.

Поскольку вы открыли TCP-порт, проверьте TCP-соединение с помощью telnet. Если нужная команда отсутствует, установите её с помощью вашего менеджера пакетов.

Введите IP-адрес вашего сервера и номер порта (в этом примере 4000) и выполните следующую команду:

telnet localhost 4000

Эта команда пытается установить TCP-соединение на локальном хосте через порт 4000.

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

Output
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
while.sh

Вывод команды ls (в данном примере while.sh) также отправляется клиенту, указывая на успешное TCP-соединение.

Используйте nmap для проверки, открыт ли порт (-p):

nmap localhost -p 4000

Эта команда проверяет наличие открытых портов:

Output
Starting Nmap 7.60 ( https://nmap.org ) at 2020-01-18 21:51 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00010s latency).
Other addresses for localhost (not scanned): ::1
PORT STATE SERVICE
4000/tcp open remoteanything
Nmap done: 1 IP address (1 host up) scanned in 0.25 seconds

Порт открыт. Вы успешно открыли новый порт в вашей системе Linux.

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

Правила устойчивого развития

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

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

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

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

Если вы хотите добавить порт в постоянную конфигурацию брандмауэра и немедленно применить изменения, вы можете использовать флаги --permanent и --reload:

sudo firewall-cmd --permanent --add-port=4000/tcp 
sudo firewall-cmd --reload
Для iptables

Необходимо сохранить правила конфигурации и использовать команду iptables-persistent.

Результат

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может понравиться