Как открыть порт Ubuntu

Обновлено: 21.11.2024

Ядро Linux включает подсистему Netfilter, которая используется для манипулирования или определения судьбы сетевого трафика, поступающего на ваш сервер или проходящего через него. Все современные брандмауэры Linux используют эту систему для фильтрации пакетов.

Система фильтрации пакетов ядра будет бесполезна для администраторов без пользовательского интерфейса для управления ею. Это цель iptables: когда пакет достигает вашего сервера, он будет передан подсистеме Netfilter для принятия, обработки или отклонения на основе правил, предоставленных ему из пользовательского пространства через iptables. Таким образом, iptables — это все, что вам нужно для управления брандмауэром, если вы с ним знакомы, но для упрощения задачи доступно множество внешних интерфейсов.

ufw — простой брандмауэр

Инструментом настройки брандмауэра по умолчанию для Ubuntu является ufw. Разработанный для упрощения настройки брандмауэра iptables, ufw предоставляет удобный способ создания брандмауэра на базе хоста IPv4 или IPv6.

ufw по умолчанию изначально отключен. Со страницы руководства ufw:

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

Ниже приведены примеры использования ufw:

Во-первых, необходимо включить ufw. В командной строке терминала введите:

Чтобы открыть порт (в данном примере SSH):

Правила также можно добавлять в формате нумерованные:

Аналогично, чтобы закрыть открытый порт:

Чтобы удалить правило, используйте команду удаления, а затем правило:

Также можно разрешить доступ к порту с определенных хостов или сетей. В следующем примере разрешается доступ по SSH с хоста 192.168.0.2 к любому IP-адресу на этом хосте:

Замените 192.168.0.2 на 192.168.0.0/24, чтобы разрешить доступ по SSH из всей подсети.

ufw можно отключить:

Чтобы увидеть состояние брандмауэра, введите:

Чтобы получить более подробную информацию о статусе, используйте:

Чтобы просмотреть формат нумерованный:

Примечание

Если порт, который вы хотите открыть или закрыть, определен в /etc/services , вы можете использовать имя порта вместо номера. В приведенных выше примерах замените 22 на ssh.

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

Интеграция приложений ufw

Приложения, которые открывают порты, могут включать профиль ufw, в котором указаны порты, необходимые для правильной работы приложения. Профили хранятся в /etc/ufw/applications.d и могут быть отредактированы, если порты по умолчанию были изменены.

Чтобы просмотреть, какие приложения установили профиль, введите в терминале следующее:

Подобно разрешению трафика на порт, использование профиля приложения выполняется путем ввода:

Также доступен расширенный синтаксис:

Замените Samba и 192.168.0.0/24 профилем используемого приложения и диапазоном IP-адресов вашей сети.

Примечание

Нет необходимости указывать протокол для приложения, поскольку эта информация подробно описана в профиле. Также обратите внимание, что имя приложения заменяет номер порта.

Чтобы просмотреть сведения о том, какие порты, протоколы и т. д. определены для приложения, введите:

Не все приложения, требующие открытия сетевого порта, поставляются с профилями ufw, но если вы профилировали приложение и хотите, чтобы файл был включен в пакет, отправьте сообщение об ошибке пакета в Launchpad.

Маскарад IP

Цель маскировки IP-адресов — разрешить компьютерам с частными немаршрутизируемыми IP-адресами в вашей сети получать доступ к Интернету через машину, выполняющую маскировку. Трафик из вашей частной сети, предназначенный для Интернета, должен обрабатываться, чтобы ответы можно было направить обратно на машину, которая сделала запрос. Для этого ядро ​​должно изменить исходный IP-адрес каждого пакета, чтобы ответы направлялись обратно на него, а не на частный IP-адрес, с которого был отправлен запрос, что невозможно в Интернете. . Linux использует отслеживание соединений (conntrack), чтобы отслеживать, какие соединения принадлежат каким машинам, и соответствующим образом перенаправлять каждый возвращаемый пакет. Таким образом, трафик, покидающий вашу частную сеть, «маскируется» под исходящий от вашего шлюза Ubuntu. Этот процесс упоминается в документации Microsoft как общий доступ к подключению к Интернету.

