Вторник, 05.08.2025, 16:52

Блог Владимира Степанова

Реклама
Статистика
Яндекс.Метрика
Онлайн всего: 1
Гостей: 1
Пользователей: 0
Меню
Категории раздела
FreeBSD OpenBSD [1]
Установка [4]
Настройка [21]
WWW [1]
Мелочи [1]
Файловая система [0]
Вход на сайт
Реклама
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Главная » Статьи » Unix системы » Настройка

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

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


    Решил сделать Демилитаризованную зону (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

    Категория: Настройка | Добавил: Raxxell5059 (22.12.2010)
    Просмотров: 1372 | Рейтинг: 0.0/0
    Всего комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]