Как открыть порт debian
Перейти к содержимому

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

  • автор:

Как настроить брандмауэр с UFW в Debian 10

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

UFW (несложный брандмауэр) — это удобный интерфейс для управления правилами брандмауэра iptables. Его основная цель — сделать управление iptables проще или, как следует из названия, несложным.

В этой статье описывается, как настроить брандмауэр с UFW в Debian 10.

Подготовка

Только root или пользователь с привилегиями sudo может управлять системным брандмауэром.

Установка UFW

Введите следующую команду, чтобы установить пакет ufw :

Проверка статуса UFW

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

Результат будет выглядеть так:

Если UFW активирован, вывод будет выглядеть примерно так:

Политики UFW по умолчанию

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

Политики по умолчанию определены в /etc/default/ufw и могут быть изменены с помощью команды sudo ufw default <policy> <chain> .

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

Профили приложений

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

Чтобы вывести список всех профилей приложений, доступных в вашей системе, введите:

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

Чтобы найти дополнительную информацию о конкретном профиле и включенных правилах, используйте команду app info , после которой укажите имя профиля. Например, чтобы получить информацию о профиле OpenSSH, вы должны использовать:

Вывод включает имя профиля, заголовок, описание и правила брандмауэра.

Разрешить SSH-подключения

Перед включением брандмауэра UFW необходимо разрешить входящие соединения SSH.

Если вы подключаетесь к своему серверу из удаленного места и включаете брандмауэр UFW перед тем, как явно разрешить входящие соединения SSH, вы больше не сможете подключиться к своему серверу Debian.

Чтобы настроить брандмауэр UFW на прием SSH-подключений, выполните следующую команду:

Если SSH-сервер прослушивает порт, отличный от порта по умолчанию 22, вам нужно будет открыть этот порт.

Например, ваш ssh-сервер прослушивает порт 7722 , вы должны выполнить:

Включить UFW

Теперь, когда брандмауэр UFW настроен на разрешение входящих соединений SSH, включите его, запустив:

Вы будете предупреждены, что включение брандмауэра может нарушить существующие соединения ssh. Введите «y» и нажмите «Enter».

Открытие портов

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

Ниже приведены несколько примеров того, как разрешить входящие соединения с некоторыми из наиболее распространенных служб:

Открытый порт 80 — HTTP

Вместо профиля http вы можете использовать номер порта 80 :

Открытый порт 443 — HTTPS

Вы также можете использовать номер порта 443 :

Открытый порт 8080

Если вы запустите Tomcat или любое другое приложение, которое прослушивает порт 8080 откройте порт с помощью:

Открытие портовых диапазонов

С помощью UFW вы также можете разрешить доступ к диапазонам портов. При открытии диапазона необходимо указать протокол порта.

Например, чтобы разрешить порты с 7100 по 7200 как на tcp и на udp , выполните следующую команду:

Разрешение определенных IP-адресов

Чтобы разрешить доступ ко всем портам с определенного IP-адреса, используйте команду ufw allow from за которой следует IP-адрес:

Разрешение определенных IP-адресов на определенном порту

Чтобы разрешить доступ к определенному порту, допустим, порт 22 с вашего рабочего компьютера с IP-адресом 64.63.62.61, используйте следующую команду:

Разрешение подсетей

Команда для разрешения подключения из подсети IP-адресов такая же, как и при использовании одного IP-адреса. Единственное отличие состоит в том, что вам нужно указать маску сети. Например, если вы хотите разрешить доступ для IP-адресов от 192.168.1.1 до 192.168.1.254 и до порта 3360 ( MySQL ), вы можете использовать эту команду:

Разрешить подключения к определенному сетевому интерфейсу

Чтобы разрешить доступ к определенному порту, скажем, порт 3360 только к определенному сетевому интерфейсу eth2 , используйте eth2 allow in on и имя сетевого интерфейса:

Запретить подключения

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

Допустим, вы открыли порты 80 и 443 , и ваш сервер подвергается атаке из сети 23.24.25.0/24 . Чтобы запретить все соединения с 23.24.25.0/24 , используйте следующую команду:

Если вы хотите запретить доступ только к портам 80 и 443 из 23.24.25.0/24 используйте:

Написание запрещающих правил аналогично написанию разрешающих правил. Вам нужно только заменить allow на deny .

Удалить правила UFW

Есть два разных способа удалить правила UFW. По номеру правила и указав фактическое правило.

Удаление правил UFW по номеру правила проще, особенно если вы новичок в UFW.

