Страница 1 из 1

Firewall

Добавлено: 2009-03-30 14:33:21
leha
Здравствуйте!
Пытаюсь настроить два канала в интернет.
шлюз FreeBSD6.0
xl0 - первый канал ip=x.x.x.2/30(реальный)
шлюз по умолчанию - x.x.x.1/30
dvb0 - тарелка (пока не используем, но все работает, настроена - упомянута для полноты картины)
rl0 - внутренняя сеть ip=192.168.0.254/24

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

natd -p 8668 -a x.x.x.2 -f /etc/natd.conf
файл /etc/natd.conf - где-то подсмотрел - уже не помню где...

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

log yes 
log_denied no 
use_sockets yes 
same_ports yes 
unregistered_only yes 
dynamic yes 
ipfw файрвол с использованием divert для маскарадинга
и forward для переброса пакетов на прокси(telinet) это для тарелки...
все замечательно работало...
====================================
теперь добавили еще один канал
dc0 ip=y.y.y.2/30 (для него провайдер дал шлюз y.y.y.1/30)
- в /etc/rc.conf добавил настройку карты
- в /etc/rc.local добавил запуск второго natd

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

natd -p 8669 -a y.y.y.2
" -f /etc/natd.conf" пока не прописал, хотя и так запускать пробовал...
после перезагрузки делаем
ping y.y.y.1 (шлюз)
tcpdump -i dc0 host y.y.y.1
показывает что ping ходит через новый канал
в таблице маршрутов автоматом создан путь для y.y.y.0/30
=========================================
создал правила для ipfw с параметром log для связи с ya.ru ip=213.180.204.8

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

...
ipfw add 100 skipto 65100 log ip from any to 213.180.204.8 
ipfw add 101 skipto 65100 log ip from 213.180.204.8 to any
....
ipfw add 65100 divert 8669 log ip from any to any
ipfw add 65101 fwd y.y.y.1 log ip from any to any
ipfw add 65102 allow log ip from any to any

и если отправить с внутренне машины например 192.168.0.200
ping 213.180.204.8
то в /var/log/security вижу примерно следующее

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

100   SkipTo 65100   192.168.0.200    213.180.204.8 in via rl0
65100  divert 8669 192.168.0.200 to 213.180.204.8 in via rl0
65102 принят
100   SkipTo 65100   192.168.0.200    213.180.204.8 out via xl0
65100  divert 8669 192.168.0.200 to 213.180.204.8 out via xl0
65100  forward y.y.y.1 y.y.y.2 to 213.180.204.8 out via xl0
и все... причем tcpdump -i dc0 молчит
а tcpdump -i xl0 говорит что пакеты уходят здесь
....
в справке как я понял сказано, что fwd пересылает пакет на указанный адрес
в соответствии с таблицей маршрутизации

пакет когда прошел rl0 направлен на выход через xl0 согласно маршруту по умолчанию...
но попав на правил fwd должен вроде бы по маршруту идти на dc0 а идет на xl0

подскажите, пожалуйста, что здесь не так...
неделю уже ...

Re: Firewall

Добавлено: 2009-03-30 14:56:41
zingel

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

netstat -rn && sysctl -a | grep forward && ipfw show

Re: Firewall

Добавлено: 2009-03-30 17:01:22
Kos
Довольно творческая нарезка конфигов, в которой нифига понять невозможно, но правило

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

ipfw add 65101 fwd y.y.y.1 log ip from any to any
звучит странно, скорее должно быть что-то типа такого:

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

ipfw add 65101 fwd y.y.y.1 log ip from y.y.y.2 to any

Re: Firewall

Добавлено: 2009-03-31 10:46:28
leha
Уважаемый kos все конфиги писал ручками, поэтому сокращал ...
что нужно - уточню
правило
ipfw add 65101 fwd y.y.y.1 log ip from any to any
находится в конце списка правил и сюда попадают только те пакеты которые перекинуты правилами
skipto 65100. Работающая часть файрвола заканчивается на правиле
ipfw add 65000 deny ip from any to any
поэтому не стал ничего писать типа
ipfw add 65101 fwd y.y.y.1 log ip from y.y.y.2 to any
сначала хочется понять как должно быть и как сделать так, чтобы пакеты выходили через dc0, а не через xl0
получается они попадают на комп через rl0

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

100   SkipTo 65100   192.168.0.200    213.180.204.8 in via rl0
65100  divert 8669 192.168.0.200 to 213.180.204.8 in via rl0
принят без изменения ip
65102  accept (что ли ) 192.168.0.200 to 213.180.204.8 in via rl0
а потом все идет через xl0

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

