Solicitando ajuda ao iptables

1

Primeiramente, quero perguntar por que meu rules.v4 parece tão complicado depois de usar: iptables -F . Eu pensei que ficaria vazio após o flushing:

# Generated by iptables-save v1.6.0 on Tue Jan  9 21:25:13 2018
*filter
:INPUT ACCEPT [76:4024]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1:40]
:ufw-after-forward - [0:0]
:ufw-after-input - [0:0]
:ufw-after-logging-forward - [0:0]
:ufw-after-logging-input - [0:0]
:ufw-after-logging-output - [0:0]
:ufw-after-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-before-input - [0:0]
:ufw-before-logging-forward - [0:0]
:ufw-before-logging-input - [0:0]
:ufw-before-logging-output - [0:0]
:ufw-before-output - [0:0]
:ufw-logging-allow - [0:0]
:ufw-logging-deny - [0:0]
:ufw-not-local - [0:0]
:ufw-reject-forward - [0:0]
:ufw-reject-input - [0:0]
:ufw-reject-output - [0:0]
:ufw-skip-to-policy-forward - [0:0]
:ufw-skip-to-policy-input - [0:0]
:ufw-skip-to-policy-output - [0:0]
:ufw-track-forward - [0:0]
:ufw-track-input - [0:0]
:ufw-track-output - [0:0]
:ufw-user-forward - [0:0]
:ufw-user-input - [0:0]
:ufw-user-limit - [0:0]
:ufw-user-limit-accept - [0:0]
:ufw-user-logging-forward - [0:0]
:ufw-user-logging-input - [0:0]
:ufw-user-logging-output - [0:0]
:ufw-user-output - [0:0]
-A INPUT -i enp3s0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i enp3s0 -p tcp -m tcp --dport 67 -j ACCEPT
-A INPUT -i enp3s0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i enp3s0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i enp2s0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i enp2s0 -p tcp -m tcp --dport 67 -j ACCEPT
-A INPUT -i enp2s0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i enp2s0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -j ufw-before-logging-input
-A INPUT -j ufw-before-input
-A INPUT -j ufw-after-input
-A INPUT -j ufw-after-logging-input
-A INPUT -j ufw-reject-input
-A INPUT -j ufw-track-input
-A FORWARD -d 10.42.0.0/24 -o enp3s0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.42.0.0/24 -i enp3s0 -j ACCEPT
-A FORWARD -i enp3s0 -o enp3s0 -j ACCEPT
-A FORWARD -o enp3s0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i enp3s0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -d 10.42.1.0/24 -o enp2s0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.42.1.0/24 -i enp2s0 -j ACCEPT
-A FORWARD -i enp2s0 -o enp2s0 -j ACCEPT
-A FORWARD -o enp2s0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i enp2s0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -j ufw-before-logging-forward
-A FORWARD -j ufw-before-forward
-A FORWARD -j ufw-after-forward
-A FORWARD -j ufw-after-logging-forward
-A FORWARD -j ufw-reject-forward
-A FORWARD -j ufw-track-forward
-A OUTPUT -j ufw-before-logging-output
-A OUTPUT -j ufw-before-output
-A OUTPUT -j ufw-after-output
-A OUTPUT -j ufw-after-logging-output
-A OUTPUT -j ufw-reject-output
-A OUTPUT -j ufw-track-output
-A ufw-after-input -p udp -m udp --dport 137 -j ufw-skip-to-policy-input
-A ufw-after-input -p udp -m udp --dport 138 -j ufw-skip-to-policy-input
-A ufw-after-input -p tcp -m tcp --dport 139 -j ufw-skip-to-policy-input
-A ufw-after-input -p tcp -m tcp --dport 445 -j ufw-skip-to-policy-input
-A ufw-after-input -p udp -m udp --dport 67 -j ufw-skip-to-policy-input
-A ufw-after-input -p udp -m udp --dport 68 -j ufw-skip-to-policy-input
-A ufw-after-input -m addrtype --dst-type BROADCAST -j ufw-skip-to-policy-input
-A ufw-after-logging-forward -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK] "
-A ufw-after-logging-input -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK] "
-A ufw-before-forward -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 3 -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 4 -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 11 -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 12 -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A ufw-before-forward -j ufw-user-forward
-A ufw-before-input -i lo -j ACCEPT
-A ufw-before-input -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-input -m conntrack --ctstate INVALID -j ufw-logging-deny
-A ufw-before-input -m conntrack --ctstate INVALID -j DROP
-A ufw-before-input -p icmp -m icmp --icmp-type 3 -j ACCEPT
-A ufw-before-input -p icmp -m icmp --icmp-type 4 -j ACCEPT
-A ufw-before-input -p icmp -m icmp --icmp-type 11 -j ACCEPT
-A ufw-before-input -p icmp -m icmp --icmp-type 12 -j ACCEPT
-A ufw-before-input -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A ufw-before-input -p udp -m udp --sport 67 --dport 68 -j ACCEPT
-A ufw-before-input -j ufw-not-local
-A ufw-before-input -d 224.0.0.251/32 -p udp -m udp --dport 5353 -j ACCEPT
-A ufw-before-input -d 239.255.255.250/32 -p udp -m udp --dport 1900 -j ACCEPT
-A ufw-before-input -j ufw-user-input
-A ufw-before-output -o lo -j ACCEPT
-A ufw-before-output -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-output -j ufw-user-output
-A ufw-logging-allow -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW ALLOW] "
-A ufw-logging-deny -m conntrack --ctstate INVALID -m limit --limit 3/min --limit-burst 10 -j RETURN
-A ufw-logging-deny -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK] "
-A ufw-not-local -m addrtype --dst-type LOCAL -j RETURN
-A ufw-not-local -m addrtype --dst-type MULTICAST -j RETURN
-A ufw-not-local -m addrtype --dst-type BROADCAST -j RETURN
-A ufw-not-local -m limit --limit 3/min --limit-burst 10 -j ufw-logging-deny
-A ufw-not-local -j DROP
-A ufw-skip-to-policy-forward -j DROP
-A ufw-skip-to-policy-input -j DROP
-A ufw-skip-to-policy-output -j ACCEPT
-A ufw-track-output -p tcp -m conntrack --ctstate NEW -j ACCEPT
-A ufw-track-output -p udp -m conntrack --ctstate NEW -j ACCEPT
-A ufw-user-limit -m limit --limit 3/min -j LOG --log-prefix "[UFW LIMIT BLOCK] "
-A ufw-user-limit -j REJECT --reject-with icmp-port-unreachable
-A ufw-user-limit-accept -j ACCEPT
COMMIT
# Completed on Tue Jan  9 21:25:13 2018
# Generated by iptables-save v1.6.0 on Tue Jan  9 21:25:13 2018
*nat
:PREROUTING ACCEPT [306:30491]
:INPUT ACCEPT [79:4750]
:OUTPUT ACCEPT [128:10004]
:POSTROUTING ACCEPT [122:8932]
-A POSTROUTING -s 10.42.0.0/24 ! -d 10.42.0.0/24 -j MASQUERADE
-A POSTROUTING -s 10.42.1.0/24 ! -d 10.42.1.0/24 -j MASQUERADE
COMMIT
# Completed on Tue Jan  9 21:25:13 2018

