OpenBSD pf port reencaminhando várias regras

4

Eu tenho algumas dúzias de servidores por trás do firewall do OpenBSD com encaminhamento de porta. A maioria das regras são muito semelhantes e diferem apenas em IPs ou, às vezes, em portas encaminhadas, portanto, quero compactá-las para remover a repetição excessiva, mas descobri que é impossível usar tabelas com regras rdr-to . Existe alguma maneira de melhorar essa configuração? Pode haver opção de usar pf macros para gerar várias regras de uma só vez? Eu não posso usar o pré-processador externo no momento.

Exemplo de conjunto de regras:

pass in  on $extif proto tcp from any     to 10.0.0.213   port {25,80,443} rdr-to 172.16.1.193
pass in  on $intif proto tcp from $intnet to 10.0.0.213   port {25,80,443} rdr-to 172.16.1.193
pass out on $intif proto tcp from any     to 172.16.1.193 port {25,80,443} received-on $intif nat-to $intif

pass in  on $extif proto tcp from any     to 10.0.0.214   port {25,80,443} rdr-to 172.16.1.194
pass in  on $intif proto tcp from $intnet to 10.0.0.214   port {25,80,443} rdr-to 172.16.1.194
pass out on $intif proto tcp from any     to 172.16.1.194 port {25,80,443} received-on $intif nat-to $intif

pass in  on $extif proto tcp from any     to 10.0.0.215   port {25,80,443,3389} rdr-to 172.16.1.195
pass in  on $intif proto tcp from $intnet to 10.0.0.215   port {25,80,443,3389} rdr-to 172.16.1.195
pass out on $intif proto tcp from any     to 172.16.1.195 port {25,80,443,3389} received-on $intif nat-to $intif
    
por AlexD 23.07.2011 / 07:20

1 resposta

3

No pf.conf (5) manpage:

Translation options apply only to packets that pass through the specified interface, and if no interface is specified, translation is applied to packets on all interfaces. For instance, redirecting port 80 on an external interface to an internal web server will only work for connections originating from the outside. Connections to the address of the external interface from local hosts will not be redirected, since such packets do not actually pass through the external interface. Redirections cannot reflect packets back through the interface they arrive on, they can only be redirected to hosts connected to different interfaces or to the firewall itself.

Você pode condensar algumas de suas regras, não especificando em qual interface deseja que o redirecionamento ocorra e permitir que a pf avalie isso para você.

Por exemplo:

pass in on $extif proto tcp from any to 10.0.0.213 port {25,80,443} rdr-to 172.16.1.193
pass in on $intif proto tcp from $intnet to 10.0.0.213 port {25,80,443} rdr-to 172.16.1.193

Pode ser reescrito como:

pass in proto tcp from any to 10.0.0.213 port {25, 80, 443} rdr-to 172.16.1.193
  • O tráfego de entrada destinado a 10.0.0.213 em $extif será redirecionado para 172.16.1.193.
  • O tráfego de entrada destinado a 10.0.0.213 em $intif será redirecionado para 172.16.1.193.
  • Isso também permitirá que o tráfego que não faz parte do $intnet seja redirecionado também. Isso pode ou não ser desejável.

Sem ver todo o seu conjunto de regras ou realmente saber o que você está tentando realizar, só posso oferecer um exemplo de prova de conceito.

Uma nota final: eu realmente evitaria fazer isso. Existe uma tendência (pelo menos eu tenho) de querer escrever o menor número possível de regras fazendo com que uma regra faça mais do que "uma coisa". Isto é mau. Os firewalls já são terrivelmente complicados e aparentemente sempre estão mal configurados; Por que tornar mais difícil para você mesmo criar um conjunto de regras bizantino? Um conjunto de regras mais longo com regras mais simples será mais fácil de entender, manter e depurar. Evite a tentação de ser excessivamente inteligente.

    
por 27.07.2011 / 03:54