Como adicionar vários IPs em uma linha de comando do iptables? sudo iptables -A INPUT -p tcp --dport 22! -s 1.2.3.4 -j QUEDA

Como adicionar vários IPs em uma linha de comando do iptables? sudo iptables -A INPUT -p tcp --dport 22! -s 1.2.3.4 -j QUEDA

Atualizar:

Eu tentei sudo iptables -A INPUT -p tcp --dport 22 ! -s 1.2.3.4,11.22.33.44 -j DROP, não funciona e me dá um erro

iptables v1.8.2 (nf_tables): ! não permitido com vários endereços IP de origem ou destino


Por exemplo, meu objetivo é permitir apenas permitir 1.2.3.4e 11.22.33.44conectar o ssh (porta 22) do meu servidor.

E eu prefiro esta abordagem/comando a outras.

sudo iptables -A INPUT -p tcp --dport 22 ! -s 1.2.3.4 -j DROP

Mas não sei como adicionar outro IP permitido 11.22.33.44neste comando,

Você poderia me dar uma ajudinha ou dicas?

Obrigado.

Responder1

Definindomúltiploendereços usando apenasum iptablescomando usando ! --sourcenão é possível.

Um endereço pode ser um nome de rede, um nome de host (provavelmente uma péssima ideia usar nomes de host), um endereço IP de rede (com /mask) ou um endereço IP simples. A máscara pode ser uma máscara de rede ou um número simples.

Você pode considerar alterar o conjunto de regras padrão de permitir para descartar. Isso permitiria definir com base apenas no que deveria ser permitido, ou seja, semelhante a este:

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
... your other rules goes here ...
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -s 1.2.3.4,11.22.33.44 -j ACCEPT
iptables -P INPUT DROP

O benefício/beleza é que tal conjunto de regras teria muito mais desempenho, visto que o estado dos pacotes é considerado. Além disso, permite a sintaxe desejada. Plus também é a forma recomendada de definir regras de firewall.

No entanto, tenha em mente que se usar uma sintaxe como mostrada acima: -s 1.2.3.4,11.22.33.44ainda cria 2 entradas de tabela individuais, como você pode ver usando o comando iptables -L INPUT. Além disso, não funciona com todas as versões do iptables. Além disso, pessoalmente, acho difícil ler ou manter. É por isso que tento evitá-lo, preferindo usar 2 comandos separados.

Caso seu desejo seja minimizar a quantidade de regras, o mais próximo que você pode fazer é usarum iptablesregra usando --matchem vez disso --source. No entanto, você ainda precisa definir a correspondência usando comandos adicionais. Como isso funciona foi explicado perfeitamente no outro comentário que trata do ipset.

Responder2

Você pode usar umConjunto de IP.

Dependendo da sua distribuição, pode ser necessário instalar o ipsetutilitário primeiro.

#(For Debian and Debian-derived distros)
sudo apt install ipset-persistent

Então você cria um conjunto com um nome amigável.

sudo ipset create ssh_friends iphash

Depois de definir um conjunto, você pode adicionar IPs a ele.

sudo ipset add ssh_friends 1.2.3.4
sudo ipset add ssh_friends 11.22.33.44

Agora você pode usar o conjunto criado em uma iptablesregra em vez de IPs individuais.

sudo iptables -A INPUT -p tcp --destination-port 22 -m set ! --match-set ssh_friends src -j DROP

informação relacionada