Чтобы сначала удалить правило по его номеру, вам нужно найти номер правила, которое вы хотите удалить. Для этого выполните следующую команду:

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

Второй способ — удалить правило, указав фактическое правило. Например, если вы добавили правило для открытия порта 8069 вы можете удалить его с помощью:

Отключить UFW

Если по какой-либо причине вы хотите остановить UFW и деактивировать все правила, выполните:

Позже, если вы захотите снова включить UTF и активировать все правила, просто введите:

Сбросить UFW

Сброс UFW отключит UFW и удалит все активные правила. Это полезно, если вы хотите отменить все изменения и начать все заново.

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

Выводы

Вы узнали, как установить и настроить брандмауэр UFW на вашем компьютере с Debian 10. Обязательно разрешите все входящие соединения, которые необходимы для правильного функционирования вашей системы, ограничив при этом все ненужные соединения.

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

Самой распространенной операцией при работе с межсетевым экраном, по моему мнению, является операция закрытия и открытия портов на сетевом интерфейсе. Порт открывается для того чтобы к нему можно было получить доступ из вне. Закрывают же порт чтобы запретить устанавливать соединение с программой на вашем устройстве, работающей по этому порту. В этой статье мы рассмотрим как открыть порт iptables на примере Debian Linux.

Порт — это, грубо говоря, номер квартиры в многоквартирном доме, за которым проживают известные (или не очень) жильцы. IP адрес — это номер многоквартирного дома, в котором множество квартир. Жилец — это программа, использующая данный номер порта. Этот пример работает в том случае, когда целью является открытие и закрытие доступа программам на том же самом компьютере, который подключен к сети Интернет.

Как открыть порт с помощью iptables

В iptables для создания нового правила или блока правил используется команда:

sudo iptables [ -t таблица ] -A [ цепочка ] спецификации_правила

sudo iptables -t filter -A INPUT -p tcp -s 8.8.8.8 —sport 53 -d 192.168.1.1 -j ACCEPT

Рассмотрим подробно случай открытия порта с помощью iptables. Следует заметить, что понятие порт используется в протоколах tcp и udp, поэтому для разных протоколов доступны одинаковые номера портов, но при этом эти номера, говоря на языке нашего примера, означают разные квартиры в разных домах в разных микрорайонах, где за микрорайон можно принять наименование протокола.

Примечание: Существуют таблицы общепринятых номеров портов для распространённых программ и типов программ по функциональному назначению. Остальные порты являются свободно используемыми. Рассмотрение таблиц портов выходит за рамки данной статьи. Вернемся к простой задаче закрыть один порт.

Примечание: Если вы собираетесь открыть порт, убедитесь, что политика iptables по умолчанию блокировать всё соединения к портам (DROP). Если же используется политика по умолчанию ACCEPT, то ничего открывать не надо, все порты уже открыты, а вам нужно только закрыть те, которые должны быть недоступны из вне. Подробнее в статье как пользоваться iptables.

1. Один порт

Чтобы открыть порт iptables debian используется следующая команда:

sudo iptables [ -t таблица ] -A [ цепочка ] -p протокол [ —sport порт_отправителя ] [ —dport порт_назначения ] -j [ действие ]

sudo iptables -t filter -A INPUT -p tcp —dport 8081 -j ACCEPT

В данном случае мы открыли в таблице filter в цепочке INPUT протокола tcp порт назначения 8081 с помощью действия ACCEPT (принять). Таким образом для всех внешних машин, пытающихся установить соединение по данному порту, данный порт будет теперь доступен. Если мы хотим открыть порт для конкретной машины следует использовать следующую команду:

sudo iptables -t filter -A INPUT -p tcp -s 10.0.0.1/32 —dport 8080 -j ACCEPT

Мы открыли порт 8080 на нашем компьютере для внешней машины с адресом 10.0.0.1.

2. Диапазон портов

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

sudo iptables [ -t таблица ] -A [ цепочка ] -p протокол [ —sport начальный_порт_отправителя:конечный_порт_отправителя ] [ —dport начальный_порт_назначения:конечный_порт_назначения ] -j [ действие ]

sudo iptables -t filter -A INPUT -p tcp —dport 18070:18081 -j ACCEPT

Данной командой мы открыли порты 18070-18081 для входящих пакетов, адресованных именно этому компьютеру, передаваемых по протоколу TCP.

3. Входящее и исходящее соединения

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

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

