同步两台防火墙的pf.conf

当两台防火墙需要做carp时,如果两台防火墙的网卡型号不尽相同,那么它们pf.conf中的网卡名称是不一致的。此时如果需要同步两台防火墙的pf.conf的话,还需要手工更改其中一台的pf.conf配置,比较麻烦,这个时候可利用pf.conf的include特性。

将两台防火墙特别的部分放在pf.conf中,将相同的部分放到/etc/pf/filter.conf中,然后在pf.conf中。

include /etc/pf/filter.conf

两台防火墙只需要同步/etc/pf/filter.conf即可。

pf的执行顺序问题

默认的pf策略为pass all,官方文档建议是先block all,然后再一条条添加rule。

小技巧

  1. pf.conf所涉及到的网口如果没有启用的话,那么执行pfctl -nf pf.conf会很慢。

  2. VMware vSwitch promisc

    在ESXi中部署两台OpenBSD,配置好物理端口、carp、pfsync和pf.conf,但是服务器无法ping同VIP,原因是vSwitch需要打开Promisc模式。

  3. 网卡直通模式

    有时候希望pf直接放通某个网卡数据包,那就直接用`set skip on { lo, $sync_if }`,简单,便宜又好用。

  4. 通过systat rules可以实时看到数据包命中rules的数量。

排错

$ doas systat rules
    2 users    Load 0.26 0.29 0.22 (1-29 of 64)        Sat Sep 28 22:54:28 2013

RULE  ACTION   DIR LOG Q IF     PR        K     PKTS    BYTES   STATES   MAX INFO
   0  Block    Out Log   fxp2                      8      324        0       drop all
   1  Pass     Out Log Q fxp2             K     6514  5259596      269       inet from ! (fxp2) to any                                                                
   2  Pass     Any Log   fxp0   pfsync    K        0        0        0       inet all
   3  Pass     Any Log   fxp2   carp      K        0        0        0       inet all
   4  Pass     Any Log   fxp1   carp      K        0        0        0       inet all
   5  Pass     In  Log Q fxp2   tcp       K        0        0        0       inet from any to 221.182.254.167/32 port = 8000
   6  Pass     Any Log Q fxp1   tcp       K        0        0        0       inet from any to 192.168.33.84/32 port = 8000
   7  Pass     In  Log Q fxp2   tcp       K        0        0        0       inet from any to 221.182.254.167/32 port = 12001
   8  Pass     Any Log Q fxp1   tcp       K        0        0        0       inet from any to 192.168.33.84/32 port = 12001
   9  Pass     In  Log Q fxp2   tcp       K        0        0        0       inet from any to 221.182.254.167/32 port = 13419  
  10  Pass     Any Log Q fxp1   tcp       K        0        0        0       inet from any to 192.168.33.84/32 port = 13419
  11  Pass     In  Log Q fxp2   tcp       K        0        0        0       inet from any to 221.182.254.167/32 port = 8082