100   SkipTo 65100   192.168.0.200    213.180.204.8 out via xl0
65100  divert 8669 192.168.0.200 to 213.180.204.8 out via xl0
65100  forward y.y.y.1 y.y.y.2 to 213.180.204.8 [b]out via xl0[/b]
из описаний следует, что fwd должно пересылать пакет на адрес y.y.y.1 а в логе пишется out via xl0
что это значит? то ли пакеты выходящие будут пересланы, то ли уже отправлены (мне кажется что именно уже отправлены) через xl0 на y.y.y.1
но тогда как их перебросить на dc0?...
в справке по ipfw говорится (по крайней мере я так понял :unknown: ) мол пакеты будут пересланы fwd -ом
в зависимости от маршрутов по таблице маршрутизации. netstat -r говорит, что
default x.x.x.1 UGS 0 6059990 xl0
y.y.y.0/30 link#2 UC 0 0 dc0
....
вот собственно....
Спасибо за отклик, буду ждать ваших соображений, по поводу вышесказанного...

Re: Firewall

Добавлено: 2009-03-31 11:43:17
leha
Уважаемый zingel

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

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
default            x.x.x.1     UGS         0  6114729    xl0
y.y.y.0/30   link#2             UC          0        0    dc0
127.0.0.1          127.0.0.1          UH          0    16028    lo0
172.23.8/24        link#6             UC          0        0   dvb0
192.168.0          link#3             UC          0        0    rl0
...
дальше идут локальные маршруты

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

localhost# sysctl -a | grep forward
net.inet.ip.forwarding: 1
net.inet.ip.fastforwarding: 0
net.inet6.ip6.forwarding: 0
файрвол сейчас не содержит тех правил которые управляют (вернее должны управлять :pardon: ) пересылкой на новый интерфейс, но логика такая:
1.в начало добавляю правила skipto 65100 (работающий файрвол заканчивается на 65000 deny все)
2. в конце пробую перебросить пакеты на новую карточку
65101 divert 8669
65102 fwd
65103 allow

для справки
в работающем файрволе работает ( :pardon: за тофтологию ...)
и fwd - пересылает пакеты на прокси для работы тарелки
и divert 8668 - для маскарадинга на старый канал интернета.

если нужно подробнее займет некоторое время...
спасибо

Re: Firewall

Добавлено: 2009-03-31 13:30:13
Kos
http://www.opennet.ru/base/net/bsd_pbr_route.txt.html

попробуйте взять за основу.

Re: Firewall

Добавлено: 2009-03-31 15:12:50
leha
спасибо за ссылку, собственно что-то подобное и брал за основу
http://www.samag.ru/cgi-bin/go.pl?q=art ... .2007;a=09
http://www.lissyara.su/?id=1330
сейчас сяду за внимательное чтение Вашей ссылки, а пока то, что нарыл:

localhost# ps -awx | grep natd
255 ?? Ss 1:13,57 /sbin/natd -f /etc/natd.conf -a x.x.x.2 # - это старый работающий канал
568 ?? Is 0:00,08 /sbin/natd -a y.y.y.2 -p 8669 # - это новый, (пока, надеюсь) не работающий
24131 p1 R+ 0:00,00 grep natd

ситуация описанная ниже не измениться если запустить так
/sbin/natd -a y.y.y.2 -p 8669 -f /etc/natd.conf

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

localhost# cat /etc/natd.conf
#это из /etc/rc.conf
#natd_program="/sbin/natd"
#natd_enable="YES"
#natd_interface="x.x.x.2"
#natd_flags="-f /etc/natd.conf"
#
log yes
log_denied no
use_sockets yes
same_ports yes
unregistered_only yes
dynamic yes
правила skipto 65100 заворачивают пинг (и ответ) на 213.180.204.8(ya.ru)
на правила пересылки на новый канал инета написаны по описаниям

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

65101 divert 8669 log ip from any to any out via xl0
65102 fwd y.y.y.1 log ip from any to any out via xl0
65141 allow log ip from any to any
делаем пинг на 213.180.204.8(ya.ru) с локальной машины 192.168.0.200
в логах следующее

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

Mar 31 18:20:08 localhost kernel: ipfw: 33 SkipTo 65100 ICMP:8.0 192.168.0.200 213.180.204.8 in via rl0
Mar 31 18:20:08 localhost kernel: ipfw: 65141 Accept ICMP:8.0 192.168.0.200 213.180.204.8 in via rl0
Mar 31 18:20:08 localhost kernel: ipfw: 33 SkipTo 65100 ICMP:8.0 192.168.0.200 213.180.204.8 out via xl0
Mar 31 18:20:08 localhost kernel: ipfw: 65101 Divert 8669 ICMP:8.0 192.168.0.200 213.180.204.8 out via xl0
Mar 31 18:20:08 localhost kernel: ipfw: 65102 Forward to y.y.y.1 ICMP:8.0 y.y.y.2 213.180.204.8 out via xl0

