Колонка редактора
Как это работает
Профессионал
Новости
Вопросы и ответы
Литература


Начальная страница
E-mail


Кто не спрятался, я не виноват!

Фильтрация пакетов, firewall и маскарадинг в Линуксе




Как его настроить

Ядро

Первым делом надо настроить ядро. Проверьте, есть ли у вас файл /proc/net/ip_fwchains. Если да, то ядро уже готово к работе с ipchains.

Если нет, то установите опции ядра

CONFIG_FIREWALL=y
CONFIG_IP_FIREWALL=y
Возможно, вам понадобятся и другие опции:
CONFIG_IP_FIREWALL_NETLINK=y
- позволяет направлять копии пакетов программам мониторинга для протоколирования, извещения администратора о попытках атак и т.п.
CONFIG_IP_ALWAYS_DEFRAG=y
- всегда дефрагментировать транзитные пакеты. Эта опция требуется для маскарадинга.
CONFIG_IP_TRANSPARENT_PROXY=y
- позволяет включить прозрачное проксирование
CONFIG_IP_MASQUERADE=y
- позволяет включить маскарадинг
CONFIG_IP_MASQUERADE_ICMP=y
- позволяет маскарадить ICMP-пакеты (т.е. у вас будут работать, например, ping и traceroute с машин с fake-адресами).

Затем перекомпилируйте ядро и запустите его. Если вы не знаете, как это делать, почитайте Kernel-HOWTO.

Если вы поменяли ядро с 2.0.x на 2.1.x или более новое и не хотите изучать ipchains, существует скрипт ipfwadm-wrapper, который позволяет использовать с ipchains параметры от ipfwadm. Он входит в набор ipchains-scripts: ftp://ftp.rustcorp.com/ipchains/ipchains-scripts-1.1.2.tar.gz или более свежий. Кроме того, в этот набор входят скрипты, позволяющие записать текущие настройки фильтра пакетов в файл, и наоборот, загрузить их из файла (ipchains-save и ipchains-restore).



Включение фильтрации пакетов

Чтобы фильтр пакетов начал работать, надо записать '1' в файл /proc/sys/net/ipv4/ip_forward:

echo 1 > /proc/sys/net/ipv4/ip_forward
Соответственно, если туда записать 0, то он работать перестанет. Эту строку рекомендуется вписать в какой-нибудь скрипт, автоматически запускаемый при загрузке системы.


Как работает фильтрация пакетов

Ядро запускается с тремя встроенными (built-in) цепочками (chains) правил (rules) фильтрации, которые называются входная (input), выходная (output) и пересылочная (forward). В дополнение к встроенным можно создавать новые цепочки правил.

Цепочки состоят из правил (rules). Каждое правило содержит условие и, возможно, действие (target), которое надо произвести с пакетом, если его заголовок соответствует условию. Если заголовок пакета не соответствует условию, то проверяется следующее правило в цепочке. Если заголовок пакета не удовлетворяет ни одному условию, используется политика (policy) самой цепочки. В защищенных системах эта политика обычно требует уничтожить или отвергнуть пакет.

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

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

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

Пакеты, сгенерированные локальными процессами и адресованные на локальный интерфейс (loopback, lo), проверяются по выходной цепочке с интерфейсом lo, а затем по входной цепочке также с интерфейсом lo. (Интерфейс, через который проходит пакет, может влиять на обработку его фильтром пакетов).

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

  • если пакет пришел извне или адресован на данную машину (или и то, и другое), то он проверяется по входной цепочке;
  • если пакет адресован на другую машину, или сгенерирован на данной машине, (или и то и другое), то он проверяется по выходной цепочке;
  • если пакет не был сгенерирован локальным процессом и не подвергался демаскарадингу, то он проверяется по пересылочной цепочке.
Побочные эффекты работы фильтра пакетов. Если пакет соответствует условию, то производятся следующие действия:
  1. Счетчик байт для данного правила увеличивается на размер пакета (включая заголовок).
  2. Счетчик пакетов для данного правила увеличивается на 1.
  3. Если правило того требует, то пакет записывается в журнал.
  4. Если правило того требует, то у пакета изменяется поле Тип Обслуживания (TOS, Type Of Service).
  5. Если правило того требует, то пакет маркируется (кроме ядер 2.0.x). Сие есть вещь сильно загадочная. Если она вас заинтересовала, читайте оригинальную документацию.
  6. Если в правиле указано действие (target), то оно производится.


<< Страница 1 Страница 3 >>