IPTABLES VS FIREWALLD
Hoje veremos iptables e firewalld e aprenderemos sobre a história desses dois junto com a instalação e como podemos configurá-los para nossas distribuições Linux.
Vamos começar sem perder mais tempo.
Primeiro, precisamos saber o que é iptables. A maioria dos profissionais seniores de TI sabe disso e também costumava trabalhar com ele. Iptables é um aplicativo/programa que permite ao usuário configurar as tabelas de segurança ou segurança do firewall fornecidas pelo firewall do kernel Linux e pelas cadeias para que um usuário possa adicionar/remover regras de firewall de acordo com seus requisitos de segurança. O Iptables usa diferentes módulos de kernel e diferentes protocolos para que o usuário possa tirar o melhor proveito dele. Por exemplo, iptables é usado para IPv4 (IP versão 4/32 bits) e ip6tables para IPv6 (IP versão 6/64 bits) para tcp e udp. Normalmente, as regras do iptables são configuradas pelo Administrador do Sistema, Analista de Sistema ou Gerente de TI. Você deve ter privilégios de root para executar cada regra do iptables. O kernel do Linux usa a estrutura Netfilter para poder fornecer várias operações relacionadas à rede que podem ser executadas usando iptables. Anteriormente, o ipchains era usado na maioria das distribuições Linux para o mesmo propósito. Todas as regras do iptables são tratadas diretamente pelo próprio kernel do Linux e são conhecidas como tarefas do kernel. Quaisquer que sejam as ferramentas GUI ou outras ferramentas de segurança que você esteja usando para configurar a segurança do firewall do seu servidor, no final do dia, elas serão convertidas em regras de iptables e fornecidas ao kernel para realizar a operação.
A ascensão do iptables começou com o netfilter. Paul Rusty Russell foi o autor inicial e o principal think tank por trás do netfilter/iptables. Mais tarde, muitas outras pessoas de tecnologia se juntaram a ele para formar e construir a equipe principal do Netfilter e desenvolver e manter o projeto netfilter/iptables como um esforço conjunto, como muitos outros projetos de código aberto. Harald Welte foi o ex-líder até 2007 e depois Patrick McHardy foi o chefe até 2013. Atualmente, o chefe da equipe principal do netfilter é Pablo Neira Ayuso.
Para saber mais sobre o netfilter, visite este link. Para saber mais sobre a história do netfilter, visite este link.
Para saber mais sobre a história do iptables, visite este link.
Hoje em dia, todo kernel Linux vem com iptables e pode ser encontrado pré-construído ou pré-instalado em todas as distribuições Linux modernas famosas. Na maioria dos sistemas Linux, o iptables é instalado neste diretório /usr/sbin/iptables. Ele também pode ser encontrado em /sbin/iptables, mas como o iptables é mais um serviço do que um “binário essencial”, o local preferido permanece no diretório /usr/sbin.
Para Ubuntu ou Debian
sudo apt-get install iptables
Para CentOS
sudo yum install iptables-services
Para RHEL
sudo yum install iptables
Para saber sua versão do iptables, digite o seguinte comando em seu terminal.
sudo iptables --version
Para OpenSUSE 42.1, digite o seguinte para parar.
sudo /sbin/rcSuSEfirewall2 stop
Para começar de novo
sudo /sbin/rcSuSEfirewall2 start
No Ubuntu, digite o seguinte para parar.
sudo service ufw stop
Para começar de novo
sudo service ufw start
Para Debian e RHEL, digite o seguinte para parar.
sudo /etc/init.d/iptables stop
Para começar de novo
sudo /etc/init.d/iptables start
Para CentOS, digite o seguinte para parar.
sudo service iptables stop
Para começar de novo
sudo service iptables start
Para saber todas as regras que estão atualmente presentes e ativas em seus iprables, basta abrir um terminal e digitar o seguinte.
sudo iptables -L
Se não houver saídas de regras no iptables significa que se não houver regras adicionadas até agora no firewall do iptables, você verá algo como a imagem abaixo.
Na imagem acima, você pode ver que existem três (3) cadeias e são INPUT, FORWARD, OUTPUT e não existem regras. Na verdade ainda não adicionei nenhum.
Digite o seguinte para saber o status das cadeias do seu firewall iptables.
sudo iptables -S
Com o comando acima, você pode saber se suas cadeias estão aceitando ou não.
Limpe todas as regras do iptables
Para limpar todas as regras do seu firewall iptables, digite o seguinte. Isso normalmente é conhecido como liberar suas regras de iptables.
sudo iptables -F
Se você deseja liberar apenas a cadeia INPUT ou qualquer cadeia individual, emita os comandos abaixo de acordo com seus requisitos.
sudo iptables -F INPUT
sudo iptables -F OUTPUT
sudo iptables -F FORWARD
ACEITAR ou DROP Cadeias
Para aceitar ou descartar uma cadeia específica, emita qualquer um dos seguintes comandos em seu terminal para atender aos seus requisitos.
iptables --policy INPUT DROP
A regra acima não aceitará nada que chegue a esse servidor. Para reverter novamente para ACCEPT, faça o seguinte
iptables --policy INPUT ACCEPT
O mesmo vale para outras redes, como
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP
Nota: Por padrão, todas as cadeias de iptables ( INPUT, OUTPUT, FORWARD ) estão no modo ACCEPT. Isso é conhecido como comportamento padrão da cadeia de políticas.
Permitindo qualquer porta
Se você estiver executando qualquer servidor web em seu host, você deve permitir seu firewall iptables para que seu servidor escute ou responda à porta 80. Por padrão, o servidor web é executado na porta 80. Vamos fazer isso então.
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
Na linha acima, A significa anexar significa que estamos adicionando uma nova regra à lista iptables. INPUT significa cadeia INPUT. P significa protocolo e dport significa porta de destino. Por padrão, qualquer servidor web é executado na porta 80. Da mesma forma, você também pode permitir a porta SSH.
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Por padrão, o SSH é executado na porta 22. Mas é uma boa prática não executar o SSH na porta 22. Sempre execute o SSH em uma porta diferente. Para executar o SSH em uma porta diferente, abra o arquivo /etc/ssh/sshd_config em seu editor favorito e altere a porta 22 para outra porta.
Digamos que queremos bloquear a porta 135. Podemos fazer isso
sudo iptables -A INPUT -p tcp --dport 135 -j DROP
se você deseja bloquear seu servidor para iniciar qualquer conexão SSH do servidor para outro host/servidor, emita o seguinte comando
sudo iptables -A OUTPUT -p tcp --dport 22 -j DROP
Ao fazer isso, ninguém poderá usar seu servidor para iniciar uma conexão SSH a partir do servidor. A cadeia OUPUT irá filtrar e DROP qualquer conexão TCP de saída para outros hosts.
Permitindo IP específico com porta
sudo iptables -A INPUT -p tcp -s 0/0 --dport 22 -j ACCEPT
Aqui -s 0/0 representa qualquer fonte de entrada com qualquer endereço IP. Portanto, não há como o seu servidor responder a um pacote tcp cuja porta de destino é 22. Se você quiser permitir apenas um IP específico, use o seguinte.
sudo iptables -A INPUT -p tcp -s 12.12.12.12/32 --dport 22 -j ACCEPT
No exemplo acima, você está permitindo apenas que o endereço IP 12.12.12.12 se conecte à porta SSH. Os endereços IP restantes não poderão se conectar à porta 22. Da mesma forma, você pode permitir usando valores CIDR. Como
sudo iptables -A INPUT -p tcp -s 12.12.12.0/24 --dport 22 -j ACCEPT
O exemplo acima mostra como você pode permitir um bloco IP inteiro para aceitar conexão na porta 22. Ele aceitará IP a partir de 12.12.12.1 a 12.12.12.255.
Se você deseja bloquear esse intervalo de endereços IP, faça o inverso substituindo ACCEPT por DROP como a seguir
sudo iptables -A INPUT -p tcp -s 12.12.12.0/24 --dport 22 -j DROP
Portanto, não permitirá conexão na porta 22 dos endereços IP 12.12.12.1 a 12.12.12.255.
Bloqueando ICMP
Se quiser bloquear solicitações ICMP (ping) de e para o seu servidor, você pode tentar o seguinte. O primeiro bloqueará o não envio de solicitação de eco de ping ICMP para outro host.
sudo iptables -A OUTPUT -p icmp --icmp-type 8 -j DROP
Agora, tente fazer ping em google.com. Seu servidor OpenSUSE não será capaz de executar ping em google.com.
Se você quiser bloquear a solicitação de eco ICMP (ping) de entrada para o seu servidor, basta digitar o seguinte no seu terminal.
sudo iptables -I INPUT -p icmp --icmp-type 8 -j DROP
Agora, ele não responderá a nenhuma solicitação de eco de ping ICMP. Digamos que o endereço IP do seu servidor seja 13.13.13.13. E se você fizer ping nesse IP do seu servidor, verá que seu servidor não está respondendo a essa solicitação de ping.
Bloqueando porta MySql/MariaDB
Como o Mysql está mantendo seu banco de dados, você deve protegê-lo contra anexações externas. Permita que os endereços IP do seu servidor de aplicativos confiável se conectem apenas ao seu servidor MySQL. Para bloquear outros
sudo iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
Portanto, não será necessária nenhuma conexão MySql, exceto o bloco IP 192.168.1.0/24. Por padrão, o MySql é executado na porta 3306.
Bloqueando SMTP
Se você não estiver executando nenhum servidor de e-mail em seu servidor host ou se seu servidor não estiver configurado para funcionar como um servidor de e-mail, você deverá bloquear o SMTP para que seu servidor não envie spam ou e-mail para qualquer domínio. Você deve fazer isso para bloquear qualquer e-mail enviado do seu servidor. Para fazer isso,
sudo iptables -A OUTPUT -p tcp --dport 25 -j DROP
Bloquear DDoS
Todos nós estamos familiarizados com o termo DDoS. Para se livrar dele, emita o seguinte comando em seu terminal.
iptables -A INPUT -p tcp --dport 80 -m limit --limit 20/minute --limit-burst 100 -j ACCEPT
Você precisa configurar o valor numérico para atender às suas necessidades. Este é apenas um padrão a ser mantido.
Você pode proteger mais
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 1 > /proc/sys/net/ipv4/conf/lo/rp_filter
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
echo 1800 > /proc/sys/net/ipv4/tcp_keepalive_time
echo 1 > /proc/sys/net/ipv4/tcp_window_scaling
echo 0 > /proc/sys/net/ipv4/tcp_sack
echo 1280 > /proc/sys/net/ipv4/tcp_max_syn_backlog
Bloqueio de verificação de porta
Existem centenas de pessoas por aí para verificar as portas abertas do seu servidor e tentar quebrar a segurança do seu servidor. Para bloqueá-lo
sudo iptables -N block-scan
sudo iptables -A block-scan -p tcp —tcp-flags SYN,ACK,FIN,RST RST -m limit —limit 1/s -j RETURN
sudo iptables -A block-scan -j DROP
Aqui, block-scan é o nome de uma nova cadeia.
Bloqueando portas ruins
Pode ser necessário bloquear algumas portas defeituosas do seu servidor também. Aqui está como você pode fazer isso.
badport="135,136,137,138,139,445"
sudo iptables -A INPUT -p tcp -m multiport --dport $badport -j DROP
sudo iptables -A INPUT -p udp -m multiport --dport $badport -j DROP
Você pode adicionar mais portas de acordo com suas necessidades.
O Firewalld fornece um firewall gerenciado dinamicamente com suporte para zonas de rede/firewall que definem o nível de confiança das conexões ou interfaces de rede. Possui suporte para configurações de firewall IPv4, IPv6, pontes Ethernet e conjuntos de IP. Há uma separação entre opções de tempo de execução e configuração permanente. Ele também fornece uma interface para serviços ou aplicativos adicionarem regras de firewall diretamente.
O antigo modelo de firewall com system-config-firewall/lokkit era estático e cada alteração exigia uma reinicialização completa do firewall. Isso inclui também descarregar os módulos do kernel do firewall netfilter e carregar os módulos necessários para a nova configuração. O descarregamento dos módulos estava quebrando o firewall com estado e as conexões estabelecidas. O daemon do firewall, por outro lado, gerencia o firewall dinamicamente e aplica alterações sem reiniciar todo o firewall. Portanto não há necessidade de recarregar todos os módulos do kernel do firewall. Mas usar um daemon de firewall requer que todas as modificações do firewall sejam feitas com esse daemon para garantir que o estado no daemon e o firewall no kernel estejam sincronizados. O daemon de firewall não pode analisar regras de firewall adicionadas pelas ferramentas de linha de comando iptables e ebtables. O daemon fornece informações sobre as configurações atuais do firewall ativo via D-BUS e também aceita alterações via D-BUS usando métodos de autenticação PolicyKit.
Portanto, o firewalld usa zonas e serviços em vez de cadeias e regras para executar as operações e pode gerenciar regras dinamicamente, permitindo atualizações e modificações sem interromper as sessões e conexões existentes.
Possui os seguintes recursos.
- API D-Bus.
- Regras de firewall cronometradas.
- Linguagem rica para regras de firewall específicas.
- Suporte NAT IPv4 e IPv6.
- Zonas de firewall.
- Suporte para conjunto de IP.
- Registro simples de pacotes negados.
- Interface direta.
- Lockdown: Lista de permissões de aplicativos que podem modificar o firewall.
- Suporte para backends de firewall iptables, ip6tables, ebtables e ipset.
- Carregamento automático de módulos do kernel Linux.
- Integração com fantoche.
Para saber mais sobre o firewalld, visite este link.
Antes de instalar o firewalld, certifique-se de parar o iptables e também de que o iptables não esteja mais sendo usado ou funcionando. Para fazer isso,
sudo systemctl stop iptables
Isso impedirá que o iptables forme seu sistema.
E então certifique-se de que o iptables não seja mais usado pelo seu sistema, emitindo o comando abaixo no terminal.
sudo systemctl mask iptables
Agora, verifique o status do iptables.
sudo systemctl status iptables
Agora estamos prontos para instalar o firewalld em nosso sistema.
Para Ubuntu
Para instalá-lo no Ubuntu, você deve primeiro remover o UFW e depois instalar o Firewalld. Para remover o UFW, emita o comando abaixo no terminal.
sudo apt-get remove ufw
Após remover o UFW, emita o comando abaixo no terminal
sudo apt-get install firewall-applet
Ou
Você pode abrir o Ubuntu Software Center e procurar por “firewall-applet” e instalá-lo em seu sistema Ubuntu.
Para RHEL, CentOS e Fedora
Digite o comando abaixo para instalar o firewalld em seu sistema CentOS.
sudo yum install firewalld firewall-config -y
Antes de configurar o firewalld, devemos saber o status do firewalld após a instalação. Para saber disso, digite o seguinte.
sudo systemctl status firewalld
Como o firewalld funciona com base em zonas, precisamos verificar todas as zonas e serviços, embora ainda não tenhamos feito nenhuma configuração.
Para zonas
sudo firewall-cmd --get-active-zones
ou
sudo firewall-cmd --get-zones
Para saber a zona padrão, emita o comando abaixo
sudo firewall-cmd --get-default-zone
E, Para serviços
sudo firewall-cmd --get-services
Aqui, você pode ver os serviços cobertos pelo firewalld.
Uma observação importante é que, após cada modificação, você precisa recarregar o firewalld para que suas alterações possam ocorrer.
Para definir a zona padrão
sudo firewall-cmd --set-default-zone=internal
ou
sudo firewall-cmd --set-default-zone=public
Após alterar a zona, verifique se ela muda ou não.
sudo firewall-cmd --get-default-zone
sudo firewall-cmd --permanent --zone=public --add-port=80/tcp
Isso adicionará a porta TCP 80 na zona pública do firewalld. Você também pode adicionar a porta desejada, substituindo 80 pela sua.
Agora recarregue o firewalld.
sudo firewall-cmd --reload
Agora, verifique o status para ver se a porta tcp 80 foi adicionada ou não.
sudo firewall-cmd --zone=public --list-ports
Aqui você pode ver que a porta TCP 80 foi adicionada.
Ou até você pode tentar algo assim.
sudo firewall-cmd --zone=public --list-all
Para remover a porta TCP 80 da zona pública, digite o seguinte.
sudo firewall-cmd --zone=public --remove-port=80/tcp
Você verá um texto de “sucesso” ecoando em seu terminal.
Você também pode colocar a porta desejada substituindo 80 pela sua própria porta.
Para adicionar o serviço FTP no firewalld, emita o comando abaixo
sudo firewall-cmd --zone=public --add-service=ftp
Você verá um texto de “sucesso” ecoando em seu terminal.
Da mesma forma, para adicionar o serviço smtp, emita o comando abaixo
sudo firewall-cmd --zone=public --add-service=smtp
Substitua ftp e smtp pelo seu próprio serviço que você deseja adicionar no firewalld.
Para remover serviços FTP e SMTP do firewalld, emita o comando abaixo no terminal.
sudo firewall-cmd --zone=public --remove-service=ftp
sudo firewall-cmd --zone=public --remove-service=smtp
Se desejar, você pode bloquear quaisquer pacotes/conexões de entrada ou saída usando o firewalld. Isso é conhecido como “pânico” do firewalld. Para fazer isso, emita o comando abaixo.
sudo firewall-cmd --panic-on
Você verá um texto de “sucesso” ecoando em seu terminal.
Depois de fazer isso, você não conseguirá executar ping em um host ou mesmo navegar em nenhum site.
Para desligar isso, emita o comando abaixo em seu terminal.
sudo firewall-cmd --panic-off
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.4" accept'
Ao fazer isso, o firewalld aceitará pacotes IP v4 do IP de origem 192.168.1.4.
Da mesma forma, para bloquear qualquer endereço IP
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.4" reject'
Ao fazer isso, o firewalld descartará/descartará todos os pacotes IP v4 do IP de origem 192.168.1.4.
Eu mantive o básico do Firewalld aqui para que você possa entender facilmente sua metodologia de trabalho e suas diferenças com o iptables.
Isso é tudo por hoje. Espero que você goste de ler este artigo.
Tomar cuidado.