В качестве брандмауэра на ОС Linux чаще всего используют iptables. Однако работать с ним достаточно неудобно, поэтому были придуманы инструменты облегчающие эту задачу. Одним из таких средств является Shorewall.
В качестве примера установим Shorewall на Centos 7.3 и закроем все входящие соединения из сети интернет к серверу кроме порта 22 (SSH).
Установим shorewall используя yum или apt в зависимости от Вашей ОС.
Redhat/Centos
yum install shorewall
Debian/Ubuntu
apt-get install shorewall
Далее можно настраивать shorewall.
Все настройки shorewall находятся в папке /etc/shorewall.
В нашем случае нам необходимы следующие файлы
- interfaces — сетевые интерфейсы;
- zones — это выделенные области для управления - обычно одна зона - один интерфейс, но некоторые интерфейсы могут быть разбиты на зоны;
- policy — политики по умолчанию для зоны;
- rules — подробные описания правил.
Определим какие у нас в системе сетевые интерфейсы. Используем команду ip a показывающую сетевые интерфейсы системы и их статус. В данном случае мы видим, что интерфейс ethernet всего один (eth0).
ip a 1: lo:mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: mtu 1500 qdisc mq state UP qlen 1000 link/ether 00:50:56:01:1c:16 brd ff:ff:ff:ff:ff:ff inet 78.140.223.170/24 brd 78.140.223.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::250:56ff:fe01:1c16/64 scope link valid_lft forever preferred_lft forever
Откроем файл /etc/shorewall/zones и внесем туда запись о нашей зоне в формате <имя зоны> <тип> где нужный нам тип ipv4 - сеть по протоколу ip версии 4, firewall - этот компьютер:
fw firewall inet ipv4
Теперь в файле /etc/shorewall/interfaces пропишем связь зоны с физическим интерфейсом в виде <имя зоны и zones> <имя физического интерфейса>.
inet eth0
Теперь настроим /etc/shorewall/policy - действия по умолчанию в формате <зона-источник> <зона-получатель> <действие> <уровень логирования>
inet fw DROP info fw inet ACCEPT info all all DROP
all означает все зоны.
Политики могут быть следующие:
- ACCEPT — разрешить;
- CONMARK — пометить пакет;
- DNAT — преобразовать пакет для передачи на другой компьютер или порт;
- DROP — игнорировать пакет;
- LOG — логировать пакет;
- REJECT — отбросить пакет и сообщить об этом отправителю.
Осталось настроить только сами правила /etc/shorewall/rules. Формат правил такой: <Действие><Зона-источник><зона-приемник><протокол><порт назначения><порт источника> То есть в нашем случае:
ACCEPT inet fw tcp 22 ACCEPT fw inet icmp
Предварительно проверяем файлы конфигурации командой shorewall check
shorewall check Checking using Shorewall 5.1.10.2... Processing /etc/shorewall/params ... Processing /etc/shorewall/shorewall.conf... Loading Modules... Checking /etc/shorewall/zones... Checking /etc/shorewall/interfaces... Determining Hosts in Zones... Locating Action Files... Checking /etc/shorewall/policy... Running /etc/shorewall/initdone... Checking TCP Flags filtering... Checking Kernel Route Filtering... Checking Martian Logging... Checking MAC Filtration -- Phase 1... Checking /etc/shorewall/rules... Checking /etc/shorewall/conntrack... Checking MAC Filtration -- Phase 2... Applying Policies... Shorewall configuration verified
Если ошибок нет, то для включения автозапуска вносим в файл /etc/shorewall/shorewall.conf следующие строки:
STARTUP_ENABLED=Yes
После этого запускает его командой shorewall start.
Для проверки попробуем подключиться к этому компьютеру используя порт отличный от 22, например используя telnet (порт 23) и получим ошибку.
telnet 78.140.223.170 Подключение к 78.140.223.170...Не удалось открыть подключение к этому узлу, на порт 23: Сбой подключения
На этом установка и настройка Shorewall окончена. В нашей базе знаний вы найдёте ещё множество статей посвящённых различным аспектам работы в Linux, а если вы ищете надежный виртуальный сервер под управлением Linux, обратите внимания на нашу услугу — Аренда виртуального сервера на базе Linux.