Правила для входящих соединений будут в большинстве случаев расположены в цепочках PREROUTING, INPUT. Правила для исходящих соединений будут в большинстве случаев расположены в цепочках POSTROUTING, OUTPUT.

Чтобы разрешить порт iptables для входящего соединения:

sudo iptables -t filter -A INPUT -p tcp —dport 8080 -j ACCEPT

Пример для исходящего соединения:

sudo iptables -t filter -A OUTPUT -p tcp —dport 8080 -j ACCEPT

Примечание: В данном случае правила выглядят очень похоже, но смысловое значение у них будет абсолютно противоположное. В первом случае мы имеем дело с пакетом ВХОДЯЩИМ, который должен поступить на порт назначения 8080 НАШЕГО компьютера. Во втором случае мы имеем дело с пакетом ИСХОДЯЩИМ, который должен поступить на порт назначения 8080 УДАЛЕННОГО компьютера. Следует также заметить, что программа не использует на нашем компьютере и удаленном компьютере одинаковый номер порта для одной программы. Порты будут различаться.

4. Состояние соединения

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

  • NEW — пакет открыл новое соединение или иным образом связан с соединением, в рамках которого ещё не было пакетов в обоих направлениях (входящем и исходящем);
  • ESTABLISHED — пакет связан с соединением, которое видело пакеты в обоих направлениях;
  • RELATED — пакет открывает новое соединение, но связан с уже существующим соединением, например, передача данных FTP или ошибка протокола ICMP;
  • INVALID — пакет, связанный с неизвестным соединением.

Открытие портов iptables для новых соединений:

sudo iptables -t filter -A INPUT -p tcp -s 192.168.1.0/24 —dport 445 -m state —state NEW -j ACCEPT

В этом примере в таблицу filter в цепочку INPUT для протокола tcp, от компьютера из подсети 192.168.1.0/24, на порт назначения 445 (так как цепочка входящая, то порт назначения находится на данном компьютере) для пакетов, открывающих новое соединение, применить действие ACCEPT (принять пакет).

А такая команда позволяет добавить порт iptables для уже установленных соединений:

sudo iptables -t filter -A INPUT -p tcp -s 192.168.2.0/24 —dport 445 -m state —state ESTABLISHED -j ACCEPT

В данном случае в таблицу filter в цепочку INPUT для протокола tcp, от компьютера из подсети 192.168.2.0/24, на порт назначения 445 (так как цепочка входящая, то порт назначения находится на данном компьютере) для пакетов, поступающих в рамках уже открытого соединения, применить действие ACCEPT (принять пакет).

Как закрыть порт iptables

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

sudo iptables -t filter -A INPUT -p tcp -s 192.168.3.0/24 —dport 445 -m state —state ESTABLISHED -j DROP

Эта команда в таблицу filter в цепочку INPUT запишет правило для протокола TCP, от компьютера из подсети 192.168.3.0/24, на порт назначения 445 (так как цепочка входящая, то порт назначения находится на данном компьютере) для пакетов, поступающих в рамках уже открытого соединения, применять действие DROP (отбросить пакет).

Для правил, запрещающих прием пакета, применимо всё сказанное выше для закрытия порта (одиночный порт, диапазон портов, входящие и исходящие соединения, действия для установленных соединений и новых соединений). Про закрытие портов в iptables читайте более подробно в отдельной статье.

Проверка открыт ли порт

Когда мы настроили все правила, закрывающие и открывающие порты, нам необходимо проверить корректность примененных настроек. Для этого можно использовать приложение telnet. Telnet — приложение, позволяющее установить двунаправленное соединение между двумя компьютерами с помощью протокола telnet. В рамках нашей задачи попытка установления соединения между двумя машинами в сети используется как тест правил Netfilter. Выполняем команду следующего вида:

$ telnet ip-адрес порт

telnet 192.168.1.5 443

В данной команде будет проверен 443 порт у машины с ip-адресом 192.168.1.5. Если на порту 443 на удаленной машине разрешено входящее соединение и правила на локальной машине разрешают исходящее соединение на порту 443, то получим сообщение:

Connection closed by foreign host.

Или неожиданно можем получить приглашение доступа к данной машине, если на этом порте ожидает подключения серверная часть telnet.

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

telnet: Unable to connect to remote host: Connection timed out

Примечание: Чтобы получить результаты необходимо подождать довольно продолжительное время, чтобы telnet получил результат попытки соединения по указанному порту.

Выводы

