Existem vários problemas com a sua abordagem. Primeiro, você -I
insere todas as regras. Sem especificar um índice, isso significa que ele será inserido no topo. Isto não é o que você quer. Quando não estiver inserindo, use -A
ppend para esclarecer o que você está fazendo. Dessa forma, novas regras acabarão na parte inferior.
É tudo sobre a ordem: as regras são processadas de cima para baixo até que uma regra termine as correspondências de processamento. Algo como ACCEPT
ou DROP
.
O que você quer é algo assim:
iptables -A INPUT -p tcp -s MY IP --dport 21 -j ACCEPT
iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 21 -j DROP
iptables -I INPUT 2 -p tcp -s MY OTHER IP --dport 21 -j ACCEPT
Primeiramente, ele recria o estado que você tinha inicialmente. Em seguida, insere outra regra para que ela termine na posição 2, removendo outras regras. Isso significa que o resultado é equivalente a fazer isso:
iptables -A INPUT -p tcp -s MY IP --dport 21 -j ACCEPT
iptables -A INPUT -p tcp -s MY OTHER IP --dport 21 -j ACCEPT
iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 21 -j DROP