localhost# tcpdump -i dc0 host 213.180.204.8
молчит как рыба
зато

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

localhost# tcpdump -i xl0 host 213.180.204.8
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on xl0, link-type EN10MB (Ethernet), capture size 96 bytes
18:20:08.209194 IP y.y.y.2 > 213.180.204.8: ICMP echo request, id 512, seq 64000, length 40

1 packets captured
4979 packets received by filter
0 packets dropped by kernel
т.о. fwd выбрасывает пакет из файрвола не по маршруту !?
что такого divert делает с пакетом :unknown:
\\===========================================//
теперь делаю так

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

65100 fwd y.y.y.1 log ip from any to any out via xl0
#65102 divert 8669 log ip from any to any - так тоже делал в логах еще и rl0 фиксируется, хотя пакет не #меняется
65102 divert 8669 log ip from any to any out via xl0
65141 allow log ip from any to any
в логах

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

Mar 31 18:31:13 localhost kernel: ipfw: 33 SkipTo 65100 ICMP:8.0 192.168.0.200 213.180.204.8 in via rl0
Mar 31 18:31:13 localhost kernel: ipfw: 65141 Accept ICMP:8.0 192.168.0.200 213.180.204.8 in via rl0
Mar 31 18:31:13 localhost kernel: ipfw: 33 SkipTo 65100 ICMP:8.0 192.168.0.200 213.180.204.8 out via xl0
Mar 31 18:31:13 localhost kernel: ipfw: 65100 Forward to y.y.y.1 ICMP:8.0 192.168.0.200 213.180.204.8 out via xl0
а теперь идет куда надо, но без диверта кому он нужен :cry:

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

localhost# tcpdump -i dc0 host 213.180.204.8
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on dc0, link-type EN10MB (Ethernet), capture size 96 bytes
18:31:13.168113 IP 192.168.0.200 > ya.ru: ICMP echo request, id 512, seq 65024, length 40
^C
2 packets captured
17 packets received by filter
0 packets dropped by kernel
т.о. fwd выбрасывает пакет из файрвола согласно маршруту хотя в логах out via xl0!?
\\===========================================//
в общем или уходит не туда куда надо или не маскарадится...
почитаю пока по ссылке...
... думаю сейчас подробностей достаточно...
Может еще какие советы кто-нибудь даст...
Заранее спасибо.

Re: Firewall

Добавлено: 2009-03-31 19:36:26
Kos
покажите вывод

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

#ipfw show
а то лично я полную картину кашего фаервола постичь не в силах :unknown:

Re: Firewall

Добавлено: 2009-04-01 10:12:01
leha
похоже в ядре не хватает опции
options IPFIREWALL_FORWARD_EXTENDED
видимо пока пакет имеет "не локальные" (не принадлежващие данному компу) адреса
fwd работает, но как только адрес источника (в данном случае) становиться "локальным"
fwd перестает работать...
пошел ядро пересобирать...

а это последний, описанный выше, вариант

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

localhost# ipfw show
00029     892      64847 skipto 65100 log ip from any to any via dc0
00032      32      16302 skipto 65100 log ip from 213.180.204.8 to any
00033     258      16990 skipto 65100 log ip from any to 213.180.204.8
...
здесь то, что работает...
...
65001   44925    2816793 deny ip from any to any
65100     129       8495 fwd y.y.y.1 log ip from any to any out via xl0
65101    1053      89644 divert 8669 log ip from any to any
65141    1053      89644 allow log ip from any to any
65535     328     172302 deny ip from any to any

спасибо, за помощь, пересоберу, проверю, сообщю ...

Re: Firewall

Добавлено: 2009-04-01 13:40:51
leha
Огромное спасибо Всем за помощь!
после пересборки ядра с опцией IPFIREWALL_FORWARD_EXTENDED все заработало! :Yahoo!:
Извините за трату Вашего времени :pardon:

Если кому интересно, может кому пригодиться ...
можно с помощью файрвола сделать так, что даже админ не знающий Nix сможет запускать определенные команды на машине с FreeBSD. У нас, например, если нужно было отключить (и\или снова) включить тарелку, ну т.е. чтобы интернет шел через тарелку или по "земле", да и вообще можно заставить Free выполнить любой скрипт...

Если интересно, расскажу...

Еще раз СПАСИБО.

Re: Firewall

Добавлено: 2009-04-01 16:31:16
Kos
Похоже самое время Вам обновиться до STABLE. В 6.4 этой опции уже нима :pardon: