Андрей Смирнов
Время чтения: ~19 мин.
Просмотров: 14

Изучаем firewalld: простой и мощный файрвол для Linux на замену iptables

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

Что такое iptables

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

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

sudo apt-get install iptables

Существуют и графические инструменты-альтернативы iptables, например Firestarter, но и работа в командной строке не является очень уж сложной. Однако следует соблюдать особенную осторожность при настройке iptables через удаленное ssh-соединение, поскольку одна неверная команда может заблокировать возможность подключения к удаленному серверу — придется каким-то образом вносить изменения в настройки машины физически получив к ней доступ.

Типы правил

Существует три типа правил iptables — input, forward и output.

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

Forward — Правила этого типа используются для обработки входящих сообщений, конечный пункт назначения которых не является текущим сервером. К примеру, в случае маршрутизатора, к нему подключаются многие пользователи и приложения, но данные не посылаются на сам маршрутизатор, они лишь передаются ему, чтобы он мог перенаправить их адресату. Если вы не занимаетесь настройкой маршрутизации или NAT, то правила этого типа использовать в работе не будете.

Output — Такие цепочки используются для исходящих соединений. К прмиеру, если пользователь пытается отправинг запрос ping к сайту 1cloud.ru, iptables изучит цепочку правил, чтобы понять, что нужно делать в случае ping и этого сайт, и только потом разрешит или запретит соединение.

Важный момент

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

Поведение по умолчанию

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

Увидеть текущие настройки iptables по умолчанию можно с помощью команды iptables –L:

1.jpg

В данном случае мы также использовали команду grep, чтобы получить более четкий вывод. Как показано на скриншоте, все три цепочки по умолчанию разрешают прием трафика. Чаще всего такое поведение более предпочтительно. Если вы ничего не меняли в правилах, то так оно и должно быть по умолчанию. Если же что-то менялось, а теперь нужно вернуть прежние настройки, то сделать это можно с помощью таких команд:

iptables --policy INPUT ACCEPT iptables --policy OUTPUT ACCEPT iptables --policy FORWARD ACCEPT

Предварительно разрешил весь трафик, затем уже можно запрещать соединения с определенных IP-адресов и на определенные порты.

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

iptables --policy INPUT DROP iptables --policy OUTPUT DROP iptables --policy FORWARD DROP

Действия с соединениями

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

  • Accept — разрешить соединение;
  • Drop — игнорировать соединение, вести себя так, будто его никогда не было. Действие подходит для случаев, когда нужно сделать так, чтобы источник запроса не узнал о его блокировке.
  • Reject — заблокировать соединение и отправить в ответ сообщение об ошибке. Действие подходит для тех случаев, когда владелец сервера хочет дать понять, что соединение заблокировано файрволом.

Вот так выглядит ответ на пинг в каждом из трех случаев

Соединение разрешено:

2.jpg

Соединение проигнорировано:

3.jpg

Соединение отклонено:

4.jpg

Разрешаем и блокируем конкретные соединения

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

Мы будем использовать комманду iptables –A, чтобы добавлять правила к существующим цепочкам. Iptables будет начинать с начала списка и проходить по всем правилам, пока не найдет совпадение. Если нужно поместить какое-то правило перед уже имеющимся, то можно использовать команду iptables -I [цепочка] [номер], чтобы указать номер позиции в списке, которую должно занять новое правило.

Соединения с одного IP-адреса

Правило ниже позволяет заблокировать все соединения с IP-адреса 10.10.10.10:

iptables -A INPUT -s 10.10.10.10 -j DROP

Соединения с диапазона адресов

Правило ниже позволяет заблокировать соединения из диапазона IP-адресов 10.10.10.0/24. Для указания диапазона адресов можно использовать стандартную запись маски подсети через слэш или описывать ее в полном варианте:

iptables -A INPUT -s 10.10.10.0/24 -j DROP

или

iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP

Соединения на конкретный порт

Ниже показано, как заблокировать SSH-соединения с хоста 10.10.10.10:

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP

Вместо SSH можно указать любой протокол или номер порта. Часть кода –p tcp говорит iptables о типе соединения, которое использует протокол. Если вы блокировали протокол, который использует UDP вместо TCP, то тогда нужно было бы написать –p udp.

