Настройка iptables в Debian 10

Обновлено: 01.07.2024

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

В этом руководстве показано, как настроить брандмауэр с помощью UFW в Debian 10.

Предпосылки

Чтобы следовать этому руководству, вам понадобится один сервер Debian 10 с пользователем без полномочий root, который можно настроить, выполнив шаги 1–3 в руководстве по начальной настройке сервера с Debian 10.

Шаг 1. Установка UFW

Debian не устанавливает UFW по умолчанию. Если вы следовали всему руководству по начальной настройке сервера, вы установили и включили UFW. Если нет, установите его сейчас, используя apt :

Мы настроим и включим UFW, выполнив следующие действия.

Шаг 2. Использование IPv6 с UFW (необязательно)

Это руководство написано для IPv4, но будет работать и для IPv6, если вы включите его. Если на вашем сервере Debian включен IPv6, вы должны убедиться, что UFW настроен на поддержку IPv6; это гарантирует, что UFW будет управлять правилами брандмауэра для IPv6 в дополнение к IPv4. Чтобы настроить это, откройте файл конфигурации UFW /etc/default/ufw с помощью nano или вашего любимого редактора:

Затем убедитесь, что значение IPV6 равно yes . Это должно выглядеть так:

Сохраните и закройте файл. Теперь, когда UFW включен, он будет настроен на запись правил брандмауэра IPv4 и IPv6. Однако перед включением UFW вы должны убедиться, что ваш брандмауэр настроен на разрешение подключения через SSH. Начнем с настройки политик по умолчанию.

Шаг 3 — Настройка политик по умолчанию

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

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

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

Шаг 4. Разрешение SSH-соединений

Чтобы настроить сервер для разрешения входящих SSH-соединений, вы можете использовать эту команду:

Это создаст правила брандмауэра, разрешающие все соединения через порт 22, который по умолчанию прослушивается демоном SSH. UFW знает, что такое port allow ssh, потому что он указан как служба в файле /etc/services.

Однако мы можем написать эквивалентное правило, указав порт вместо имени службы. Например, эта команда дает тот же результат, что и приведенная выше:

Если вы настроили демон SSH для использования другого порта, вам нужно будет указать соответствующий порт. Например, если ваш SSH-сервер прослушивает порт 2222 , вы можете использовать эту команду, чтобы разрешить подключения на этом порту:

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

Шаг 5. Включение UFW

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

Вы получите предупреждение о том, что команда может прервать существующие SSH-соединения. Мы уже настроили правило брандмауэра, разрешающее SSH-подключения, поэтому можно продолжить. Ответьте на приглашение с помощью y и нажмите ENTER .

Теперь брандмауэр активен. Запустите команду sudo ufw status verbose, чтобы просмотреть установленные вами правила. В оставшейся части этого руководства более подробно рассказывается, как использовать UFW, включая разрешение и запрет различных типов подключений.

Шаг 6. Разрешение других подключений

На этом этапе вы должны разрешить все остальные подключения, которые необходимы вашему серверу для правильной работы. Соединения, которые вы должны разрешить, зависят от ваших конкретных потребностей. К счастью, вы уже знаете, как писать правила, разрешающие соединения на основе имени службы или порта; мы уже сделали это для SSH на порту 22. Вы также можете сделать это для:

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

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

Вы можете указать диапазоны портов с помощью UFW. Например, некоторые приложения используют несколько портов вместо одного порта.

Например, чтобы разрешить подключения X11, использующие порты 6000–6007, используйте следующие команды:

При указании диапазонов портов с помощью UFW необходимо указать протокол ( tcp или udp ), к которому должны применяться правила. Мы не упоминали об этом раньше, потому что не указание протокола автоматически разрешает использование обоих протоколов, что в большинстве случаев допустимо.

Конкретные IP-адреса

При работе с UFW вы также можете указать IP-адреса. Например, если вы хотите разрешить подключения с определенного IP-адреса, такого как рабочий или домашний IP-адрес 203.0.113.4 , вам нужно указать от , а затем IP-адрес:

Вы также можете указать конкретный порт, к которому разрешено подключение IP-адреса, добавив к любому порту номер порта. Например, если вы хотите разрешить 203.0.113.4 подключаться к порту 22 (SSH), используйте следующую команду:

Подсети

Если вы хотите разрешить подсеть IP-адресов, вы можете сделать это, используя нотацию CIDR для указания сетевой маски. Например, если вы хотите разрешить все IP-адреса в диапазоне от 203.0.113.1 до 203.0.113.254, вы можете использовать эту команду:

Аналогичным образом вы также можете указать порт назначения, к которому разрешено подключение подсети 203.0.113.0/24. Опять же, в качестве примера мы будем использовать порт 22 (SSH):

Подключения к определенному сетевому интерфейсу

Если вы хотите создать правило брандмауэра, которое применяется только к определенному сетевому интерфейсу, вы можете сделать это, указав значение allow в on , а затем имя сетевого интерфейса.

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

Выделенный вывод указывает имена сетевых интерфейсов. Обычно они называются eth0 или enp3s2 .

Или, если вы хотите, чтобы ваш сервер базы данных MySQL (порт 3306) прослушивал соединения на частном сетевом интерфейсе eth1, вы можете использовать эту команду:

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

Шаг 7. Отказ в подключении

Если вы не изменили политику по умолчанию для входящих подключений, UFW настроен на запрет всех входящих подключений. Как правило, это упрощает процесс создания политики безопасного брандмауэра, требуя от вас создания правил, которые явно разрешают определенные порты и IP-адреса.

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

Чтобы написать запрещающие правила, вы можете использовать описанные выше команды, заменив allow на deny.

Или, если вы хотите запретить все соединения с 203.0.113.4, вы можете использовать эту команду:

Теперь давайте посмотрим, как удалять правила.

Шаг 8 — Удаление правил

Умение удалять правила брандмауэра так же важно, как и умение их создавать. Есть два способа указать, какие правила удалить: по номеру правила или по самому правилу. Это похоже на то, как правила были указаны при их создании. Мы начнем с объяснения метода удаления по номеру правила.

По номеру правила

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

Появится запрос подтверждения, на который вы можете ответить y/n . Ввод y удалит правило 2 . Обратите внимание, что если у вас включен IPv6, вы также захотите удалить соответствующее правило IPv6.

По действующему правилу

Вы также можете указать правило с разрешать 80 вместо имени службы:

Этот метод удалит правила IPv4 и IPv6, если они существуют.

Шаг 9. Проверка статуса и правил UFW

В любое время вы можете проверить статус UFW с помощью этой команды:

Если UFW отключен (по умолчанию), вы увидите что-то вроде этого:

Если UFW активен, как и должно быть, если вы выполнили шаг 3, в выводе будет указано, что он активен, и будут перечислены все установленные вами правила. Например, если брандмауэр разрешает подключения SSH (порт 22) из ​​любого места, вывод может выглядеть примерно так:

Используйте команду status, если хотите проверить, как UFW настроил брандмауэр.

Шаг 10. Отключение или сброс UFW (необязательно)

Если вы решите, что не хотите использовать UFW, вы можете отключить его с помощью этой команды:

Все правила, созданные с помощью UFW, больше не будут активны. Вы всегда можете запустить sudo ufw enable, если вам понадобится активировать его позже.

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

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

Заключение

Теперь ваш брандмауэр настроен на разрешение (по крайней мере) SSH-соединений. Обязательно разрешите любые другие входящие соединения, необходимые вашему серверу, а также ограничьте ненужные соединения. Это обеспечит работоспособность и безопасность вашего сервера.

Чтобы узнать о более распространенных конфигурациях UFW, ознакомьтесь с этим руководством по UFW Essentials: общие правила и команды брандмауэра.

Хотите узнать больше? Присоединяйтесь к сообществу DigitalOcean!

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

ПРИМЕЧАНИЕ: iptables заменяется на nftables, начиная с Debian Buster

Iptables обеспечивает фильтрацию пакетов, преобразование сетевых адресов (NAT) и другие виды обработки пакетов.

Двумя наиболее распространенными способами использования iptables являются обеспечение поддержки брандмауэра и NAT.

Настройка iptables вручную — сложная задача для непосвященных. К счастью, есть много инструментов настройки (мастеров), доступных для помощи, и наиболее интересным, вероятно, является firewalld, но другие включают fwbuilder, bastille, ferm, ufw и opensnitch.

Текущий статус

ПРИМЕЧАНИЕ: Debian Buster по умолчанию использует структуру nftables.

Начиная с Debian Buster, nf_tables является серверной частью по умолчанию при использовании iptables посредством слоя iptables-nft (т. е. с использованием синтаксиса iptables с подсистемой ядра nf_tables). Это также влияет на ip6tables, arptables и ebtables.

Вы можете переключаться между iptables-nft и iptables-legacy с помощью update-alternatives (то же самое относится к arptables и ebtables).

По умолчанию, начиная с Debian Buster:

Переход на устаревшую версию:

Просмотр текущей конфигурации

Просмотрите, какие правила уже настроены. Введите эту команду:

Вывод будет примерно таким:

Это позволяет любому получить доступ к чему угодно из любого места.

Сохранение правил iptables в файле

Примечание: для этого разработан пакет: iptables-persistent

Давайте немного упростим это, создав тестовый файл iptables:

В этом файле введите несколько основных правил:

Это может показаться сложным, но взгляните на каждый раздел отдельно. Вы увидите, что он просто закрывает все порты, кроме тех, которые мы разрешили — в данном случае это порты 80 и 443 (стандартные порты веб-браузера) и порт SSH, определенный ранее.

Активируйте эти новые правила:

И почувствуйте разницу:

Теперь вывод говорит нам, что открыты только указанные выше порты. Все остальные закрыты. Если машина находится под удаленным управлением, на этом этапе вы можете установить новое ssh-соединение.

Сделать Изменения постоянными

Поскольку IP-таблицы не являются постоянными, они будут удалены ("сброшены") при следующей перезагрузке.

Как только вы будете довольны своим набором правил, сохраните новые правила в главном файле iptables:

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

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

Файл должен быть исполняемым, поэтому измените разрешения:

Другой способ — использовать пакет iptables-persistent. Правила можно хранить примерно так:

 Учебное пособие по Iptables — Защита Ubuntu VPS с помощью брандмауэра Linux

Вы ищете полное руководство по iptables? Оставайся на месте. В этой статье мы покажем вам, как установить и использовать iptables в системе Ubuntu. Узнав об этом инструменте брандмауэра Linux, вы сможете защитить свой Linux VPS с помощью интерфейса командной строки.

Что такое Iptables и как он работает?

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

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

  • ПРИНЯТЬ — разрешает прохождение пакета.
  • DROP — не пропустит пакет.
  • RETURN – останавливает передачу пакета по цепочке и указывает ему вернуться к предыдущей цепочке.

В этом руководстве по iptables мы будем работать с одной из таблиц по умолчанию, которая называется filter. Он состоит из трех цепочек:

  • INPUT — контролирует входящие пакеты на сервер.
  • FORWARD – фильтрует входящие пакеты, которые будут переадресованы в другое место.
  • OUTPUT – фильтрация пакетов, исходящих с вашего сервера.

Прежде чем мы начнем это руководство, убедитесь, что у вас есть доступ SSH root или sudo к вашему компьютеру, работающему под управлением Ubuntu 16.04 или более поздней версии. Вы можете установить соединение через PuTTY (Windows) или терминальную оболочку (Linux, macOS). Если вы являетесь владельцем Hostinger VPS, вы можете получить данные для входа по SSH на вкладке «Серверы» в hPanel.

Правила iptables применяются только к ipv4. Если вы хотите настроить брандмауэр для протокола ipv6, вместо этого вам нужно будет использовать ip6tables.

Как установить и использовать брандмауэр Iptables Linux

Мы разделим это руководство по iptables на три этапа. Во-первых, вы узнаете, как установить инструмент на Ubuntu. Во-вторых, мы собираемся показать вам, как определить правила. Наконец, мы поможем вам внести постоянные изменения в iptables.

Шаг 1 — Установка Iptables

Iptables предустановлен в большинстве дистрибутивов Linux. Однако, если он не установлен в системе Ubuntu/Debian по умолчанию, выполните следующие действия:

  1. Подключитесь к серверу через SSH. Если вы не знаете, вы можете прочитать наше руководство по SSH.
  2. Выполните следующие команды одну за другой:
  3. Проверьте состояние текущей конфигурации iptables, выполнив:

Здесь опция -L используется для отображения всех правил, а -v — для отображения информации в более подробном формате. Ниже приведен пример вывода:

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

Не волнуйтесь. Мы расскажем вам, как определить правила, на следующем этапе нашего руководства по iptables.

Шаг 2. Определение правил цепочки

Определение правила означает добавление его в цепочку. Для этого вам нужно вставить опцию -A (Добавить) сразу после команды iptables, например:

Это предупредит iptables, что вы добавляете новые правила в цепочку. Затем вы можете комбинировать команду с другими параметрами, такими как:

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

После того как вы поймете основной синтаксис, вы сможете приступить к настройке брандмауэра, чтобы повысить безопасность вашего сервера. В этом руководстве по iptables мы будем использовать цепочку INPUT в качестве примера.

Включение трафика на локальном хосте

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

В этом руководстве по iptables мы используем интерфейс lo или loopback. Он используется для всех коммуникаций на локальном хосте. Приведенная выше команда обеспечит правильную работу соединений между базой данных и веб-приложением на одном компьютере.

Пришло время проверить, добавлены ли правила в iptables:

Принятый порт назначения в iptables, состоящий из http, https и ssh

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

Фильтрация пакетов по источнику

Iptables позволяет фильтровать пакеты на основе IP-адреса или диапазона IP-адресов. Вам нужно указать его после опции -s. Например, чтобы принимать пакеты от 192.168.1.3, команда будет выглядеть так:

Вы также можете отклонять пакеты с определенного IP-адреса, заменив цель ACCEPT на DROP.

Если вы хотите отбрасывать пакеты с диапазона IP-адресов, вы должны использовать параметр -m и модуль iprange. Затем укажите диапазон IP-адресов с помощью –src-range. Помните, что дефис должен отделять диапазон IP-адресов без пробела, например:

Отбрасывание всего остального трафика

Очень важно использовать цель DROP для всего остального трафика после определения правил –dport. Это предотвратит несанкционированный доступ к серверу через другие открытые порты. Для этого просто введите:

Теперь соединение за пределами указанного порта будет разорвано.

Удаление правил

Если вы хотите удалить все правила и начать с чистого листа, вы можете использовать параметр -F (сбросить):

Эта команда удаляет все текущие правила. Однако для удаления конкретного правила необходимо использовать параметр -D. Во-первых, вам нужно просмотреть все доступные правила, введя следующую команду:

Вы получите список правил с номерами:

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

Шаг 3. Сохранение изменений

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

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

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

Вы увидите следующие результаты:

Результаты после сохранения изменений в iptables

Заключение

Iptables – это мощный брандмауэр, который можно использовать для защиты вашего сервера Linux или VPS. Что здорово, так это то, что вы можете определять различные правила в зависимости от ваших предпочтений.

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

Пришло время проверить это на себе и удачи!

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

В этой статье вы узнаете, как удалить инфраструктуру nftables по умолчанию, установить iptables Debian 11 (Bullseye) и выполнить начальную настройку основных правил.

Удалить nftables и его зависимости

IPtables заменяется на nftables, начиная с Debian 10 Buster. Debian 11 поставляется с инфраструктурой nftables.

Чтобы сначала установить iptables, нам нужно удалить nftables и его зависимости.

Подключитесь к серверу по SSH и выполните следующие команды:

Установка IPtables в Debian 11

Для установки iptables выполните следующие команды:

Установить таблицы IP в Debian 11

Проверка статуса Debian IPtables

Теперь мы можем проверить статус iptables и список правил. Для вывода списка всех правил мы будем использовать опцию -L.

Вы увидите результат:

статус iptables debian

Как вы видите на скриншоте, только что установил брандмауэр iptables, и он работает. Но все цепочки (INPUT, FORWARD, OUTPUT) настроены на ACCEPT, и у нас не настроены правила безопасности.

Очистить правила Iptables

Чтобы очистить правила iptables (открыть все порты) используйте следующую последовательность команд:

Пример базовой конфигурации Iptables

Скопируйте этот пример, не забудьте отредактировать xxx.xxx.xxx.xxx ваш IP-адрес и выполнить:

давайте еще раз проверим статус iptables:

проверить статус iptables

Хорошая работа! Iptables UP и работает с определенными правилами.

Если мы перезагрузим сервер, мы потеряем конфигурацию. Правила Iptables не сохраняются автоматически.

Постоянные Debian Iptables

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

Iptables Persistent

Теперь файлы конфигурации Iptables rules.v4 и rules.v6 хранятся в /etc/iptables

Сохранить IP-таблицы Debian

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

Восстановление Iptables

Чтобы восстановить конфигурацию iptables из файла конфигурации iptables.

Заключение

Вы только что узнали, как установить IPtables в Debian 11, как сделать iptables Debian постоянным. И настройка основных правил брандмауэра iptables.

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