Мы — долго запрягаем, быстро ездим, и сильно тормозим.

FreeBSD
  настройка
  начальная настройка
  Установка FreeBSD
  DUMMYNET
  Сборка ядра
  IPFW
  обновление
  portsnap
  CP1251 на FreeBSD
  loader.conf
  defaults/rc.conf
  jail
  Ntpdate/Ntpd
  diskless
  Обновление мира ("world")
  PBR & PF
  bsnmpd
  newsyslog
  if_bridge
  make.conf
  PBR & IPFW
  Работа с HDD
  sshd & AD
  Удаленное разбиение HDD
  Заметки об IPFW
  FreeBSD на VDS
  CVSUP и софт через Proxy
  i386=>amd64
  ALTQ в IPFW
  Виртуальный свитч
  VPN сервер по средствам mpd5.
  NTP
  sysupdate
  mpd5 L2TP
  freebsd + webcamera
  IPFW policy (PBR)
  RAID1 via LAN
  зеркальный RAID1 на ОС FreeBSD
  4.x => 7.x
  portdowngrade
  Быстрое обновление портов
  ipfw nat
  Использование csup
  UTF-8 console
  dump/restore
  hast carp zfs ucarp cluster
  ng_nat
  Wi-FI роутер + DHCP + DNS
  backup/restore & ZFS
  Обновление ОС и портов через SVN.
  подсчёт трафика
  программы
  почтовые системы
  Шелезяки
  Мелочи
  Файловая система
  WWW
  Security
  system
  Games Servers
  X11
  Programming
Очумелые Ручки
OpenBSD
Cisco


www.lissyara.su —> статьи —> FreeBSD —> настройка —> if_bridge

Настройка DMZ при помощи if_bridge

Автор: dikens3.


Решил сделать Демилитаризованную зону (DMZ) при помощи if_bridge.
Для чего? Есть у меня 2 WEB-Сервера и 1 почтовый сервер. Все они находятся внутри локальной сети и в случае какого-либо взлома одного из них, кулхацкер получит доступ к локальному IP-Адресу. А там дело техники, как попасть на File-Server и стащить базу клиентов.
Что такое DMZ? Изолированный диапазон IP-Адресов. В моём случае будем его изолировать с помощью ipfw. Необходимо предоставить доступ пользователям к почте, WEB-Серверам, но никак не серверам к нашей сети, да и вообще куда либо соединяться.
Что имеем в наличии:
FreeBSD 5.5
Три интерфейса: rl0 – Инет, fxp0 – Лок. Сеть, fxp1 – DMZ
Выделенный диапазон адресов: 195.28.77.64/28 и шлюз по умолчанию 195.28.77.65

Присваиваем IP-Адреса:
rl0 – 195.28.77.66/29 (т.е. 195.28.77.65-195.28.77.70)
fxp0 - 192.168.10.0/24
fxp1 - 195.28.77.73/29
WEB-Server + он же почтовый - 195.28.77.76
Ещё 1 Web-Server - 195.28.77.77

rc.conf
defaultrouter="195.28.77.65"
hostname="Имя тут какое-нибудь"
ifconfig_rl0="inet 195.28.77.66  netmask 255.255.255.248"
ifconfig_fxp0="inet 192.168.10.1  netmask 255.255.255.0"
ifconfig_fxp1="inet 195.28.77.73  netmask 255.255.255.248"
cloned_interfaces="bridge0"
ifconfig_bridge0="addm rl0 addm fxp1 up"
gateway_enable="YES"
firewall_enable="YES"
firewall_script="/etc/myfirewall"

Тут отдельный прикол возник, после перезагрузки мост не поднялся.
Интерфейс появился, но находился в down'е
Вобщем пришлось прописать up для него и поместить
настройки моста после настроек интерфейсов.

