O Linux pode ter uma reputação de segurança, mas não é perfeito. Muitas distribuições também não têm os melhores padrões de segurança, portanto, é melhor implementar algumas das melhores práticas de segurança. Um exemplo é o uso de um firewall.
Existem algumas opções para firewalls no Linux, mas a maioria são apenas wrappers em torno do iptables. Neste guia, mostraremos como trabalhar diretamente com iptables.
O que é Iptables?
Iptables é o firewall do kernel do Linux. Ele vem com todas as distribuições do Linux e é a maneira mais direta de controlar o tráfego que entra e sai do seu computador.
Iptables tem a reputação de ser complexo, e pode ser. Você não precisa saber tudo sobre iptables para usá-lo efetivamente em seu desktop. Você só precisa de algum conhecimento básico de como funciona e como suas regras são estruturadas.
Estrutura de Comando
Todas as regras do iptables seguem a mesma estrutura básica. Cada regra é um comando de linha única para iptables que informa como tratar o tráfego em uma porta específica. Dê uma olhada no exemplo abaixo:
-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport 80 -j ACCEPT
Isso pode parecer muito, mas é muito simples quando você divide. Primeiro, esta regra começa com -A
porque ele será anexado às suas regras de iptables.
A seguir, o -i
flag especifica a interface para a qual a regra se destina. Neste caso, é eth0
. Ao escrever suas próprias regras, certifique-se de saber por qual interface está conectado à rede.
A seguinte bandeira, -p
, nomeia o protocolo. Esta regra é para tcp
, que é o tráfego da web.
o -m
bandeira é um pouco diferente. É usado para afirmar que existe uma condição que deve ser atendida para que o tráfego não seja rejeitado. A condição nesta regra é o estado.
O estado é na verdade a próxima bandeira. Você precisa dar --state
uma lista de estados aceitáveis escritos em maiúsculas e separados por vírgulas. Esta regra aceita conexões novas e estabelecidas.
A penúltima sinalização aqui é --sport
. Significa “porta de origem” e informa ao iptables de onde o tráfego está vindo. Há também um --dport
sinalizador que significa “porta de destino”. É usado para OUTPUT
regras para tratar de qual porta o tráfego está chegando.
Finalmente, há o -j
bandeira. Diz ao iptable para qual ação “pular”. Neste caso, deveria ACCEPT
o tráfego que atenda às condições anteriores.
Usando um arquivo
Você pode inserir suas regras no iptables manualmente, uma por uma. Isso é extremamente tedioso e é muito fácil perder a noção de onde você está e do que está fazendo. É muito melhor criar um arquivo de regras que você possa importar para o iptables de uma vez.
Não importa onde você cria o arquivo. As pessoas até os fazem no /tmp
porque o iptables armazena o resultado depois de importado.
Crie seu arquivo. Este guia vai usar /tmp/iptables-ip4
. No arquivo, adicione as duas linhas a seguir. Todas as suas regras irão entre eles.
*filter # Your Rules Here COMMIT
Crie suas regras
Você pode começar a configurar suas regras. Estas são apenas sugestões. Obviamente, se você estiver executando outros serviços ou precisar de outras portas abertas, você certamente pode ajustar algumas coisas ou adicionar suas próprias regras.
Loopback
A interface de loopback é uma interface interna usada pelo Linux.
-A INPUT -i lo -j ACCEPT -A OUTPUT -o lo -j ACCEPT
Ping
Este é uma questão de preferência. Muitas pessoas não gostam de permitir ping em seus desktops. Pode ser útil, entretanto, para testar conexões. Se você deseja permitir o ping, adicione as regras abaixo. Se não, exclua-os.
-A INPUT -i eth0 -p icmp -m state --state NEW --icmp-type 8 -j ACCEPT -A INPUT -i eth0 -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT -A OUTPUT -o eth0 -p icmp -j ACCEPT
A teia
Obviamente, você deseja se conectar à web. Por outro lado, você não deseja permitir conexões originadas da Internet.
-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport 80 -j ACCEPT -A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport 443 -j ACCEPT -A OUTPUT -o eth0 -p tcp -m tcp --dport 80 -j ACCEPT -A OUTPUT -o eth0 -p tcp -m tcp --dport 443 -j ACCEPT
Você também precisará permitir conexões DNS para que seu computador possa usar URLs em vez de apenas endereços IP, porque isso não seria muito conveniente. Substitua o endereço IP do seu roteador pelo usado aqui.
-A INPUT -i ens3 -s 192.168.1.1 -p udp --sport 53 -m state --state ESTABLISHED,RELATED -j ACCEPT -A OUTPUT -o ens3 -d 192.168.1.1 -p udp --dport 53 -m udp -j ACCEPT
Tempo
A maioria dos desktops Linux usa NTP para definir e manter a hora do sistema na Internet. Você precisa permitir que seu computador se conecte a um servidor NTP para obter a hora.
-A INPUT -i eth0 -p udp -m state --state ESTABLISHED,RELATED --dport 123 -j ACCEPT -A OUTPUT -o eth0 -p udp -m udp --sport 123 -j ACCEPT
Impressão
A menos que esteja usando uma impressora USB ou um servidor de impressão externo, você precisa habilitar as conexões com o CUPS.
-A INPUT -p udp -m udp --dport 631 -j ACCEPT -A INPUT -p tcp -m tcp --dport 631 -j ACCEPT -A OUTPUT -p udp -m udp --sport 631 -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 631 -j ACCEPT
O email
Você provavelmente também deseja enviar e receber e-mails. O email pode ser complicado. As portas permitidas aqui são as portas de e-mail SSL. Se você precisar usar e-mail não seguro, substitua essas portas.
# IMAP -A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport 993 -j ACCEPT -A OUTPUT -o eth0 -p tcp -m tcp --dport 993 -j ACCEPT # POP3 -A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport 995 -j ACCEPT -A OUTPUT -o eth0 -p tcp -m tcp --dport 995 -j ACCEPT # SMTP -A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport 465 -j ACCEPT -A OUTPUT -o eth0 -p tcp -m tcp --dport 465 -j ACCEPT
SSH
Para utilizar totalmente as conexões SSH, você precisa permitir a entrada e a saída por SSH.
# Input -A INPUT -i ens3 -p tcp -m state --state NEW,ESTABLISHED --dport 22 -j ACCEPT -A OUTPUT -o ens3 -p tcp -m state --state ESTABLISHED --sport 22 -j ACCEPT # Output -A OUTPUT -o ens3 -p tcp -m state --state NEW,ESTABLISHED --dport 22 -j ACCEPT -A INPUT -i ens3 -p tcp -m state --state ESTABLISHED --sport 22 -j ACCEPT
DHCP
A maioria dos desktops Linux usa DHCP para receber automaticamente um endereço IP de um roteador. O DHCP usa suas próprias portas, portanto, elas também precisam estar acessíveis. Se estiver usando um IP estático, você não precisa dessas regras.
-A INPUT -i eth0 -p udp -m state --state ESTABLISHED,RELATED --sport 67:68 -j ACCEPT -A OUTPUT -o eth0 -p udp -m udp --dport 67:68 -j ACCEPT
Rejeitar tudo o mais
Finalmente, você dirá ao iptables para rejeitar absolutamente tudo que você não permitiu explicitamente nas regras acima.
-A INPUT -j REJECT -A FORWARD -j REJECT -A OUTPUT -j REJECT
Afinal, suas regras devem ser parecidas com estas.
Importando suas regras
Agora você tem uma lista de regras de iptables totalmente funcional. Você só precisa entregá-lo ao iptables para usar.
Caso algumas regras tenham sido adicionadas ao longo do tempo, limpe-as. Após esses comandos, você verá os padrões que permitem tudo.
sudo iptables -F && sudo iptables -X
Sem eles, você pode restaurar os novos a partir do arquivo que criou.
sudo iptables-restore < /tmp/itpables-ip4
Seu computador agora está usando as novas regras de iptables. Você pode verificá-los.
sudo iptables -S
No entanto, eles ainda não são permanentes. Se você reiniciar seu computador agora, você terá um realmente péssima hora.
Tornando-os permanentes
Existem várias maneiras de tornar as regras permanentes. Eles são diferentes para cada distribuição. Este guia se concentrará em sistemas baseados em Debian e Ubuntu, uma vez que são os mais populares.
Existe um pacote disponível, chamado iptables-persistant
, que lida com salvar e restaurar iptables. Tudo que você precisa fazer é instalá-lo.
sudo apt install iptables-persistent
Durante a instalação, o pacote perguntará se você deseja salvar sua configuração. Selecione “Sim”.
No futuro, se desejar adicionar regras, você pode salvar novamente executando o seguinte comando.
sudo service netfilter-persistent save
Agora você está no controle do tráfego que flui pelo computador. Certamente há mais que você pode fazer com o iptables, mas primeiro você deve se sentir seguro com o básico.