Como escrever a política do IPTables para afetar vários intervalos em um grupo?

1

Estou tentando bloquear toda a Internet em todas as portas, mas permitir que vários intervalos se conectem em portas específicas. Eu quero que este conjunto de regras seja aplicado também às conexões de saída (usando REJECT em vez de DROP ) para evitar ataques de identificação.

*filter

# Allow all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 -j REJECT

# Accept all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allow all network traffic
-A INPUT -s 192.168.0.0/24 -j ACCEPT
-A INPUT -d 192.168.0.0/24 -j ACCEPT

# Allow all SSH
-A INPUT -p tcp --dport 22 -j ACCEPT


# Permitted web connections
-A INPUT -s 8.4.0.0/24 -p tcp --dport http  -j ACCEPT
-A INPUT -s 8.8.0.0/24 -p tcp --dport http  -j ACCEPT
-A INPUT -s 8.4.0.0/24 -p tcp --dport https -j ACCEPT
-A INPUT -s 8.8.0.0/24 -p tcp --dport https -j ACCEPT

-A OUTPUT -s 8.4.0.0/24 -p tcp --dport http  -j ACCEPT
-A OUTPUT -s 8.8.0.0/24 -p tcp --dport http  -j ACCEPT
-A OUTPUT -s 8.4.0.0/24 -p tcp --dport https -j ACCEPT
-A OUTPUT -s 8.8.0.0/24 -p tcp --dport https -j ACCEPT

# Reject all web not to or from a safe server
-A INPUT  -p tcp --dport http  -j DROP
-A INPUT  -p tcp --dport https -j DROP
-A OUTPUT -p tcp --dport http  -j REJECT
-A OUTPUT -p tcp --dport https -j REJECT


# Drop all other inbound - default deny unless explicitly allowed
-A INPUT   -j DROP
-A FORWARD -j DROP

COMMIT

A desvantagem da minha política muito rigorosa é a verbosidade de adicionar um intervalo adicional. Cada intervalo leva quatro linhas de política para funcionar. Entrada / HTTP, Entrada / HTTPS, Saída / HTTP, Saída / HTTP. É uma dor enorme para manter em frente.

O que eu gostaria que fosse algo assim:

# Pseucode
*group webservers
8.8.0.0/24
8.4.0.0/24

*filter
-A INPUT -s webservers -p tcp --dport http  -j ACCEPT
-A INPUT -s webservers -p tcp --dport http  -j ACCEPT
-A OUTPUT -s webservers -p tcp --dport http  -j ACCEPT
-A OUTPUT -s webservers -p tcp --dport http  -j ACCEPT

Existe uma maneira fácil de conseguir isso?

    
por Josh 16.02.2016 / 11:50

2 respostas

2

Você pode tentar usar ipsets

If you want to

  • store multiple IP addresses or port numbers and match against the collection by iptables at one swoop;
  • dynamically update iptables rules against IP addresses or ports without performance penalty;
  • express complex IP address and ports based rulesets with one single iptables rule and benefit from the speed of IP sets

then ipset may be the proper tool for you.

Vale a pena notar que:

IP sets are a framework inside the Linux kernel, which can be administered by the ipset utility

E sim, parece que o site não foi atualizado desde 1996. Por alguma razão, as fontes de notícias de segurança de computadores e as páginas de projetos de software / firmware de baixo nível parecem muito com isso.

    
por 16.02.2016 / 15:47
1

Você também pode tentar enviar todo o tráfego de determinados intervalos para uma cadeia personalizada, depois cada aceitação relacionada à porta se torna uma única linha:

iptables -N CUSTOM

iptables -I INPUT 1 -s 8.4.0.0/24 -j CUSTOM
iptables -I INPUT 2 -s 8.8.0.0/24 -j CUSTOM
etc.

iptables -A CUSTOM - p tcp --dport 80 -j ACCEPT
iptables -A CUSTOM - p tcp --dport 443 -j ACCEPT
etc.

Os pacotes do (s) intervalo (s) de origem enviados à corrente CUSTOM que não correspondem a ACCEPT voltarão para a cadeia INPUT para manipulação (ou seja, DROP ping) com todos os resto do tráfego indesejado.

    
por 16.02.2016 / 16:14