PF firewall

From
Yuri Chumakov (2:5079/65.2)
To
Denis Shaposhnikov
Date
2006-11-11T03:05:58Z
Area
RU.UNIX.BSD
Привет Denis!

09 ноября 2006 12:08, Denis Shaposhnikov писал Yuri Chumakov:

Yuri>> #ext_if="{ xl1, tun0, ng0 }" # external interface name
Yuri>> nat on $ext_if from $internal_net to any -> $ext_if

Yuri>> По понятным причинам, нат нужен на всех 3-х интерфейсах. НО!!!
Yuri>> Если раскоментировать первую строку, где есть все 3 интерфейса,
Yuri>> то ната не будет нигде, так как ng0 - нет в системе.
DS> Ты точно уверен, что NAT'а не будет НИГДЕ?
Мало того - не будет вообще ни одного правила. Говорит, типа, "кто такой ng0 - не знаю, и правила загружать не буду вообще".

DS> Берут меня сомнения в этом. Посмотри `pfctl -sr`, что у тебя получилось
DS> вместо твоего правила `nat on`, после раскрытия списка.
в -sr нет правил ната, а в -sn:
  =================== Cut ===================
nat on xl1 inet from 192.168.0.0/24 to any -> { 10.10.247.63, 10.10.103.235 } round-robin
nat on tun0 inet from 192.168.0.0/24 to any -> { 10.10.247.63, 10.10.103.235 } round-robin
rdr on xl0 inet proto tcp from 192.168.0.0/24 to any port = http -> 127.0.0.1 port 3128
rdr on xl0 inet proto tcp from 192.168.0.0/24 to any port = 8080 -> 127.0.0.1 port 3128
  ================= End cut =================

Всё вполне прилично. Смущает немного round-robin, но это должно решиться, когда я научусь указывать адрес интерфейса в правиле, где участвует сам интерфейс, или просто укажу nat on tun0 from $internal_net to any -> tun0.

Однако удручает тот момент, что нельзя указать таблицу в районе nat on <table>.
Это решило-бы проблему перегрузки правил добавлением/убиранием имени интерфейса в таблице. А так, если не найду способа реализовать это в пределах одного файла, то придется где-то еще рисовать отдельный файл, почти копию. :(

Что такое anchor - я еще не понял...

И как будет выглядеть self - тоже еще не представляю. Например:

pass in quick on $ext_if proto udp from any to $ext_if port = 53

заменить на

pass in quick on $ext_if proto udp from any to self port = 53

DS> Думается мне, белиберда там получается, 9 правил (при
DS> раскомментированном ext_if), вместо 3-х, как ты, вероятно, хотел.
DS> Попробуй заменить эту строку на три отдельных `nat on`, с явным
DS> указанием интерфейса.
на момент запуска системы, и старта pf - ng0 в системе нет. Получается рисуем два ната, а третий при поднятии интерфейса из соседнего файла? Так не интересно... Ибо в параллель надо поднимать 60% (грубо говоря, дублировать все правила, кроме обработки локального траффика) конфига.

DS> После этого настрой то, что у тебя ng0 поднимает,
Это mpd.

DS> так, что бы оно запускало скрипт после, установления сессии, из
DS> которого ты будет выполнять `/etc/rc.d/pf reload`.
ng0 поднимается иногда. "иногда" в данном случае временной интервал от нескольких часов до нескольких дней. Короче когда инет понадобился - тогда и запускаю.

До встречи, с уважением Yuri Chumakov

--- GoldED+/W32 1.1.5-030809
 * Origin: Default origin (2:5079/65.2)
SEEN-BY: 50/12 203 51/7 400/814 450/186 1024 451/30 461/435 550/196 5030
SEEN-BY: 4614/20 4635/4 5000/5000 5011/13 5012/46 5014/33 5014 5015/28 5019/31
SEEN-BY: 5020/154 175 400 545 549 758 1523 1604 1630 2142 2238 2395 2450 2590
SEEN-BY: 5020/2871 4441 5021/3 29 5022/128 5025/3 750 5027/12 5029/32 5030/49
SEEN-BY: 5030/479 500 556 557 606 644 792 966 1063 1080 1228 1327 1375 1416
SEEN-BY: 5030/1487 1492 1520 1522 1543 1900 1957 1997 2828 5031/7 47 70
SEEN-BY: 5035/38 5040/47 5042/13 5045/7 5049/50 97 5054/1 4 8 9 11 28 35 36 37
SEEN-BY: 5054/45 63 66 67 70 75 84 85 5055/95 5056/12 5059/9 37 5062/1 10
SEEN-BY: 5063/3 5064/7 5068/1 5076/1 5077/70 5079/46 56 65 67 5080/80 1003
SEEN-BY: 5082/6 5083/21 5084/9 5085/13 5090/108 5094/4 5095/20 5096/18 5099/11
SEEN-BY: 6001/10
PATH: 5079/65 46 5030/966 5020/4441 545 5054/1 37