Segunda pergunta - Eu preciso de iptables para avaliar o limite de novas conexões na porta específica (limite não por ip, mas todas as novas tentativas se houver muitas delas), ao mesmo tempo não bloqueie nenhum tráfego que não chegue a essa porta específica. Todos os exemplos que vi na internet usam DROP para a política INPUT padrão, mas isso não combina comigo.

Update : Eu corro o servidor do jogo na porta 45000 (ele usa o protocolo tcp e upd) e recentemente tive problemas com spam de bots. Bots estão tentando se conectar ao meu servidor de todo o mundo usando centenas de proxys. Os plugins do servidor de jogos os bloquearam com sucesso, mas esse ataque se tornou muito mais strong ultimamente e agora causa atrasos. Idealmente, eu queria bloquear o acesso a essa porta com base na geolocalização e permitir apenas 5 a 10 países, mas isso é complicado. Outra opção é limitar as novas conexões a essa porta, mantendo-as já existentes. Claro que sertanly bloqueará jogadores normais que tentam se juntar durante o ataque, mas pelo menos aqueles que já jogam podem fazer isso sem atrasos extremos. Meu servidor não é grande (máximo de 30 jogadores), então eu suponho que o limite de 30 novas conexões para a porta 45000 por 30 segundos seja bom.

    
por Gerolf 10.01.2018 / 12:36

