Procedimento para compilar o Kernel FreeBSD e ativar o Firewall IPFW:
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
1 - Inicialmente vamos instalar em uma máquina a versão mais recente do FreeBSD (no meu caso 13.1). Durante a instalação não esquecer de marcar para instalação os arquivos do diretório src:
2 - Depois da instalação do Sistema Operacional, efetuar as configurações de rede de acordo com sua necessidade no seu /etc/rc.conf:
3 - Entrar no diretório /usr/src/sys/amd64/conf:
# cd /usr/src/sys/amd64/conf
4 - Copiar o arquivo GENERIC (kernel padrão que vem no SO) com o nome do seu novo kernel:
# cp GENERIC NOVOFW
5 - Agora que você já fez o backup do kernel principal, retire ou acrescente as linhas necessárias para habilitar ou retirar um serviço do SO:
– 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
6 - Depois que terminar de alterar o nome do Kernel (ident), vamos acrescentar as linhas que vão ativar o firewall no SO, pode acrescentar no final do arquivo, segue abaixo um exemplo:
### 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:
7 - Depois de salvar o arquivo, vamos compilar nosso novo Kernel. Vamos usar o comando config:
# 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.
8 - Vamos editar o rc.conf e acrescentar as linhas:
# 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)
9 - Feito isso, vamos criar nosso arquivo que conterá as regras do nosso firewall:
# touch /usr/local/etc/ipfw.regras
10 - Depois de criado, vamos acrescentar nossas regras. Por segurança qualquer regra que venha a ser criada futuramente é aconselhavel que, todas, sejam acrescentada também no arquivo. Caso o computador reinicie todas as regras são carregadas na hora do boot, se não criarmos este arquivo, quando o computador é inicializado as regras que antes estavam na memoria se perderão.
– 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