Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Общий по FreeBSD (http://forum.oszone.net/forumdisplay.php?f=10)
-   -   Настройка Прокси (SQUID) с PF + DHCP relay (FreeBSD 8.1) (http://forum.oszone.net/showthread.php?t=192985)

ilka 04-12-2010 02:42 1557909

Настройка Прокси (SQUID) с PF + DHCP relay (FreeBSD 8.1)
 
Доброй ночи, коллеги.
Уже неделю бьюсь и совсем запутался(

Ситуация следующего характера:

Имеется кусок сети, в которой интернет раздает Cisco (VPN+DNS+DHCP). Она же является одним из нескольких звеньев территориально-распределенной сети офисов.
В обсуждаемом офисе у кого-то из сотрудников возник мозговой коллапс и сударь принялся качать дикое кол-во инет трафика (оплата по счетам за интернет выросла аж в 15-20 раз.) Было принято решение поднять SQUID+PF+SAMS с NCSA аутентификацией.
Т.к. данный прокси встанет в разрыв сети (между Cisco и клиентами), то возникает проблема в получении клиентами ip-адреса от цисковского DHCP (это критично!). Тут было решено воспользоваться пакетом из портов "dhcprelay".



Итак получил две проблемы:
1. Настройка PF.
Поскольку никакая безопасность не требуется (Cisco хватает), PF должен быть просто открыт для исходящих и входящих пакетиков.
Но возникает вопрос... а правильно ли настроен PF?...

Код:

BSDproxy# cat /etc/pf.conf

ext_if="sk0"
int_if="rl0"
internal_net="10.1.1.0/24"
proxy_if="lo0"
proxy_port="3128"

rdr on $int_if proto tcp from $internal_net to any port www -> 127.0.0.1 port 3128
nat on $ext_if from $ext_if to any -> ($ext_if)
nat on $ext_if from $int_if to any -> ($ext_if)
nat on $ext_if from $int_if:network to any -> ($ext_if)
nat on $int_if from $ext_if to any -> ($int_if)
nat on $int_if from $ext_if:network to any -> ($int_if)

pass in all keep state
pass out all keep state

2. Если же с PF все ок.....в чем не уверен...
Не отрабатывает DHCPrelay
.....в упор нигде не нашел нормального описания как сие чудо настроить ....man dhcprelay - нет такого.
Единственное о чем говорится - это при установке в /etc/rc.conf нужно добавить три строки: привожу вывод rc.conf

Код:

BSDproxy# cat /etc/rc.conf

gateway_enable="YES"
defaultrouter="10.1.1.1"
hostname="BSDproxy"
ifconfig_sk0="DHCP"
ifconfig_rl0="inet 10.1.1.241 netmask 255.255.255.0"
sshd_enable="YES"
pf_enable="YES"
pf_rules="/etc/pf.conf"
pf_flags=""
pflog_enable="YES"
pflog_logfile="/var/log/pflog"
pflog_flags=""
dhcprelay_enable="YES"
dhcprelay_server="10.1.1.1"
dhcprelay_ifaces="sk0"

Заранее большое спасибо за любую помощь или совет (ссылку)!!!

Flainth 04-12-2010 12:17 1558051

может Я чего то не понял....
Возможно стоило бы использовать ipfw нарезав каналы (pipe) ограничивающие траффик для каждого юзара данного офиса, без аутентификации и без всяких проксей. А для получения ip адресов клиентам можно поднять локал DHCP сервер на той же машине где установится ipfw, там явно по привязывать mac адреса каждой машины к определённому ip и нарезать этим ip определённый pipe.

ps:pf не юзал, потому ничего про него не скажу.

ilka 04-12-2010 12:24 1558058

Да там нужно только www-трафик считать и ограничить доступ для узкого круга лиц
(учетки для тех кому надо, а остальные лесом топают)
...почитаю про данное предложение. Спасибо Flainth, !

З.Ы.: Вопрос всё еще актуален!

Flainth 04-12-2010 15:20 1558176

стесняюсь спросить... а dhcprelay установлен? Если нет, то лучше сделать всё по хэндбуку

хттп://www.freebsd.org/doc/ru/books/handbook/network-dhcp.html

там в конце есь ссылка на ман dhcprelay

хттп://www.freebsd.org/cgi/man.cgi?query=dhcrelay&sektion=8&manpath=FreeBSD+8.1-RELEASE+and+Ports

ilka 04-12-2010 15:37 1558186

ога, dhcprelay установлен...там насколько я понимаю написано про то.......но не то)

Flainth 04-12-2010 15:40 1558189

загляните на эти ссылки

хттп://www.freebsd.org/doc/ru/books/handbook/network-dhcp.html

там в конце есь ссылка на ман dhcprelay

хттп://www.freebsd.org/cgi/man.cgi?query=dhcrelay&sektion=8&manpath=FreeBSD+8.1-RELEASE+and+Ports

Я подправил свой предидущий пост.

ilka 04-12-2010 15:46 1558193

Спасибо! Это уже читал... но на работе релея это к сожалению никак не отразилось..... может затык в правилах PF? .... может кто подскажет.....пока буду читать-пробовать дальше.

Flainth 04-12-2010 15:56 1558200

мне кажутся сомнительными последние две строки конфига pf, если судить по логике которая мне известна , то правилам keep-state должно предшествовать правило setup, или хотя бы в том же правиле дописать setup, тоесть примерно так:
pass in all setup keep state.
Попробуйте

и хорошо бы логи посмотреть...

ilka 05-12-2010 03:07 1558576

ничего не выходит(( ....Гуру PF....помогите... совсем беда((((

ilka 05-12-2010 22:50 1559127

Господа форумчане... рабочий ли такой вариант pf.conf?
Помогите совладать с PF!

Код:

BSDproxy# cat /etc/pf.conf
ext_if="sk0"
int_if="rl0"
internal_net="10.1.1.0/24"

rdr on $int_if proto tcp from $internal_net to any port 80 -> 127.0.0.1 port 3128
nat on $ext_if from $ext_if to any -> ($ext_if)
nat on $ext_if from $int_if to any -> ($ext_if)
nat on $ext_if from $int_if:network to any -> ($ext_if)

pass in all
pass out all keep state


Flainth 07-12-2010 13:36 1560232

на данном этапе что у Вас работает , а что нет?

впрочем, почитайте эту статью хттп://www.opennet.ru/base/sec/pf_openbsd_altq.txt.html. возможно что то прояснит...

ttys 01-02-2011 00:27 1601687

Цитата:

Цитата ilka
Господа форумчане... рабочий ли такой вариант pf.conf?
Помогите совладать с PF!
Код:
BSDproxy# cat /etc/pf.conf
ext_if="sk0"
int_if="rl0"
internal_net="10.1.1.0/24"
rdr on $int_if proto tcp from $internal_net to any port 80 -> 127.0.0.1 port 3128
nat on $ext_if from $ext_if to any -> ($ext_if)
nat on $ext_if from $int_if to any -> ($ext_if)
nat on $ext_if from $int_if:network to any -> ($ext_if)
pass in all
pass out all keep state
-------
...пользуясь моментом...хочу передать привет друзьям...которые тоже пользуются ...моментом))) »

оО
хрени подобной не видел ещё ни разу
пиши, что надо, на жабу: dtulyakov@xmpp.ru, ttys@ttys.org.ua, я тебе с правилами помогу

ЗЫ: нат в PF настраивается в одну строчку

santi11 16-02-2011 23:35 1614900

Господа, прошу не пинать, пишу на форумах впервые!! Разбирался бы сам, курил маны, но время жмет очень сильно! Проблема состоит в следующем: в учреждении есть сеть 192.168.50.0/24, есть домен на в2к3. Все это дело рвется в инет через шлюз. вот собственно понеслось!:)

на чем все крутится -->

FreeBSD proxy.mmuftp.local 8.1-RELEASE FreeBSD 8.1-RELEASE #0: Mon Jul 19 02:55:53 UTC 2010 root@almeida.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC i386

стоит squid + sams т.е. весь трафик идет через проксю! на этом моменте все работает отлично, но встала задача прокинуть порты для рдп и хамача!! + в дальнейшем смтп и поп3. Почитав инфу, решил поставить pf..т.к. в ядро он не вкомпилен, запускаю его модулем!

конфиг rc.conf
[CUT="rc.conf"]
keymap="ru.koi8-r"
sshd_enable="YES"
ifconfig_rl1="inet 192.168.1.4 netmask 255.255.255.0"
defaultrouter="192.168.1.1"
ifconfig_rl0="inet 192.168.50.2 netmask 255.255.255.0"
hostname="proxy.mmuftp.local"
apache22_enable="YES"
squid_enable="YES"
mysql_enable="YES"
sams_enable="YES"
inetd_enable="YES"
pf_enable="YES"
gateway_enable="YES"
pf_rules="/etc/pf.conf"
pflog_enable="YES"
pflog_logfile="/var/log/pf.log"
[/CUT]

[CUT="1"]ext_if="rl1"
int_if="rl0"
internal_net="192.168.50.0/24"

nat on $ext_if inet proto tcp from $internal_net port {smtp, pop3} to any port {smtp, pop3} -> ($ext_if)
nat on $ext_if inet proto tcp from $internal_net port 3389 to any port 3389 -> ($ext_if)
nat on $ext_if from $internal_net to any -> ($ext_if)
rdr on $int_if proto tcp from $internal_net to any port 80 -> 127.0.0.1 port 3128
pass out
[/CUT]

если делаю так, то перестает работать даже сквид! если же убрать из rc.conf строку gateway_enable="YES" то в инет пускает, но порты все равно не прокидываются:cry:
pf вижу впервые, документацию почитал, но честно говоря вник не особо, а времени экспериментировать нет, да и возможности тоже. Может у кого есть рабочий конфиг, киньте plz, а я дальше буду читать инфу и вникать! спасибо!

P.S. в логах pf одна строка, и то непонятной кодировки. вообщем не читаема!

dmitryst 16-02-2011 23:41 1614906

Оригинал мануала pf от создателей OpenBSD

santi11 17-02-2011 00:14 1614928

Я так предполагаю, что это то что нужно!

rdr on $int_if proto tcp from $int_net to $ext_if port 3389 -> \
$server
no nat on $int_if proto tcp from $int_if to $int_net
nat on $int_if proto tcp from $int_net to $server port 3389 -> \
$int_if


Только все равно остается непонятным тот факт, что при строке gateway_enable="YES" в rc.conf пропадает полностью инет в локалке, а нат не появляется! т.к. я не могу сейчас могу попасть на серв только по ссш, то рисковать с правилами не хочу!

ttys 17-02-2011 09:09 1615058

Цитата:

Цитата santi11
стоит squid + sams т.е. весь трафик идет через проксю! на этом моменте все работает отлично, но встала задача прокинуть порты для рдп и хамача!! + в дальнейшем смтп и поп3. Почитав инфу, решил поставить pf..т.к. в ядро он не вкомпилен, запускаю его модулем!

nat on $ext_if from $internal_net to any -> ($ext_if)
»

исходя из правила весь трафик должен идти через нат а не через прокси
сделай так:
Код:

nat pass proto tcp from $internal_net port {smtp, pop3} to any port {smtp, pop3} -> ($ext_if)
nat pass proto tcp from $internal_net port 3389 to any port 3389 -> ($ext_if)
#nat on $ext_if from $internal_net to any -> ($ext_if)
rdr pass proto tcp from $internal_net to any port 80 -> 127.0.0.1 port 3128

ЗЫ по поводу ssh есть куча статей в том числе и я публиковал
для openbsd
для freebsd
ЗЗЫ
Код:

nat pass proto tcp from $internal_net port {smtp, pop3} to any port {smtp, pop3} -> ($ext_if)
если ип статический могут быть проблемы с попаданием в блек листы спама


Цитата:

Цитата santi11
Я так предполагаю, что это то что нужно!
rdr on $int_if proto tcp from $int_net to $ext_if port 3389 -> \
$server
no nat on $int_if proto tcp from $int_if to $int_net
nat on $int_if proto tcp from $int_net to $server port 3389 -> \
$int_if »

нет это не то что нужно
хотя не совсем ясно что конкретно нужно? нафига rdp порт сначала редиректить потом натить???


Время: 11:29.

Время: 11:29.
© OSzone.net 2001-