Файервол для Linux с простым интерфейсом

Файервол представляет из себя bash-скрипт, который интегрирует с помощью соответствующих пакетов следующие функции:

Скрипт является результатом многолетней работы и претендует на универсальность - он позволяет использовать Linux-машину в качестве Интернет-шлюза как для небольшого офиса, так и для большого предприятия (на данный момент он используется на пяти предприятиях и в одном удалённом офисе - везде стоит CentOS).

Скрипт требует для своей работы наличие как минимум двух сетевых интерфейсов - один из которых является внешним, а остальные считаются внутренними. Внешний интерфейс задаётся переменной EXTIF и определяется автоматически, если эта переменная не задана.

Ещё одно требование - все интерфейсы должны иметь статические адреса, т.е. интерфейсы могут получать их динамически, но адреса должны быть всегда одними и теми же. Это требование вытекает из того, что в правилах iptables используются IP-адреса интерфейсов. Правила генерируются и применяются на основе файла конфигурации fwtraf.conf по команде "fwtraf fwnormal" и сохраняются по команде "fwtraf fwsave". Т.е. если IP-адреса интерфейсов изменились, нужно будет опять применить правила (и сохранить их, если нужно чтобы они действовали после перезагрузки).

Режим работы source NAT:

Режим работы web-прокси:

Скрипт поддерживает несколько локальных сетей (переменная 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-адреса и имена компьютеров пользователей, которым:

порты (колонка PORTS):

Если используется контент-фильтр (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.