IPTables - Permitir (ACCEPT) IPs específicos dentro de uma sub-rede bloqueada (DROP)

0

Sou relativamente novo no IPTABLES, mas escrevi um script que bloqueia vários intervalos de IP do Amazon EC2 a partir de um arquivo de entrada, blacklist.txt:

...
54.66.0.0/16
54.67.0.0/16
...

Eu também tenho um arquivo whilelist.txt separado que consiste em endereços IP amigáveis (arbitrários, aqui) incluindo:

54.66.1.1
54.67.1.2

Aqui está uma versão abreviada do script que estou executando para bloquear os IPs na lista negra e permitir os permitidos:

#!/bin/sh

TABLENAME="EC2LIST"


iptables -N $TABLENAME

# Block These
while read ip; do

    # Create the drop rule
    iptables -t filter -A $TABLENAME -s $ip -j DROP

done <~/ec2block/blacklist.txt  # The blacklist location

# Delete matching rules from blacklist
while read ip; do

    # Remove any matching explicit whitelisted IPs from Blacklist
    # This will fail if explicit record doesn't exit. Ommitted check for existence.
    iptables -t -D $TABLENAME -s $ip -j DROP

    # Accept this incoming IP
    iptables -A INPUT -i eth0 -s $ip -j ACCEPT

done <~/ec2block/whitelist.txt  # Edit this location if needed

# Drop incoming packets from EC2LIST
iptables -I INPUT -j $TABLENAME

Posso garantir que um IP com uma regra ACCEPT que também esteja dentro de um intervalo bloqueado por uma regra DROP será aceito?

Existe uma maneira melhor e mais aceita de fazer isso? Eu tenho procurado por precedência das regras ACCEPT vs regras DROP, mas não consigo encontrar muita coisa.

Um servidor é o CentOS com outra implementação no Gentoo. Não me lembro qual é qual, mas era preciso usar:

service iptables save

Veja um exemplo de saída de

$ sudo iptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
EC2LIST    all  --  anywhere             anywhere
ACCEPT     all  --  ec2-54-66-1-1.ap-southeast-2.compute.amazonaws.com  anywhere
ACCEPT     all  --  ec2-54-67-1-2.ap-southeast-2.compute.amazonaws.com  anywhere

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain EC2LIST (1 references)
target     prot opt source               destination
DROP       all  --  ec2-54-66-0-0.ap-southeast-2.compute.amazonaws.com/16  anywhere
DROP       all  --  ec2-54-67-0-0.us-west-1.compute.amazonaws.com/16  anywhere
    
por QNeville 18.10.2017 / 18:29

2 respostas

0

Graças a jurez, eu percebi isso. Se eu estiver adicionando as regras ACCEPT e DROP à mesma lista, as regras ACCEPT adicionadas antes das regras DROP terão precedência.

A ordem das operações pode não ser totalmente correta ou convencional, mas essa configuração funciona se eu estou tentando permitir 123.123.123.123 mas bloquear o restante de 123.123.0.0 para 123.123.255.255 : por exemplo,

iptables -A EC2BLOCK -i eth0 -s 123.123.123.123 -j ACCEPT
iptables -t filter -A EC2BLOCK -s 123.123.0.0/16 -j DROP
iptables -I INPUT -j EC2BLOCK
    
por 18.10.2017 / 23:41
1
As regras do

Iptables são processadas em ordem. Quando uma regra corresponde, o processamento é interrompido. Se você usar cadeias aninhadas (ou seja, EC2LIST), as cadeias aninhadas "retornam à cadeia de chamada" se nada corresponder na cadeia aninhada.

Você pode (e deve) usar isso para sua vantagem. Se você tiver um IP que se enquadre na regra REJECTED e quiser colocar na lista de permissões, coloque a regra ACCEPT para antes de REJECT / DROP.

    
por 18.10.2017 / 18:41