Para essa instalação, é pré-requisito que você tenha instalado os arquivos do Kernel presentes no diretório /usr/src. Caso não tenha instalado durante a instalação normal do sistema, você pode baixar no link http://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/, escolha de acordo com a arquitetura do seu processador e a versão do SO FreeBSD que você instalou, no meu caso estou usando a versão 13.1.
Links de auxílio:
https://www.freebsd.org/doc/handbook/firewalls-ipfw.html
https://www.cyberciti.biz/faq/howto-setup-freebsd-ipfw-firewall
https://www.freebsd.org/doc/handbook/kernelconfig-building.html
https://acme.com/firewall.html
https://sempreupdate.com.br/freebsd-como-configurar-um-firewall-usando-ipfw
https://www.freebsd.org/doc/pt_BR/articles/linux-users/firewall.html
# cd /usr/src/sys/amd64/conf
# cp GENERIC NOVOFW
– No nosso caso vamos recompilar o kernel para ativar o firewall IPFW:
– Edite o arquivo NOVOFW:
# ee NOVOFW
– A primeira linha que você vai editar será a linha “ident”, ela fica sempre abaixo da linha “cpu”. Esta linha você vai por o nome do seu novo Kernel, como pode ver ela mantem o nome do antigo Kernel “GENERIC”.
– Vamos alterar esta linha:
cpu HAMMER ident NOVOFW # Linha que deve ser alterada
### IPFirewall options IPFIREWALL # enables IPFW options IPFIREWALL_VERBOSE # enables logging for rules with log keyword to syslogd(8) options IPFIREWALL_VERBOSE_LIMIT=400 # limits number of logged packets per-entry options IPFIREWALL_DEFAULT_TO_ACCEPT # sets default policy to pass what is not explicitly denied options IPFIREWALL_NAT # enables basic in-kernel NAT support options LIBALIAS # enables full in-kernel NAT support options IPFIREWALL_NAT64 # enables in-kernel NAT64 support options IPFIREWALL_NPTV6 # enables in-kernel IPv6 NPT support options IPFIREWALL_PMOD # enables protocols modification module support options IPDIVERT # enables NAT through natd(8) options IPSTEALTH options ROUTETABLES=10 ### Packet Filter device pf device pflog device pfsync options ALTQ options ALTQ_CBQ # Class Bases Queuing (CBQ) options ALTQ_RED # Random Early Detection (RED) options ALTQ_RIO # RED In/Out options ALTQ_HFSC # Hierarchical Packet Scheduler (HFSC) options ALTQ_PRIQ # Priority Queuing (PRIQ) options ALTQ_NOPCC # Required for SMP build ### Bridge interfaces device if_bridge ### CARP device carp ### IPSec device enc ### Granularidade de Processamento options HZ=2000 ### Tunning Apache options ACCEPT_FILTER_DATA options ACCEPT_FILTER_HTTP
– Salve o arquivo e vamos para o próximo passo:
# config novofw
– Se tudo estiver correto, você receberá a seguinte saída:
root@frw1:/usr/src/sys/amd64/conf # config NOVOFW Kernel build directory is ../compile/NOVOFW Don't forget to do ``make cleandepend && make depend''
– Nesta parte você irá seguir os passos da saída:
# cd ../compile/NOVOFW # make cleandepend && make depend
– Se tudo estiver correto você não receberá nenhuma mensagem de erro. Caso receba, volte para o Kernel que você customizou e verifique as novoas configurações. Terminando esse passo, siga para o próximo;
# make
– Se tudo estiver correto você não receberá nenhuma mensagem de erro. Caso receba, volte para o Kernel que você customizou e verifique as novoas configurações. Terminando esse passo, siga para o próximo;
# make install
– Se tudo estiver correto você não receberá nenhuma mensagem de erro. Caso receba, volte para o Kernel que você customizou e verifique as novoas configurações, terminando esse passo, siga para o próximo;
– Terminando este último passo, vamos ativar o firewall no /etc/rc.conf e acrescentar o diretório onde ficará nosso arquivo que conterá as regras do firewall. Para que sempre que o computador for reiniciado, ele carregue as regras no firewall.
# ee /etc/rc.conf
firewall_enable="YES" ## inicia o ipfw quando o computador é reiniciado firewall_script="/usr/local/etc/ipfw.regras" ## local onde se encontra o arquivo que conterá nossas regras de firewall (ipfw.regras)
# touch /usr/local/etc/ipfw.regras
– Abaixo segue o conteúdo básico de um arquivos contendo regras do firewall
#!/bin/sh # # regras do firewall # ## exemplo de criacao de variaveis fw="/sbin/ipfw" ## substitui o comando /sbin/ipfw dentro do arquivo # # exemplo de utilizacao de variavel # ## comando serve para limpar todas as regras o firewall $fw -f flush ## seria a mesma coisa que usar o comando /sbin/ipfw -f flush ## comando liberando todo o acesso via ssh para o firewall. Em modo stateless $fw add 100 allow tcp from any to me 22 $fw add 101 allow tcp from me 22 to any ## exempo de outra regra que liberaria o acesso via ssh de qualquer lugar para o firewall. Em modo stateful #$fw add 100 allow tcp from any to me keep-state # # Liberar icmp de todo lugar para todo lugar # $fw add 300 allow icmp from any to any ## comando que bloqueia tudo, exceto o que estiver liberado acima desta regra $fw add 65500 deny all from any to any ## funciona como um firewall de politica fechada, bloqueia tudo exceto o que ja esta liberado acima desta regra