===== 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
=== 11 - Feito isso, agora é só reiniciar o computador e efetuar os testes no ipfw: ===