Ядро Linux включает подсистему Netfilter, которая используется для регулирования сетевого траффика, входящего на или проходящего через вашу систему. Все современные средства межсетевой защиты Linux используют эту систему для фильтрации пакетов.
Система фильтрации пакетов ядра была бы малопригодной для администраторов без пользовательского интерфейса управления ею. Для этого предназначено приложение iptables. Когда пакет достигает вашего сервера, он передается подсистеме Netfilter для приема, обработки или отклонения, в зависимости от правил, передаваемых ей из рабочего пространства пользователя с помощью iptables. Таким образом, если вы хорошо знакомы с iptables - это все, что вам необходимо для управления межсетевым экраном. Однако, существует множество программ предоставляющих интерфейс для упрощения этой задачи.
Назначение IP маскировки в том, чтобы позволить машинам в вашей сети с частными, не маршрутизируемыми IP-адресами, иметь доступ в Интернет через машину, осуществляющую маскировку. Трафик из вашей сети, предназначенный для Интернета, должен быть обработан так, чтобы ответы могли вернуться обратно на машину, которая организовала запрос. Чтобы это сделать, ядро должно изменить IP-адрес источника в каждом пакете так, чтобы ответы возвращались на сервер, а не на частный IP-адрес (что невозможно в Интернете), с которого сделан запрос. Linux использует Connection Tracking (conntrack) для хранения записи о том, каким машинам принадлежат соединения, и перенаправляет каждый возвращенный пакет соответствующим образом. Таким образом, трафик, покидающий вашу сеть, "замаскирован", как будто исходит от машины, которая выполняет роль шлюза. В документации Microsoft этот процесс упоминается как технология Internet Connection Sharing.
Этого можно достичь с помощью простого правила в iptables, которое может слегка варьироваться в зависимости от настроек вашей сети:
sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE
В команде, приведенной выше, предполагается, что вы используете закрытое адресное пространство 192.168.0.0/16, а подключение к Интернет обеспечено через устройство ppp0. Данный синтаксис может быть объяснен так:
- -t nat -- правило, для обращения к таблице NAT
- -A POSTROUTING -- правило, добавлямое (-A) к цепочке POSTROUTING
- -s 192.168.0.0/16 -- правило применяется для трафика, происходящего из обозначенного адресного пространства
- -o ppp0 -- правило применяется к трафику, который планируется направить через определенное сетевое устройство
- -j MASQUERADE -- трафик попадающий под данное правило должен быть перенаправлен "jump" (-j) с маскировкой (MASQUERADE) для обработки, как описано выше
Любая цепочка правил в таблице фильтрации (это основная таблица, где происходит обработка большинства пакетов) имеет в качестве политики (policy) по умолчанию правило ACCEPT (принимать), но если вы создаете межсетевой экран в дополнение к устройству шлюза, вы можете настроить политики на использование правил 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
Эти команды разрешают все соединения из вашей локальной сети в Интернет, а также позволяют всему трафику, относящемуся к этим соединениям, возвращаться на машины их инициировавшие.
Есть большое количество программ, которые помогут вам полностью настроить брандмауэр без необходимости подробного изучения iptables. У тех, кто предпочитает графические оболочки, довольно популярно простое в использовании приложение Firestarter, а также fwbuilder - очень мощный инструмент настройки, который покажется знакомым администраторам, пользовавшимся коммерческими брандмауэрами типа Checkpoint FireWall-1. Для предпочитающих работу в командной строке и простые текстовые файлы настроек, Shorewall - подходящее и мощное решение, которое поможет настроить межсетевой экран любой сложности для любой сети. Если же ваша сеть достаточно простая, или у вас вообще нет локальной сети, утилита ipkungfu предоставит вам работающий "из коробки" (без необходимости настпройки) брандмауэр, а также даст возможность легко настроить более сложный межсетевой экран с помощью редактирования простых и хорошо документированных файлов настроек. Еще одна интересная программа - fireflier, которая разработана как межсетевой экран для настольного ПК. Она состоит из сервера (fireflier-server) и графического клиента на ваш выбор (GTK или QT). Во время работы она ведет себя похоже на многие интерактивные брандмауэры для Windows.
Сообщения в журнале брандмаура необходимы для определения атак, поиска проблем в правилах, а также для определения необычной активности в вашей сети. Чтобы активировать журналирование вам необходимо включить соответствующие правила в конфигурацию вашего межсетевого экрана, более того, эти правила должны быть заданы ранее всех применяемых завершающих правил (это правила с целью, которая определяет дальнейшую судьбу пакета, такие как ACCEPT, DROP или REJECT). Например,
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 - это сервер пользовательского рабочего пространства, который ожидает от ядра инструкций для записи в журнал, специфичных для брандмауэров, и может сохранять их в любой файл на ваш вкус, и даже в базу данных PostgreSQL или MySQL. Разобраться в журнале брандмауэра может помочь использование утилит анализа журналов событий, таких как fwanalog, fwlogwatch, или lire.