- Как открыть порт в Linux
- Предпосылки
- Список всех открытых портов
- Открытие порта в Linux для разрешения TCP-соединений
- Для пользователей Ubuntu и систем на базе ufw
- Для CentOS и систем на основе firewalld
- Для других дистрибутивов Linux
- Проверьте недавно открытый порт для TCP-соединений
- Сохраняющиеся правила
- Для брандмауэра ufw
- Для брандмауэра
- Для iptables
- Заключение
- Руководство по пробросу портов
- Виртуальный хост Apache
- Настройки лаборатории
- Easy Port Forwarding using SSH
- The Serveo Method
- Using Localhost.run Method
Как открыть порт в Linux
порт — это конечная точка связи. В операционной системе порт открывается или закрывается для пакетов данных для определенных процессов или сетевых служб.
Как правило, порты идентифицируют конкретную сетевую службу, назначенную им. Это можно изменить, вручную настроив службу на использование другого порта, но в целом можно использовать значения по умолчанию.
Первые 1024 порта (номера портов от 0 до 1023 ) называются общеизвестными номерами портов и зарезервированы для наиболее часто используемых служб. . К ним относятся SSH (порт 22 ), HTTP (порт 80 ), HTTPS (порт 443 ).
Номера портов выше 1024 называются эфемерными портами.
- Номера портов от 1024 до 49151 называются зарегистрированными/пользовательскими портами.
- Номера портов от 49152 до 65535 называются динамическими/частными портами.
В этом руководстве вы откроете эфемерный порт в Linux, поскольку наиболее распространенные службы используют известные порты.
Предпосылки
Для выполнения этого урока вам понадобятся:
Список всех открытых портов
Прежде чем открывать порт в Linux, вы должны проверить список всех открытых портов и выбрать эфемерный порт для открытия, которого нет в этом списке.
Используйте команду netstat для получения списка всех открытых портов, включая TCP и UDP, которые являются наиболее распространенными протоколами для передачи пакетов на сетевом уровне.
- все слушающие сокеты ( -l )
- номер порта ( -n )
- Порты TCP ( -t )
- Порты UDP ( -u )
OutputActive 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
Примечание. Если в вашем дистрибутиве нет netstat , вы можете использовать команду ss для отображения открытых портов путем проверки прослушивающих сокетов.
Убедитесь, что вы получаете согласованные выходные данные, используя команду ss , чтобы получить список прослушиваемых сокетов с открытым портом:
OutputNetid 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 :
Выходные данные должны оставаться пустыми, чтобы убедиться, что они в данный момент не используются, чтобы вы могли вручную добавить правила порта в системный брандмауэр iptables.
Для пользователей Ubuntu и систем на базе ufw
Используйте ufw — клиент командной строки для UncomplicatedFirewall.
Ваши команды будут выглядеть так:
См. Как настроить брандмауэр ufw для вашего дистрибутива.
- Ubuntu 14.0.4: \Разрешить определенные диапазоны портов
- Ubuntu 16.0.4/18.0.4/20.0.4/22.0.4: «Разрешение других подключений/определенных диапазонов портов»
- Debian 10 сентября 2011 г.: \Разрешение других подключений/диапазонов портов
Для CentOS и систем на основе firewalld
Используйте firewall-cmd — клиент командной строки для демона firewalld .
Ваши команды будут выглядеть так:
См. Как настроить firewalld для вашего дистрибутива.
- CentOS 7/8: \Установка правил для ваших приложений/Открытие порта для ваших зон
- Rocky Linux 8/9: \Установка правил для ваших приложений/Открытие порта для ваших зон
Для других дистрибутивов Linux
Используйте iptables , чтобы изменить системные правила фильтрации пакетов IPv4.
См. Как настроить брандмауэр с помощью iptables для вашего дистрибутива.
Проверьте недавно открытый порт для TCP-соединений
Теперь, когда вы успешно открыли новый TCP-порт, пришло время его протестировать.
Сначала запустите netcat ( nc ) и прослушайте ( -l ) порт ( -p ) 4000 , пока отправка вывода ls любому подключенному клиенту:
Теперь, после того как клиент открыл TCP-соединение на порту 4000 , он получит вывод ls . Оставьте пока эту сессию в покое.
Откройте другой терминальный сеанс на том же компьютере.
Поскольку вы открыли TCP-порт, используйте telnet для проверки TCP-подключения. Если команда не существует, установите ее с помощью менеджера пакетов.
Введите IP-адрес вашего сервера и номер порта (в данном примере 4000 ) и выполните следующую команду:
Эта команда пытается открыть TCP-соединение на localhost через порт 4000 .
Вы получите подобный вывод, указывающий, что соединение с прослушивающей программой ( nc ) установлено:
OutputTrying ::1. Trying 127.0.0.1. Connected to localhost. Escape character is '^]'. while.sh
Вывод ls (в данном примере while.sh ) также был отправлен клиенту, что указывает на успешное TCP-соединение.
Используйте nmap , чтобы проверить, открыт ли порт ( -p ):
Эта команда проверит открытый порт:
OutputStarting 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.
Примечание. nmap отображает только открытые порты, которые в настоящее время прослушивают приложение. Если вы не используете какое-либо приложение для прослушивания, такое как netcat, порт 4000 будет отображаться как закрытый, поскольку в настоящее время на этом порту нет ни одного приложения, прослушивающего этот порт. Аналогично, telnet также не будет работать, так как для привязки к нему также требуется прослушивающее приложение. Вот почему nc — такой полезный инструмент. Это имитирует такие среды в простой команде.
Но это только временно, так как изменения будут сбрасываться каждый раз при перезагрузке системы.
Сохраняющиеся правила
Подход, представленный в этой статье, только временно обновляет правила брандмауэра, пока система не выключится или не перезагрузится. Таким образом, аналогичные шаги необходимо повторить, чтобы снова открыть тот же порт после перезагрузки.
Для брандмауэра ufw
Правила ufw не сбрасываются при перезагрузке. Это связано с тем, что он интегрирован в процесс загрузки, а ядро сохраняет правила брандмауэра с помощью ufw , применяя соответствующие файлы конфигурации.
Для брандмауэра
Вам нужно будет применить флаг —permanent .
См. Как настроить firewalld для вашего дистрибутива.
- CentOS 7/8: \Установка правил для ваших приложений
- Rocky Linux 8/9: «Установка правил для ваших приложений»
Для iptables
Вам нужно будет сохранить правила конфигурации. В этих руководствах рекомендуется использовать iptables-persistent .
См. Как настроить брандмауэр с помощью iptables для вашего дистрибутива.
Заключение
В этом руководстве вы узнали, как открыть новый порт в Linux и настроить его для входящих подключений. Вы также использовали netstat , ss , telnet , nc и nmap .
Продолжите обучение, ознакомившись с разделом «Как использовать Top, Netstat, Du и другие инструменты для мониторинга ресурсов сервера».
Руководство по пробросу портов
При пробросе портов коммуникационный запрос отправляется с одного адреса и номера порта. Параллельно с этим происходит отправка пакетов по сети. Туннелирование дает возможность организации создать свою виртуальную частную сеть, используя общедоступное соединение. Это выгодно как самой компании, так и интернет-провайдеру.
Виртуальный хост Apache
Виртуальный веб-хостинг – это концепция, с которой читатели, возможно, уже сталкивались в различных статьях по захвату флагов. В последнее время данный метод также используется профессионалами в корпоративной среде для размещения своих общедоступных служб для использования меньшего количества IP-адресов.
Виртуальный веб-хостинг – это метод запуска нескольких веб-серверов на одном хосте . С помощью данной практики на одном компьютере могут размещаться тысячи веб-сайтов. Веб-серверы Apache стали одним из самых популярных методов веб-обслуживания, поскольку они простые и гибкие в работе.
Apache имеет огромный потенциал: его можно без проблем настроить как виртуальный хост, который дает возможность размещения на нем отдельных веб-сайтов. Это, по сути, позволяет сетевым администраторам использовать один сервер для размещения различных доменов или сайтов. Все будет идти гладко до тех пор, пока сервер не сможет выдержать нагрузку нескольких других размещенных на нем серверов.
Настройки лаборатории
Среди необходимых компонентов для лаборатории есть:
Пользователь начнет с настройки сервисов Apache2. Для этого ему нужно будет установить Apache в его системах Linux. Он может сделать это с помощью следующей команды:
Easy Port Forwarding using SSH
Sometime we need to run our localhost website or server over internet. To do this we need to forward our port that other device can access our website from anywhere in the world by internet. Usually we can forward our port by configuring settings in router, but if we don’t have router or don’t wanna use our router or not have static ip, then we have a very easy option. We can remotely forward port using SSH.
Image Copyright: SRU Computer Science |
To do this we use a free service called serveo.net and localhost.run. This requires no installation and no sign-up. Serveo is a SSH server. Whenever a user connects to this service they got a public URL that URL can be use to connect to their localhost server.
We are in our Kali Linux system. Here we have a website in php. We can use a html file also.
Now we set this in our localhost. For this we check our local ip by using following command:
The screenshot of our local ip is following :
Here we start a basic web server using php by using following command:
Here the 192.168.10.100 is our local ip and we run this server in port 80. The screenshot of the command is following:
Here we need to remember that we must run this server in the directory where we saved the php/html file. We have successfully started our website or web server in our local network. Let we check this by typing our local ip and port in browser. The screenshot is following :
We can see in the screenshot that URL is our local ip. That means it is hosted in localhost. Now we want to access our website outside of our network that means from anywhere via internet.
We minimize the terminal window (Don’t close this terminal, because it’s running our server) and open another new terminal window to run SSH.
The Serveo Method
For this we apply following command:
ssh -R 80:192.168.10.100:80 serveo.net
Here 80 is our port and we are using ssh using serveo.net service.
Then we can see that our localhost is forwarding in a unique URL, as following screenshot.
Now we can access our localhost by using this URL. Copy this URL and paste it in the address bar of browser in any devices and see the magic.
It’s done. But wait serveo have some other features.
We can request serveo to get back our old URL. If it is free then serveo will assign it for us again.
We have a old serveo connection with lente.servo.net. We try to get it again. So we request for that subdomain by using following command:
ssh -R lente:80:192.168.10.100:80 serveo.net
Here we got that subdomain. Now we can access our localhost with this older URL.
If we want to forward random port then our first port fiels in command will be 0. like following command:
ssh -R 0:192.168.10.100:80 serveo.net
The screenshot of this command is following :
We can open our website with serveo.net:our_assigned_port from anywhere.
In the following screenshot we have opened this link in our mobile device.
Using Localhost.run Method
Well it is almost similar to serveo.net then why we adding this? Because these free services sometimes goes down during overload on the server. If one service is not working then we can try another. So we can use it by applying following command:
ssh -R 80:
192.168.10.100
:80 ssh.localhost.run
If it prompt for RSA fingerprint we type yes and press enter.
We got the shareable link in the last line, we can use this link to connect ssh.
That’s it. Using this method we can forward port without VPN or router. This is so easy to configure it and the connection is stable unlike ngrok, ngrok is not much stable in free version.
Liked our works ? Show support by sharing and encourage us by commenting in the comment section. Follow our blog for more tutorials like this and for quick updates follow us on Twitter and Medium.