некорректно работает pf при подключении PPPoE

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
yuretz
рядовой
Сообщения: 20
Зарегистрирован: 2009-12-22 7:52:57

некорректно работает pf при подключении PPPoE

Непрочитанное сообщение yuretz » 2010-05-26 5:47:32

Здравствуйте! FReeBSD только начинаю копать, просьба не бить сильно ногами :)
имеем: небольшой филиал, шлюз - FreeBSD 8.0 +pf + squid + авторизация в AD. нужно выпустить людей в интернет через проксю (работает), а некоторым дать доступ к инету напрямую (работает частично, см. ниже)
все настраивал по статейкам, тут же и найденным, что получилось:
в принципе все работает, когда подключение к интернету - статический белый IP, но как только делаю подключение через PPPoE (ADSL модем там), - pf начинает выпускать ВСЕХ в инет напрямую, без прокси, хотя по идее должун выпускать только избранные компы.
конфиг pf при подключении по PPPoE (при статическом IP все то же самое тока ext_if="sk1" и в rc.conf раскомментирована строка с конфигурацией инрефейса):

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

int_if="sk0"
ext_if="tun0"
localnet="192.168.60.0/24"

tcp_ports="{20,21,80,443,25,110,465,995,5190}"
udp_ports="{53}"
table <allow_nat> persist file "/etc/nat_hosts"

set skip on lo0
set skip on $int_if

scrub in all

nat on $ext_if from <allow_nat> to any -> ($ext_if)
antispoof quick for $ext_if

block all

pass out on $ext_if proto tcp to any port $tcp_ports keep state
pass out on $ext_if proto udp to any port $udp_ports keep state

pass in inet proto tcp from any to $ext_if port 22 keep state

pass inet proto icmp all

кусок rc. conf:

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


#ifconfig_sk1="inet xxx.xxx.xxx.xxx  netmask 255.255.255.248"
ifconfig_sk0="inet 192.168.60.254 netmask 255.255.255.0"
#defaultrouter="xxx.xxx.xxx.yyy"

gateway_enable="YES"

ppp_enable="YES"
ppp_mode="ddial"
#ppp_nat="YES"
ppp_profile="STK"

sshd_enable="YES"
sendmail_enable="NONE"
named_enable="YES"
samba_enable="YES"
squid_enable="YES"

pf_enable="YES"
pf_rules="/etc/pf.conf"
pf_program="/sbin/pfctl"
pf_flags=""
pflog_enable="YES"
pflog_logfile="/var/log/pf.log"
pflog_flags=""
pfsync_enable="NO"
pfsync_syncdev=""
pfsync_ifconfig=""

Уважаемые гуру! подскажите, пожалуйста, что я делаю не так?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2460 рублей (8 CPU, 8Gb RAM, 2x500Gb HDD, RAID 3ware 9750):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
BlackCat
прапорщик
Сообщения: 469
Зарегистрирован: 2007-10-16 22:40:42

Re: некорректно работает pf при подключении PPPoE

Непрочитанное сообщение BlackCat » 2010-05-26 11:32:55

yuretz, посмотрите, что pfctl -sa выводит.

yuretz
рядовой
Сообщения: 20
Зарегистрирован: 2009-12-22 7:52:57

Re: некорректно работает pf при подключении PPPoE

Непрочитанное сообщение yuretz » 2010-05-27 9:10:45

