Pull to refresh

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

Configuring Linux *System administration **nix *
Файервол представляет из себя 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»

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





В нём указаны статические 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  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. Скачиваем скрипт файервола и помещаем его в /bin/:
    wget  --no-check-certificate  sites.google.com/site/smkuzmin/home/fwtraf/fwtraf  -O  fwtraf
    mv  fwtraf  /bin/
    chmod  755  /bin/fwtraf

2. Скачиваем файл конфигурации файервола и помещаем его в /etc/fwtraf/:
    wget  --no-check-certificate  sites.google.com/site/smkuzmin/home/fwtraf/fwtraf.conf  -O  fwtraf.conf
    mkdir  /etc/fwtraf
    mv  fwtraf.conf  /etc/fwtraf/

3. Скачиваем файл для планировщика задач Cron и помещаем его в /etc/cron.d/:
    wget  --no-check-certificate  sites.google.com/site/smkuzmin/home/fwtraf/fwtraf.cron  -O  fwtraf.cron
    mv  fwtraf.cron  /etc/cron.d/

4. Выключаем сервис iptables и добавляем инициализацию файервола при каждой загрузке:
    chkconfig iptables off
    chkconfig ip6tables off
    echo>>/etc/rc.d/rc.local  
/bin/fwtraf  fwinit
5. Читаем файл /etc/fwtraf/fwtraf.conf и редактируем его в соответствии со
    своими потребностями.

6.  После редактирования fwtraf.conf применяем правила файервола:
    fwtraf  fwnormal 
— нормальный (рабочий) режим.
7. Проверяем работу файервола, и если всё устраивает, сохраняем правила:
    fwtraf  fwsave все правила сохраняются и действуют после перезагрузки.

Существует режим с минимальным набором правил:
    fwtraf  fwsimple  — простой режим, персональные правила не действуют, всё разрешено.

Остальные команды можно узнать так:
    fwtraf  — справка по командам.

Для включения поддержки работы с BIND (внимание: будут презаписываться DNS-зоны!) нужно раскомментировать строку c "DNSROOTDIR=..." в /bin/fwtraf.

Tags:
Hubs:
Total votes 56: ↑48 and ↓8 +40
Views 20K
Comments 35
Comments Comments 35

Posts