ipfw, MAC-и, layer2

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
bitman
проходил мимо

ipfw, MAC-и, layer2

Непрочитанное сообщение bitman » 2008-08-29 13:08:42

Привет всем.
Считаю, что мне очень повезло с тем, что когда-то попал на этот сайт. Многому научился.
Последние несколько дней пытаюсь привести в порядок правила ipfw на 7-й фре.
В общем, с пом. Гугля привел правила к такому виду (ниже). Конфигурация интерфейсов и инета видна из первых же строк. Правила по доступу к удаленным сервисам еще не писал - это не проблема.
А проблема вот в чем: при выключенной обработке layer2 вроде работает как надо (день работало, больше не проверял). Как только включаю net.link.ether.ipfw = 1, сразу файрвол затыкается :(
Да, я читал про то, что теперь пакет в интерфейсе проходит 4 раза через фаер, а не 2. На это и опирался при построении правил.
Считаю авторов этого сайта авторитетными профессионалами, поэтому прошу помощи. Подскажите, где ошибся?
Вот настройки скрипта:

Код: Выделить всё

#!/bin/sh

ID_INT1="11";
NET_INT1="192.168.65.0/24";
IP_INT1="192.168.65.128";
IF_INT1="sk0";
PIPE_INT1_IN="bw 256Kbit/s";
PIPE_INT1_OUT="bw 256Kbit/s";
TCP_INT1="25,80,110,65022,22";
UDP_INT1="53";

ID_INET1="31";
IP_INET1="192.168.64.2";
IF_INET1="re0";
TCP_INET1="25,80,110,65022,22";
GW1="192.168.64.128";
NAT1="8668";

FWCMD="/sbin/ipfw";
ADD="/sbin/ipfw add";
TBL="/sbin/ipfw table";
END_RULE_NUM="64000";
END_RULE_BODY="deny log all from any to any";

pre_setup () {
  ${FWCMD} disable firewall;
  ${FWCMD} -f flush;
}

post_setup () {
  /sbin/sysctl net.inet.ip.fw.enable=1;
  /sbin/sysctl net.inet.ip.fw.one_pass=0;
  /sbin/sysctl net.link.ether.ipfw=1;
}
Вот результат работы скрипта:

Код: Выделить всё

01111 skipto 11100 ip from 192.168.65.0/24 to any in via sk0 layer2
01115 skipto 11500 ip from 192.168.65.0/24 to any in via sk0 not layer2
01311 skipto 31100 ip from any to any in via re0 layer2
01315 skipto 31500 ip from any to any in via re0 not layer2
01990 deny ip from any to any in layer2
09010 allow ip from any to any out layer2
09111 pipe 115 ip from 192.168.65.0/24 to any out via re0 not layer2
09931 divert 8668 ip from any to any out via re0
09990 allow ip from any to any out
09999 skipto 64000 ip from any to any
11101 allow ip from any to any MAC any 00:1d:60:58:55:72
11102 allow ip from 192.168.65.1 to any MAC any 00:30:1b:28:08:05
11199 deny ip from any to any layer2
11580 allow ip from any to 192.168.65.128
11590 allow ip from any to any
11599 skipto 64000 ip from any to any
31101 allow ip from any to any MAC any any
31199 deny ip from any to any layer2
31510 divert 8668 ip from any to any
31520 allow ip from any to 192.168.64.2
31911 pipe 111 ip from any to 192.168.65.0/24 not layer2
31990 allow ip from any to any
31999 skipto 64000 ip from any to any
64000 deny log logamount 100 ip from any to any
net.inet.ip.fw.enable: 1 -> 1
net.inet.ip.fw.one_pass: 1 -> 0
net.link.ether.ipfw: 0 -> 1

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
hizel
дядя поня
Сообщения: 9031
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: ipfw, MAC-и, layer2

Непрочитанное сообщение hizel » 2008-08-29 13:59:50

не вижу , 10 минут мидитировал :(
надо будет вечерком, чтоли, еще раз глянуть

мм, вы не находите, что результирующие правила сложны для понимания? :)
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

bitman
проходил мимо

Re: ipfw, MAC-и, layer2

Непрочитанное сообщение bitman » 2008-08-29 14:30:26

Тогда опишу то же, с пояснениями:
Принцип такой - отбираю все входящие на всех интерфейсах, на них же всякие проверки и фильтры. Тогда велика вероятность, что при отфильтрованных входящих исходящий трафик тоже будет соответствовать политикам.

Код: Выделить всё

//вход из внутренней сети
01111 skipto 11100 ip from 192.168.65.0/24 to any in via sk0 layer2
01115 skipto 11500 ip from 192.168.65.0/24 to any in via sk0 not layer2
//вход из Интернет
01311 skipto 31100 ip from any to any in via re0 layer2
01315 skipto 31500 ip from any to any in via re0 not layer2
//остальные входящие - рубим
01990 deny ip from any to any in layer2

//исходящие канального уровня не проверяем, а пропускаем сразу (?)
09010 allow ip from any to any out layer2
//обработка исходящих (НАТ, пайпы). Пайпы касаются только трафика Интернет. Между локальными подсетями - без ограничений
09111 pipe 115 ip from 192.168.65.0/24 to any out via re0 not layer2
09931 divert 8668 ip from any to any out via re0
09990 allow ip from any to any out //тут будут правила по доступу к внешним сервисам 
09999 skipto 64000 ip from any to any

//блок проверки отправителя пакета. Сюда они отправляются "скипами" из первого блока
//проверка внутр. сети
11101 allow ip from any to any MAC any 00:1d:60:58:55:72
11102 allow ip from 192.168.65.1 to any MAC any 00:30:1b:28:08:05
11199 deny ip from any to any layer2
11580 allow ip from any to 192.168.65.128
11590 allow ip from any to any
11599 skipto 64000 ip from any to any
//проверка входящих из Интернет.
31101 allow ip from any to any MAC any any //Тут можно поставить МАК маршрутизатора провайдера по умолчанию
31199 deny ip from any to any layer2
31510 divert 8668 ip from any to any //НАТ входящих
31520 allow ip from any to 192.168.64.2 //пайпы на вход. Мы ж теперь после НАТа знаем, что и куда идет
31911 pipe 111 ip from any to 192.168.65.0/24 not layer2
31990 allow ip from any to any //тут можно устроить проверку на доступ "снаружи". Например, для TCP указать established
31999 skipto 64000 ip from any to any

64000 deny log logamount 100 ip from any to any //єто и так понятно

net.inet.ip.fw.enable: 1 -> 1
net.inet.ip.fw.one_pass: 1 -> 0
net.link.ether.ipfw: 0 -> 1
А почему так громоздко? Потому что скрипт рассчитан на несколько каналов к провайдерам и несколько внутренних подсетей. Это в примере я упростил. А когда включить всё, то получается довольно стройно и сгруппированно.

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

Re: ipfw, MAC-и, layer2

Непрочитанное сообщение zingel » 2008-08-30 9:07:48

коммутаторы не рагуаются на такие жесткие фильтры layer2?
Z301171463546 - можно пожертвовать мне денег

Аватара пользователя
bitman
рядовой
Сообщения: 38
Зарегистрирован: 2008-08-29 14:35:29

Re: ipfw, MAC-и, layer2

Непрочитанное сообщение bitman » 2008-08-31 13:43:16

Эмм... какие коммутаторы?
Дело в том, что эти фильтры я еще только пробую. Тестовая машина включена в серую подсеть и имитирует шлюз для виндового компа, кот. стоит "за ним". Когда испытывал - без обработки канального уровня - интернет-радио, серфинг, торенты работали ОК.
А вот, когда включал переменную net.link.ether.ipfw: 0 -> 1, тогда и происходил "затык". Поэтому про уровень2 еще ничего сказать не могу :(
А может, в этом и проблема? Может, я не учитываю какие-то преобразования адресов или прохождение пакетов канального уровня на внутренних интерфейсах шлюза?

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

Re: ipfw, MAC-и, layer2

Непрочитанное сообщение zingel » 2008-08-31 13:55:03

нужно смотреть где рубится, обычно это в логах есть
Z301171463546 - можно пожертвовать мне денег

Аватара пользователя
bitman
рядовой
Сообщения: 38
Зарегистрирован: 2008-08-29 14:35:29

Re: ipfw, MAC-и, layer2

Непрочитанное сообщение bitman » 2008-08-31 14:00:57

Хорошо, завтра посмотрю (машина на работе). Не хотел включать тяж. артиллерию, думал тут "с наскоку" скажут.
Ладно, буду копать...

Аватара пользователя
hizel
дядя поня
Сообщения: 9031
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: ipfw, MAC-и, layer2

Непрочитанное сообщение hizel » 2008-09-02 8:29:54

я бы не стал фильтровать layer2 на аплинке
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
bitman
рядовой
Сообщения: 38
Зарегистрирован: 2008-08-29 14:35:29

Re: ipfw, MAC-и, layer2

Непрочитанное сообщение bitman » 2008-09-02 9:11:28

Вобщем-то, я и не собирался фильтровать данные. Я хочу фильтровать получателей-отправителей.

Аватара пользователя
hizel
дядя поня
Сообщения: 9031
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: ipfw, MAC-и, layer2

Непрочитанное сообщение hizel » 2008-09-02 9:13:17

ну да обычно на это и направлена деятельность по фильтрованию layer2
убираете фильтрацию layer2 на аплинке, упращаете фаервол, там у вас и так НАТ сидит
принцып "бритвы Окама" ;)
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
bitman
рядовой
Сообщения: 38
Зарегистрирован: 2008-08-29 14:35:29

Re: ipfw, MAC-и, layer2

Непрочитанное сообщение bitman » 2008-09-02 9:30:13

Согласен насчет бритвы - иногда меня "заносит" :smile: Упрощать я начал еще вчера.
И я не "уперся рогом" - при достижении любой цели ищу лаконичные решения.
В данном случае интересно разобраться в механизме, раз он есть.

Mamazulu
рядовой
Сообщения: 20
Зарегистрирован: 2008-09-10 9:19:17

Re: ipfw, MAC-и, layer2

Непрочитанное сообщение Mamazulu » 2011-04-11 15:03:06

Похожая ситуация. Не могу привязать маки к айпишникам, блочится всё. Список через ARP не предлагайте. Всё может измениться.

Mamazulu
рядовой
Сообщения: 20
Зарегистрирован: 2008-09-10 9:19:17

Re: ipfw, MAC-и, layer2

Непрочитанное сообщение Mamazulu » 2011-04-11 15:14:23

Не успел вписать код

Код: Выделить всё

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

        # set these to your outside interface network and netmask and ip
        oif="rl0"
        onet="шлюз провайдера"
        omask="255.255.255.248"
        oip="мой ip"
        dns="dns"
        vpn0="ng0"

        # set these to your inside interface network and netmask and ip
        iif="age0"
        inet="192.168.0.0"
        imask="255.255.255.0"
        iip="внутр ip"
  
#####################################

        IpOut="внешний ip"
        IpIn="внутренний ip"
        NetOut="${inet}:${omask}"
        NetIn="192.168.0.0"
        NetMask="24"
#цикл пайпов
${fwcmd} add pipe 1 ip from ${IpOut} to ${NetIn}/${NetMask}
.........................
${fwcmd} add pipe n ip from ${IpOut} to ${NetIn}/${NetMask}
#
setup_loopback ()

        ${fwcmd} add 25350 divert natd all from any to any via ${oif}
        ${fwcmd} add 25352 check-state

### Далее идут обычные правила на порты и IP клиентов.
.......................

        ${fwcmd} add 65550 deny log logamount 10000 ip from any to any

Вообщем, при включении net.link.ether.ipfw=1 пропадает любой доступ к серверу.

Аватара пользователя
hizel
дядя поня
Сообщения: 9031
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: ipfw, MAC-и, layer2

Непрочитанное сообщение hizel » 2011-04-11 16:03:24

есть простая тонкость, вернее их две
1. транзитный пакет проходит через фаервол 4(четыре) раза
2.

Код: Выделить всё

allow ip from <ip> to any
- не пропустит пакет с <ip>, пропустит например

Код: Выделить всё

allow ip from <ip> to any mac any <mac>
а также, если протокол построен по принципу все запрещено кроме разрешенного блокируется также широковещательный трафик arp протокола,
поэтому обычно упрощают правила с помощью признака layer2, о чем есть соответствующая запись в man ipfw
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.