Итак, сегодня мы рассмотрели как открыть порт 80 iptables или любой другой на локальной машине. Теперь мы знаем, как открыть (или закрыть) конкретный порт, диапазон портов, в чем разница между входящими и исходящими соединениями, как работать с новыми и уже установленными соединениями.

Adding a rule in iptables in debian to open a new port

I am trying to open port 3306 in iptables in my Debian System to allow access to MySQL server. For which I entered this command:

I entered the new connection and it has been saved in iptables as I can see the new rule in iptables list genereted by iptables-save command.

However, this debian system is running on a VM over Windows7 and I’m not able to telnet from Windows to this port. Not sure where I am supposed to check for the solution to this problem.

2 Answers 2

About your command line:

You are already authenticated as root so sudo is redundant there.

You are missing the -j or —jump just before the ACCEPT parameter (just tought that was a typo and you are inserting it correctly).

About yout question:

If you are inserting the iptables rule correctly as you pointed it in the question, maybe the issue is related to the hypervisor (virtual machine provider) you are using.

If you provide the hypervisor name (VirtualBox, VMWare?) I can further guide you on this but here are some suggestions you can try first:

check your vmachine network settings and:

if it is set to NAT, then you won’t be able to connect from your base machine to the vmachine.

if it is set to Hosted, you have to configure first its network settings, it is usually to provide them an IP in the range 192.168.56.0/24, since is the default the hypervisors use for this.

if it is set to Bridge, same as Hosted but you can configure it whenever IP range makes sense for you configuration.

Hope this helps.

(I presume that you’ve concluded that it’s an iptables problem by dropping the firewall completely (iptables -P INPUT ACCEPT; iptables -P OUTPUT ACCEPT; iptables -F) and confirmed that you can connect to the MySQL server from your Windows box?)

Some previous rule in the INPUT table is probably rejecting or dropping the packet. You can get around that by inserting the new rule at the top, although you might want to review your existing rules to see whether that’s sensible:

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