Вот так можно заблокировать SSH-соединения с любого IP-адреса.

iptables -A INPUT -p tcp --dport ssh -j DROP

Состояния соединений

Как сказано выше, многие протоколы требуют двусторонних коммуникаций. Например, если нужно разрешить соединения по SSH, то добавить правила надо будет и в цепочку input и в цепочку output. Но что, если нужно только разрешить доступ только входящим соединениям? Разрешит ли добавление правила в цепочку output и исходящие SSH-соединения?

Для таких случаев используются состояния соединений. Они позволяют описывать двусторонние коммуникации, в которых разрешается установка только соединений определенной направленности. В примере ниже разрешены SSH-соединения, поступающие от хоста 10.10.10.10, но SSH-соединения к этому хосту запрещены. Однако, системе разрешается отправка информации по SSH в случае уже установленной сессии, что делает возможной SSH-коммуникацию между хостами:

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT

Сохранение изменений

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

Ubuntu:

=sudo /sbin/iptables-save

Red Hat / CentOS:

=/sbin/service iptables save

Или

=/etc/init.d/iptables save

Другие команды

Вывод уже сконфигурированных правил iptables:

iptables –L

Добавление ключа –v позволит просматривать информацию по пакетам и байтам, добавление –n выведет информацию в цифровом формате — имена хостов, протоколы и сети будут описаны цифрами.

 

Для удаления всех сконфигурированных правил можно использовать такую команду:

iptables –F

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

Для управления возможностями брандмауэра используется одноимённая команда — ufw. Давайте сначала рассмотрим её опции и параметры, а потом перейдём к настройке. Синтаксис команды такой:

$ ufwопциидействиепараметры

Опции определяют общие настройки поведения утилиты, действие указывает, что нужно сделать, а параметры — дополнительные сведения для действия, например, IP-адрес или номер порта.

Сначала разберём опции утилиты:

  • —version — вывести версию брандмауэра;
  • —dry-run — тестовый запуск, никакие реальные действия не выполняются.

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

  • enable — включить фаерволл и добавить его в автозагрузку;
  • disable — отключить фаерволл и удалить его из автозагрузки;
  • reload — перезагрузить файервол;
  • default — задать политику по умолчанию, доступно allow, deny и reject, а также три вида трафика — incoming, outgoing или routed;
  • logging — включить журналирование или изменить уровень подробности;
  • reset — сбросить все настройки до состояния по умолчанию;
  • status — посмотреть состояние фаервола;
  • show — посмотреть один из отчётов о работе;
  • allow — добавить разрешающее правило;
  • deny — добавить запрещающее правило;
  • reject — добавить отбрасывающее правило;
  • limit — добавить лимитирующее правило;
  • delete — удалить правило;
  • insert — вставить правило.

Это были все опции и команды, которые вы можете использовать в ufw. Как видите, их намного меньше, чем в iptables и всё выглядит намного проще, а теперь давайте рассмотрим несколько примеров настройки.

Сначала нужно отметить, что в серверной версии Ubuntu UFW по умолчанию включён, а в версии для рабочего стола он отключён. Поэтому сначала смотрим состояние фаервола:

Snimok-ekrana-ot-2019-01-09-09-21-03-1024x576.png

Если он не включён, то его необходимо включить:

Snimok-ekrana-ot-2019-01-09-09-21-18-1024x576.png

Затем вы можете снова посмотреть состояние:

Snimok-ekrana-ot-2019-01-09-09-56-59-1024x576.png

Обратите внимание, что если вы работаете по SSH, то перед тем, как включать брандмауэр, нужно добавить правило, разрешающее работу по SSH, иначе у вас не будет доступа к серверу. Подождите с включением до пункта 3.

Перед тем, как мы перейдём к добавлению правил, необходимо указать политику по умолчанию. Какие действия будут применяться к пакетам, если они не подпадают под созданные правила ufw. Все входящие пакеты будем отклонять:

Snimok-ekrana-ot-2019-01-09-10-40-09-1024x576.png

А все исходящие разрешим:

Чтобы создать разрешающее правило, используется команда allow. Вместо allow могут использоваться и запрещающие правила ufw — deny и reject. Они отличаются тем, что для deny компьютер отсылает отправителю пакет с уведомлением об ошибке, а для reject просто отбрасывает пакет и ничего не отсылает. Для добавления правил можно использовать простой синтаксис:

$ ufwallowимя_службы$ ufwallowпорт$ ufwallowпорт/протокол

Например, чтобы открыть порт ufw для SSH, можно добавить одно из этих правил:

Первое и второе правила разрешают входящие и исходящие подключения к порту 22 для любого протокола, третье правило разрешает входящие и исходящие подключения для порта 22 только по протоколу tcp.

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

Snimok-ekrana-ot-2019-01-09-10-09-15-1024x576.png

Можно также указать направление следования трафика с помощью слов out для исходящего и in для входящего.

$ ufwallowнаправлениепорт

Например, разрешим только исходящий трафик на порт 80, а входящий запретим:

Snimok-ekrana-ot-2019-01-09-10-11-04-1024x576.png

Также можно использовать более полный синтаксис добавления правил:

$ ufwallow protoпротоколfromip_источникаtoip_назначенияportпорт_назначения

В качестве ip_источника может использоваться также и адрес подсети. Например, разрешим доступ со всех IP-адресов для интерфейса eth0 по протоколу tcp к нашему IP-адресу и порту 3318:

Snimok-ekrana-ot-2019-01-09-11-00-52-1024x576.png

С помощью правил limit можно ограничить количество подключений к определённому порту с одного IP-адреса, это может быть полезно для защиты от атак перебора паролей. По умолчанию подключения блокируются, если пользователь пытается создать шесть и больше подключений за 30 секунд:

К сожалению, настроить время и количество запросов можно только через iptables.

Посмотреть состояние и действующие на данный момент правила можно командой status:

Snimok-ekrana-ot-2019-01-09-09-56-59-1024x576.png

Чтобы получить более подробную информацию, используйте параметр verbose:

Snimok-ekrana-ot-2019-01-09-09-57-16-1024x576.png

С помощью команды show можно посмотреть разные отчеты:

  • raw — все активные правила в формате iptables;
  • builtins — правила, добавленные по умолчанию;
  • before-rules — правила, которые выполняются перед принятием пакета;
  • user-rules — правила, добавленные пользователем;
  • after-rules — правила, которые выполняются после принятия пакета;
  • logging-rules — правила логгирования пакетов;
  • listening — отображает все прослушиваемые порты и правила для них;
  • added — недавно добавленные правила;

Например, посмотрим список всех правил iptables:

Snimok-ekrana-ot-2019-01-09-09-59-15-1024x576.png

Посмотрим все прослушиваемые порты:

Snimok-ekrana-ot-2019-01-09-10-02-59-1024x576.png

Или недавно добавленные правила:

Чтобы удалить правило ufw, используется команда delete. Например, удалим ранее созданные правила для порта 80:

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

Также этой командой можно изменить уровень логгирования:

  • low — минимальный, только заблокированные пакеты;
  • medium — средний, заблокированные и разрешённые пакеты;
  • high — высокий.

Лог сохраняется в папке /var/log/ufw. Каждая строчка лога имеет такой синтаксис:

[UFW действие] IN=интерфейс OUT=итерфейс SRC=ip_источника DST=ip_назначения LEN=размер_пакета TOS=0x10 PREC=0x00 TTL=64 ID=728 DF PROTO=протокол SPT=порт_источника DPT=порт назначения LEN=размер_пакета

В качестве действия приводится то, что UFW сделал с пакетом, например ALLOW, BLOCK или AUDIT. Благодаря анализу лога настройка UFW Ubuntu станет гораздо проще.

Если вы хотите полностью отключить UFW, для этого достаточно использовать команду disable:

Также, если вы что-то испортили в настройках и не знаете как исправить, можно использовать команду reset для сброса настроек до состояния по умолчанию:

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

Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.

Руководство по Ubuntu Server » Безопасность

<-назад | далее->

Firewall

Введение

Ядро линукс включает подсистему Netfilter (сетевой фильтр), который используется для манипулирования или решения судьбы сетевого трафика передаваемого в или через ваш сервер. Все современные решения линукс по сетевой защите используют эту систему пакетной фильтрации.

