PDA

Показать полную графическую версию : Настройка Прокси (SQUID) с PF + DHCP relay (FreeBSD 8.1)


ilka
04-12-2010, 02:42
Доброй ночи, коллеги.
Уже неделю бьюсь и совсем запутался(

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

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

http://www.imagepost.ru/thumbs/345/XnZZb97UtLIJ7CiZJVi1.JPG (http://www.imagepost.ru/?v=345/XnZZb97UtLIJ7CiZJVi1.JPG)

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

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

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

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

Flainth
04-12-2010, 15:20
стесняюсь спросить... а 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
ога, dhcprelay установлен...там насколько я понимаю написано про то.......но не то)

Flainth
04-12-2010, 15:40
загляните на эти ссылки

хттп://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
Спасибо! Это уже читал... но на работе релея это к сожалению никак не отразилось..... может затык в правилах PF? .... может кто подскажет.....пока буду читать-пробовать дальше.

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

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

ilka
05-12-2010, 03:07
ничего не выходит(( ....Гуру PF....помогите... совсем беда((((

ilka
05-12-2010, 22:50
Господа форумчане... рабочий ли такой вариант 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
на данном этапе что у Вас работает , а что нет?

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

ttys
01-02-2011, 00:27
Господа форумчане... рабочий ли такой вариант 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
Господа, прошу не пинать, пишу на форумах впервые!! Разбирался бы сам, курил маны, но время жмет очень сильно! Проблема состоит в следующем: в учреждении есть сеть 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

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"


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


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

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

dmitryst
16-02-2011, 23:41
Оригинал мануала pf от создателей OpenBSD (http://www.tw.openbsd.org/faq/pf/ru/rdr.html)

santi11
17-02-2011, 00:14
Я так предполагаю, что это то что нужно!

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
стоит 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 (http://www.ignix.ru/public/zashchita-ssh-ot-brutforsa-na-openbsd)
для freebsd (http://www.ignix.ru/public/protection_ssh)
ЗЗЫ nat pass proto tcp from $internal_net port {smtp, pop3} to any port {smtp, pop3} -> ($ext_if) если ип статический могут быть проблемы с попаданием в блек листы спама

Я так предполагаю, что это то что нужно!
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 порт сначала редиректить потом натить???




© OSzone.net 2001-2012