sysctl.conf
#Для фильтрации пакетов на интерфейсах
net.link.bridge.pfil_member=1
#Для фильтрации пакетов на созданнном интерфейсе bridge0 (1- вкл. 0 - выкл.)
net.link.bridge.pfil_bridge=0

Добавляем в ядро, пересобираем и перезагружаемся.
device if_bridge

Проверяем, появился ли интерфейс:
# ifconfig
rl0: flags=18943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST,POLLING> mtu 1500
        options=48<VLAN_MTU,POLLING>
        inet 195.28.77.66 netmask 0xfffffff8 broadcast 195.28.77.71
        ether 00:c1:28:00:f1:35
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
fxp0: flags=18843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,POLLING> mtu 1500
        options=48<VLAN_MTU,POLLING>
        inet 192.168.10.1 netmask 0xffffff00 broadcast 192.168.10.255
        ether 00:a0:c9:93:87:ca
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
fxp1: flags=18943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST,POLLING> mtu 1500
        options=48<VLAN_MTU,POLLING>
        inet 195.28.77.73 netmask 0xfffffff8 broadcast 195.28.77.79
        ether 00:d0:43:7a:ca:ea
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
        inet 127.0.0.1 netmask 0xff000000
bridge0: flags=8043<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
        ether ac:de:48:2d:1a:dd
        priority 32768 hellotime 2 fwddelay 15 maxage 20
        member: fxp1 flags=3<LEARNING,DISCOVER>
        member: rl0 flags=3<LEARNING,DISCOVER>

А теперь напишем правила для ipfw, natd использоваться не будет, смысла нет:
/etc/myfirewall

#!/bin/sh -
# Настройки для DMZ
ifdmz="fxp1"
dmz_web_mail_server="195.28.77.76"
dmz_oldweb_server="195.28.77.77"
#
ifout="rl0"
iflan="fxp0"
mylan="192.168.10.0/24"
allowgoodhosts="195.28.84.160/32"
mydns="IP-Адреса DNS серверов"

# 1 таблица, таких ip в инете нет.
fwtable="/sbin/ipfw table"
${fwtable} 1 f
NETS=" 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 0.0.0.0/8 169.254.0.0/16 \
       192.0.2.0/24 224.0.0.0/4 240.0.0.0/4 "
for lan in ${NETS}
    do
        ${fwtable} 1 add $lan
    done

fwcmd="/sbin/ipfw -q"
${fwcmd} -f flush

# Переходы для DMZ, порядок строк имеет значение (Шлюз, наша сеть, инет)
# Исходящий траффик со шлюза в DMZ (DMZ. интерфейс исходящий)
        ${fwcmd} add skipto 27000 all from me \
        to ${dmz_web_mail_server},${dmz_oldweb_server} out via ${ifdmz}
# Входящий траффик с DMZ на шлюз (DMZ. интерфейс входящий)
        ${fwcmd} add skipto 28000 all from ${dmz_web_mail_server},\
                        ${dmz_oldweb_server} to me in via ${ifdmz}
# Входящий траффик на DMZ с нашей сети (Lan. интерфейс входящий)
        ${fwcmd} add skipto 25000 all from ${mylan} \
        to ${dmz_web_mail_server},${dmz_oldweb_server} in via ${iflan}
# Разрешаем исходящие пакеты принятые на интерфейсе iflan, обработанные файрволом,
# и выходящие с интерфейса ifdmz
        ${fwcmd} add pass all from ${mylan} to ${dmz_web_mail_server}, \
                 ${dmz_oldweb_server} out recv ${iflan} xmit ${ifdmz}
# Исходящий траффик с DMZ в нашу сеть (DMZ. интерфейс входящий)
        ${fwcmd} add skipto 26000 all from ${dmz_web_mail_server}, \
                 ${dmz_oldweb_server} to ${mylan} in via ${ifdmz}