Система пакетной фильтрации на уровне ядра была бы малоиспользуема администраторами без пользовательского интерфейса для ее управления. Для этого предназначен iptables. Когда пакет попадает на ваш сервер, он передается подсистеме Netfilter для одобрения, изменения или отказа на основе правил, которые она получает от интерфейса пользователя через iptables. Таким образом iptables — это все, что вам нужно для управления вашей сетевой защитой, если вы хорошо с ним знакомы, однако множество внешних интерфейсов доступны для упрощения этой задачи.

ufw — простой Firewall

Инструмент для настройки сетевой защиты Ubuntu по умолчанию — это ufw. Он разработан для легкой настройки iptables и предоставляет дружественный способ создания сетевой защиты для IPv4 и IPv6.

По умолчанию изначально ufw выключен. Со страницы man руководства ufw:

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

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

1. Для начала требуется разрешить ufw. Наберите в терминале:

sudo ufw enable

2. Открыть порт (в данном примере SSH):

sudo ufw allow 22

3. Правила могут быть добавлены с использованием нумерованного формата:

sudo ufw insert 1 allow 80

4. Подобным образом можно закрыть открытый порт:

sudo ufw deny 22

5. Для удаления правила используйте delete:

sudo ufw delete deny 22

6. Также можно разрешить доступ к порту с определенных компьютеров или сетей. Следующий пример разрешает на этом компьютере доступ по SSH с адреса 192.168.0.2 на любой IP адрес:

sudo ufw allow proto tcp from 192.168.0.2 to any port 22

Замените 192.168.0.2 на 192.168.0.0/24 чтобы разрешить доступ по SSH для всей подсети.

7. Добавление опции –dry-run команде ufw выведет список правил, но не применит их. Например, далее показано, что было бы применено, если открыть HTTP порт:

sudo ufw --dry-run allow http
*filter :ufw-user-input - [0:0] :ufw-user-output - [0:0] :ufw-user-forward - [0:0] :ufw-user-limit - [0:0] :ufw-user-limit-accept - [0:0] ### RULES ###  ### tuple ### allow tcp 80 0.0.0.0/0 any 0.0.0.0/0 -A ufw-user-input -p tcp --dport 80 -j ACCEPT  ### END RULES ### -A ufw-user-input -j RETURN -A ufw-user-output -j RETURN -A ufw-user-forward -j RETURN -A ufw-user-limit -m limit --limit 3/minute -j LOG --log-prefix "[UFW LIMIT]: " -A ufw-user-limit -j REJECT -A ufw-user-limit-accept -j ACCEPT COMMIT Rules updated

8. ufw можно выключить командой:

sudo ufw disable

9. Чтобы посмотреть статус сетевой защиты:

sudo ufw status

10. Для более полного отображения информации введите:

sudo ufw status verbose

11. Для отображения в виде формата numbered:

sudo ufw status numbered

Если порт, который вы хотите открыть или закрыть определен в файле /etc/services, вы можете использовать имя порта вместо его номера. В приведенных выше примерах можете заменить 22 на ssh.

Это лишь краткое описание использования ufw. Пожалуйста обратитесь к странице man ufw для более подробной информации.

Интеграция Приложений в ufw

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

1. Чтобы посмотреть для каких приложений установлен профиль введите следующую команду в терминале:

sudo ufw app list

2. Аналогично, разрешить трафик по порту, используя профиль приложения, можно следующей командой:

sudo ufw allow Samba

3. Также доступен расширенный синтаксис:

ufw allow from 192.168.0.0/24 to any app Samba

Замените Samba и 192.168.0.0/24 на используемый вами профиль приложения и IP диапазон вашей сети.

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

4. Для просмотра деталей какие порты, протоколы и пр. определены для приложения введите:

sudo ufw app info Samba

Не для всех приложений, которые требуют открытие сетевого порта, поставляется профиль ufw, но если у вас есть профиль для приложения, и вы хотите чтобы этот файл был включен в пакет приложения, зарегистрируйте ошибку о пакете на сайте Launchpad.

ubuntu-bug nameofpackage

Маскировка IP