Маскарад ufw

Правила разделены на два разных файла: правила, которые должны выполняться перед правилами командной строки ufw, и правила, которые выполняются после правил командной строки ufw.

Во-первых, в ufw должна быть включена пересылка пакетов. Необходимо будет изменить два файла конфигурации, в /etc/default/ufw измените DEFAULT_FORWARD_POLICY на «ACCEPT»:

Затем отредактируйте /etc/ufw/sysctl.conf и раскомментируйте:

Аналогично раскомментируйте для переадресации IPv6:

Комментарии не являются строго обязательными, но рекомендуется документировать вашу конфигурацию. Кроме того, при изменении любых файлов rules в /etc/ufw убедитесь, что эти строки являются последними строками для каждой измененной таблицы:

Для каждой Table требуется соответствующий оператор COMMIT. В этих примерах показаны только таблицы nat и filter, но вы также можете добавить правила для raw и mangle таблицы.

Примечание

В приведенном выше примере замените eth0, eth1 и 192.168.0.0/24. с соответствующими интерфейсами и диапазоном IP-адресов для вашей сети.

Наконец, отключите и снова включите ufw, чтобы изменения вступили в силу:

Маскарад iptables

iptables также можно использовать для включения маскарадинга.

Как и в случае с ufw, первым делом включите пересылку пакетов IPv4, отредактировав файл /etc/sysctl.conf и раскомментировав следующую строку:

Если вы хотите включить переадресацию IPv6, также раскомментируйте:

Затем выполните команду sysctl, чтобы активировать новые настройки в файле конфигурации:

Маскарад IP-адресов теперь можно выполнить с помощью одного правила iptables, которое может немного отличаться в зависимости от конфигурации вашей сети:

Приведенная выше команда предполагает, что ваше личное адресное пространство — 192.168.0.0/16, а ваше устройство с выходом в Интернет — ppp0. Синтаксис разбит следующим образом:

-t nat — правило заходит в таблицу nat

-A POSTROUTING – правило добавляется (-A) в цепочку POSTROUTING

-s 192.168.0.0/16 — правило применяется к трафику, исходящему из указанного адресного пространства

-o ppp0 — правило применяется к трафику, который планируется направить через указанное сетевое устройство

-j MASQUERADE — трафик, соответствующий этому правилу, должен «перейти» (-j) к цели MASQUERADE, чтобы ею можно было манипулировать, как описано выше

Кроме того, каждая цепочка в таблице фильтров (таблица по умолчанию, где происходит большая или вся фильтрация пакетов) имеет политику по умолчанию ACCEPT, но если вы создаете брандмауэр в дополнение к устройства шлюза, возможно, вы установили политики DROP или REJECT, и в этом случае ваш замаскированный трафик должен быть разрешен через цепочку FORWARD, чтобы приведенное выше правило работало:

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

Если вы хотите, чтобы маскировка включалась при перезагрузке, что вы, вероятно, и делаете, отредактируйте файл /etc/rc.local и добавьте любые команды, использованные выше. Например, добавьте первую команду без фильтрации:

Журналы брандмауэра необходимы для распознавания атак, устранения неполадок в правилах брандмауэра и обнаружения необычной активности в вашей сети. Тем не менее, вы должны включить правила ведения журнала в свой брандмауэр, чтобы они были сгенерированы, и правила ведения журнала должны предшествовать любому применимому правилу завершения (правило с целью, которая решает судьбу пакета, например ACCEPT, DROP или REJECT).

Если вы используете ufw, вы можете включить ведение журнала, введя в терминале следующее:

Чтобы отключить вход в ufw, просто замените on на off в приведенной выше команде.

Если вы используете iptables вместо ufw, введите:

Тогда запрос на порт 80 с локального компьютера создаст журнал в dmesg, который выглядит следующим образом (одна строка разделена на 3, чтобы соответствовать этому документу):

Вышеприведенный журнал также появится в /var/log/messages , /var/log/syslog и /var/log/kern.log . Это поведение можно изменить, соответствующим образом отредактировав /etc/syslog.conf или установив и настроив ulogd и используя цель ULOG вместо LOG. Демон ulogd — это сервер пользовательского пространства, который прослушивает инструкции по регистрации от ядра специально для брандмауэров и может записывать в любой файл, который вам нравится, или даже в базу данных PostgreSQL или MySQL. Анализ журналов брандмауэра можно упростить с помощью инструментов анализа журналов, таких как logwatch, fwanalog, fwlogwatch или lire.

Другие инструменты

Существует множество инструментов, которые помогут вам создать полноценный брандмауэр, даже не зная iptables. Инструмент командной строки с текстовыми файлами конфигурации:

  • Shorewall — это очень мощное решение, которое поможет вам настроить расширенный брандмауэр для любой сети.

Ссылки

Вики-страница Ubuntu Firewall содержит информацию о разработке ufw.

Кроме того, справочная страница ufw содержит очень полезную информацию: man ufw .

В этом руководстве объясняются различные методы проверки открытых портов на сервере Webdock. Открытый порт — это порт, на котором запущен какой-либо процесс или приложение, и он может принимать данные. В этом руководстве мы будем использовать различные инструменты, чтобы узнать, какие порты открыты.

Открытый порт – это порт, который прослушивает и принимает соединения со службой. Вы можете обнаружить, что у вас есть службы, прослушивающие порты, которые, несмотря на это, недоступны из Интернета. Вот что делает ваш брандмауэр: блокирует доступ к портам, к которым вы явно не разрешили доступ. Руководство по управлению брандмауэром можно найти в нашем руководстве UFW здесь.

Предпосылки

  • Облачный веб-экземпляр Ubuntu (18.04 или более поздней версии)
  • У вас есть доступ к оболочке вашего VPS

Разница между адресами

Важно, прослушивает ли служба порт на 127.0.0.1 (localhost) или на 0.0.0.0. Обычно это означает, что служба, прослушивающая на localhost, доступна только с самого хост-компьютера и не широкий интернет. Если вы видите, что служба прослушивает все интерфейсы (*) или 0.0.0.0, значит, служба доступна из Интернета, если только она не защищена активным брандмауэром, что вам нужно будет проверить в Iptables или запустив «ufw status», если вы используете UFW для управлять брандмауэром.

Проверка открытых портов с помощью nmap

Network mapper или nmap — это инструмент с открытым исходным кодом, используемый для сканирования сетей и поиска открытых портов на хосте. Следующая команда просканирует все порты на хосте.

Чтобы проверить, открыт ли конкретный порт, используйте параметр -p для указания порта.

Будьте осторожны при использовании nmap, так как если вы случайно начнете сканировать всю сеть, вы рискуете, что ваш IP-адрес будет забанен.

Проверка открытых портов с помощью lsof

Команда lsof (список открытых файлов), как следует из названия, используется для вывода списка всех открытых файлов в Linux. Эти файлы могут быть сетевыми сокетами, дисковыми файлами или устройствами, открытыми различными процессами. Используйте команду lsof вместе с параметрами -nP, чтобы получить список всех открытых сокетов.

Укажите только открытые сокеты TCP.

Для открытых сокетов UDP используйте следующую команду.

Проверка открытых портов с помощью netstat

Команду netstat (статистика сети) можно использовать для мониторинга и сканирования сетей. Получите список всех открытых портов tcp и udp с помощью команды netstat.

Только порты TCP.

Только для портов UDP.

Проверить открытые порты с помощью ss

Команда ss используется для вывода подробной информации о сетевых сокетах. Она предоставляет более подробную информацию, чем команда netstat. Перечислите все прослушиваемые порты в системе Linux.

Чтобы получить список только прослушиваемых TCP-портов, используйте флаг -lt.

Для портов прослушивания UDP используйте флаг -lu.

Заключение

