
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.4
e 11.22.33.44
conectar 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.44
neste comando,
Você poderia me dar uma ajudinha ou dicas?
Obrigado.
Responder1
Definindomúltiploendereços usando apenasum iptables
comando usando ! --source
nã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.44
ainda 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 iptables
regra usando --match
em 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 ipset
utilitá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 iptables
regra em vez de IPs individuais.
sudo iptables -A INPUT -p tcp --destination-port 22 -m set ! --match-set ssh_friends src -j DROP