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