# Разрешаем исходящие пакеты принятые на интерфейсе ifdmz, обработанные файрволом,
# и выходящие с интерфейса iflan
        ${fwcmd} add pass all from ${dmz_web_mail_server}, \
                 ${dmz_oldweb_server} to ${mylan} out recv ${ifdmz} xmit ${iflan}

# DMZ для в(c) инет(а)
# Входящий траффик на DMZ с инета (ifout - входящий интерфейс)
        ${fwcmd} add skipto 29000 all from any \
        to ${dmz_web_mail_server},${dmz_oldweb_server} in via ${ifout}
# Разрешаем исходящие пакеты принятые на интерфейсе ifout, обработанные файрволом,
# и выходящие с интерфейса ifdmz
        ${fwcmd} add pass all from any to \
        ${dmz_web_mail_server},${dmz_oldweb_server} out recv ${ifout} xmit ${ifdmz}
# Исходящий траффик с DMZ в инет (DMZ - входящий интерфейс)
        ${fwcmd} add skipto 31000 all from ${dmz_web_mail_server}, \
                 ${dmz_oldweb_server} to any in via ${ifdmz}
# Разрешаем исходящие пакеты принятые на интерфейсе ifdmz, обработанные файрволом,
# и выходящие с интерфейса ifout
        ${fwcmd} add pass all from ${dmz_web_mail_server}, \
                 ${dmz_oldweb_server} to any out recv ${ifdmz} xmit ${ifout}

#################################################################################
# Входящий траффик на DMZ с нашей сети (Lan. интерфейс входящий)
# Пропускаем траффик, с уже установленным соединением
        ${fwcmd} add 25000 pass tcp from ${mylan} \
        to ${dmz_web_mail_server},${dmz_oldweb_server} in via ${iflan} established
# Разрешаем установку соединения на 21,22,25,80,110,995 порты наших серверов в DMZ
        ${fwcmd} add pass tcp from ${mylan} 1024-65535 \
        to ${dmz_web_mail_server},${dmz_oldweb_server} 21,22,25,80,110,995 \
        in via ${iflan} setup
# Пропускаем ICMP-только нужные
        ${fwcmd} add pass icmp from ${mylan} \
        to ${dmz_web_mail_server},${dmz_oldweb_server} in via ${iflan} icmptype 8
# Разрешённые UDP
#       ${fwcmd} add pass udp from ${mylan} \
#       to ${dmz_web_mail_server},${dmz_oldweb_server} in via ${iflan}
# Всё остальное убиваем и пишем в log
        ${fwcmd} add deny log all from any to any

# Исходящий траффик с DMZ в нашу сеть (DMZ. интерфейс входящий)
# Пропускаем траффик, с уже установленным соединением
   ${fwcmd} add 26000 pass tcp from ${dmz_web_mail_server},${dmz_oldweb_server} \
        to ${mylan} in via ${ifdmz} established
# Выпускаем ICMP-только нужные
        ${fwcmd} add pass icmp from ${dmz_web_mail_server},${dmz_oldweb_server} \
        to ${mylan} in via ${ifdmz} icmptype 0
# Разрешённые UDP
#       ${fwcmd} add pass udp from ${mylan} \
#       to ${dmz_web_mail_server},${dmz_oldweb_server} in via ${ifdmz}
# Всё остальное убиваем и пишем в log
        ${fwcmd} add deny log all from any to any

#################################################################################
# Исходящий траффик со шлюза в DMZ (DMZ. интерфейс исходящий)
# Все соединения разрешены
        ${fwcmd} add 27000 pass tcp from me 
        to ${dmz_web_mail_server},${dmz_oldweb_server} out via ${ifdmz}
# Выпускаем ICMP со шлюза на DMZ
        ${fwcmd} add pass icmp from me \
        to ${dmz_web_mail_server},${dmz_oldweb_server} \
        out via ${ifdmz} icmptype 0,3,4,8,11
# Разрешаем шлюзу отвечать по 123 порту (время)
        ${fwcmd} add  pass udp from me 123 \
        to ${dmz_web_mail_server},${dmz_oldweb_server} 123 out via ${ifdmz}
# Всё остальное убиваем и пишем в log
        ${fwcmd} add deny log all from any to any

# Входящий траффик с DMZ на шлюз (DMZ. интерфейс входящий)
# Пропускаем траффик на шлюз, с уже установленным соединением
   ${fwcmd} add 28000 pass tcp from ${dmz_web_mail_server},\
            ${dmz_oldweb_server} to me in via ${ifdmz} established
# Выпускаем ответы ICMP на шлюз, и возможность пинговать шлюз
        ${fwcmd} add pass icmp from ${dmz_web_mail_server},${dmz_oldweb_server} \
        to me in via ${ifdmz} icmptype 0,8
# Разрешаем сверять время с нашим шлюзом, он сервером времени работает
    ${fwcmd} add  pass udp from ${dmz_web_mail_server},${dmz_oldweb_server} 123 \
        to me 123 in via ${ifdmz}
# Всё остальное убиваем и пишем в log
        ${fwcmd} add deny log all from any to any

##################################################################################
# Входящий траффик на DMZ с инета (ifout - входящий интерфейс)
# Пропускаем траффик, с уже установленным соединением
        ${fwcmd} add 29000 pass tcp from any \
        to ${dmz_web_mail_server},${dmz_oldweb_server} in via ${ifout} established
# Разрешаем установку соединения на 80 порт наших почтовых серверов
        ${fwcmd} add pass tcp from any 1024-65535 \
        to ${dmz_web_mail_server},${dmz_oldweb_server} 80 in via ${ifout} setup
# Разрешаем установку соединения на 25 порт нашего почтового сервера
        ${fwcmd} add pass tcp from any 1024-65535 \
        to ${dmz_web_mail_server} 25 in via ${ifout} setup limit dst-port 100
# Разрешаем ДНС, вписаны статические DNS Адреса
        ${fwcmd} add pass udp from ${mydns} 53 \
        to ${dmz_web_mail_server},${dmz_oldweb_server} 1024-65535 in via ${ifout}
# Для TraceRoute
        ${fwcmd} add unreach port udp from any \
        to ${dmz_web_mail_server},${dmz_oldweb_server} 33435-33524 in via ${ifout}
# Разрешаем SSH, для некоторых внешних IP-Адресов.
# (Из дома к примеру можно будет подключаться)
#       ${fwcmd} add pass tcp from ${allowgoodhosts} 1024-65535 \
#       to ${dmz_web_mail_server},${dmz_oldweb_server} 22 in via ${ifout} setup
# Пропускаем ICMP, ответы на ping, возможность пинговать DMZ.
        ${fwcmd} add pass icmp from any \
        to ${dmz_web_mail_server},${dmz_oldweb_server} \
        in via ${ifout} icmptype 0,3,4,8,11
# Всё остальное убиваем и пишем в log
        ${fwcmd} add deny log all from any to any

# Исходящий траффик с DMZ в инет (DMZ - входящий интерфейс)
# Пропускаем траффик, с уже установленным соединением
   ${fwcmd} add 31000 pass tcp from ${dmz_web_mail_server},${dmz_oldweb_server} \
        to any in via ${ifdmz} established
# Прибиваем ненужный трафик
   ${fwcmd} add deny log all from ${dmz_web_mail_server},${dmz_oldweb_server} \
        to table\(1\) in via ${ifdmz}
# Разрешаем серверам обращаться к внешним ДНС, вписаны статические DNS Адреса
   ${fwcmd} add pass udp from ${dmz_web_mail_server}, \
            ${dmz_oldweb_server} 1024-65535 to ${mydns} 53 in via ${ifdmz}
