Permita que os três rejeitem / larguem o resto. Com iptables
da linha de comando:
iptables -A INPUT -p tcp --dport 5210 --source "$addr1" -j ACCEPT
iptables -A INPUT -p tcp --dport 5210 --source "$addr2" -j ACCEPT
iptables -A INPUT -p tcp --dport 5210 --source "$addr3" -j ACCEPT
iptables -A INPUT -p tcp --dport 5210 -j REJECT
Por exemplo, addr2
, a primeira regra não corresponde e é ignorada, enquanto a segunda regra corresponde e aceita o pacote.
Ou crie uma cadeia que não faça nada para os três endereços e rejeite o restante, depois aceite ou faça qualquer processamento adicional no nível superior:
iptables -N p5210
iptables -A p5210 --source "$addr1" -j RETURN
iptables -A p5210 --source "$addr2" -j RETURN
iptables -A p5210 --source "$addr3" -j RETURN
iptables -A p5210 -j REJECT
iptables -A INPUT -p tcp --dport 5210 -j p5210
# add whatever further limitations you want
iptables -A INPUT -p tcp --dport 5210 -j ACCEPT
É claro que colocar os endereços em uma variável e usar um loop para executar o mesmo comando para todos eles também é uma opção:
#!/bin/bash
allowed_addresses=(1.2.3.4 4.5.6.7 7.8.9.0)
for addr in "${allowed_addresses[@]}" ; do
iptables -A INPUT -p tcp --dport 5210 --source "$addr" -j ACCEPT
done