Файервол представляет из себя bash-скрипт, который интегрирует с помощью соответствующих пакетов следующие функции:
- Файервол внешний и внутренний (пакет iptables).
- Учёт трафика внешнего и внутреннего (пакет iptables).
- Прокси-сервер для локальных сетей (пакет Squid).
- Контент-фильтр для локальных сетей (пакет DansGuardian).
- DNS-сервер для локальных сетей (пакет BIND).
Скрипт является результатом многолетней работы и претендует на универсальность — он позволяет использовать Linux-машину в качестве Интернет-шлюза как для небольшого офиса, так и для большого предприятия (на данный момент он используется на пяти предприятиях и в одном удалённом офисе — везде стоит CentOS).
Скрипт требует для своей работы наличие как минимум двух сетевых интерфейсов — один из которых является внешним, а остальные считаются внутренними. Внешний интерфейс задаётся переменной EXTIF и определяется автоматически, если эта переменная не задана.
Ещё одно требование — все интерфейсы должны иметь статические адреса, т.е. интерфейсы могут получать их динамически, но адреса должны быть всегда одними и теми же. Это требование вытекает из того, что в правилах iptables используются IP-адреса интерфейсов. Правила генерируются и применяются на основе файла конфигурации fwtraf.conf по команде "fwtraf fwnormal" и сохраняются по команде "fwtraf fwsave". Т.е. если IP-адреса интерфейсов изменились, нужно будет опять применить правила (и сохранить их, если нужно чтобы они действовали после перезагрузки).
Режимы работы source NAT и web-прокси можно комбинировать:
- source NAT: выкл. (SNAT="")
- source NAT: вкл. (SNAT=«YES»).
- web-прокси: выкл. (WEBPROXY="")
- web-прокси: Squid (WEBPROXY=«SQUID»).
- web-прокси: 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").
Очень просто делается так называемый проброс портов внешнего интерфейса на внутренние IP-адреса локальных сетей (destination NAT). Это удобно, когда на шлюзе включен режим SNAT и локальные сети из Интернет недоступны. Например, разрешим админу с его компьютера доступ к Интернет (web и ftp-трафик) и ещё разрешим ему подключаться из Интернет по RDP на внешний IP-адрес шлюза, а шлюз будет перенаправлять rdp-трафик на его компьютер:
a 192.168.1.240 pc30 web,ftp,rdp-rdp # Админ
Ещё замечу, что пробрасываемые порты не обязаны совпадать — можно, например, слушать порт 2525 на внешнем IP, а пробрасывать его на 25-й порт почтового сервера, находящегося внутри локальной сети:
a 192.168.1.2 mail 2525-25 # Почтовый сервер
Скрипт также ежедневно создает html-отчеты о трафике и ежечасно их обновляет:
Установка
1. Скачиваем скрипт файервола и помещаем его в /bin/:
wget dl.dropbox.com/u/924293/fwtraf/fwtraf
mv fwtraf /bin/
chmod 755 /bin/fwtraf
2. Скачиваем файл конфигурации файервола и помещаем его в /etc/fwtraf/:
wget dl.dropbox.com/u/924293/fwtraf/fwtraf.conf
mkdir /etc/fwtraf
mv fwtraf.conf /etc/fwtraf/
3. Скачиваем файл для планировщика задач Cron и помещаем его в /etc/cron.d/:
wget dl.dropbox.com/u/924293/fwtraf/fwtraf.cron
mv fwtraf.cron /etc/cron.d/
4. Читаем файл /etc/fwtraf/fwtraf.conf и редактируем его в соответствии со своими
потребностями.
5. После редактирования fwtraf.conf применяем правила файервола:
fwtraf fwnormal - нормальный (рабочий) режим.
fwtraf fwsave - все правила сохраняются и действуют после перезагрузки.
Существует режим с минимальным набором правил:
fwtraf fwsimple - простой режим, персональные правила не действуют, всё разрешено.
Остальные команды можно узнать так:
fwtraf - справка по командам.
Для включения поддержки работы с BIND (внимание: будут презаписываться DNS-зоны!) нужно раскомментировать строку c "DNSROOTDIR=..." в /bin/fwtraf.
Автор: smkuzmin