antiCisco blogs


блоги по технологиям и оборудованию cisco от инструкторов

Опубликовано 19 Март , 2010

Едем дальше. Попробуем добавить безопасности.

Первым делом, что хочется сделать, это построить правильный межсетевой экран с сохранением сессий (stateful inspection) и учетом сложных протоколов (advanced protocol handling).

Посмотрим, что vyatta умеет делать с точки зрения фильтрации трафика, а сложные протоколы рассмотрим позже.

Все глобальные параметры межсетевого экранирования собраны в режиме

edit firewall

Все функции фильтрации, которые можно применить для конкретного интерфейса, собраны в настройке

edit firewall name {ИМЯ}

Там можно фильтровать как по МАС-адресам (фильтр на канальном уровне), так и по IP и TCP/UDP портам (статические списки доступа).

Для начала описываем действие, которое мы хотим сделать с пакетом
[edit firewall name {ИМЯ}]
set rule {RULENUMBER} action {accept|drop|reject|inspect}

RULENUMBER — всего лишь номер правила в списке. Просматриваем сверху вниз. В конце любого фильтра всегда стоит невидимое «запретить все».

Рекомендация: когда создаете правила, лучше оставлять запас для последующей вставки правил. Например, указывать номера 10,20,30 и т.д.

drop – уничтожить пакет тихо
reject – сбросить ТСР-сессию с reset(насколько я понял)
inspect – отправить на анализ системе IPS

Важно: указание слова inspect не подразумевает последующего прохождения трафика, если IPS не доступен. Т.е. если отправить весь трафик на анализ и больше никаких правил в правиле МСЭ не описать, то при применении на интерфейс все будет заблокировано!

Если же дополнительно указывать состояние сессии (new, established, related) то можно явно описать и динамические правила.
[edit firewall name {ИМЯ} rule {#}]
set state {new|established|related|invalid}

new – инициирование сессии. Имеются ввиду протоколы, у которых есть порты (TCP и UDP).
established – пропускаем только пакеты по установленным сессиям. Будьте внимательны: относится тоже и к TCP и к UDP, хотя как вы знаете, понятие «установленная сессия» в классике относится только к TCР к пакетам, где есть флаг ACK или RST. Однако здесь разработчики и для UDP заложили (и это очень хорошо) понятие «установленная» — это означает, что был пакет в противоположном направлении по этой сессии, а мы видим ответ.
related – пожалуй, самое интересное. Это ключевое слово означает, что vyatta откроет сессию, которая требуется для работы сложного протокола, которому требуется открывать динамические сессии (ftp, h.323, sip и т.д.). Параметры этой связанной сессии согласовываются в рамках служебной сессии, чье установление идёт по известным портам.
invalid – vyatta не может определить состояние этой сессии

Для нашей задачи (отгородиться от внешнего мира) вполне сгодится такое простое правило МСЭ: будем снаружи пропускать только те пакеты TCP и UDP, которые мы запрашивали изнутри, а также ICMP-ответы (echo-repy, unreachable).
[edit]
edit firewall name FROMOUT rule 10
[edit firewall name FROMOUT rule 10]
set action accept
[edit firewall name FROMOUT rule 10]
set source address 0.0.0.0/0
[edit firewall name FROMOUT rule 10]
set destination address 10.4.4.0/24
[edit firewall name FROMOUT rule 10]
set protocol tcp
[edit firewall name FROMOUT rule 10]
set state established enable
[edit firewall name FROMOUT rule 10]
commit
[edit firewall name FROMOUT rule 10]
exit
[edit]
edit firewall name FROMOUT rule 20
[edit firewall name FROMOUT rule 20]
set action accept
[edit firewall name FROMOUT rule 20]
set source address 0.0.0.0/0
[edit firewall name FROMOUT rule 20]
set destination address 10.4.4.0/24
[edit firewall name FROMOUT rule 20]
set protocol udp
[edit firewall name FROMOUT rule 20]
set state established enable
[edit firewall name FROMOUT rule 20]
commit

Важно: здесь вскрывается одна важнейшая деталь: правило МСЭ отрабатывает до правила NAT если мы идём наружу, но для обратных пакетов, когда мы идём внутрь, все наоборот: сначала производится обратная трансляция, и только после этого применяется правило МСЭ! Как видите, в правилах я указал в качестве destination свою частную сеть 10.4.4.0/24, а не глобальный адрес внешнего интерфейса. Это очень важный момент. У маршрутизаторов cisco, например, сначала отрабатывают правила МСЭ, и только потом NAT

Добавим icmp. Коды icmp – 0 для ответов (echo-reply), 3 – для недоступных. Можно выбрать все, а можно по конкретным типам (самые нужные: 1, 3 и 4). К сожалению, это надо описывать в разных правилах отдельно. В примере – только code 0 и code 3 type 1

[edit firewall name FROMOUT rule 30]
set action accept
[edit firewall name FROMOUT rule 30]
set source address 0.0.0.0/0
[edit firewall name FROMOUT rule 30]
set destination address 10.4.4.0/24
[edit firewall name FROMOUT rule 30]
set protocol icmp
[edit firewall name FROMOUT rule 30]
Set icmp code 0
[edit firewall name FROMOUT rule 30]
exit
[edit]
edit firewall name FROMOUT rule 40
[edit firewall name FROMOUT rule 40]
set action accept
[edit firewall name FROMOUT rule 40]
set source address 0.0.0.0/0
[edit firewall name FROMOUT rule 40]
set destination address 10.4.4.0/24
[edit firewall name FROMOUT rule 40]
set protocol icmp
[edit firewall name FROMOUT rule 40]
Set icmp code 3
[edit firewall name FROMOUT rule 40]
Set icmp type 1
[edit firewall name FROMOUT rule 40]
commit

В итоге мы получим такой конфиг правила FROMOUT:
rule 10 {
action accept
destination {
address 10.4.4.0/24
}
protocol tcp
state {
established enable
}
}
rule 20 {
action accept
destination {
address 10.4.4.0/24
}
protocol udp
source {
address 0.0.0.0/0
}
state {
established enable
}
}
rule 30 {
action accept
destination {
address 10.4.4.0/24
}
icmp {
code 0
}
protocol icmp
}
rule 40 {
action accept
destination {
address 10.4.4.0/24
}
icmp {
code 3
type 1
}
protocol icmp
}

Осталось применить его на вход внешнего интерфейса:
[edit interface ethernet eth0]
set firewall in name FROMOUT
[edit interface ethernet eth0]
commit

 

Метки: , , ,
Опубликовано: Vyatta

 

5 комментариев “Vyatta. Статья 3. Добавим межсетевой экран”

comment rss - Trackback

  1. Ilya:

    убедил. Скачал вмваре-образ. посмотрю 🙂

  2. dovecot:

    В сетевых экранах Juniper приблизительно такой синтаксис и конструкции?

    Синтаксис Vyatta мегагорбатый.

  3. hexes:

    Доброго дня! Спасибо за замечательный цикл статей!
    Начал разбираться с файрволом, столкнулся с определённым непониманием, хочу для начала просто попробовать заблокировать сквидов порт (3128), делаю:

    vyatta@vyatta# show firewall
    all-ping enable
    broadcast-ping disable
    ipv6-receive-redirects disable
    ipv6-src-route disable
    ip-src-route disable
    log-martians enable
    name InetAccess {
    default-action drop
    rule 10 {
    action drop
    destination {
    port 3128
    }
    protocol tcp_udp
    }
    }
    receive-redirects disable
    send-redirects enable
    source-validation disable
    syn-cookies enable

    vyatta@vyatta# show interfaces ethernet eth0
    address 10.1.66.104/24
    description KM-Lan
    duplex auto
    firewall {
    in {
    name InetAccess
    }
    }
    hw-id 00:30:48:84:75:c8
    smp_affinity auto
    speed auto
    vif 1 {
    address 10.1.1.104/24
    description KM-V-Office
    firewall {
    in {
    name InetAccess
    }
    }
    }
    vif 3 {
    address 10.1.3.1/24
    description KM-V-VoIP
    }
    vif 4 {
    address 10.1.4.1/24
    description KM-V-DCinema
    }

    однако:
    telnet 10.1.1.104 3128
    Trying 10.1.1.104…
    Connected to 10.1.1.104.
    Escape character is ‘^]’.

    порт остаётся открытым, что я делаю не так?

  4. hexes: «local» вместо «in». «in» это forwarded traffic, трафик к самому маршрутизатору — «local».

» Оставить комментарий

Вы должны войти чтобы прокомментировать.