Настройка Shorewall для начинающих

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

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

Как работает Shorewall?

Shorewall - это инструмент конфигурации верхнего уровня для Netfilter. Во время работы он использует конфигурационные файлы iptables; iptables-restore, ip, tc, а также собственные конфигурационные файлы, которые находятся в папке /etc/shorewall. Вы настраиваете программу через ее конфигурационные файлы, затем она компилирует их в формат iptables и отправляет их фаерволу. В Shorewall используются такие понятия:

  • Интерфейсы - физические интерфейсы, на которых будет работать утилита, фактически это интерфейсы внутренних сетей;
  • Зоны - это основная единица управления сетями в sorewall, правила и устанавливаются для каждой зоны отдельно, также для каждой зоны устанавливаются политики по умолчанию. Фактически у каждого управляемого интерфейса своя зона, но к одному интерфейсу можно привязать несколько зон, разграничив их по IP адресам.
  • Политики - указывают что нужно делать с пакетами по умолчанию для зоны, например, разрешить или запретить;
  • Правила - детальные правила обработки подключений, например, какие именно пакеты или протоколы следует разрешить для указанной зоны.

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

Установка Shorewall

Установка Shorewall тоже выполняется достаточно проста. Мы рассмотрим работу с утилитой на примере Ubuntu, но в Debian или CentOS все будет выглядеть похожим образом. Откройте терминал и выполните такие команды:

sudo apt update
$ sudo apt install shorewall

Для установки Shorewall в CentOS используйте такую команду:

sudo yum install shorewall

Когда программа будет установлена, нужно настроить автоматический запуск. Для этого откройте файл /etc/default/shorewall и замените значение строки startup=0 на 1:

vi /etc/default/shorewall

startup=1

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

Настройка Sharewall

Чтобы вы смогли понять как выполняется настройка Shorewall мы рассмотрим небольшой пример настройки системы с одним IP адресом и одним внутренним сетевым интерфейсом. Мы разрешим доступ по SSH из внешнего интернета, а также запретим все остальное. Обратите внимание, что Shorewall будет установлен на компьютере, который будет выступать посредником между нашим ssh сервером и клиентом.

По умолчанию Shorewall не создает конфигурационных файлов в папке /etc/shorewall все они расположены в подкаталогах /usr:

  • /usr/share/doc/shorewall/examples/one-interface;
  • /usr/share/doc/shorewall/examples/two-interfaces;
  • /usr/share/doc/shorewall/examples/three-interfaces;
  • /usr/share/doc/shorewall/examples/Universal.

В нашем случае нам понадобятся конфигурационные файлы для одного интерфейса. Скопируем хи в нашу папку с настройками:

sudo cp /usr/share/doc/shorewall/examples/one-interface/* /etc/shorewall/

В этой инструкции мы будем использовать такие конфигурационные файлы:

  • zones - настройка зон;
  • interfaces - связь интерфейсов с зонами;
  • policy - настройка политик по умолчанию для зоны;
  • rules - настройка правил для подключений.

Теперь перейдем ближе к настройке. Нам нужно разрешить доступ по SSH для узла 192.168.1.81 к нашему серверу 192.168.1.162. Сначала нам нужно узнать имя сетевого интерфейса. Для этого используйте ifconfig:

sudo ifconfig

Затем создадим новую зону для локального трафика под названием loc. Синтаксис этого конфигурационного файла очень прост:

имя_зоны тип_зоны

Имя зоны может быть произвольным, а тип один из: ipv4, ipsec, firewall, bpost, loopback. В большинстве случаев достаточно ipv4. Откройте конфигурационный файл /etc/shorewall/zones и добавьте такие две строчки:

sudo vi /etc/shorewall/zones

net ipv4
loc ipv4

Откройте конфигурационный файл /etc/shorewall/interfaces и свяжите новую зону с интерфейсом:

sudo vi /etc/shorewall/interfaces

loc enp0s3

Далее нам нужно настроить политики по умолчанию. Синтаксис файла политик немного сложнее:

зона_источник зона_назначения действие уровень_логирования

В качестве действия могут использоваться ACCEPT, DROP, REJECT. Разрешим трафик из внешнего интернета для нашей зоны loc (ACCEPT) и запретим все остальное (REJECT).

sudo vi /etc/shorewall/policy

loc net ACCEPT
all all REJECT info

Последняя строка запрещает все действия для всех зон. Осталось настроить правила, которые разрешат доступ к нашей машине по ssh. Правила создаются не сложнее политик, только здесь больше настроек. Синтаксис файла правил такой:

действие зона_источник зона_цель протокол порт

Правила могут выполнять различные задачи, например, разрешать или запрещать пакеты, или даже менять ip адреса. Вот основные действия:

  • ACCEPT - разрешить;
  • CONMARK - пометить пакет;
  • DNAT - преобразовать пакет для передачи на другой компьютер или порт;
  • DROP - игнорировать пакет;
  • LOG - логировать пакет;
  • REJECT - отбросить пакет и сообщить об этом отправителю.

Мы хотим обеспечить доступ подключения от 192.168.1.162 к 192.168.1.81. Для этого нужно добавить несколько строк в /etc/shorewall/rules. Настройка правил Shorewall будет выглядеть так:

sudo vi /etc/shorewall/rules

SSH(ACCEPT) loc:192.168.1.162 $FW tcp ssh
DNAT loc:192.168.1.162 loc:192.168.1.81 tcp ssh

Первая строка разрешает доступ для 192.168.1.162 к интерфейсу loc по ssh. Вторая строка используется для преобразования адресов. Если ее не добавить, то Shorewall не будет знать на какой ip адрес нужно направить этот запрос.

Все почти готово, сохраните все файлы и проверьте правильность конфигурации. Для проверки используется команда shorewall check. Если в конфигурации были допущены ошибки, то вы о них узнаете:

sudo shorewall check

Если ошибок не было найдено, запустите такую команду для очистки старой конфигурации:

sudo shorewall clear

Затем перезапустите Shorewall:

sudo shorewall restart

Теперь вы можете попробовать подключиться к настроенному SSH, все должно работать.

Выводы

В этой статье мы рассмотрели как выполняется настройка Shorewall. Конечно, мы смогли охватить только самые основы, но главное что вы смогли понять как работает программа и дальше сможете в ней разобраться с помощью дополнительной документации. Работать с программой действительно намного проще, чем в iptables. Если у вас остались вопросы, спрашивайте в комментариях!

2 комментария

  1. Адмирал Ясен *** Февраль 8, 2017 Ответить
  2. Maks Февраль 8, 2017 Ответить

Ответить

Сообщить об опечатке

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