# Разрешаем TraceRoute
        ${fwcmd} add pass udp from ${dmz_web_mail_server}, \
                 ${dmz_oldweb_server} to any 33435-33524 in via ${ifdmz}
# Разрешаем установку соединения на 25 порты внешних серверов
# для нашего почтового сервера
        ${fwcmd} add pass tcp from ${dmz_web_mail_server} 1024-65535 \
        to any 25 in via ${ifdmz}
# Пропускаем ICMP, ответы на ping, возможность самим пинговать IP-Адреса в инете.
        ${fwcmd} add pass icmp from ${dmz_web_mail_server},${dmz_oldweb_server} \
        to any in via ${ifdmz} icmptype 0,8
# Разрешаем серверам отвечать на запросы к 22 порту,
# для некоторых внешних IP-Адресов.
# Данное правило не будет работать так как 31000 правилом пакет уже будет принят.
# Оставлено для понимания, что можно,
# и лучше указывать откуда и куда должен идти пакет.
# Т.е. с 22 порта на 1024-65535
#       ${fwcmd} add pass tcp from ${dmz_web_mail_server},${dmz_oldweb_server} \
#       22 to ${allowgoodhosts} 1024-65535 in via ${ifdmz} established
# Всё остальное убиваем и пишем в log
        ${fwcmd} add deny log all from any to any

Ну вот и всё, всё работает, все ходят куда позволено.
В данной конфигурации сервера в DMZ не могут ничего скачать
(обновить порты к примеру).
С одной стороны нужно, с другой, если кто-либо вам зальёт на WEB-SERVER
WEB-PROXY, то радостного здесь будет мало.

P.S. Все IP-Адреса вымышленные и не имеют ничего общего с реальными. :-)



размещено: 2006-12-27,
последнее обновление: 2007-03-05,
автор: dikens3


100kg, 2006-12-28 в 0:51:30

если можно конечно конкретнее про сам бридж!! обясни строки из рс.конф:
cloned_interfaces="bridge0"
ifconfig_bridge0="addm rl0 addm fxp1"
ifconfig_bridge0="up"
gateway_enable="YES"

Maxim, 2006-12-28 в 16:17:12

Почему решено DMZ бриджевать а не роутить??? Или это просто для примера???

dikens3, 2006-12-28 в 16:58:41

Для вопросов есть форум граждане.

Для Maxim
Что первое под руку попалось.
Если есть что сказать, добро пожаловать на форум.

Михаил, 2007-10-11 в 21:40:47

Если вместо всего этого в настройках фарвола будет стоять any to any будет все это работать
имеется ввиду марщрутизация не слетит

Михаил, 2007-10-11 в 21:44:32

Я имею ввиду ограничится созданием DMZ пакеты с локалки будут идти как в интернет так и в ДМЗ
Прошу прощения если это надо было спросить на форуме
Я начинающий
Подскажите плиз
У меня сетка сейчас - сетевых интерфейса
Настраиваю третий в интернет выхода нет
пропадает
А вобще спасибо за статьи очень интерестные
Многое тут почерпнул

Corwin, 2009-04-16 в 9:49:46

Хорошо бы ещё сделать привязку IP к MAC :)

vvs, 2009-09-18 в 10:16:07

2 Михаил

> Я начинающий

кроме того - такой безграмотный и такой ленивый! Фу, блин!


Оставьте свой комментарий:
Ваше имя:   *
e-mail:  
жирный
наклонный
подчёркнутый
ссылка
цвет
Нынешний год:   *
 


Хостинг HOST-FOOD

2014-07-27, lissyara
gmirror

Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9

Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту

Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis

Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
подписка

    вверх      
Статистика сайта
Сейчас на сайте находится: 13 чел.
За последние 30 мин было: 50 человек
За сегодня было
3863 показов,
579 уникальных IP
 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0639 секунд
Из них PHP: 47%; SQL: 53%; Число SQL-запросов: 77 шт.
Исходный размер: 134230; Сжатая: 20653