Iptables para iniciantes

Iptables para iniciantes
Os iptables são considerados um dos principais recursos defensivos para muitos administradores de sistemas, apesar de serem substituídos pela Nftables. Os principais fabricantes de redes incorporaram iptables ao hardware ainda em ambientes de produção.

Iptables é altamente versátil e aceita comandos diretos do usuário que pode carregar e descarregar regras de acordo com a necessidade.

Este tutorial mostra como proteger um servidor da web, Conexões encaminhadas para endereços IP internos da nossa LAN e oferecem serviços específicos apenas para endereços IP em permissões.

Observação: Este tutorial IPTables foi lançado pela primeira vez há dois anos e atualizado em 23/05/2021 com exemplos aprimorados e capturas de tela de melhor qualidade.

Como instalar

Os iptables são omitidos por padrão em distribuições que incorporam nftables.

Para instalar iptables nas distribuições Linux baseadas no Debian, execute o seguinte comando:

sudo apt update && apt install iptables

Abertura de portas HTTP e HTTPS

Primeiro de tudo, vamos adicionar todas as políticas aceitadas começando com o servidor da web.

Observação: Se você criar um script com regras, não precisa usar sudo.

sudo iptables -a input -p tcp - -dport 80 -j aceita
sudo iptables -a input -p tcp - -dport 443 -j aceita

Para ver regras adicionais executadas “iptables -l

Onde:

Iptables = chama o programa

-A = adiciona uma regra

ENTRADA = tráfego recebido

-p = protocolo

-ddport = porta de destino

-j = especificar o "destino"; O alvo é o tipo de política: aceitar, soltar, rejeitar (embutido)…

Iptables -l = lista todas as regras carregadas de iptables (Iptables -l -v = o mesmo com verbosidade.)

No exemplo acima, instruímos iptables a adicionar uma regra para o tráfego recebido através do protocolo TCP e portas 80 (HTTP) e 443 (HTTPS) a serem aceitas.

Podemos alterar o comando para aceitar a conexão apenas de um IP específico adicionando o parâmetro “-s”:

sudo iptables -a entrada -s 127.0.0.1 -P TCP - -Dport 80 -j Aceitar

Onde:

s = fonte

Você também pode testar seu firewall com o NMAP:

Observação: No exemplo acima, a porta 443 não é mostrada porque o servidor não possui um certificado SSL configurado adequadamente.

Observação: Para mais informações sobre o NMAP, você pode ler isso.

Protegendo seu servidor com iptables:

#Open http e serviços https.
iptables -a input -p tcp - -dport 80 -j aceita
iptables -a input -p tcp - -dport 443 -j aceita
#Open SSH Port Service
iptables -a input -p tcp - -dport 22 -m Conntrack -Ctstate novo, estabelecido -j aceita

Onde estão os novos parâmetros:

-m significa "Match" e é usado para chamar extensões iptables como Conntrack, que não faz parte das funções principais iptables.

conexão = Permite rastrear informações sobre conexões como endereços específicos ou, neste caso, o estado da conexão. Isso deve ser usado com cuidado, pois muitas regras para defender servidores de alguns ataques usam Conntrack enquanto o hardware limita seu uso, e essa limitação pode ser usada para sobrecarregar os recursos do servidor.

-ctstate = determina o estado da regra a corresponder; Os estados possíveis são: NOVO, Estabelecido, RELACIONADO e INVÁLIDO.

#Protect seu serviço SSH contra ataques de força bruta, permitindo apenas um IP específico
Para acessar iptables -a input -p tcp -s x.X.X.X - -Dport 22 -m Conntrack -CtState Novo,
Estabelecido -j aceitar
#Protect seu serviço SSH contra ataques de força bruta, limitando as tentativas de conexão
Iptables -a input -p tcp -m tcp - -dport 22 -m Conntrack -CTSTATE NEW -J 22 -TEST
Iptables -um 22 -teste -M Recente -Nome Connections - -SET - -MASC 255.255.255.255 - -Rsource
Iptables -um 22 -teste -M Recente -Nome Connections -Rcheck - -mask 255.255.255.255
--Rsource -Segundos 30 -Hitcount 3 -j 22 -Proteção
Iptables -um 22 -teste -j aceitar
Iptables -a 22 -proteção -j Drop

