Файервол для Linux с простым интерфейсом
Файервол представляет из себя bash-скрипт, который интегрирует с помощью соответствующих пакетов следующие функции:
Файервол (пакет iptables).
Учёт трафика внешнего и внутреннего (пакет iptables).
Прокси-сервер для локальных сетей (пакет Squid).
Контент-фильтр для локальных сетей (пакет DansGuardian).
DNS-сервер для локальных сетей (пакет BIND).
Скрипт является результатом многолетней работы и претендует на универсальность - он позволяет использовать Linux-машину в качестве Интернет-шлюза как для небольшого офиса, так и для большого предприятия (на данный момент он используется на пяти предприятиях и в одном удалённом офисе - везде стоит CentOS).
Скрипт требует для своей работы наличие как минимум двух сетевых интерфейсов - один из которых является внешним, а остальные считаются внутренними. Внешний интерфейс задаётся переменной EXTIF и определяется автоматически, если эта переменная не задана.
Ещё одно требование - все интерфейсы должны иметь статические адреса, т.е. интерфейсы могут получать их динамически, но адреса должны быть всегда одними и теми же. Это требование вытекает из того, что в правилах iptables используются IP-адреса интерфейсов. Правила генерируются и применяются на основе файла конфигурации fwtraf.conf по команде "fwtraf fwnormal" и сохраняются по команде "fwtraf fwsave". Т.е. если IP-адреса интерфейсов изменились, нужно будет опять применить правила (и сохранить их, если нужно чтобы они действовали после перезагрузки).
Режим работы source NAT:
выкл. (SNAT="")
вкл. (SNAT="YES")
Режим работы web-прокси:
выкл. (WEBPROXY="")
Squid (WEBPROXY="SQUID").
DansGuardian->Squid (WEBPROXY="DGSQUID")
Скрипт поддерживает несколько локальных сетей (переменная LANS) - они перечисляются через пробел:
LANS="192.168.0.0/24 10.0.0.0/8"
Также поддерживаются удалённые локальные сети - например, локальные сети офисов, подключенные по технологиям VPN (переменная REMOTE_LANS):
REMOTE_LANS="192.168.1.0/24 192.168.3.0/24 192.168.5.0/24"
Скрипт имеет простой конфигурационный файл:
В нём указаны статические IP-адреса и имена компьютеров пользователей, которым:
разрешаются (команда a - сокращение от "allow")
запрещаются (команда d - сокращение от "deny")
порты (колонка PORTS):
один или несколько TCP-портов через запятую: web,ftp.
все TCP-порты кроме, например, smtp: !smtp.
все TCP и UDP-порты: all.
Если используется контент-фильтр (WEBPROXY="DGSQUID") и пользователю разрешаются web-порты, то к нему применяется группа web-доступа (колонка WA - сокращение от "Web Access").
Очень просто делается проброс портов (destination NAT) с внешнего интерфейса на внутренние IP-адреса локальных сетей. Это удобно, когда на шлюзе включен SNAT и локальные сети из Интернет недоступны. Например, разрешим админу с его компьютера доступ к Интернет (web и ftp-трафик) и ещё разрешим ему подключаться из Интернет по RDP на внешний IP-адрес шлюза, а шлюз будет перенаправлять rdp-трафик на его компьютер:
a 192.168.1.240 pc30 0 web,ftp,rdp-rdp # Админ
Ещё замечу, что пробрасываемые порты не обязаны совпадать - можно, например, слушать порт 2525 на внешнем IP, а пробрасывать его на 25-й порт почтового сервера, находящегося внутри локальной сети:
a 192.168.1.2 mail 0 2525-25 # Почтовый сервер
Скрипт также ежедневно создает html-отчеты о трафике и ежечасно их обновляет:
И ещё небольшой бонус - после установки файервола в ежедневных отчетах Logwatch будут появляться записи об IP-адресах, превышающих лимиты подключений CONN_LIMIT. Таким образом, вы всегда будете в курсе, кто проявляет к вашему серверу повышенный интерес:
--------------------- iptables firewall Begin ------------------------ Logged 24 packets on interface eth0 From 10.7.57.22 - 21 packets to tcp(110) From 10.16.63.206 - 3 packets to tcp(110) Logged 5367 packets on interface eth1 From 72.53.179.125 - 5297 packets to tcp(110) From 193.255.130.19 - 2 packets to tcp(25) From 217.175.23.3 - 68 packets to tcp(25) ---------------------- iptables firewall End -------------------------
Установка
1. Скачиваем архив и распаковываем его командой:
tar xzf fwtraf.tgz && cd fwtraf
2. Помещаем скрипт в /bin/:
mv fwtraf /bin/ && chmod 755 /bin/fwtraf
3. Помещаем conf-файл в /etc/fwtraf/:
mkdir /etc/fwtraf && mv fwtraf.conf /etc/fwtraf/
4. Помещаем cron-файл в /etc/cron.d/:
mv fwtraf.cron /etc/cron.d/
5. Выключаем сервис iptables и добавляем инициализацию файервола при каждой загрузке:
chkconfig iptables off
chkconfig ip6tables off
echo>>/etc/rc.d/rc.local /bin/fwtraf fwinit
6. Читаем файл /etc/fwtraf/fwtraf.conf и редактируем его в соответствии со своими потребностями.
7. После редактирования fwtraf.conf применяем правила файервола:
fwtraf fwnormal - нормальный (рабочий) режим.
8. Проверяем работу файервола, и если всё устраивает, сохраняем правила:
fwtraf fwsave - все правила сохраняются и действуют после перезагрузки.
Существует режим с минимальным набором правил:
fwtraf fwsimple - простой режим, персональные правила не действуют, всё разрешено.
Остальные команды можно узнать так:
fwtraf - справка по командам.
Для включения поддержки работы с BIND (внимание: будут презаписываться DNS-зоны!) нужно раскомментировать строку c "DNSROOTDIR=..." в /bin/fwtraf.