Firewalls com o FireHOL
O FireHOL é um interpretador de regras para firewall (stateful), em Linux. Lê um ficheiro de script e gera as regras iptables adequadas.
Em casa uso-o como forma de gerar as regras para a minha gateway/servidor. Em parte porque ainda não me dei ao trabalho de aprender a usar o comando iptables, e também porque aquilo consegue gerar de uma forma simples uma série de regras que me dariam um trabalhão para gerar manualmente como, por exemplo, bloquear conexões de endereços IP unroutable[1] vindos da Internet.
Este pequeno script fecha todas as portas da máquina (a directiva "policy drop", que até não era necessária pois está activa por omissão) e abre apenas o ssh e a impressão remota usando CUPS/IPP. Este último serviço fica apenas acessível à máquina myworkstation. Por fim, a directiva "client all accept" indica que todas as ligações que partem desta máquina são permitidas.
A linguagem é bastante directa e permite fazer scripts de fácil compreensão, mas é também poderosa e extensível. O FireHOL é um script bash e permite incluir no script de configuração estruturas de controlo da shell, como if ou for. Também permite criar regras mais complexas do que simples accepts/drops/rejects, como NAT, redirecções de portas e também permite criar proxies transparentes.
O curioso é que suporta serviços, como o NFS, que não são deterministas na porta em que ficam à escuta. O FireHOL resolve isto recorrendo ao comando "rpcinfo -p", durante a inicialização, para descobrir quais as portas que deve abrir. Isto funciona quer a firewall esteja na mesma máquina que o servidor NFS, quer esteja numa máquina remota.
Esta semana queria colocar o FireHOL num servidor e descobri que não suportava NIS nem o servidor de quotas remotas NFS. Fiz um Request For Enhancement e afinal a versão que está no CVS já suporta o rquotad, mas não NIS. Como bom membro da comunidade que sou, acabei por fazê-lo eu mesmo, basicamente pegando nas regras do NFS.
Penso que virá incluído na próxima versão, vamos ver.
O que é pena foi não ter conseguido criar um suporte a 100% para NIS, pois é impossível conciliar uma firewall e a replicação master/slave quando esta existe, pois é lançado um novo daemon (yppush) a cada evento de replicação e é impossível determinar as portas onde vai escutar a tempo de inicialização. Não se pode meter uma firewall entre dois servidores, apenas entre estes e os clientes.
Actualização: todas as modificações que fiz ao FireHOL estão presentes na versão lançada recentemente. :)
[1] Endereços reservados para uso em redes internas. Podem indicar intenções suspeitas se aparecerem vindos da Internet.
Em casa uso-o como forma de gerar as regras para a minha gateway/servidor. Em parte porque ainda não me dei ao trabalho de aprender a usar o comando iptables, e também porque aquilo consegue gerar de uma forma simples uma série de regras que me dariam um trabalhão para gerar manualmente como, por exemplo, bloquear conexões de endereços IP unroutable[1] vindos da Internet.
version 5
interface eth0 lan
policy drop
server ssh accept
server cups accept src myworkstation
client all accept
Este pequeno script fecha todas as portas da máquina (a directiva "policy drop", que até não era necessária pois está activa por omissão) e abre apenas o ssh e a impressão remota usando CUPS/IPP. Este último serviço fica apenas acessível à máquina myworkstation. Por fim, a directiva "client all accept" indica que todas as ligações que partem desta máquina são permitidas.
A linguagem é bastante directa e permite fazer scripts de fácil compreensão, mas é também poderosa e extensível. O FireHOL é um script bash e permite incluir no script de configuração estruturas de controlo da shell, como if ou for. Também permite criar regras mais complexas do que simples accepts/drops/rejects, como NAT, redirecções de portas e também permite criar proxies transparentes.
O curioso é que suporta serviços, como o NFS, que não são deterministas na porta em que ficam à escuta. O FireHOL resolve isto recorrendo ao comando "rpcinfo -p", durante a inicialização, para descobrir quais as portas que deve abrir. Isto funciona quer a firewall esteja na mesma máquina que o servidor NFS, quer esteja numa máquina remota.
Esta semana queria colocar o FireHOL num servidor e descobri que não suportava NIS nem o servidor de quotas remotas NFS. Fiz um Request For Enhancement e afinal a versão que está no CVS já suporta o rquotad, mas não NIS. Como bom membro da comunidade que sou, acabei por fazê-lo eu mesmo, basicamente pegando nas regras do NFS.
Penso que virá incluído na próxima versão, vamos ver.
O que é pena foi não ter conseguido criar um suporte a 100% para NIS, pois é impossível conciliar uma firewall e a replicação master/slave quando esta existe, pois é lançado um novo daemon (yppush) a cada evento de replicação e é impossível determinar as portas onde vai escutar a tempo de inicialização. Não se pode meter uma firewall entre dois servidores, apenas entre estes e os clientes.
Actualização: todas as modificações que fiz ao FireHOL estão presentes na versão lançada recentemente. :)
[1] Endereços reservados para uso em redes internas. Podem indicar intenções suspeitas se aparecerem vindos da Internet.
O último software para gerar scripts iptables que experimentei foi o http://kmyfirewall.sourceforge.net. Por acaso gostei e é bastante simples para definirmos o que queremos.
Por
Gothic, em 28 Outubro, 2004 20:10
Pelo que me pareceu, esse programa é mais um frontend para o comando iptables, enquanto o FireHOL, tal como diz o seu autor:
«FireHOL is a language to express firewalling rules, not just a script that produces some kind of a firewall.»
Por
Carlos Rodrigues, em 02 Novembro, 2004 03:51