1 resposta

1

Todos os itens que você postou são porque em algum momento você ativou o ufw que é um front end para o iptables e fez todas aquelas tabelas customizadas.

A opção -F remove as regras de algumas, mas não de todas as regras de todas as tabelas, nem das cadeias vazias que você está vendo.

Você precisa de algumas opções adicionais:

De link conjunto completo de comandos para redefinir o iptables é:

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -F
iptables -t mangle -F
iptables -F
iptables -X
    A opção
  • -P reconfigura a política padrão das tabelas.
  • O -t nat -F libera a tabela nat.
  • O -t mangle -F libera mangle, que quase nunca é usado.
  • -X exclui cadeias vazias.

Veja o link para IPv6 e o iptables para detalhes adicionais.

O "problema" é a opção -F, sem especificar uma cadeia, não libera todas as correntes, no seu caso você tem algumas correntes restantes criadas pelo UFW.

Para excluir essas cadeias, é necessário primeiro esvaziá-las (-X não as excluirá, a menos que estejam vazias)

Portanto, para cada cadeia, você primeiro precisa remover qualquer referência à cadeia, liberar a cadeia e excluí-la

Começando com "ufw-before-log-forward"

sudo iptables -D FORWARD -j ufw-before-logging-forward
sudo iptables -F ufw-before-logging-forward
sudo iptables -X ufw-before-logging-forward

e para todas as cadeias personalizadas ufw adicionadas.

É claro que, como você está usando o ufw, existe um método muito mais fácil:

sudo ufw disable

Alguns comentários gerais

  1. Sugiro que você mantenha a política padrão ACCEPT em vez de REJECT ou DROP. Se você definir a política padrão como REJECT / DROP, poderá bloquear a sua se executar iptables -F

  2. Se você escrever manualmente as regras do iptables, não use o ufw ou outras ferramentas para alterar suas regras.

  3. Eu sugiro REJEITAR em vez de DROP. Em uma casca de noz, o DROP é mais incômodo para legitimar o tráfego e, embora pareça legal, o DROP não atrasa nem engana nenhuma das ferramentas modernas de craqueamento. Como seu sistema reage a um pacote, os crackers sabem que você está funcionando no seu endereço IP e o DROP não oculta nada.

Veja link para detalhes.

  1. Use o iptables-persistent

A resposta principal Como salvar regras do iptables? analisa o uso básico, incluindo salvar e restaurar seu conjunto de regras. Veja a man page para detalhes adicionais.

Para ajuda na criação de regras, preciso de mais detalhes, que porta e qual tráfego você deseja limitar e como. Limitando o ping é diferente. Limitar um servidor da web é diferente de limitar as conexões ssh. Permitir mais, mas limitar alguns, é usar talvez uma lista negra. Limitar tudo e permitir que alguns sejam uma lista branca, etc.

Exemplos:

Tráfego da Web - Eu poderia usar a sintaxe geral de um servidor da Web se estivesse muito ocupado:

iptables -I INPUT -p tcp -m state --state NEW -m limit --limit 30/minute --limit-burst 5 -j ACCEPT

Você certamente pode adicionar a opção --dport 80 ao comando acima.

Isso limita a 30 conexões por minuto, o que é muito lento para o Apache. Se o servidor web não estivesse tão ocupado, você pode liberar até milhares de conexões / minuto.

SSH - Essas regras são ótimas para bloquear tentativas de força bruta

# This rule tracks incoming connections to port 22
iptables -A INPUT -p tcp -m tcp --dport 22 -m tcp -m state --state NEW -m recent --set --name SSH --rsource

# This command rejects any attempt to connect to ssh more than
# 8 times in 10 minutes
# After 10 minutes you can attempt again so not permanent ban
iptables -A INPUT -p tcp -m tcp --dport 22 -m recent --update --seconds 600 --hitcount 8 --rttl --name SSH --rsource -j REJECT --reject-with icmp-host-prohibited

# Finally this will accept the connections 
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

Se precisar de ajuda mais específica, atualize sua pergunta =)

    
por Panther 10.01.2018 / 14:14