Все знают 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
Теперь программа полностью готова к работе. Далее мы более подробно рассмотрим как ее использовать.
Настройка 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
Откройте конфигурационный файл /etc/shorewall/interfaces и свяжите новую зону с интерфейсом:
sudo vi /etc/shorewall/interfaces
Далее нам нужно настроить политики по умолчанию. Синтаксис файла политик немного сложнее:
зона_источник зона_назначения действие уровень_логирования
В качестве действия могут использоваться ACCEPT, DROP, REJECT. Разрешим трафик из внешнего интернета для нашей зоны loc (ACCEPT) и запретим все остальное (REJECT).
sudo vi /etc/shorewall/policy
Последняя строка запрещает все действия для всех зон. Осталось настроить правила, которые разрешат доступ к нашей машине по 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
Первая строка разрешает доступ для 192.168.1.162 к интерфейсу loc по ssh. Вторая строка используется для преобразования адресов. Если ее не добавить, то Shorewall не будет знать на какой ip адрес нужно направить этот запрос.
Все почти готово, сохраните все файлы и проверьте правильность конфигурации. Для проверки используется команда shorewall check. Если в конфигурации были допущены ошибки, то вы о них узнаете:
sudo shorewall check
Если ошибок не было найдено, запустите такую команду для очистки старой конфигурации:
sudo shorewall clear
Затем перезапустите Shorewall:
sudo shorewall restart
Теперь вы можете попробовать подключиться к настроенному SSH, все должно работать.
Выводы
В этой статье мы рассмотрели как выполняется настройка Shorewall. Конечно, мы смогли охватить только самые основы, но главное что вы смогли понять как работает программа и дальше сможете в ней разобраться с помощью дополнительной документации. Работать с программой действительно намного проще, чем в iptables. Если у вас остались вопросы, спрашивайте в комментариях!
мне кажется, что UFW всеже попроще будет, там даже ГУИ есть для десктопов. Хотя наверное, дело вкуса.
- Зоны - это основная единица управления сетями в sorewall
- $ sudo apt install fhorewall
шо ж вы его так не любите?