Управление портами в Linux (Ubuntu/Debian/CentOS)
Как много времени проходит с момента заказа сервера на хостинге до первого подключения к готовому серверу? Несколько минут. На сколько полученный сервер готов к тому, чтобы использовать его на полную? На 100%. Ну или почти на 100. Точнее, совсем не на 100. Новый сервер подобен новорождённому ребёнку. У него одежды, нет приобретённого иммунитета и нет почти никаких навыков. Он уязвим для любого внешнего воздействия. И защиту от окружающих угроз мы должны ему дать. Наш новый сервер на начальном этапе не готов противостоять всему, что приходит к нему извне. А значит, его необходимо оснастить защитой. Такая защита для сервера – брандмауэр, или файрвол (firewall), или межсетевой экран.
Обмен информацией между узлами сети происходит посредством портов открытых для использования на узлах. Для того, чтобы иметь гарантии прохождения исключительно легитимного трафика, следует уметь управлять портами нашего сервера при помощи брандмауэра.
Управление портами в Ubuntu и Debian
В операционных системах Ubuntu и Debian для управления брандмауэром довольно часто применяется утилита iptables. Её упрощённым интерфейсом является UFW (Uncomplicated Firewall). Открытие доступа к серверу для какого-либо приложения происходит путём регистрации этого приложения в UFW.
В Ubuntu интерфейс UFW как правило присутствует по умолчанию, в Debian же необходимо будет сначала его проинсталлировать. Перед установкой брандмауэра рекомендуется обновить репозитории:
$ sudo apt update $ sudo apt install ufw
Список приложений, зарегистрированных в брандмауэре, доступен по следующей команде:
$ sudo ufw app list
Если вы производите первоначальную настройку межсетевого экрана используя подключение к серверу по ssh
, логично было бы сразу же прописать в UFW соответствующее этому протоколу правило:
$ sudo ufw allow SSH
Эту команду также можно применить используя соответствующий номер порта вместо имени протокола.
ssh
это, как правило, порт 22:$ sudo ufw allow 22
В Ubuntu команда для разрешения подключения по ssh
выглядит как:
$ sudo ufw allow OpenSSH
Для того, чтобы межсетевой экран начал работать, его необходимо запустить:
$ sudo ufw enable
Теперь, можно добавить в UFW правило, которое позволит разрешить передачу данных, например, по порту 80, или другими словами, при помощи протокола http
. Это можно прописать командой:
$ sudo ufw allow 80
либо:
$ sudo ufw allow http
По аналогии можно также разрешить трафик с использованием порта 443, то есть по протоколу https
:
$ sudo ufw allow 443
или:
$ sudo ufw allow https
Подобными инструкциями можно давать разрешения для подключений, использующих несколько портов. Например, так выглядит команда на открытие целого диапазона портов (32810-32814):
$ sudo ufw allow 32810:32814/udp
Также, помимо номеров портов и названий протоколов, в разрешительных правилах есть возможность использовать IP-адреса. Вот как выглядит команда, разрешающая подключение только с IP-адреса 10.10.10.233:
$ sudo ufw allow from 10.10.10.233
Или из одной определённой подсети:
$ sudo ufw allow from 10.10.10.
0/24
Или с одного определённого IP-адреса и только по одному определённому порту:
$ sudo ufw allow from 10.10.10.233
to any port 22
Естественно существует возможность и закрыть доступ для уже открытого подключения через определённый порт. Для этого используется команда deny
. Следующей командой можно запретить подключения по протоколу
:
$ sudo ufw deny http
Инструкция для закрытия всех подключений с определённого IP-адреса выглядит следующим образом:
$ sudo ufw deny from
10.10.10.233
где 10.10.10.233
– IP-адрес, для которого будут закрыты все соединения на наш сервер.
Уже созданные правила можно также удалить. Сделать это можно по номеру правила. Чтобы узнать номера правил, используйте следующую команду:
$ sudo ufw status numbered
Вывод данной команды выглядит следующим образом:
Номера правил указаны в скобках в начале строки. Например, правило для подключения по 443-му порту имеет номер 3. Исходя из этого, команда для удаления этого правила будет выглядеть как:
$ sudo ufw delete
3
То же самое можно сделать командой:
$ sudo ufw delete allow 443/tcp
Посмотреть текущее состояние межсетевого экрана позволяет команда:
$ sudo ufw status
Для отключения брандмауэра служит следующая инструкция:
$ sudo ufw disable
Управление портами в Centos
Клиентским интерфейсом для работы с межсетевым экраном в Centos является программа firewalld. Как правило, firewalld уже по умолчанию входит в состав служб Centos. Но если вдруг это не так, для его установки используйте следующие команды:
$ sudo dnf update -y
$ sudo dnf install firewalld -y
Если окажется, что firewalld уже был установлен в системе, команда вернёт следующее сообщение:
Текущее состояние службы можно увидеть набрав команду:
$ systemctl status firewalld
Если служба работает штатно, то вывод команды будет выглядеть так:
Список приложений, которым доступ в firewalld уже предоставлен, можно увидеть с помощью команды:
$ sudo firewall-cmd --permanent --list-all
Такие приложения перечислены в строке services
:
Чтобы предоставить приложению или протоколу, например, http
, возможность производить подключения к нашему серверу, необходимо использовать команду следующего вида:
$ sudo firewall-cmd --permanent --add-service=http
Этот протокол должен добавиться в строку services
:
Аналогичным образом можно открыть доступ для подключений к серверу по протоколу https
:
$ sudo firewall-cmd --permanent --add-service=https
В firewalld также есть возможность предоставить доступ для подключений по определённому порту. Так, например, будет выглядеть команда для открытия доступа по udp-порту 32810:
$ sudo firewall-cmd --zone=public --add-port=32810/udp
А так пишется команда для открытия доступа по пулу портов, например, для udp-портов с 32811 по 32814:
$ sudo firewall-cmd --zone=public --add-port=32811-32814/udp
И чтобы убедиться, что данные порты добавлены в список открытых, необходимо использовать следующую инструкцию:
$ sudo firewall-cmd --zone=public --list-ports
Доступ для подключений по определённому порту можно также и заблокировать. Например, закрытие доступа по udp-порту 32814 осуществляется командой:
$ sudo firewall-cmd --zone=public --remove-port=32814/
udp
И наконец, для применения всех внесённых изменений, брандмауэр необходимо перезапустить:
$ sudo firewall-cmd --reload
Заключение
Итак, мы рассмотрели установку и запуск межсетевых экранов в операционных системах Linux, таких как Ubuntu, Debian и Centos. А также, мы научились открывать доступ для подключений к нашему серверу через определённые порты и протоколы.
Как открывать порты в системе Linux
1 февраля, 2023 12:32 пп 740 views | Комментариев нетGeneral, Linux | Amber | Комментировать запись
Порт — это конечная точка соединения. В операционной системе порт открывается или закрывается для передачи пакетов данных определенных процессов или сетевых служб.
Обычно порты определяют конкретную присвоенную им сетевую службу. Это можно изменить вручную, настроив службу на использование другого порта, но в целом можно оставить значения по умолчанию.
Первые 1024 порта (номера портов от 0 до 1023) называются общеизвестными или системными и зарезервированы для часто используемых служб. К ним относятся SSH (порт 22), HTTP (порт 80), HTTPS (порт 443) и тому подобное.
Номера портов выше 1024 называются эфемерными портами.
- Порты с номерами от 1024 до 49151 называются зарегистрированными/пользовательскими.
- Номера портов с 49152 по 65535 называются динамическими/частными портами.
В этом мануале мы откроем эфемерный порт в Linux, поскольку общие службы используют известные порты.
Требования
Для выполнения туториала нужно уметь пользоваться терминалом.Читайте также: Основы работы с терминалом Linux
Проверка открытых портов
Прежде чем открыть порт в Linux, нужно проверить список всех открытых портов и выбрать эфемерный порт, которого нет в этом списке.
С помощью команды netstat можно получить список всех открытых портов, включая TCP и UDP — это распространенные протоколы для передачи пакетов на сетевом уровне.
netstat -lntu
Учитывая используемые флаги, команда выводит следующее:
- все прослушиваемые сокеты (-l)
- номер порта (-n)
- TCP-порты (-t)
- UDP-порты (-u)
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
Примечание. Если в вашем дистрибутиве нет netstat, то с помощью команды ss можно вывести список открытых портов путем проверки сокетов прослушивания.
Убедитесь, что команда ss выводит согласованные выходные данные:
ss -lntu
Получим следующий вывод:
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.
Открытие порта для TCP-соединений
Теперь откроем закрытый порт и настроим его на прослушивание TCP-соединений.
В этом туториале мы откроем порт 4000. Но при желании вы можете выбрать другой закрытый порт. Только убедитесь, что его номер больше 1023.
С помощью команды netstat убедитесь, что порт 4000 не используется:
netstat -na | grep :4000
То же самое можно сделать с помощью команды ss:
ss -na | grep :4000
Вывод должен быть пустым, таким образом подтверждается, что порт сейчас не используется, чтобы была возможность вручную добавить правила порта в системный брандмауэр iptables.
Ubuntu и системы на базе ufw
ufw — клиент командной строки для брандмауэра UncomplicatedFirewall.
Команда будет выглядеть следующим образом:
sudo ufw allow 4000
CentOS и системы на базе firewalld
firewall-cmd — клиент командной строки для брандмауэра firewalld.
Команды будут выглядеть так:
firewall-cmd --add-port=4000/tcp
Читайте также: Настройка брандмауэра firewalld on CentOS 8
Для других дистрибутивов Linux
Изменить системные правила фильтрации пакетов IPv4 можно с помощью iptables.
iptables -A INPUT -p tcp --dport 4000 -j ACCEPT
Читайте также: Архитектура Iptables и Netfilter
Тестирование порта
После успешного открытия TCP-порта нужно его протестировать.
При отправке вывода ls любому подключенному клиенту, сначала запустите netcat (nc) и прослушивайте (-l) порт (-p) 4000:
ls | nc -l -p 4000
Теперь клиент получит вывод ls после того, как он откроет TCP-соединение на порту 4000. ]’. while.sh
Вывод ls (в данном примере while.sh) отправлен клиенту, что указывает на успешное TCP-соединение.
С помощью nmap проверьте, открыт ли порт (-p):
nmap localhost -p 4000
Эта команда проверит открытый порт:
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.
Примечание: nmap выводит список только открытых портов, на которых в данный момент есть прослушивающее приложение. Если вы не используете приложение для прослушивания (например netcat), то порт 4000 будет отображаться как закрытый, поскольку в настоящее время на этом порту нет ни одного прослушивающего приложения. Аналогично не будет работать и telnet, поскольку этой команде также нужно прослушивающее приложение. Именно по этой причине nc такой полезный инструмент. Он имитирует такие среды с помощью простой команды.
Но порт открыт временно, так как изменения будут сбрасываться при каждой перезагрузке системы.
Сохранение правил брандмауэра
Способ, который мы рассмотрели в этом мануале только временно обновляет правила брандмауэра, пока система не выключится или не перезагрузится. Поэтому для повторного открытия того же порта после перезагрузки необходимо повторить эти шаги. Однако правила брандмауэра можно сохранить навсегда.
Для брандмауэра ufw
Правила ufw не сбрасываются при перезагрузке. Это происходит потому, что он интегрирован в процесс загрузки, и ядро применяет соответствующие конфигурационные файлы и сохраняет правила брандмауэра ufw.
Для firewalld
Необходимо применить флаг –permanent, чтобы правила были действительны после перезагрузки системы.
Для iptables
Чтобы сохранить правила конфигурации, рекомендуется использовать iptables-persistent.
Подводим итоги
В этом туториале мы разобрали, как открыть новый порт в Linux и настроить его для входящих соединений, а также поработали с netstat, ss, telnet, nc и nmap.
Читайте также: Использование Top, Netstat, Du и других инструментов для отслеживания ресурсов сервера
простых шагов для получения списка всех открытых портов Linux
Если вы хотите знать, что вам нужно сделать, чтобы вывести список всех открытых портов в экземпляре Linux , вы попали в нужное место. Но что такое порт и зачем вам список всех открытых портов?
Короче говоря, порт — это точка доступа, которую операционная система предоставляет для облегчения сетевого трафика с другими устройствами или серверами, а также для дифференциации трафика, чтобы понять, какой службе или приложению отправляется трафик.
Существует два распространенных протокола, когда речь идет о портах: TCP, или протокол управления передачей; и, конечно же, UDP — протокол пользовательских дейтаграмм. Каждый из этих протоколов имеет ряд номеров портов, которые обычно делятся на три группы:
Системные порты LinuxТакже известны как «общеизвестные» порты. Это номера портов от 0 до 1023, которые считаются важными для типичного использования системы, обычно эти порты считаются весьма важными для обеспечения непрерывных услуг связи.
Пользовательские порты LinuxТакже известны как «зарегистрированные порты», которые варьируются от 1024 до 49151. Можно отправить запрос в Управление по присвоению номеров в Интернете (IANA), чтобы запросить сохранение одного из этих портов для вашего приложения. .
Частные порты LinuxТакже известные как «динамические порты», диапазон номеров от 49152 до 65535. Эти порты открыты для любого варианта использования, который вы считаете необходимым в частном порядке, и поэтому являются динамическими по своей природе — они не привязаны к конкретным приложениям.
Теперь, несмотря на то, что многие порты имеют специфическое назначение, важно следить за портами, которые «открыты» без необходимости открывать этот порт. Это связано с тем, что порты, которые без необходимости остаются открытыми, могут представлять угрозу безопасности, а также быть признаком активного вторжения.
Понимание того, какие порты открыты, и «прослушивание» сообщений абсолютно необходимы для блокирования попыток проникновения в ваши системы. Конечно, некоторые общие порты необходимо оставить открытыми, чтобы облегчить обычную интернет-связь. Например:
- FTP (протокол передачи файлов) использует порт 20 для передачи данных
- Аналогично, FTP использует порт 21 для выдачи команд и управления сеансом FTP
- Порт 22 выделен для SSH или защищен вход в оболочку
- Telnet использует порт 23 для облегчения удаленного входа в систему, но этот порт влечет за собой обмен незашифрованными сообщениями, который не является безопасным, поэтому его не рекомендуется использовать
- Маршрутизация электронной почты через SMTP (простой протокол передачи почты) достигается на порт 25
- Порт 43 предназначен для системы WHOIS, которая может проверять, кому принадлежит домен порт и порт 68 в качестве клиентского порта
- HTTP, протокол передачи гипертекста, использует порт 80 для доставки веб-страниц0035 Порт 119 используется протоколом передачи новостей, NNTP
- Протокол сетевого времени, NTP, использует порт 123
- IMAP, другой протокол электронной почты, использует порт 143 для получения сообщений электронной почты
- SNP или простой протокол управления сетью использует порт 161
- Порт 194 предназначен для IRC, приложение интернет-ретрансляции чата
- Порт 443 предназначен для HTTPS, безопасной версии HTTP, доставляемой через TLS/SSL
- SMTP, простой протокол передачи почты, использует порт 587 для отправки сообщений электронной почты
Часто можно настроить конкретную службу для использования порта, который не является стороны отправителя и получателя — другими словами, как на клиенте, так и на сервере. В противном случае, если только одна сторона использует нестандартную конфигурацию порта, связь будет невозможна.
Как получить простой список общих открытых портов? Используйте эту команду:
$ cat /etc/services
Кроме того, вы можете изменить размер получаемого списка, добавив «меньше» к вашей команде
$ cat /etc/services | less
Однако вы можете использовать ряд других команд на компьютере с Linux, которые предоставят вам все порты TCP и UDP, которые открыты и готовы к приему данных с других компьютеров. В следующем разделе мы рассмотрим три — Isof, netstat и nmap.
Команда netstat или сетевой статистики
Большинство дистрибутивов Linux по умолчанию включают netstat в свои установки. Это действительно мощный инструмент, который может отображать все активные сетевые соединения TCP/IDP — как для входящих, так и для исходящих соединений. Он также отображает таблицы маршрутизации и номер сетевого интерфейса, а также исчерпывающую статистику по сетевым протоколам.
Таким образом, вы можете использовать netstat для устранения неполадок и измерения производительности вашей сети. Несмотря на то, что он является базовым, он также полезен и необходим для поиска неисправностей в сетевых службах. Он четко сообщает вам, какие порты открыты и где программа или служба прослушивает определенный порт. Теперь мы дадим вам несколько примеров того, как использовать netstat.
Получение списка всех портов TCP и UDP, которые в данный момент прослушиваются
Это действительно просто, просто используйте флаг -a рядом с каналом, который указывает меньше, это даст вам порты TCP и UDP, которые в настоящее время прослушиваются
$ нетстат -а | less
Список всех подключений, которые прослушиваются
Используйте флаг -l в команде netstat, чтобы получить список всех активно прослушиваемых портов
$ netstat -l
Показать открытые порты наряду с текущими TCP-соединениями
Здесь мы объединяем пару флагов, чтобы отобразить список открытых портов и установленных (TCP) соединений.
$ netstat -vatn
Список открытых портов UDP
Возможно, вы захотите просмотреть только открытые порты UDP, исключая открытые порты TCP. Вам нужна следующая команда:
$ netstat -vaun
Получите список ваших служб Linux, которые прослушивают TCP и UDP, список открытых портов на вашем компьютере, которые свободны, вместе с именем и PID сервиса или программы
Эта команда предоставляет вам все службы и приложения, которые прослушивают либо TCP, либо UDP. Он также предоставляет вам открытые порты в вашем экземпляре Linux, которые являются бесплатными, а также имя программы и идентификатор процесса, связанный с каждым открытым сокетом.
$ netstat -tnlup
Таким образом, вы можете видеть, как различные команды, которые вы можете использовать с netstat, делают его очень универсальным, позволяя вам видеть, каков статус-кво на вашем компьютере с Linux. Но что именно означают эти отдельные флаги? На самом деле все просто:
- -a покажет все прослушиваемые сокеты, а также все не прослушиваемые сокеты
- -l показывает только активно прослушиваемые порты
- -v означает «подробный» и указывает netstat включить дополнительную информацию о любых семействах адресов, которые в настоящее время не настроены
- -t ограничивает список только соединениями TCP
- -u ограничивает список только соединениями UDP
- -n указывает netstat отображать и числовые адреса
- -p добавляет идентификатор процесса (PID), а также имя программы
Имейте в виду, что семь показанных выше флагов — это всего лишь пара из многих флагов, которые вы можете указать для netstat. Просмотрите файл справки, выполнив команду
$ man netstat
. Вы получите полный список всех опций и функций, которые вы можете использовать с помощью netstat.
nmap — команда Network Mapper
Инструмент с открытым исходным кодом, nmap отлично подходит для изучения вашей сети, сканирования ее на наличие уязвимостей и аудита вашей сети. Тем не менее, новые пользователи могут найти nmap сложным в использовании, потому что он настолько многофункциональный: nmap поставляется с таким количеством опций, что вам может быть трудно разобраться, даже если это означает, что это очень надежный инструмент.
Стоит помнить, что nmap предоставит очень обширную информацию о сканируемой сети. Итак, не используйте nmap в сети, если у вас нет разрешения на ее проверку — в основном, разрешения на ее сканирование. Другими словами, у вас должна быть причина для использования nmap и разрешение владельца сети.
Сейчас мы дадим вам базовый обзор nmap, включая типичное использование команды map. Для начала вот инструкции, необходимые для установки nmap, если у вас есть сервер Ubuntu или Debian:
$ sudo apt-get install nmap
Команда немного отличается, если вы используете RHEL или CentOS:
$ sudo yum install nmap
Есть файл, который вы можете просмотреть для более широкой картины портов и услуги. Используйте эту команду:
$ less /usr/share/nmap/nmap-services
Это пример того, насколько обширны детали при использовании nmap в качестве инструмента. Если вы хотите поэкспериментировать с nmap, вы можете попробовать проверить свой собственный виртуальный частный сервер, но вы также можете попробовать nmap на официальном тестовом сервере nmap, расположенном по адресу scanme.nmap.org.
Чтобы опробовать некоторые основные команды nmap, мы будем использовать привилегии sudo, чтобы гарантировать, что запросы дают полные, а не частичные результаты. Помните, что некоторые команды nmap выполняются немного дольше.
В этих примерах мы будем использовать mywebsite.com в качестве примера домена; замените свой фактический домен вместо mywebsite.com при выполнении этой команды.
Сканирование открытых портов в домене
$ sudo nmap -vv mywebsite.com
Здесь вы можете видеть, что мы использовали флаг -vv, который выполняет определенную функцию. Когда вы используете -vv, это означает «подробный», другими словами, он покажет вам расширенный вывод, включая процесс, когда nmap сканирует открытые порты. Опустите флаг -vv, и вы быстро увидите разницу.
Список портов, прослушивающих подключения через TCP
$ sudo nmap -sT mywebsite.com
Обратите внимание на флаг -sT, который обычно указывается для сканирования TCP-соединений при SYN сканирование не может быть выполнено.
Список портов, которые прослушивают соединения через UDP
$ sudo nmap -sU mywebsite.com
Итак, -sU — это то, что вы используете для сканирования UDP. Однако вы можете сканировать соединения UDP и TCP, используя другой флаг -sS. Вы получите список, охватывающий как UDP, так и TCP.
Смотреть на конкретный порт (вместо всех портов)
$ sudo nmap -p номер_порта mywebsite.com
В этом случае -p означает, что вы смотрите только на номер порта, указанный вместо «номер_порта» .
Сканировать каждый открытый порт как TCP, так и UDP
$ sudo nmap -n -Pn -sT -sU -p- mywebsite.com
Здесь мы используем два флага: первый -n, который указывает nmap, что он должен не делать обратное разрешение домена для активного IP-адреса, если он его находит. -Pn отключает пинг, обрабатывая все хосты так, как будто они находятся в сети.
Это всего лишь несколько примеров, но nmap — действительно фантастический инструмент, который может вам очень помочь. Помните, что набрав $ man nmap, вы получите полный список всех инструментов, имеющихся в вашем распоряжении; многие из них очень полезны для изучения безопасности вашей сети и поиска потенциально уязвимых мест.
Команда lsof (List Open Files)
Легко запомнить, что означает lsof — команда list open files — просто возьмите ls как «список» и of как «открытые файлы», и вы ясно поймете, почему lsof означает « список открытых файлов».
Список всех активных сетевых подключений
Используйте флаг -i с lsof, чтобы получить полный список всех сетевых подключений, которые прослушиваются и устанавливаются.
$ sudo lsof -i
В качестве примера, для всех процессов, которые в настоящее время работают на порту 22, вы должны запустить эту команду:
$ sudo lsof -i TCP:22
Получить список всех соединений UDP и TCP
Чтобы получить список всех соединений UDP и TCP, просто используйте эту команду:
$ sudo lsof -i tcp; судо lsof -я удп;
Как и в случае с nmap, вы можете обратиться к руководству по lsof, чтобы получить полное представление обо всех параметрах, которые у вас есть при использовании lsof.
Итак, в завершение, поклонники Linux должны хотя бы немного разбираться в портах, особенно если они планируют управлять серверами Linux. Мы привели три примера замечательных инструментов — nmap, lsof и netstat — которые помогут вам понять, какие порты открыты на вашем компьютере и какие службы активны на вашем сервере.
Мы предлагаем вам просмотреть справочные страницы для каждой из этих команд, чтобы вы могли лучше понять, что они делают. Хотя эти инструменты отлично подходят для проверки незащищенности вашей собственной сети, никогда не злоупотребляйте этими инструментами, сканируя сети, которые вам не принадлежат.
Как открыть порты в Linux
Если вы хотите разрешить внешние подключения к ПК или серверу, вам нужно открыть правильный порт. Пользователи Linux могут открывать порты с помощью этого полезного руководства.
Необходимо подключиться к внешнему ПК или серверу или нужен другой ПК или сервер для подключения к вам? Если вы используете Linux, вам нужно убедиться, что правильный порт открыт.
В то время как другие операционные системы обычно имеют для этого графический инструмент, Linux не так прост. Ниже мы расскажем вам, как открыть порты в Linux.
Что такое порт и зачем мне его открывать?
Порт — это конечная точка сети. Думайте об этом как о двери, ведущей в определенную комнату или во внешний мир, но на вашем компьютере. Все, что вы делаете в Интернете, использует определенный порт или серию портов.
Допустим, вы хотите запустить свой собственный сервер Minecraft. Для этого вам нужно открыть порт, через который пользователи смогут подключаться к нему. То же самое относится к запуску собственного веб-, почтового или FTP-сервера.
Порты стандартизированы для всех устройств, подключенных к сети. Первые 1024 порта (от 0 до 1023) называются хорошо известными номерами портов . Они зарезервированы для наиболее часто используемых сервисов, таких как HTTP и HTTP (порты 80 и 443 соответственно) и SSH (порт 22).
Номера портов выше 1024 называются эфемерными портами и обычно доступны для использования в онлайн-играх, частных веб-серверах и т. д. Номера портов с 1024 по 49151 называются зарегистрированными или пользовательскими портами , а порты с 49152 по 65535 известны как динамические или частные порты .
Список открытых портов в Linux
Прежде чем пытаться открыть порт в Linux, убедитесь, что он еще не используется. Вы можете сделать это с помощью команды netstat , включенной в большинство дистрибутивов Linux. Если в вашем дистрибутиве нет netstat , вы можете использовать вместо него ss .
нетстат-lntu
Это напечатает все прослушиваемые сокеты ( -l ) вместе с номером порта ( -n ). Он включает порты TCP ( -t ), а также UDP ( -u ). Если в вашей системе нет netstat , просто используйте ss с теми же параметрами.
сс-лнту
Как открыть порты в Linux
Для этого примера предположим, что мы хотим открыть порт 4000 для соединений TCP. Сначала нам нужно убедиться, что порт еще не используется. Делаем это через netstat или сс .
netstat-na | группа: 4000 сс-на | группа: 4000
Предполагая, что вывод пуст, мы можем добавить соответствующие правила для портов в системный брандмауэр. Методы для этого будут различаться в зависимости от вашего дистрибутива и от того, использует ли он более новый брандмауэр ufw или firewalld . Ubuntu предпочитает ufw , в то время как CentOS вместо этого обычно использует firewalld . Конечно, все еще есть некоторые дистрибутивы Linux, использующие старую версию 9.0337 iptables брандмауэр.
Для пользователей Ubuntu и других систем на основе брандмауэра ufw
Вместо использования старого брандмауэра iptables , Ubuntu и некоторые другие дистрибутивы используют ufw . В этих системах следующая команда откроет порт.
sudo ufw разрешить 4000
Пропустите следующие несколько шагов и проверьте только что открытый порт, чтобы убедиться, что он работает.
Как открыть порты в Linux с помощью CentOS и других систем на основе брандмауэра
Если в вашей системе используется firewalld , лучше всего использовать команду firewall-cmd для обновления правил.
sudo firewall-cmd --add-port=4000/tcp
Это не будет постоянным изменением, но мы расскажем, как сохранить правила после перезагрузки после тестирования порта.
Для других дистрибутивов Linux
Если в вашей системе Linux нет ufw или firewalld , вам необходимо использовать iptables . Если он не установлен, загрузите его с помощью выбранного вами менеджера пакетов. После установки эти команды откроют порт 4000: 9.0007
sudo iptables -A INPUT -p TCP --dport 4000 -j ПРИНЯТЬ перезапуск службы sudo iptables
Если ваша система использует systemctl , замените вторую команду на:
sudo systemctl перезапустить iptables
Тестирование недавно открытых портов для подключений
Далее мы должны протестировать порт, чтобы убедиться, что он принимает подключения. Мы делаем это, используя netcat ( nc ) для прослушивания порта, а затем пытаемся подключиться к нему через telnet.
Сначала откройте окно терминала и выполните следующую команду:
судо лс | нк -л -р 4000
Оставьте его работающим (слушающим) и откройте второе окно терминала. В этом окне вы будете использовать telnet для проверки подключения. Если telnet не установлен, сделайте это с помощью менеджера пакетов.
telnet [имя хоста/IP-адрес] [номер порта]
Замените [имя хоста/IP-адрес] на IP-адрес вашей системы, а [номер порта] на номер порта, который вы открыли.
телнет локальный хост 4000
Вы должны увидеть вывод, подобный приведенному ниже, указывающий на открытое соединение с нк .
Мы также можем показать, что порт открыт, используя nmap . Опять же, если команда еще не установлена, используйте диспетчер пакетов, чтобы получить ее.
nmap localhost -p 4000
Обратите внимание, что nmap будет отображать только открытые порты, которые прослушивают соединения. Вот почему мы используем netcat для тестирования, чтобы прослушивать этот порт. В противном случае порт не будет зарегистрирован как открытый.
Я не могу подключиться к только что открытому порту. Что теперь?
Если вы выполнили все шаги, описанные выше, и не можете установить соединение с портом, дважды проверьте ввод. Если вы уверены, что все ввели правильно, скорее всего, вам потребуется перенастроить сетевой маршрутизатор, чтобы разрешить трафик.
Поскольку каждый сетевой маршрутизатор имеет разные экраны конфигурации, вам следует обратиться к страницам поддержки или руководству пользователя для вашего конкретного оборудования. Вам нужно будет проверить настройки переадресации портов или сопоставления портов, а также любой встроенный брандмауэр, который может использовать маршрутизатор.
Как навсегда открыть порт в Linux
После того, как вы протестировали свой открытый порт и убедились, что он работает, вы, вероятно, захотите сделать изменение постоянным. В противном случае изменения могут не сохраниться после перезагрузки. Если вы являетесь пользователем Ubuntu или иным образом используете брандмауэр ufw , вам не нужно об этом беспокоиться. Правила ufw не сбрасываются при перезагрузке.
Для пользователей firewalld
Сохранение правила порта после перезагрузки легко с брандмауэр . Просто добавьте флаг —постоянный к своей начальной команде, и он будет включен в правила брандмауэра вашей системы Linux при запуске.
sudo firewall-cmd --add-port=4000/tcp --постоянный
Если вы все еще используете iptables
Брандмауэр iptables доставляет гораздо больше хлопот (может быть хорошей причиной для обновления до firewalld или ufw ). Чтобы «навсегда» открыть порт в iptables , вы можете установить 9Пакет 0337 iptables-persistent в помощь.
При первой установке iptables-persistent в системе на основе Debian ваши текущие правила будут сохранены либо в /etc/iptables/rules. v4 , либо в /etc/iptables/rules.v6 . Чтобы добавить новые правила, введите следующую команду:
sudo iptables-save > /etc/iptables/rules.v4
ИЛИ
sudo iptables-save > /etc/iptables/rules.v6
Для тех, кто использует дистрибутивы Linux на основе RPM, все немного по-другому. Пакет называется iptables-services , а файлы сохранения — /etc/sysconfig/iptables и /etc/sysconfig/ip6tables .
В дистрибутивах на основе RPM для портов IPv6 также используется другая команда. Сохранение ваших правил выполняется с помощью одной из этих двух команд:
sudo iptables-save > /etc/sysconfig/iptables sudo ip6tables-save > /etc/sysconfig/iptables
Обязательно следите за использованием порта
Со временем потребности вашего сервера могут измениться. Точно так же, как вы должны быть в курсе учетных записей пользователей на вашем компьютере с Linux, вы также должны регулярно проверять свои открытые порты.