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

Исходное сообщение
"Минимальные правила"

Отправлено shamahn , 09-Дек-09 17:43 
freeBSD 7.2
Пытаюсь настроить IPFW nat. Ядро пересобрал с:
options        IPFIREWALL
options        IPFIREWALL_VERBOSE
options        IPFIREWALL_VERBOSE_LIMIT=100
options        IPFIREWALL_NAT
options        IPFIREWALL_FORWARD
options        IPFIREWALL_DEFAULT_TO_ACCEPT #как разберусь с правилами - уберу ;)
options        IPDIVERT
options        DUMMYNET
options        LIBALIAS
options        HZ="1000"


В общем ситуация очень похожая на http://www.lissyara.su/?id=1967#example_1 (т.е. все очень просто). 2 интерфейса (внутренний sk0 (192.168.1.1/24) и внешний rl0 (10.1.28.192/20)). Вот только проблема в том, что на внешнем интерфейсе нужно поднимать PPPoE чтоб появился интернет. Айпи присваивается динамически dhcp сервером провайдера (можно конечного попробовать договориться на постоянный, но, предполагаю, что это будет стоить дополнительных денег). Доступ снаружи к серверу не нужен (я бы даже сказал нужно чтобы не было к нему доступа никакого кроме ssh... ну и ping может быть).

При дефолтовых настройках (без правил файервола, точнее с одним правилом - разрешить все) все отлично работает. PPPoE устанавливаешь, ipfw nat все подхватывает, и клиенты ходят как к себе домой) Но, надо ж как-то защититься =)

Вышеупомянутый пример изучил (мозг конечно завернулся от всех заворотов трафика), немного изменил правила, точнее подогнал под ситуацию (как мне показалось), сделал исполнительный. В rc.conf добавил firewall_script. Вот что получилось

#! /bin/sh
################### rc.firewall ###################
fwcmd="ipfw"
echo -n "Starting firewall..."
${fwcmd} -f flush

####################################################
# внешний сетевой интерфейс rl0
# только интернет приходит через pppoe tun0 cоединение на нем
# и в этом весь затык
oif="rl0"
# нач. адрес - 10.1.28.128, маска - 255.255.240.0
onet="10.1.28.128/20"
# IP-адрес внешнего интерфейса
oip="10.1.28.192"
# внутренний сетевой интерфейс
iif="sk0"
# локальная сеть: 192.168.1.1, маска - 255.255.255.0
inet="192.168.1.0/24"
# IP-адрес внутреннего интерфейса
iip="192.168.1.1"
####################################################

# правила разрешающие трафик через локальный интерфейс lo0
# будут добавляться автоматически сами при старте фаервола
# 100 allow ip from any to any via lo0
# 200 deny ip from any to 127.0.0.0/8
# 300 deny ip from 127.0.0.0/8 to any

# разрешаем все через интерфейс локальной сети
${fwcmd} add 1040 allow ip from any to any via ${iif}

# боимся непонятного
${fwcmd} add 1050 deny ip from any to 192.168.0.0/16 in recv ${oif}
${fwcmd} add 1060 deny ip from 192.168.0.0/16 to any in recv ${oif}
${fwcmd} add 1070 deny ip from any to 172.16.0.0/12 in recv ${oif}
${fwcmd} add 1080 deny ip from 172.16.0.0/12 to any in recv ${oif}
${fwcmd} add 1090 deny ip from any to 10.0.0.0/8 in recv ${oif}
${fwcmd} add 10100 deny ip from 10.0.0.0/8 to any in recv ${oif}
${fwcmd} add 10110 deny ip from any to 169.254.0.0/16 in recv ${oif}
${fwcmd} add 10120 deny ip from 169.254.0.0/16 to any in recv ${oif}

# настройка ната
${fwcmd} nat 1 config log if ${oif} reset same_ports deny_in redirect_port tcp ${oip}:6881 6881 redirect_port udp ${oip}:4444 4444 redirect_port tcp 192.168.1.24:25 25

# заварачиваем все что проходит через внешний интерфейс в нат
${fwcmd} add 10130 nat 1 ip from any to any via ${oif}

# боимся непонятного
${fwcmd} add 65534 deny all from any to any

Вроде как бы все нормально, правила подгружаются, но ничего не работатет) точнее локальные сервисы работают, а клиентов не пускает наружу. Как я могу предполагать - не работает НАТ)

сбрасываю правила - все ходят,все работает =)

смотрю, что он мне пишет, при выполнении скрипта добавления правил

Starting firewall...Flushed all rules.
01040 allow ip from any to any via sk0
01050 deny ip from any to 192.168.0.0/16 in recv rl0
01060 deny ip from 192.168.0.0/16 to any in recv rl0
01070 deny ip from any to 172.16.0.0/12 in recv rl0
01080 deny ip from 172.16.0.0/12 to any in recv rl0
01090 deny ip from any to 10.0.0.0/8 in recv rl0
10100 deny ip from 10.0.0.0/8 to any in recv rl0
10110 deny ip from any to 169.254.0.0/16 in recv rl0
10120 deny ip from 169.254.0.0/16 to any in recv rl0
ipfw nat 1 config if rl0 log deny_in same_ports reset redirect_port tcp 192.168.1.24:25 25 redirect_port udp 10.1.28.192:4444 4444 redirect_port tcp 10.1.28.192:6881 6881
:not  found
10130 nat 1 ip from any to any via rl0
:not found
65534 deny ip from any to any

и, оно ругается на мои правила с натом ((

поковырялся поковырялся, так ничего и не надумал.

Прошу помощи. С радостью приму советы по поводу того, что я может быть вообще не так делаю


Содержание

Сообщения в этом обсуждении
"Минимальные правила"
Отправлено Aquarius , 12-Дек-09 15:22 
>Прошу помощи. С радостью приму советы по поводу того, что я может
>быть вообще не так делаю

ковыряешься в пациенте скальпелем, толком не зная, что такое скальпель, не говоря уже об анатомии


"Минимальные правила"
Отправлено Pahanivo , 14-Дек-09 07:55 
>>Прошу помощи. С радостью приму советы по поводу того, что я может
>>быть вообще не так делаю
>
>ковыряешься в пациенте скальпелем, толком не зная, что такое скальпель, не говоря
>уже об анатомии

дык очередная жертва хауту ...


"Минимальные правила"
Отправлено Alexey Leonchik , 13-Дек-09 14:43 
>Прошу помощи. С радостью приму советы по поводу того, что я может
>быть вообще не так делаю

Компилируйте новое ядро с поддержкой pf

device      pf
device      pflog
device      pfsync

Содержимое /etc/pf.conf

ext_if="tun0"
int_if="rl1"

ext_addr="1.2.3.87"
int_addr="192.168.5.254"

table <allow_ip> {192.168.5.1, 192.168.5.2, 192.168.5.5, 192.168.5.201}
table <allow_rdp> {182.12.48.208/28, 182.102.37.208/28}

scrub in all

nat on $ext_if from $int_if:network to any -> ($ext_if)

rdr on $ext_if proto tcp from <allow_rdp> to ($ext_if) port 3389 -> 192.168.5.1 port 3389

block all

pass on {lo, gif0} all
pass on $int_if inet proto icmp all

pass on $int_if proto {tcp, udp} from <allow_ip> to any
pass on $int_if proto {tcp, udp} from any to <allow_ip>

pass on $ext_if proto {tcp, udp} from <allow_ip> to any
pass on $ext_if proto {tcp, udp} from any to <allow_ip>

pass on $ext_if inet proto icmp icmp-type {0, 3, 4, 8, 11, 12}
pass on $ext_if proto {esp, ipencap, ah} all

pass  in  on $ext_if proto tcp from any to ($ext_if) port 22 keep state
pass  in  on $ext_if proto tcp from <allow_rdp> to ($ext_if) port 80 keep state
pass  out on $ext_if proto { tcp, udp } all flags S/SA keep state

Файрволл вполне работоспособный с натом нет проблем. Конфигурация самого pf весьма прозрачна, фильтр удобен и быстр. Обратит е внимание, что в правилах внешний ИП не фигурирует.


"Минимальные правила"
Отправлено oligarh , 13-Дек-09 22:09 
>[оверквотинг удален]
>
>pass  in  on $ext_if proto tcp from any to ($ext_if)
>port 22 keep state
>pass  in  on $ext_if proto tcp from <allow_rdp> to ($ext_if) port 80 keep state
>pass  out on $ext_if proto { tcp, udp } all flags
>S/SA keep state
>
>Файрволл вполне работоспособный с натом нет проблем. Конфигурация самого pf весьма прозрачна,
>фильтр удобен и быстр. Обратит е внимание, что в правилах внешний
>ИП не фигурирует.

а нафига пф?можнл ppp.conf направитьнормально чтобы поднимал pppoe и все, на 6.4 так и делал и совместо с ипфв работало.


"Минимальные правила"
Отправлено Alexey Leonchik , 14-Дек-09 02:12 
>а нафига пф?можнл ppp.conf направитьнормально чтобы поднимал pppoe и все, на 6.4
>так и делал и совместо с ипфв работало.

Я предполагал, что PPPoE уже давно настроено и поднимается :) Выбор файрволла в принципе дело сугубо личное конечно...


"Минимальные правила"
Отправлено shamahn , 14-Дек-09 09:48 
Короче, умников полно...
Спасибо тому кто поделу высказывался...
Обчныйм ПППоЕ раздать можно, но мне предварительно нужно было завернуть на проксик.
pf не признаю в принципе, даж не пробовал - не знаю.
А не цеплялось у меня потому, что tun появляется после того как прописываются правила из /etc/firewall прицепились...
В общем, спасибо, за конструктивные комментарии.
А со скальпелем, просьба при себе придерживать свои высказывани, ибо кроме как отвращение, никаких эмоций или, тем более, глубокого осознания сущности проблемы, они не приносят