Minimal firewall for end user

Минимальный firewall для конечного пользователя

Исходить будем из того, что хост конечного пользователя, как правило, всегда лишь инициирует сетевые соединения (например, когда в браузере открывается некоторая WEB-страница), но, при этом, такой хост никак не должен обслуживать входящие соединения — то есть, не является ни сервером, ни роутером.

Схематично это можно представить так: исходящие запросы — разрешены, входящие — запрещены. Естественно, что на исходящий запрос, должен поступить ответ, но большинство современных пакетных фильтров умеют самостоятельно распознавать ответный трафик, не путая его с попытками установить новое соединение снаружи, причем, неважно — TCP это, или UDP, или даже просто ping — ICMP.

Версия для Linux

— netfilter, который, массово и неправильно зовется, конечно же iptables — по имени управляющей утилиты

iptables -P INPUT DROP
iptables -A INPUT -j ACCEPT -i lo
iptables -A INPUT -j ACCEPT -m state --state RELATED,ESTABLISHED

Версия для Pf

— который есть во всех BSD-системах, в Mac OS, и даже с какого-то времени в Solaris™

block all
pass out all
pass in on lo0

Выглядит достаточно просто, не так ли(?)… однако —

Что это построение может нам дать?

  • Мы можем обратить внимание, что во-1-х, с такими настройками firewall’а не будет работать автоконфигурация адреса IPv6, а во-2-х, возможно не заработает и DHCP для IPv4.
  • Примечательным является то, что требуется отдельно разрешить входящий трафик на интерфейсе обратной петлиlo0, при том, что, казалось бы, он должен автоматически допускаться — ведь исходящий трафик разрешен на всех интерфейсах, и отдельного правила для eth0 не требуется.
  • Мы можем заметить, что приведенная Linux-версия, использует вызовы утилиты iptables, для добавления правил, в то время, как Pf-версия состоит только из правил самого firewall’а.