Существуют различные инструменты для мониторинга открытых портов на вашем сервере. В этом руководстве мы обсудили, как мы можем проверить наличие открытых портов на сервере Webdock, используя различные инструменты командной строки, такие как nmap, ss, netstat и lsof.

  • Связанные
    • Контрольный список безопасности сервера
    • Как работать с вашим брандмауэром (UFW – несложный брандмауэр)
    • Настройки безопасности SSH
    • Как настроить Fail2Ban для общих служб
    • Как защитить Nginx с помощью брандмауэра Naxsi на Ubuntu 18.04 VPS
    • Как защитить Nginx с помощью брандмауэра Naxsi на Ubuntu 20.04 VPS
    • Как настроить заголовки безопасности в Nginx и Apache
    • Как включить шифрование для MariaDB

    Если вам нужна помощь по этой статье или у вас есть какие-либо вопросы относительно хостинга в целом, свяжитесь с нами.

    Webdock – это хостинг-провайдер мирового уровня, предназначенный для профессионалов и полупрофессионалов и предлагающий абсолютно потрясающий и надежный хостинг.

    В этом учебном пособии UFW мы узнаем, как открыть порт в брандмауэре Ubuntu.

    ufw позволяет использовать команду для открытия порта в брандмауэре Ubuntu. По умолчанию, если вы не указали протокол, порт будет открыт как для протоколов TCP, так и для протоколов UDP.

    ufw разрешить номер порта/протокол

    Приведенное выше правило открывает TCP- и UDP-порт 53 для всех сетей.

    ufw разрешить 22/tcp

    Это правило откроет TCP-порт 22 для всех сетей.

    Мы можем удалить правила брандмауэра с помощью команды ufw delete

    ufw разрешить удаление 22/tcp

    Открыть порт по имени службы в брандмауэре Ubuntu

    Также можно открыть порт по имени службы вместо номера порта.

    Это правило разрешает протокол ssh (который по умолчанию использует TCP-порт 22) из ​​брандмауэра Ubuntu.

    ufw проверит файл /etc/services на наличие соответствующего порта, если мы укажем протокол по имени службы вместо номера порта.

    Открыть порт для определенного IP-адреса в UFW

    Вместо того, чтобы открывать порт для всех, UFW позволяет открывать порты для определенного IP-адреса, используя следующий формат.

    ufw разрешает с на порт

    разрешить ufw с 192.168.1.50 на любой порт 53

    Разрешить доступ с IP-адреса 192.168.1.50 на TCP- и UDP-порт 53 (поскольку протокол не указан).

    ufw разрешает с 192.168.1.50 на любой порт 22 proto tcp

    Это правило открывает TCP-порт 22 для удаленного IP-адреса 192.168.1.50 из брандмауэра Ubuntu.

    ufw разрешить от 192.168.1.50 до 192.168.1.200 порт 22 proto tcp

    Это правило брандмауэра открывает порт 22 для IP-адреса 192.168.1.50, но соединение можно установить только через локальный IP-адрес (192.168.1.200). Это полезно, если вы настроили более одного IP-адреса на своем сервере Ubuntu.

    Открыть порт в сеть

    Используя маску подсети, мы можем открыть сетевой порт для всей сети или диапазона IP-адресов.

    ufw разрешает с 192.168.1.0/24 любой порт 22 proto tcp

    Это правило брандмауэра откроет TCP-порт 22 для всей сети 192.168.1.0.

    Открыть несколько портов из одного правила брандмауэра

    Мы можем открыть несколько портов, разделив порты запятой или диапазоном портов, используя двоеточие.

    ufw разрешает с любого на любой proto tcp порт 21,22

    Откройте порты 21 и 22 в брандмауэре Ubuntu.

    ufw разрешает с любого на любой proto tcp порт 8080:8090

    Это правило брандмауэра откроет TCP-порты с 8080 по 8090 из брандмауэра Ubuntu.

    Пример дополнительных правил брандмауэра

    ufw разрешает 80/tcp

    ufw разрешить 21/tcp

    Откройте FTP-порт 21 в брандмауэре.

    ufw разрешает с 192.168.1.10 на любой порт 21 proto tcp

    Откройте FTP-порт 21 для IP-адреса 192.168.1.10

    Резюме. Что мы узнали

    В этом учебном пособии по UFW мы узнали, как открыть порт из брандмауэра Ubuntu с помощью команды ufw allow.

    Для устранения неполадок в сети и поддержания безопасности сервера сетевой администратор или специалист по безопасности должны знать инструменты, используемые для поиска открытых портов на сервере. Linux предоставляет различные утилиты и параметры командной строки для просмотра списка открытых портов на сервере. В этом уроке мы увидим, как мы можем вывести список всех открытых портов, используя различные команды в терминале Ubuntu.

    Что означает открытый порт?

    Прежде чем углубляться в проверку открытых портов, давайте сначала узнаем, что означают открытые порты. Открытый порт или порт прослушивания — это порт, на котором запущено какое-либо приложение. Работающее приложение прослушивает какой-то порт, и мы можем общаться с этим приложением через этот прослушивающий порт. Если приложение работает на порту, и мы пытаемся запустить другое приложение на том же порту, ядро ​​выдаст ошибку. Это одна из многих причин, по которой мы проверяем наличие открытых портов перед запуском приложений.

    Список открытых портов с помощью nmap

    Network Mapper, известный как nmap, – это бесплатный инструмент с открытым исходным кодом, который используется для сканирования портов в системе. Он используется для поиска уязвимостей, обнаружения сетей и поиска открытых портов. В этом разделе мы будем использовать nmap для получения списка открытых портов в системе. Прежде всего, обновите кеш в Ubuntu перед установкой nmap:

    Nmap можно установить с помощью следующей команды в терминале:

    После установки nmap проверьте установку, проверив версию nmap:

    Если он выдает версию nmap, значит, он установлен правильно, в противном случае повторите приведенные выше команды, чтобы правильно установить nmap. Nmap используется для выполнения нескольких задач, связанных с сетями, и сканирование портов является одной из таких задач. Инструмент nmap используется вместе со многими опциями. Мы можем получить список всех доступных опций с помощью следующей команды:

    Итак, чтобы сканировать ваш локальный хост, используйте следующую команду:

    В нем будут перечислены все открытые порты на локальном хосте, как показано на изображении выше. Мы также можем использовать nmap для сканирования удаленных хостов:

    Кроме того, мы можем использовать имя хоста удаленного сервера вместо IP-адреса:

    Команду nmap также можно использовать для сканирования диапазона IP-адресов. Укажите диапазон IP-адресов в команде, как в приведенной ниже команде:

    Приведенная выше команда просканирует все IP-адреса от 192.168.1.1 до 192.168.1.10 и отобразит результат в терминале. Для сканирования портов в подсети мы можем использовать nmap следующим образом:

    Приведенная выше команда просканирует все хосты с IP-адресами в подсети, указанной в команде.

    Иногда приходится сканировать порты на случайных хостах, которые находятся в разных подсетях и идут не по порядку, тогда лучшим решением будет написать файл hosts, в котором прописаны все имена хостов, разделенные одним или несколькими пробелами, табуляцией или новые строки. Этот файл можно использовать с nmap следующим образом:

    Мы можем использовать nmap для сканирования одного порта в системе, указав порт с помощью флага «-p» вместе с nmap, как в следующей команде:

    Диапазон портов также можно просканировать в системе с помощью nmap следующим образом:

    Мы можем сканировать все порты системы с помощью nmap:

    Чтобы получить список наиболее часто открытых портов в вашей системе, вы можете использовать команду nmap с флагом ‘-F’:

    TCP-порты можно сканировать в системе с помощью nmap, просто добавив флаг «-T» вместе с командой nmap:

    Аналогично для портов UDP вы можете использовать флаг ‘-U’ с командой nmap:

    Список открытых портов с помощью lsof

    Команда lsof, также известная как «список открытых файлов», используется для получения информации об открытых файлах, используемых различными процессами в UNIX и LINUX, таких как операционные системы. В большинстве дистрибутивов Linux этот инструмент предустановлен. Мы можем проверить установку lsof, просто проверив его версию:

    Если он не показывает версию, значит lsof не установлен по умолчанию. Мы по-прежнему можем установить его, используя следующие команды в терминале:

    Мы можем использовать команду lsof вместе с другими параметрами. Список всех доступных опций можно отобразить с помощью следующей команды в терминале:

    Теперь в этом разделе мы собираемся использовать lsof для отображения портов системы различными способами:

    Приведенная выше команда отобразила все открытые порты. Мы также можем использовать команду lsof для отображения всех открытых сокетов:

    Мы можем вывести список отфильтрованных портов на основе протокола с помощью lsof. Запустите приведенную ниже команду, чтобы вывести список всех типов TCP-подключения:

    Аналогичным образом мы можем вывести список всех типов UDP-подключений с помощью lsof следующим образом:

    Список открытых портов с помощью netstat

    Netstat, также известный как сетевая статистика, представляет собой программу командной строки, используемую для отображения подробной информации о сетях. Он отображает как входящие, так и исходящие TCP-соединения, таблицы маршрутизации, сетевые интерфейсы и т. д. В этом разделе мы будем использовать netstat для вывода списка открытых портов в системе. Инструмент netstat можно установить, выполнив следующие команды:

    После выполнения приведенных выше команд вы можете проверить установку, проверив версию netstat:

    Если отображается версия net-tools, значит, установка прошла успешно, в противном случае запустите команды установки еще раз. Чтобы получить обзор всех доступных параметров, которые можно использовать вместе с командой netstat, выполните следующую команду:

    Мы можем получить список всех прослушиваемых портов с помощью команды netstat в Ubuntu, выполнив следующую команду:

    Команду netstat также можно использовать для фильтрации прослушивания портов TCP и UDP, просто добавив флаг вместе с командой. Для прослушивания портов TCP:

    Для прослушивания портов UDP используйте следующую команду:

    Чтобы получить список всех прослушиваемых портов UNIX, вы можете запустить в терминале следующую команду:

    Вывод списка открытых портов с помощью ss

    Команда ss используется для отображения информации о сокетах в системе Linux.Она отображает более подробную информацию о сокетах, чем команда netstat. Команда ss предустановлена ​​для большинства дистрибутивов Linux, поэтому вам не нужно устанавливать ее перед использованием. Вы можете получить список всех опций, которые можно использовать вместе с командой ss, запустив команду «man» с ss:

    Чтобы получить список всех подключений независимо от их состояния, используйте команду ss без каких-либо флагов:

    Чтобы получить список всех прослушиваемых портов, используйте команду ss с флагом «-l». Флаг ‘-l’ используется для отображения только прослушиваемых портов:

    Чтобы получить все прослушиваемые порты TCP, мы можем использовать флаги "-t" и "-l" вместе с командой ss:

    Аналогичным образом мы можем получить список всех прослушиваемых UDP-портов с помощью команды ss вместе с флагами «-u» и «-l»:

    Команду ss также можно использовать для получения списка всех подключений к исходному или целевому порту. В следующем примере мы собираемся получить список всех соединений с целевым или исходным портом 22:

    Вы получите список всех входящих и исходящих подключений, если вы подключились к удаленной системе с помощью ssh.

    Заключение

    Системным администраторам, специалистам по безопасности и другим лицам, связанным с ИТ, важно знать об открытых портах на серверах. Linux богат инструментами, используемыми для диагностики сетей, и предоставляет множество инструментов, которые могут быть полезны для различных видов сетевой деятельности. В этом руководстве мы использовали некоторые инструменты, такие как netstat, ss, lsof и nmap, для проверки открытых портов в Ubuntu. Прочитав эту статью, вы сможете легко составить список всех прослушиваемых портов на вашем Linux-сервере разными способами.

    Об авторе

    Усама Азад

    Энтузиаст по безопасности, который любит Terminal и Open Source. Моя область знаний — Python, Linux (Debian), Bash, тестирование на проникновение и брандмауэры. Я родился и вырос в Вазирабаде, Пакистан, и в настоящее время учусь в Национальном университете науки и технологий (NUST). В Твиттере меня зовут @UsamaAzad14

    Читайте также: