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

в 13:21, , рубрики: bash, iptables, linux, системное администрирование, учет трафика, фаервол, файервол, метки: , , , ,

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

  1. Файервол внешний и внутренний (пакет iptables).
  2. Учёт трафика внешнего и внутреннего (пакет iptables).
  3. Прокси-сервер для локальных сетей (пакет Squid).
  4. Контент-фильтр для локальных сетей (пакет DansGuardian).
  5. 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»

Скрипт имеет простой конфигурационный файл:

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

В нём указаны статические 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-отчеты о трафике и ежечасно их обновляет:

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

Установка

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

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js