Onde:

Na primeira linha, nossa regra diz “-M Conntrack -CtState novo, ” o que significa que se a conexão for nova, passe para a regra "22 testes".

A segunda linha diz máscara de rede 255.255.255.255 são nomeados como Conexões.

A terceira linha diz se um Conexões é mais de 3 vezes em 30 segundos, o firewall continua aplicando a cadeia 22-Proteção. A quarta linha diz se o Conexões não foram vistos mais de 3 vezes em 30 segundos, eles poderiam ser aceitos.

A quinta linha, que pertence ao 22-Proteção cadeia, diz para cair Conexões Se eles parecem ser mais de 3 vezes em 30 segundos.

Agora, para terminar, vamos recusar todas as conexões de entrada sem consumo e vamos permitir todo o tráfego de saída:

IPTILLES -P Saída aceita
IPTABLES -P DROP

P refere -se à política da cadeia; Lembre -se de que o alvo é a política, aceitar, soltar, rejeitar. Nesse caso, estamos dizendo que a política padrão para o tráfego de saída é aceitar, e a política padrão para o tráfego recebido é recusar, a menos que especifiquemos algo diferente nas regras anteriores. Este é um firewall muito básico que não inclui regras para muitos ataques, para fins de aprendizado e não para produção; No final do artigo, anexo um firewall que usei para produção em um servidor; tem comentários explicando cada regra.

Encaminhando uma conexão para uma porta específica para um endereço IP específico

Isso também é muito útil para usuários de desktop que desejam inscrever uma conexão através de um dispositivo específico; Pode ser útil mesmo para jogadores; Geralmente, fazemos isso nas configurações do roteador, mas vamos assumir que o dispositivo de roteamento está executando iptables.

iptables -a pré -excluindo -t nat -p tcp -d x.X.X.X - -dport 8080 -j dnat -para destinar Y.Y.Y.Y: 80
iptables -a pós -touting -t nat -p tcp -j snat -para fonte x.X.X.X

As regras acima invocam NAT (Tradução de endereço de rede) para especificar conexões através do protocolo TCP para o endereço X.X.X.X e porta 8080 serão redirecionados para abordar Y.Y.Y.Y, porta 80. A segunda regra especifica que as respostas devem ser enviadas para o endereço de origem (x.X.X.X). Podemos usar essas regras para permitir o acesso a uma câmera IP, habilitar jogos on -line com redes externas, etc.

Este tutorial foi feito para introduzir iniciantes nos iptables e explica apenas um número limitado de básicos. Abaixo, você pode ver uma amostra de um firewall bem planejado usado para um servidor de produção; Inclui algumas das regras que já vimos para regras mais complexas para prevenir DDOs, entre outros tipos de ataques.

Bônus: amostra de firewall de produção

iptables -f
#---- Ativar proteção de mensagem de erro ruim
enable/proc/sys/net/ipv4/icmp_ignore_bugus_error_responses
#---- Ligue a filtragem do caminho reverso. Mais seguro, mas quebra o roteamento assimétrico e/ou ipsec
Ativar/proc/sys/net/ipv4/conf/*/rp_filter
#---- Não aceite pacotes roteados de origem. O roteamento de origem raramente é usado para legítimo
propósitos desativam/proc/sys/net/ipv4/conf/*/aceit_source_route
#---- Desativar a aceitação redirecionada do ICMP que pode ser usada para alterar suas tabelas de roteamento
desativar/proc/sys/net/ipv4/conf/*/aceit_redirects
#---- como não aceitamos redirecionamentos, não envie mensagens de redirecionamento também
desativar/proc/sys/net/ipv4/conf/*/send_redirects
#---- ignore pacotes com endereços impossíveis
desativar/proc/sys/net/ipv4/conf/*/log_martians
#---- Proteger contra números de sequência de embalagem e auxiliar a medição de tempo de ida e volta
Ativar/proc/sys/net/ipv4/tcp_timestamps
Ass
Números de sequência TCP Ativar/proc/sys/net/ipv4/tcp_sycookies
#---- Use ACK seletivo que pode ser usado para significar que pacotes específicos estão faltando
desativar/proc/sys/net/ipv4/tcp_sack
MODPROBE NF_CONNTRACK_IPV4
modProbe nf_nat
# modprobe nf_conntrack_ipv6
# modprobe nf_conntrack_amanda
# modprobe nf_nat_amanda
MODPROBE NF_CONNTRACK_H323
MODPROBE NF_NAT_H323
MODPROBE NF_CONNTRACK_FTP
MODPROBE NF_NAT_FTP
# modprobe nf_conntrack_netbios_ns
# modprobe nf_conntrack_irc
# modprobe nf_nat_irc
# modprobe nf_conntrack_proto_dccp
# modprobe nf_nat_proto_dccp
MODPROBE NF_CONNTRACK_NETLINK
# modprobe nf_conntrack_pptp
# modprobe nf_nat_pptp
# modprobe nf_conntrack_proto_udplite
# modprobe nf_nat_proto_udplite
# modprobe nf_conntrack_proto_gre
# modprobe nf_nat_proto_gre
# modprobe nf_conntrack_proto_sctp
# modprobe nf_nat_proto_sctp
# modprobe nf_conntrack_sane
MODPROBE NF_CONNTRACK_SIP
MODPROBE NF_NAT_SIP
# modprobe nf_conntrack_tftp
# modprobe nf_nat_tftp
# modprobe nf_nat_snmp_basic
#Agora podemos começar a adicionar serviços selecionados ao nosso filtro de firewall. A primeira coisa desse tipo
é uma interface localhost iptables -a input -i lo -j aceitar
#Nós dissemos ao firewall para levar todos os pacotes de entrada com sinalizadores TCP Nenhum e apenas soltá -los.
iptables -a input -p tcp ! -M Conntrack -CtState New -j Drop
#Dizemos aos iptables que adicionam (-a) uma regra à entrada (entrada)- SSH trabalha na porta 50683
Em vez disso, 22.
iptables -a input -p tcp -m tcp - -dport 50683 -j aceita
iptables -a input -p tcp -m tcp -s ip específico -dport 50683 -j aceita
iptables -a input -p tcp -m tcp -s ip específico -dport 50683 -j aceita
iptables -a input -p tcp -m tcp -s ip específico -dport 50683 -j aceita
iptables -a input -p tcp - -dport 50683 -m Conntrack -CTSTATE NOVO -M RECENT - -SET
--Nome SSH -J Aceitar
iptables -a input -p tcp - -dport 50683 -m recente -update - -segundos 60 - -hitcount 4
--RTTL -Nome SSH -J LOG - -LOG -PREFIX "SSH_BRUTE_FORCE"
iptables -a input -p tcp - -dport 50683 -m recente -update - -segundos 60 - -hitcount 4
--RTTL -Nome SSH -J Drop
iptables -a input -p tcp - -dport 50683 -m Conntrack -CTSTATE NOVO -M RECENT - -SET
--Nome SSH
iptables -a input -p tcp - -dport 50683 -m Conntrack -Ctstate new -j ssh_whitelist
iptables -a input -p tcp - -dport 50683 -m Conntrack -CTSTATE NEW -M RECENTEDATE
--segundos 60 - -Hitcount 4 - -rttl -nome ssh -j ulog --ulog -prefix ssh_bru
iptables -a input -p tcp - -dport 50683 -m Conntrack -CTSTATE NEW -M RECENTEDATE
--segundos 60 -Hitcount 4 - -rttl -nome SSH -J Drop
#Agora eu permito IMAP, e SMTP.
-Um tcp de entrada TCP - -Dport 25 -j aceita
# Permite conexões pop e pop
-A Aceitar
-A ACEITO DE INTERNA
########### IMAP & IMAPS ############
-A Aceitar
-Um tcp de entrada tcp - -dport 993 -j aceita
########## MySQL ###################
iptables -a input -i eth0 -p tcp -m tcp - -dport 3306 -j aceita
########## R1SOFT SYSTEM
iptables -a input -p tcp -m tcp -s ip específico -dport 1167 -j aceita
############### extrovertido ###################
iptables -i input -m Conntrack -Ctstate estabelecido, relacionado -j aceita
### Permitir em andamento, bloqueie a entrada não definida ###
IPTILLES -P Saída aceita
IPTABLES -P DROP
iptables -l -n
iptables-save | tee /etc /iptables.teste.regras
iptables-Restore < /etc/iptables.test.rules
#Service iptables reiniciar