Alterando a cadeia de iptables da porta baseada para baseada em ip

1

Estou trabalhando para limitar o acesso a uma nova instalação do XenServer 6.2 . As regras padrão do iptables nas caixas têm uma corrente RH-Firewall-1-INPUT que expõe um pouco para o mundo externo.

Sem passar e adicionando -s <ip range> a cada regra (há muitos) existe uma maneira de adicionar os intervalos de IP a todas as regras por padrão?

Historicamente, eu construo iptables com INPUT DROP e FORWARD DROP e, em seguida, abro tudo para as redes internas seguidas por um -j REJECT para ignorar o resto. As regras do XenServer parecem um pouco mais complexas e ter um bloqueio de iptables inadvertido seria uma coisa ruim.

    
por ethrbunny 25.11.2013 / 18:28

3 respostas

1

Algo como isso deve funcionar. Fora do topo da minha cabeça, já faz um tempo desde que eu usei o iptables, mas.

# Create a whitelist chain
iptables -N whitelist

# Add some ip's to it
iptables -A whitelist -s 1.2.3.4/32 -j RETURN
iptables -A whitelist -s 2.3.4.5/32 -j RETURN
iptables -A whitelist -s 3.4.5.6/32 -j RETURN
# etc

# default drop on whitelist, no match - drop
iptables -P whitelist DROP


# Jump to the whitelist chain by default which will jump back if we get a match
iptables -A INPUT -j whitelist

# now back at your input chain
# All the normal rules follow
    
por 25.11.2013 / 21:30
2

Você pode ter uma regra que irá -j JUMP para outra cadeia, se o IP corresponder ao seu intervalo, ou simplesmente largue tudo.

    
por 25.11.2013 / 19:48
2

FWIW, estas são as regras padrão do XenServer 6.2 - basicamente as regras padrão do RedHat, já que o XenServer é baseado no RedHat:

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     47   --  *      *       0.0.0.0/0            0.0.0.0/0           
 499M 1226G RH-Firewall-1-INPUT  all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 RH-Firewall-1-INPUT  all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy ACCEPT 187M packets, 1105G bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain RH-Firewall-1-INPUT (2 references)
 pkts bytes target     prot opt in     out     source               destination         
 312K  429M ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
15842 1331K ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 255 
    0     0 ACCEPT     esp  --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     ah   --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            224.0.0.251         udp dpt:5353 
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp dpt:631 
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:631 
    0     0 ACCEPT     udp  --  xenapi *       0.0.0.0/0            0.0.0.0/0           udp dpt:67 
 497M 1223G ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW udp dpt:694 
    1    60 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
    3   180 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:80 
10474  543K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:443 
1883K 2404M REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Então, se você quiser limitar o acesso a um intervalo conhecido (por exemplo, 192.168.0.0/24 ), poderá fazer algo assim:

iptables -I INPUT -s ! 192.168.0.0/24 -j REJECT

Isso rejeitará qualquer coisa que NÃO seja desse endereço de origem, de forma que as regras restantes serão aplicadas somente a esse intervalo de origem.

Se você tem várias fontes confiáveis, você precisará usar uma nova cadeia como @Matt disse (embora você deva usar -j RETURN em vez de -j INPUT )

    
por 26.11.2013 / 00:53

Tags