Спасибо, что откликнулись :)
посмотрел, и увидел такую штуку: сразу после перезагрузки сервера pfctl -sa выдает, что вообще никаких правил нет, т.е. он автоматом не подгрузил нужные правила, хотя файл с правилами существует, pf_rules="/etc/pf.conf" в rc.conf прописано. если сделать подгрузку правил вручную, pfctl -f /etc/pf.conf правила появляются, однако в интернет все равно пускает всех :(
Есть подозрение, что правила автоматом не грузятся из-за того, что на момент запуска pf еще нет соединения с интернетм, и, соответственно, нет интерфейса tun0. Может такое быть? если да, то как задержать запуск pf?

Аватара пользователя
BlackCat
прапорщик
Сообщения: 469
Зарегистрирован: 2007-10-16 22:40:42

Re: некорректно работает pf при подключении PPPoE

Непрочитанное сообщение BlackCat » 2010-05-27 9:44:52

Выложите здесь:
pfctl -f r
pfctl -f n
ps ax | grep "ppp"
У вас прописано для каких узлов пускать трафик через NAT в pf, и есть подозрение, что разрешающие правила выпускают всех. А далее работает ppp_nat, т.к. он включен по-умолчанию и его надо отключать вручную.
=====
Почему сразу не грузятся правила - не имею ни малейшего представления.

yuretz
рядовой
Сообщения: 20
Зарегистрирован: 2009-12-22 7:52:57

Re: некорректно работает pf при подключении PPPoE

Непрочитанное сообщение yuretz » 2010-05-27 9:58:35

Вероятно имелось в виду pfctl -sr и sf, вот они:

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

zgw# pfctl -sr
No ALTQ support in kernel
ALTQ related functions disabled
scrub in all fragment reassemble
block drop in quick on ! tun0 inet from xxx.xxx.xxx.xxx to any
block drop in quick inet from xxx.xxx.xxx.xxx to any
block drop all
block drop quick on tun0 from <badhosts> to any
pass out on tun0 proto tcp from any to any port = ftp-data flags S/SA keep state
pass out on tun0 proto tcp from any to any port = ftp flags S/SA keep state
pass out on tun0 proto tcp from any to any port = http flags S/SA keep state
pass out on tun0 proto tcp from any to any port = https flags S/SA keep state
pass out on tun0 proto tcp from any to any port = smtp flags S/SA keep state
pass out on tun0 proto tcp from any to any port = pop3 flags S/SA keep state
pass out on tun0 proto tcp from any to any port = smtps flags S/SA keep state
pass out on tun0 proto tcp from any to any port = pop3s flags S/SA keep state
pass out on tun0 proto tcp from any to any port = aol flags S/SA keep state
pass out on tun0 proto udp from any to any port = domain keep state
pass in inet proto tcp from any to xxx.xxx.xxx.xxx port = ssh flags S/SA keep state
pass inet proto icmp all keep state

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


zgw# pfctl -sn
No ALTQ support in kernel
ALTQ related functions disabled
nat on tun0 from <allow_nat> to any -> (tun0) round-robin
zgw#

таблица allow_nat объявляется в файле, файл существует и там только один IP.

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

zgw# ps ax | grep "ppp"
  532  ??  Ss     5:19,23 /usr/sbin/ppp -quiet -ddial -nat GTS
22503   1  S+     0:00,00 grep ppp
Вот. как-то так.

Аватара пользователя
BlackCat
прапорщик
Сообщения: 469
Зарегистрирован: 2007-10-16 22:40:42

Re: некорректно работает pf при подключении PPPoE

Непрочитанное сообщение BlackCat » 2010-05-27 10:46:25

yuretz писал(а):Вероятно имелось в виду pfctl -sr и sf
Пьяная была - не помню :smile:.
=====
Лирическое отступление. Смотрим на правила и видим, что доступ разрешён всем ("pass ... from any to any"). Далее на выходе из интерфейса узлы из таблицы <allow_nat> проходят через NAT, встроенный в pf. По-идее, пакеты от узлов не прошедших через NAT очень быстро будут пребиты на просторах интернета, что у вас и получалось с прежними настройками.
Когда вы перешли на PPPoE, вы начали использовать демон ppp, который по-умолчанию включается с поддержкой встроенного NAT и теперь пакеты не обработанные pf NAT обрабатываются ppp NAT и спокойно чувствуют себя в интернете, да ещё и возвращаются ответами :smile:.
=====
Что бы это исправить, в rc.conf добавьте строку ppp_nat="NO" и перезапустите демон ppp. После этого проконтролируйте, что ppp запустился без ключа -nat. Если это так, то интернет останется только для узлов из таблицы <allow_nat>.
Далее, было бы неплохо привести в порядок pf.conf, что бы действительно блокировать пакеты от определённых узлов. Но это на ваше усмотрение и к теме топика не относится.

yuretz
рядовой
Сообщения: 20
Зарегистрирован: 2009-12-22 7:52:57

Re: некорректно работает pf при подключении PPPoE

Непрочитанное сообщение yuretz » 2010-05-27 11:01:06

пОнято, принято :) спасибо за совет, буду пробовать. еще бы выяснить, какого... правила не грузятся автоматически, но это, как было сказано, к теме топика не относится, заведу новый :)

Еще раз спасибо, тему можно закрыть :)

yuretz
рядовой
Сообщения: 20
Зарегистрирован: 2009-12-22 7:52:57

Re: некорректно работает pf при подключении PPPoE

Непрочитанное сообщение yuretz » 2010-05-28 5:38:18

может кому пригодится - нашел решение.
в правилах pf вместо

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

pass ... from $ext_if ...
поставил

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

pass ... from ($ext_if)
все заработало!
BlackCat еще раз спасибо за ликбез, тема закрыта.