URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 90562
[ Назад ]

Исходное сообщение
"помогите советом с ipfw"

Отправлено rt1975 , 17-Дек-10 17:37 
Есть офисный шлюз на freebsd, на котором крутится mysql, apache, squid. Задача - чтоб все сервисы в локалке были доступны, а извне был доступен только 22й порт, а все остальное закрыто. Накатал вот такой срипт  (ext и int - соответственно смотрят на прова и локалку)-

        localnet="192.168.1.0/24"
        extip="1.2.6.5"
        intip="192.168.1.1"
        extiface="rl0"
        intiface="vr0"

        ${fwcmd} add 09999 skipto 10000 all from any to any via ${extiface}
        ${fwcmd} add 09999 skipto 11000 all from any to any via ${intiface}
        ${fwcmd} add 09999 skipto 65000 ip from any to any

# ETXERNAL INTERFACE

        ${fwcmd} add 10110 deny ip from any to 192.168.0.0/16 in recv ${extiface}
        ${fwcmd} add 10110 deny ip from 192.168.0.0/16 to any in recv ${extiface}
        ${fwcmd} add 10110 deny ip from any to 172.16.0.0/12  in recv ${extiface}
        ${fwcmd} add 10110 deny ip from 172.16.0.0/12 to any  in recv ${extiface}
        ${fwcmd} add 10110 deny ip from any to 10.0.0.0/8     in recv ${extiface}
        ${fwcmd} add 10110 deny ip from 10.0.0.0/8 to any     in recv ${extiface}
        ${fwcmd} add 10110 deny ip from any to 169.254.0.0/16 in recv ${extiface}
        ${fwcmd} add 10110 deny ip from 169.254.0.0/16 to any in recv ${extiface}

        ${fwcmd} add 10120 deny icmp from any to any in icmptype 5,9,13,14,15,16,17 recv ${extiface}

        ${fwcmd} add 10510 divert natd all from ${localnet} to any out xmit ${extiface}
        ${fwcmd} add 10520 divert natd all from any to ${extip} in recv ${extiface}

        ${fwcmd} add 10920 allow gre from ${extip} to any out xmit ${extiface}
        ${fwcmd} add 10920 allow gre from any to ${extip} in recv ${extiface}

        ${fwcmd} add 10930 check-state

        ${fwcmd} add 10940 allow tcp from me to any out xmit ${extiface} setup keep-state
        ${fwcmd} add 10940 allow udp from me to any out xmit ${extiface} keep-state
        ${fwcmd} add 10940 allow icmp from any to any via ${extiface} keep-state

        ${fwcmd} add 10950 allow tcp from any to ${extip} 22 in recv ${extiface} keep-state

        ${fwcmd} add 10990 allow all from any to ${localnet} via ${extiface}

        ${fwcmd} add 10998 deny log all from any to any via ${extiface}
        ${fwcmd} add 10999 skipto 65000 log ip from any to any

# INTERNAL INTERFACE 1

        ${fwcmd} add 11110 deny all from not 192.168.1.0/24 to any in recv ${intiface}

        ${fwcmd} add 11520 fwd 192.168.1.1,3128 tcp from 192.168.1.0/24 to any 21,23,70,80,210,280,488,591,777,2041,2042,5190,9080,9443 recv ${intiface}

        ${fwcmd} add 11910 allow all from any to 192.168.1.0/24 out xmit ${intiface}
        ${fwcmd} add 11910 allow all from 192.168.1.0/24 to any in recv ${intiface}
        ${fwcmd} add 11920 allow all from any to 255.255.255.255 via ${intiface}
        ${fwcmd} add 11920 allow all from 255.255.255.255 to any via ${intiface}

        ${fwcmd} add 11998 deny all from any to any via ${intiface}
        ${fwcmd} add 11999 skipto 65000 log ip from any to any

# DEFAULT RULE

        ${fwcmd} add 65000 pass log all from any to any
        ${fwcmd} фвв 65535 deny ip from any to any

При этом на тот же сквид можно законнектится телнетом на 3128 порт.. Где накосячил и что добавить нужно?


Содержание

Сообщения в этом обсуждении
"помогите советом с ipfw"
Отправлено GD , 17-Дек-10 23:29 
> Есть офисный шлюз на freebsd, на котором крутится mysql, apache, squid. Задача
> - чтоб все сервисы в локалке были доступны, а извне был
> доступен только 22й порт, а все остальное закрыто. Накатал вот такой
> срипт  (ext и int - соответственно смотрят на прова и
> локалку)-

[skip]

> При этом на тот же сквид можно законнектится телнетом на 3128 порт..
> Где накосячил и что добавить нужно?

а нельзя обойти аккуратным прописыванием listen-ов в ваших демонах?


