Ребята сильно не пинайте начинающего.Вообщем сделал такой конфиг:
int_if="em1" #внутренний интерфейс в мою локальную сеть
ext_if="tun0" # виртульный интерфейс после поднятия pptp
lannet="192.168.0.0/24" #внутренняя моя локалка
comp="192.168.0.10"allow_service="{http,https,smtp,pop3,domain}"
set skip on lo0
set skip on $int_ifscrub in all
nat on $ext_if from $int_if:network to any -> ($ext_if)
#rdr pass on $ext_if proto tcp from any to ($ext_if) port rdp -> $comp port rdp
#rdr pass on $ext_if proto tcp from any to ($ext_if) port rdp -> $compblock all
pass quick proto tcp from any to any port 1723
pass quick proto gre allpass out on $ext_if proto {tcp,udp} from (self) to any port domain keep state
pass out on $ext_if proto tcp from (self) to any port http keep state#pass out on $ext_if proto {tcp,udp} from $lannet to any port $allow_service kee
pass inet proto icmp allВ чем смысл, а точнее в чем его нет.
Данный конфиг пропускает пакеты от всех клиентов моей локалки.
Хотя по конфигу он должен пропускать исходящие пакеты непосредственно с машины - шлюза.Что не так можете пояснить?
Да еще читал что такая роблема может иметь место когда интерфейс внешний виртуальный и IP адрес динамический - у меня все именно так. Для этого внешний интерфейс $ext_if я поставил в скобки
Дайте вывод:
#ifconfig -a
#route -rn
#pfctl -sn
#pfctl -srps: http://www.openbsd.org/faq/pf/ru/index.html
http://www.openbsd.org/faq/pf/index.html
pfctl -f /etc/pf.conf ?
pfctl -e ?
> Данный конфиг пропускает пакеты от всех клиентов моей локалки.
> Хотя по конфигу он должен пропускать исходящие пакеты непосредственно с машины -
> шлюза.Напиши подробнее, что и куда должно пропускаться и что не должно.
> set skip on $int_ifесли $int_if пропускаете то конечно все будет пропускаться ;)
> nat on $ext_if from $int_if:network to any -> ($ext_if)
а потом все натите
> Данный конфиг пропускает пакеты от всех клиентов моей локалки.
так и должен пропускать
> Хотя по конфигу он должен пропускать исходящие пакеты непосредственно с машины -
> шлюза.а что разве не пропускает?
>set skip on $int_ifЧитайте этот кусочек мана до полного понимая.
set skip on <ifspec>
List interfaces for which packets should not be filtered.
Packets passing in or out on such interfaces are passed as if pf
was disabled, i.e. pf does not process them in any way. This can
be useful on loopback and other virtual interfaces, when packet
filtering is not desired and can have unexpected effects.
Да верно все, я сглупил конечно же.Подскажите а как тогда переделать мой конфиг, чтобы допустим пользователи локалки ходил по http а шлюз - машина с pf имел доступ только во внешний мир по smtp, но если можно отключив фильтрацию на внутреннем интерфейсе ?
Это реально вообще сделать, если да подскажите как ?
> если можно отключив фильтрацию на
> внутреннем интерфейсе ?а в чем смысл ?
> Это реально вообще сделать, если да подскажите как ?Не очень понял вашу хотелку...
Условия:
все запрещено.
трафик локальной сети ходит через шлюз и не фильтруется
из локальной сети в мир разрешен только www. (а как быть скажем с dns???)
непосредственно со шлюза разрешен только исходящий smtpвсе так?
>> Это реально вообще сделать, если да подскажите как ?
> Не очень понял вашу хотелку...
> Условия:
> все запрещено.
> трафик локальной сети ходит через шлюз и не фильтруется
> из локальной сети в мир разрешен только www. (а как быть скажем
> с dns???)
> непосредственно со шлюза разрешен только исходящий smtp
> все так?Да + днс от шлюза и от локалки конечно разрешены.
Все так.
Как то так
nat pass on $ext_if inet proto tcp from ($int_if:network) to any port www -> ($ext_if:0)
# для DNS лучше не any, а ip DNS серверов провайдера. А еще лучше поднять свой на шлюзе.
nat pass on $ext_if inet proto {tcp,udp} from ($int_if:network) to any port domain -> ($ext_if:0)block all
pass out on $ext_if inet proto tcp from self to any port smtp
pass out on $ext_if inet proto {tcp,udp} from self to any port domainpass on $int_if from ($int_if:network) to ($int_if:network)
pass in on $int_if inet proto tcp from ($int_if:network) to any port www
pass in on $int_if inet proto {tcp,udp} from ($int_if:network) to any port domain