Что такое межсетевой экран Ferm на базе Linux iptables и как его настроить

In Linux-основанные операционные системы, брандмауэр По преимуществу вы используете iptables, однако также возможно, что вы используете nftables, который является развитием iptables, гораздо более эффективным и с гораздо более «человеческим» синтаксисом, однако не весь мир до сих пор использует nftables. Сегодня мы собираемся объяснить, как настроить брандмауэр на серверах Linux с помощью Ferm (For Easy Rule Making), интерфейса iptables, который позволит нам очень легко, быстро и просто добавлять правила в брандмауэр, без необходимости изучать синтаксис iptables.

Что такое межсетевой экран Ferm и для чего он нужен?

Что такое межсетевой экран Ferm на базе Linux iptables

Ferm (For Easy Rule Making) - это интерфейс iptables, это означает, что на самом деле он использует iptables для разрешения или запрета трафика, но он позволяет нам настроить брандмауэр очень продвинутым способом без необходимости изучать синтаксис iptables или создайте другие сценарии с помощью iptables, но мы сделаем это напрямую с помощью Ferm. Этот инструмент способен считывать правила из файла конфигурации, который мы собираемся определить, а позже он будет «вызывать» iptables для добавления различных правил одно за другим, вставляя их в реальном времени в ядро.

Цель Ferm - предоставить системным и сетевым администраторам простой способ читать и писать все правила брандмауэра, уменьшая необходимость писать одно правило за другим, чтобы мы могли тратить больше времени на разработку и оптимизацию правил, чтобы сделать их максимально удобными. как можно эффективнее. Ferm использует очень простой, но довольно продвинутый язык конфигурации, мы можем использовать переменные, функции, массивы и даже блоки. Другая очень интересная опция Ferm заключается в том, что она позволяет нам включать другие файлы конфигурации в каталог, а также автоматически выполняет импорт и применение всех этих правил.

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

Одним из самых популярных интерфейсов iptables является ufw, широко используемый системными и сетевыми администраторами для простой и быстрой настройки своих брандмауэров.

Монтаж и пуско-наладка Ferm

Установка Ferm очень проста, в настоящее время она есть в большинстве репозиториев различных дистрибутивов на основе Linux, в нашем случае мы использовали последнюю версию Debian для выполнения всех тестов, которым мы собираемся вас научить. Чтобы установить эту программу, которая является интерфейсом iptables, мы должны выполнить следующую команду:

sudo apt install ferm

Как только мы выполним эту команду, мы должны увидеть что-то вроде этого, где нам будут показаны дополнительные пакеты, которые мы должны установить, в основном мы должны установить Perl, чтобы иметь возможность правильно запускать эту программу.

Установщик Ferm сообщит нам, что он загрузит правила брандмауэра во время запуска из пути /etc/ferm/ferm.conf, то есть все в этом файле будет автоматически передано в iptables, чтобы разрешить или запретить трафик сети. Конфигурация этого брандмауэра по умолчанию позволяет нам иметь доступ по SSH удаленно через порт 22, если у вас не настроен SSH на этом порту, вам придется отредактировать значения по умолчанию и нажать «нет», чтобы он не запускался. , иначе вы потеряете соединение.

После того, как мы выбрали «да» или «нет», apt завершит установку всех дополнительных пакетов, необходимых для работы этой программы.

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

По умолчанию в Ferm уже есть список правил, которые мы можем удалить в любое время, но это поможет нам разобраться с синтаксисом интерфейса iptables, поэтому будет весьма полезно. Если мы посмотрим на синтаксис, мы увидим, что он похож на nftables, но основан на iptables.

На следующем снимке экрана вы можете увидеть, как объявлены домены, в которых он будет настроен (iptables или ip6tables), таблицы и цепочки, а также правила, которые у нас есть в разных цепочках.

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

  • В цепочке INPUT политика - DROP, трафик localhost разрешен, трафик ICMP и соединение разрешено через IPsec, а также через SSH с портами по умолчанию. Что касается статуса соединений, недопустимые соединения ОТКЛЮЧЕНЫ, а установленные и связанные разрешены, но новые не разрешены, за исключением специально определенных.

В цепочке OUTPUT определено, что политика должна принимать все, а состояние соединения допускает установленные и связанные. В цепочке FORWARD трафик запрещен политикой, недействительные соединения специально блокируются, но установленные и связанные соединения разрешены.

Далее вы можете увидеть этот файл конфигурации в текстовом формате:

# -*- shell-script -*-
#
# Configuration file for ferm(1).
#
domain (ip ip6) {
table filter {
chain INPUT {
policy DROP;

# отслеживание соединения
состояние мода состояние INVALID DROP;
состояние мода состояние (УСТАНОВЛЕНО СВЯЗАННО) ПРИНЯТЬ;

# разрешить локальный пакет
интерфейс какой ПРИНЯТЬ;

# ответить на пинг
протокол icmp ПРИНЯТЬ;

# разрешить IPsec
proto udp dport 500 ПРИНЯТЬ;
@if @eq ($ ДОМЕН, ip) {
прото (особенно) ПРИНЯТЬ;
} @еще {
прото (исп) ПРИНЯТЬ;
}

# разрешить SSH-соединения
proto tcp dport ssh ПРИНЯТЬ;
}
цепочка ВЫХОД {
политика ПРИНЯТЬ;

# отслеживание соединения
# состояние мода INVALID DROP;
состояние мода состояние (УСТАНОВЛЕНО СВЯЗАННО) ПРИНЯТЬ;
}
цепочка ВПЕРЕД {
политика DROP;

# отслеживание соединения
состояние мода состояние INVALID DROP;
состояние мода состояние (УСТАНОВЛЕНО СВЯЗАННО) ПРИНЯТЬ;
}
}
}