"помогите советом с ipfw"
Отправлено Square , 18-Дек-10 03:50 
Добавьте в natd опцию deny_incomings
Вообще конфиг перегружен ненужными правилами очень сильно ,а некоторые - вообще бессмысленны.. например правило за номером 10990...Фееричная дырка в безопасности...
Легальных пакетов попадающих под это правило быть не может.. о чем вы думали когда писали такое??

А уж об чем думали когда писали
add 09999 skipto 65000 ip from any to any
add 65000 pass log all from any to any
Одному Ходже Насреддину известно...


"помогите советом с ipfw"
Отправлено rt1975 , 18-Дек-10 04:15 
> Добавьте в natd опцию deny_incomings
> Вообще конфиг перегружен ненужными правилами очень сильно ,а некоторые - вообще бессмысленны..
> например правило за номером 10990...Фееричная дырка в безопасности...
> Легальных пакетов попадающих под это правило быть не может.. о чем вы
> думали когда писали такое??
> А уж об чем думали когда писали
> add 09999 skipto 65000 ip from any to any
> add 65000 pass log all from any to any
> Одному Ходже Насреддину известно...

:) согласен, эти правила в общем-то бессмысленны.. За одним исключением - по этим правилам я мониторю каунты - если счетчик по ним отличается от значения 0 - значит есть повод почесать маковку.. Но при всем при этом систему они не нагружают, так как очередь до них не доходит.
ipfw -a list -
10990    0      0 allow ip from any to 192.168.1.0/24 via rl0
Зато ОЧЕНЬ помогли при написании и мониторинге всего этого.. да так и остались висеть, как только все отточу - погрохаю нафик. Кстати - по непонятной мне причине все заработало, причем похоже после ребута. С чем связано - непонятно..


"помогите советом с ipfw"
Отправлено rt1975 , 18-Дек-10 04:18 
ЗЫ: Большое спасибо за отклик на просьбу о помощи. Буду рад советам по оптимизации всего этого, тем более, что сейчас нужно будет поднимать впн для доступа из вне в локальную сеть..

"помогите советом с ipfw"
Отправлено rr , 18-Дек-10 08:25 
> Добавьте в natd опцию deny_incomings

Не будет ли эта опция причиной, что подключиться к боксу снаружи к внешнему адресу будет невозможно?

> Вообще конфиг перегружен ненужными правилами очень сильно ,а некоторые - вообще бессмысленны..
> например правило за номером 10990...Фееричная дырка в безопасности...

Рассмотрим соединение общий случай без прозрачного проксирования.
Клиент из сети 192.168... начинает tcp подключение к внешнему адресу.

пакеты из внутренней сети проходят через внутренний интерфейс и попадают под правило
${fwcmd} add 11910 allow all from 192.168.1.0/24 to any in recv ${intiface}

далее пакет передается на внешний интерфейс и попадает под правило
${fwcmd} add 10510 divert natd all from ${localnet} to any out xmit ${extiface}
возвращается в цепочку правил и попадает под правило
${fwcmd} add 10940 allow tcp from me to any out xmit ${extiface} setup keep-state

внешний хост отвечает
входящие пакеты от внешнего хоста попадают под правило
${fwcmd} add 10520 divert natd all from any to ${extip} in recv ${extiface}
адрес назначения меняется на адрес 192.168..... и пакет возвращается в цепочку правил
сейчас уже на внешнем интерфейсе проверяется входящий пакет с адресом назначения 192.168....  какое правило пропустит этот пакет на внешнем интерфейсе?

под созданное динамическое правило от
${fwcmd} add 10940 allow tcp from me to any out xmit ${extiface} setup keep-state
пакет не подпадает так как указан адрес me, адрес внешнего интерфейса, надо же проверять адрес 192.168. .....
а попадет пакет под правило
${fwcmd} add 10990 allow all from any to ${localnet} via ${extiface}

В данном случае это правило нужно.
В общем случает правило нужно изменить для одностороннего прохождения пакетов.
Наличие этого правило зависит от других правил.

> Легальных пакетов попадающих под это правило быть не может.. о чем вы
> думали когда писали такое??
> А уж об чем думали когда писали
> add 09999 skipto 65000 ip from any to any
> add 65000 pass log all from any to any
> Одному Ходже Насреддину известно...


"помогите советом с ipfw"
Отправлено rt1975 , 22-Дек-10 12:07 
> В общем случает правило нужно изменить для одностороннего прохождения пакетов.

Учел этот момент, спасибо.

>> Одному Ходже Насреддину известно...