Цель маскировки ip-адреса состоит в том, чтобы компьютеры с частными, немаршрутизируемыми ip-адресами в вашей сети могли иметь доступ к Интернету через компьютер выполняющий маскировку. Трафик из вашей частной сети попадающий в Интернет должен быть правильно выпущен для корректного ответа, отправленного именно тому компьютеру, который послал запрос. Чтобы сделать это, ядро модифицирует заголовок каждого пакета так, чтобы ответ приходил нужному компьютеру, а не частному ip-адресу, который послал запрос, что невозможно в рамках сети Интернет. Линукс использует Трассировку Соединений (conntrack) для трассировки каждого из соединений принадлежащих соответствующим компьютерам и перенаправляет каждый возвращенный пакет. Трафик, покидает вашу частную сеть «маскируясь» таким образом, будто исходит от вашего шлюза Ubuntu. Этот процесс обозначен в документации Microsoft как Internet Connection Sharing (Общий доступ к Интернет-Соединению).

Маскировка ufw

Маскировка ip-адреса может быть достигнута с использованием различных правил ufw. Это возможно благодаря дополнению к ufw, которым является iptables-restore с файлами правил, расположенных в /etc/ufw/*.rules. Эти файлы являются отличным способом для добавления правил в iptables без использования ufw, а также правил, которые более гибко взаимодействуют со шлюзом или соединением типа «мост».

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

1. Во-первых, в ufw должно быть активировано перенаправление. Для этого нужно изменить конфигурацию двух файлов, в /etc/default/ufw измените DEFAULT_FORWARD_POLICY на “ACCEPT”:

DEFAULT_FORWARD_POLICY="ACCEPT"

Затем отредактируйте /etc/ufw/sysctl.conf следующим образом:

net/ipv4/ip_forward=1

Аналогично для IPv6:

net/ipv6/conf/default/forwarding=1

2. Теперь добавим правила в файл /etc/ufw/before.rules. Правила по умолчанию описаны лишь в таблице filter, а для работы маскировки нам нужно отредактировать таблицу nat. Добавьте следующие строки в начало файла конфигурации сразу после заголовка с комментарием:

# nat Table rules *nat :POSTROUTING ACCEPT [0:0]  # Forward traffic from eth1 through eth0. -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE  # don't delete the 'COMMIT' line or these nat table rules won't be processed COMMIT

Комментарии не обязательны, но считается хорошим тоном документировать свою конфигурацию. Также при изменении каких-либо rules файлов в каталоге /etc/ufw, убедитесь, что данные строки являются последними для каждой измененной таблицы:

# don't delete the 'COMMIT' line or these rules won't be processed COMMIT

Для каждой таблицы обязательно присутствие соответствующего ей оператора COMMIT (применение изменений). В данных примерах показаны только таблицы nat и filter, но вы можете также добавлять правила для таблиц raw и mangle.

В примерах выше замените eth0, eth1 и 192.168.0.0/24 на соответствующие интерфейсы и IP диапазон вашей сети.

3. Наконец, выключите и повторно включите ufw для применения изменений:

sudo ufw disable && sudo ufw enable

IP маскировка теперь должна быть включена. Вы также можете добавить дополнительные правила FORWARD в /etc/ufw/before.rules. Рекомендуется чтобы эти дополнительные правила были добавлены в цепочку/секцию (chain) ufw-before-forward.

Маскировка iptables

Iptables также может быть использован для маскировки соединений.

1. Подобно ufw, первым делом нам необходимо включить форвардинг для IPv4 отредактировав следующий файл /etc/sysctl.conf и убрав комментарий со строки:

net.ipv4.ip_forward=1

Если вы хотите включить форвардинг для IPv6 также удалите комментарий:

net.ipv6.conf.default.forwarding=1

2. Далее выполните команду sysctl для применения новых настроек в файле конфигурации:

sudo sysctl -p

3. Теперь настройка маскировки ip-адреса может быть завершена с выполнением лишь одной команды, которая может немного отличатся в зависимости от вашей конфигурации сети:

sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE

После выполнения этой команды можно считать, что ваша частная сеть имеет адрес 192.168.0.0/16, а сетевая карта с выходом в Интернет — ppp0. Синтаксис определен следующим образом:

1. -t nat – правило применяется к таблице nat

2. -A POSTROUTING – правило добавлено (-A) в цепочку POSTROUTING

3. -s 192.168.0.0/16 – правило применено к трафику, исходящему из этого адресного пространства

4. -o ppp0 – правило применено к трафику, который необходимо перенаправить через этот интерфейс

5. -j MASQUERADE – трафик подпадающий под это правило выполняет «прыжок» («jump») (-j) в цепочку MASQUERADE для дальнейшей манипуляции с ним как описаны выше

4. Также каждая цепочка таблицы filter (цепочка, где происходит фильтрация большинства пакетов) по умолчанию имеет правило ACCEPT, но если вы настраиваете ваш firewall с целью создания шлюза, вы должны выбрать либо политику DROP либо REJECT, в этом случае ваш «замаскированный» трафик должен быть пропущен через цепочку FORWARD для срабатывания предыдущих правил:

sudo iptables -A FORWARD -s 192.168.0.0/16 -o ppp0 -j ACCEPT sudo iptables -A FORWARD -d 192.168.0.0/16 -m state  --state ESTABLISHED,RELATED -i ppp0 -j ACCEPT

Вышеперечисленные команды разрешают форвардинг всех соединений из локальной сети в Интернет, а весь трафик относящийся к этим соединениям возвращается к компьютерам, пославшим запрос.

Если вы хотите, чтобы маскировка работала после перезагрузки ПК, отредактируйте файл /etc/rc.local и добавьте туде вышеперечисленные команды. Например, добавьте первую команду без опций фильтрации:

iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE

Журналы

Журналы firewall крайне необходимы для обнаружения атак, возникающих проблем с правилами, а также обнаружения повышенной активности в вашей сети. В настройках firewall необходимо включить журналирование для правил, которое должно быть указано перед списком правил (правил, которые решают дальнейшую судьбу пакета, такие как ACCEPT, DROP или REJECT).

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

sudo ufw logging on

Чтобы выключить журналирование в ufw просто замените значение on на off.

Для iptables введите:

sudo iptables -A INPUT -m state --state NEW -p tcp --dport 80  -j LOG --log-prefix "NEW_HTTP_CONN: "

В этом случае в начале поступит запрос на порт 80 от компьютера в локальной сети, затем будет сгенерирован файл журнала в dmesg который выгдлядит примерно так (одна строка разделена на три для корректного отображения на экране):

[4304885.870000] NEW_HTTP_CONN: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.0.0.1 DST=127.0.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=58288 DF PROTO=TCP SPT=53981 DPT=80 WINDOW=32767 RES=0x00 SYN URGP=0

Этот текст журнала также появится в файле /var/log/messages, /var/log/syslog и /var/log/kern.log. Эти настройки можно изменить отредактировав файл /etc/syslog.conf аналогично или при установке и настройке ulogd, а также используя ULOG вместо LOG. Демон ulogd это пользовательский сервер который слушает инструкции ядра для дальнейшего журналирования, в частности для firewall, и может вести журналирование даже в PostgreSQL или MySQL базы данных. Для того, чтобы легко разобраться в файлах журнала можно использовать их анализаторы, такие как logwatch, fwanalog, fwlogwatch или lire.

Другие инструменты

Существует множество утилит для помощи в построении полноценного firewall без углубленных навыков в iptables.

Для работы с интерфейсом:

1. fwbuilder очень мощная утилита, которая настраивается подобно проприетарным продуктам вроде Checkpoint FireWall-1.

Если вы предпочитаете утилиты с поддержкой командной строки и списком файлов конфигураций:

2. Shorewall — мощное решение, которое поможет вам создать серьезный firewall для любого типа вашей сети.

Ссылки

1. Вики страница Ubuntu Firewall содержит необходимую информацию о работе над ufw.

2. Также посмотрите man страницу ufw, которая содержит много полезной информации: man ufw.

3. Для более подробной информации об использовании iptables смотрите packet-filtering-HOWTO.

4. Руководство nat-HOWTO содержит полное описание о маскировке соединений.

5. IPTables HowTo Ubuntu Вики также отличный источник.

<-назад | далее->

Используемые источники:

  • https://1cloud.ru/help/linux/nastrojka_linus-firewall_iptables
  • https://losst.ru/nastrojka-ufw-ubuntu
  • https://help.ubuntu.ru/wiki/руководство_по_ubuntu_server/безопасность/firewall

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации