A opção -I
para iptables
não anexa (que é -A
), é usada para inserir uma nova regra. A diferença é que -A
adiciona novas regras no fim da cadeia, enquanto, por padrão, -I
adiciona novas regras no início da cadeia. / p>
Como as cadeias são lidas em ordem, é importante que sua regra -j ACCEPT
seja processada antes da regra -j DROP
.
Existem várias maneiras de fazer isso:
- Use
-A
em vez de-I
para adicionar sua regra. Isso garantirá que as regras sejam adicionadas no final e, se você não reordenar seus comandos, elas estarão na ordem correta. Eu recomendaria isso sobre as outras duas opções. - Continue usando
-I
, mas troque suas regras. Dessa forma, a regra-j ACCEPT
será processada antes da regra-j DROP
. -
-I
opcionalmente recebe um argumento extra, a localização na cadeia onde inserir a nova regra, que deve ser um número. Como você adiciona a regra-j ACCEPT
sem nenhum argumento, isso faz dela a primeira regra (ou seja, a linha 1); Então, adicione a segunda regra na linha 2:iptables -I INPUT 2 -p tcp -s 0.0.0.0/0 --dport 21 '-j DROP'
iptables -N check-ftp
iptables -A check-ftp -s IP1 -j ACCEPT
iptables -A check-ftp -s IP2 -j ACCEPT
[...]
iptables -A check-ftp -j DROP
iptables -A INPUT -p tcp --dport 21 -j check-ftp
Isso cria uma regra única para "conexões FTP" na sua cadeia. Dessa forma, se o pacote de rede de entrada não for um pacote de FTP, o código do netfilter não passará pela lista de regras (longa) para determinar se deve permitir esse pacote de particuler, mas passar para a próxima regra imediatamente. Se é um pacote FTP, então irá passar por cima da longa lista.