Я же писал - это для тестов :) Итоговый вариант пока вот такой:


        localnet="192.168.1.0/24"
        vpnnet="192.168.0.0/24"
        extip="XX.XX.XX.XX"
        intip="192.168.1.1"
        vpnip="192.168.0.1"
        extiface="rl0"
        intiface="vr0"
        vpniface="ng0" – добавился VPN интерфейс, через MPD5 для доступа к localnet извне
        bcast="255.255.255.255"


        ${fwcmd} table 1 flush – для bruteblock
        ${fwcmd} table 2 flush
        ${fwcmd} table 2 add 10.0.0.0/8
        ${fwcmd} table 2 add 169.254.0.0/16
        ${fwcmd} table 2 add 172.16.0.0/12
        ${fwcmd} table 2 add 192.168.0.0/12
        ${fwcmd} add 100 pass all from any to any via lo0
        ${fwcmd} add 200 deny all from any to 127.0.0.0/8
        ${fwcmd} add 300 deny ip from 127.0.0.0/8 to any

        ${fwcmd} add 09999 skipto 10000 all from any to any via ${extiface}
        ${fwcmd} add 09999 skipto 11000 all from any to any via ${intiface}
        ${fwcmd} add 09999 skipto 12000 all from any to any via ${vpniface}
# ETXERNAL INTERFACE
        ${fwcmd} add 10110 deny ip from any to table\(2\) in recv ${extiface}
        ${fwcmd} add 10110 deny ip from table\(2\) to any in recv ${extiface}
        ${fwcmd} add 10110 deny ip from table\(1\) to any in recv ${extiface}

        ${fwcmd} add 10120 deny icmp from any to any in icmptype 5,9,13,14,15,16,17 recv ${extiface}

        ${fwcmd} add 10510 divert natd all from ${localnet} to any out xmit ${extiface}
        ${fwcmd} add 10530 divert natd all from any to ${extip} in recv ${extiface}

        ${fwcmd} add 10920 allow gre from ${extip} to any out xmit ${extiface}
        ${fwcmd} add 10920 allow gre from any to ${extip} in recv ${extiface}

        ${fwcmd} add 10930 check-state

        ${fwcmd} add 10940 allow tcp from me to any out xmit ${extiface} setup keep-state
        ${fwcmd} add 10940 allow udp from me to any out xmit ${extiface} keep-state
        ${fwcmd} add 10940 allow icmp from any to any via ${extiface} keep-state

        ${fwcmd} add 10950 allow tcp from any to ${extip} 22 in recv ${extiface} keep-state
        ${fwcmd} add 10960 allow tcp from any to ${extip} 1723 in recv ${extiface} keep-state
        ${fwcmd} add 10990 allow all from any to ${localnet} out xmit ${extiface}
        ${fwcmd} add 10990 allow all from any to ${vpnnet} out xmit ${extiface}

        ${fwcmd} add 10998 deny log all from any to any via ${extiface}
# INTERNAL INTERFACE
        ${fwcmd} add 11110 deny all from not ${localnet} to any in recv ${intiface}

        ${fwcmd} add 11520 fwd ${intip},3128 tcp from ${localnet} to any 23,70,80,210,280,488,591,777,2041,2042,5190,9080,9443 recv ${intiface}

        ${fwcmd} add 11910 allow all from any to ${localnet} out xmit ${intiface}
        ${fwcmd} add 11910 allow all from ${localnet} to any in recv ${intiface}
        ${fwcmd} add 11920 allow all from any to ${bcast} via ${intiface}
        ${fwcmd} add 11920 allow all from ${bcast} to any via ${intiface}

        ${fwcmd} add 11998 deny log all from any to any via ${intiface}

# VPN INTERFACE

        ${fwcmd} add 13110 deny all from not ${vpnnet} to any in recv ${vpniface}

        ${fwcmd} add 13910 allow all from any to ${vpnnet} out xmit ${vpniface}
        ${fwcmd} add 13910 allow all from ${vpnnet} to any in recv ${vpniface}
        ${fwcmd} add 13920 allow all from any to ${bcast} via ${vpniface}
        ${fwcmd} add 13920 allow all from ${bcast} to any via ${vpniface}

        ${fwcmd} add 13998 deny log all from any to any via ${vpniface}
# DEFAULT RULE
       ${fwcmd} add 65535 deny log all from any to any

И есть еще вопрос – необходимо, чтоб у клиента VPN при подключении был доступ к интернет. Как правильно это прописать? Добавить правило
        ${fwcmd} add 10520 divert natd all from ${vpnnet} to any out xmit ${extiface} ?


"помогите советом с ipfw"
Отправлено rt1975 , 22-Дек-10 13:49 
${fwcmd} add 10990 allow all from any to ${localnet} via ${extiface}
${fwcmd} add 10990 allow all from any to ${vpnnet} via ${extiface}

Эти строки оставил все-таки в изначальном варианте, так как с out не учитывается приходящий пакет из ната. Тем более, что тут остаются только честные пакеты, все левое отсеивается правилом 10110.