WARNING: nftables is the default firewall framework since Debian 10 Buster. This page is outdated.

  1. Introduction
  2. Basic firewall software
    1. Basic software for network traffic manipulation
      1. Using iptables for IPv4 traffic
      2. Using ip6tables for IPv6 traffic
      3. Using ebtables for ARP traffic
      4. Application firewalls

      Introduction

      A network firewall is a set of rules to allow or deny passage of network traffic, through one or more network devices. A network firewall may also perform more complex tasks, such as network address translation, bandwidth adjustment, provide encrypted tunnels and much more related to network traffic.

      Prior to version 5 (Lenny), a default Debian installation, did not have a default firewall enabled. But provides the needed tools to configure it manually.

      Basic firewall software

      Network traffic has different components, layers and protocols. For more references, check out the links section.

      The most known type of firewall, and the most initially implemented, are sets of rules based on netfilter software, based on a set of kernel modules and some user space tools.

      Basic software for network traffic manipulation

      The default Debian installation comes with the program iptables(8), configured to allow all traffic. This section briefly explains the different programs to handle network traffic manually, as well as two sample scripts.

      You need to be root, or use sudo, to launch these programs.

      You may find the iptables-persistent package useful.

      Using iptables for IPv4 traffic

      This is not an iptables manual, only a short introduction about the use of the program. For more extended explanations, see iptables(8)

      Basic invocation to define rules is:

      Tables and chains

      All rules, are stored on different tables.

      The default table is filter, which maintain the INPUT, OUTPUT and FORWARD chains, used for incoming, outgoing and redirected traffic respectively.

      Other present tables are mangle, nat and raw. You can also create and delete custom tables.

      Rules and program invocation may refer to a specific table using the -t table_name switch (or --table table_name).

      If no table is specified, the default table is used (the filter table).

      To list the ruleset of any table, the -L switch is used. For example:

      As you can see, the default policy in a default installation is to ACCEPT all traffic. There are no rules on any chain.

      Each of the default tables, contain different chains, to store rules for different points, in the kernel networking subsystem.

      You can list other tables using -t, for example, to see the nat (Network Address Translation) table:

      Matching and order

      When a packet is inspected through the rulesets, matches are searched from top to bottom of tables and chains.

      Into the rules, matches are searched from left to right, of the rule syntax used.

      When a packet does not match a rule, the search jumps to the next rule. If no rules matches, then the default policy is applied to the packet.

      If the packet matches any rule definition, then the target defined on the rule is applied (ACCEPT, REJECT, DROP, LOG, etc), and the following rules of the same chain are skipped.

      It is very important to keep this in mind when designing a ruleset, to reach the desired functionality and because of its impact on performance, in large rulesets.

      Policies and Targets

      Default policy is to ACCEPT all traffic, but the most common practice, is to change policies to DROP all traffic but the allowed.

      You have to be careful and sure that your rules are right, before put a policy to DROP, or you will lose connectivity.

      See the troubleshooting section for tips about this issue.

      Program switches

      There are other switches, to handle chains, tables, clear rules, counters and other elements. See iptables(8) man page.

      Modules

      The iptables program has an extensive collection of modules, to use different criteria to evaluate packets.

      There are modules for protocols, logging, states of the conection, etc. All compiled-in modules, are neatly explained in the man page.

      Modules may have parameters (-m module_name --parameter_name parameter_arguments).

      An example rule, using the state module, to drop incoming traffic with INVALID state (a parameter of the state module), defined in the headers of the packet, would be:

      Example scripts
      Installation

      You can put this scripts at any place that run at boot time or network initialization.

      Common places are:

      /etc/rc.local

      Before the exit 0. Will be launched at boot time.

      /etc/network/interfaces

      This is a more reasonable and standard place for networking related stuff.

      For example, if eth0 is your main or uniq interface, using DHCP:

      SystemD | firewall.service

      Most Debian distributions now include systemd. In order to bring up the iptable rules using systemd at start:

      Create a new file using any reasonable file text editor(I called mine firewall.service)

      Then add the following:

      Then enable the service:

      Example: Basic standalone machine firewall

      You can use this script in any stand-alone machine (for example a personal desktop) that does not need ports open to any place. Or see the final commented line, to open specific ports.

      A simple script like the one below, will provide your host with a reasonable amount of security. Be aware that the following script drops all packets which do not match an allow rule, so normal network error messages will not be seen. All allow rules have been commented out to protect the uninitiated.

      Example: Basic gateway machine firewall
      Using ip6tables for IPv6 traffic

      Because of growth, Internet is slowly switching to IPv6, that has a much larger address space than IPv4, and Debian is IPv6 capable.

      If you have IPv6 addresses, networks and conections in your firewall, you’ve to be careful and configure your rulesets for each protocol.

      To configure and manage IPv6 rulesets, you need to use ip6tables(8), which is provided by the default Debian install, in the package iptables.

      The usage and functionality, is very similar to iptables, but oriented to IPv6 traffic.

      For more references, see: ip6tables(8)

      Using ebtables for ARP traffic

      Ebtables (package ebtables) is used to set up, maintain, and inspect the tables of Ethernet frame rules in the Linux kernel. It is analogous to iptables, but operates at the MAC (ARP) layer, rather than the IP layer.

      If you need to filter or translate ARP traffic (at link layer), your firewall has bridged interfaces (for example a transparent bridge between a OpenVPN tunneled VLAN and a local VLAN, or bridged interfaces for virtualization), ebtables(8) is your friend.

      The design is very similar to netfilter’s iptables.

      It manages rulesets in tables with chains and targets, using user space tools, but this time it’s not in the default Debian installation, and you need to add it:

      For a more detailed explanation of its usage, look at the inevitable man page, and visit the official website (see links section).

      There are documents that explain howto integrate ebtables and iptables, using the iptables module physdev.

      Application firewalls

      To go more up, and manipulate the Layer 7 of the OSI model, and be able to define rules at application level, you need other tools.

      For example. you open the port 80 to your users, but you don’t want them to be able to download .exe files from internet. You need an application firewall or proxy.

      The default kernel in Debian does not have layer 7 patches, but you can install user space proxys to manage this kind of filters.

      See also the links section for the l7-filter project.

      Troubleshooting software and tips

      It’s very easy to lose connectivity when initially configuring a firewall. And it’s easier the more complex the firewall is.

      A basic skill for troubleshoot a firewall problem, is to know the points where the traffic passes, is turned, routed, can be rejected, etc. And to know how to monitor that points, and what is happening.

      The most effective is to analyze the traffic from end to end, from the initial request, the DNS, the interfaces by which must pass, the translations that have to do, the rejected traffic logs, the routing rules, etc.

      A common hack when doing ruleset designing, is to put a cron task, that flush rules every few minutes, in case you will make a mistake (working in remote).

      Graphic applications and frontends

      There are some tools, to configure firewalls using frontends and helpers.

      There are also command line "high level" tools, to avoid the "low level" syntax, or to simplify certain tasks. Anyway, the real power is in the large number of modules and options for basic command line programs, that often is not covered by frontends.

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

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