- How can I see what ports are open on my machine?
- 10 Answers 10
- nmap (install)
- Как открыть порт в Linux
- Предпосылки
- Список всех открытых портов
- Открытие порта в Linux для разрешения TCP-соединений
- Для пользователей Ubuntu и систем на базе ufw
- Для CentOS и систем на основе firewalld
- Для других дистрибутивов Linux
- Проверьте недавно открытый порт для TCP-соединений
- Сохраняющиеся правила
- Для брандмауэра ufw
- Для брандмауэра
- Для iptables
- Заключение
How can I see what ports are open on my machine?
I would like to see what ports are open on my machine, e.g. what ports my machine is listening on. E.g. port 80 if I have installed a web server, and so on. Is there any command for this?
10 Answers 10
If the netstat command is not available, install it with:
sudo apt install net-tools
-l already filters for listening. grep LISTEN won’t help beyond hiding 2 lines of header information.
-t : tcp, -l : listening socket, -p : show pid and program name, -n : print 127.0.0.1:80 instead of localhost:http . Reference: linux.die.net/man/8/netstat
The expanded command is sudo netstat —tcp —listening —programs —numeric . There’s no need to use grep unless you want to eliminate column headers.
nmap (install)
Nmap («Network Mapper») is a free and open source utility for network exploration or security auditing.
Use nmap 192.168.1.33 for internal PC or nmap external IP address .
More information man nmap .
Zenmap is the official GUI frontend.
Remember that there is a difference between nmap localhost and nmap 192.168.0.3 (or what ever you machine IP is)
I think netstat is a better answer to this. netstat will list what the system is listening on directly, and without using an additional application or doing unnecessary calls over localhost or thought the network.
This is stupid. If you have access to the computer, just use netstat -ln . You’ll instantly see all the open ports.
nmap localhost didn’t find services that were bound only to localhost. For example, I run influxd with bind-address:localhost:8086 . That didn’t show up in sudo nmap localhost , but did show up in sudo netstat -tulpn .
Other good ways to find out what ports are listenting and what your firewall rules are:
To list open ports use the netstat command.
$ sudo netstat -tulpn | grep LISTEN tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 5452/dnsmasq tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1037/cupsd tcp6 0 0 ::1:631 . * LISTEN 1037/cupsd
In the above example three services are bound to the loopback address.
IPv4 services bound to the loopback address «127.0.0.1» are only available on the local machine. The equivalent loopback address for IPv6 is «::1». The IPv4 address «0.0.0.0» means «any IP address», which would mean that other machines could potentially connect to any of the locally configured network interfaces on the specific port.
Another method is to use the lsof command:
$ sudo lsof -nP -i | grep LISTEN cupsd 1037 root 9u IPv6 11276 0t0 TCP [::1]:631 (LISTEN) cupsd 1037 root 10u IPv4 11277 0t0 TCP 127.0.0.1:631 (LISTEN) dnsmasq 5452 nobody 5u IPv4 212707 0t0 TCP 127.0.0.1:53 (LISTEN)
For more details see man netstat or man lsof .
Как открыть порт в 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 и другие инструменты для мониторинга ресурсов сервера».