@include Ferm.d /;

Самая интересная часть - это «@include ferm.d /», который у нас есть в последней части, это означает, что он импортирует все файлы конфигурации, которые у нас есть в этом каталоге.

Этот брандмауэр Ferm ниже использует iptables, поэтому, если мы выполним следующую команду:

iptables -L

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

Как только мы увидим конфигурацию Ferm по умолчанию, мы увидим различные примеры конфигурации, которые мы можем сделать.

Базовая конфигурация Ferm

Синтаксис Ferm очень прост и гибок, но мы должны изучить его, чтобы сделать правильную конфигурацию. Мы рекомендуем вам получить доступ к официальному руководству Ferm где вы найдете все подробности об используемом синтаксисе и о том, как различные правила должны быть объявлены в файле конфигурации, благодаря этому официальному руководству мы можем настроить этот брандмауэр без особых проблем.

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

Что касается синтаксиса iptables и ferm, у нас есть некоторые отличия:

  • Чтобы определить интерфейс ввода: interface (if)
  • Чтобы определить интерфейс выхода: externalface (of)
  • Чтобы определить происхождение: saddr
  • Чтобы определить пункт назначения: daddr
  • Чтобы определить протокол: proto
  • Порт отправления: спорт
  • Порт назначения: dport
  • Загрузите модуль: mod
  • Перейти к настраиваемому правилу: прыгать

В Ferm нет таких команд, как -A, -I, -C, -R или -D, поскольку все записано в файле конфигурации, то же самое происходит с командами для добавления новой строки, переименования или удаления ее, теперь здесь исчезает полностью. Другие особенности заключаются в том, что ferm позволяет вам наследовать различные правила, которые будут использоваться в других правилах, вложенных в файл конфигурации.

Как только мы примерно узнаем, на что похож синтаксис, мы увидим несколько примеров, сравнивающих его с iptables, во всех из них мы будем работать с таблицей «filter» в цепочке «INPUT».

iptables -P INPUT ACCEPT
iptables -A INPUT -p tcp -j ACCEPT

В ferm это будет записано следующим образом (добавление политики цепочки OUTPUT и FORWARD из таблицы фильтров):

domain ip {
table filter {
chain INPUT {
policy DROP;
proto tcp ACCEPT;
}
chain OUTPUT {
policy ACCEPT;
}
chain FORWARD {
policy DROP;
}
}
}

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

iptables -A INPUT -p tcp -j ACCEPT
iptables -A OUTPUT -p tcp -j ACCEPT
iptables -A INPUT -p udp -j ACCEPT
iptables -A OUTPUT -p udp -j ACCEPT

С Ferm это так же просто, как сделать следующее:

domain ip {
table filter {
chain (INPUT OUTPUT) {
proto (udp tcp) ACCEPT;
}
}

Как видите, гораздо быстрее и проще применить это правило как к INPUT, так и к OUTPUT.

Этот брандмауэр также включает в себя очень интересные функции, например, мы можем проверить, определена ли переменная или функция, мы можем проверить, совпадают ли два значения или разные, отклонить логическое значение, решить домены непосредственно из Ferm, объединить параметры и длинный список функций.

Ferm также позволяет «загружать» модули iptables, чтобы использовать их, и расширять конфигурацию брандмауэра, например, у нас есть следующее:

mod connlimit connlimit-above 4 connlimit-mask 24 REJECT;

Это можно использовать во всем файле конфигурации.

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

ferm -i -t 10 /etc/ferm/ferm.conf

Импортировать правила iptables в Ferm

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

import-ferm > /etc/ferm/ferm.d/reglas-iptables.conf

Когда мы запустим его, мы сможем увидеть правила iptables прямо в синтаксисе Ферма.

Если вы хотите преобразовать правила iptables из текстового файла в Ferm, вы можете выполнить следующую команду:

import-ferm origen de las reglas de iptables > /etc/ferm/ferm.d/reglas-iptables.conf

Как вы видели, ferm - это отличный интерфейс для iptables, который позволяет нам настраивать его продвинутым способом, без необходимости изучать синтаксис iptables и правильно организовывать правила в файле конфигурации. Однако, по нашему мнению, мы считаем, что для правильной настройки сценария bash со всеми правилами iptables не требуется никакого внешнего интерфейса или дополнительного программного обеспечения, хотя это может быть полезно для некоторых людей. Мы должны помнить, что Nftables уже включает возможность настройки правил непосредственно в файле конфигурации, а не только в интерактивном режиме с помощью консольных команд.