Como marcar uma rede como inacessível?

2

Eu tenho um roteador rodando Linux. Sua configuração de rede tem uma rota padrão para o meu ISP para acesso público à Internet. Agora preciso impedir que uma rede de destino especificada seja acessada.

Tabela de rota original:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         172.16.6.254    0.0.0.0         UG    0      0        0 eth0.2
10.99.0.0       *               255.255.255.0   U     0      0        0 tap0

Assumindo 74.1.1.0/24 é a rede que eu quero proibir o roteamento. Espero que todos os clientes conectados a esse roteador tornem a "Rede inacessível" para um endereço nessa rede.

Existe alguma maneira de fazer isso?

    
por Lingfeng Xiong 05.08.2013 / 15:29

4 respostas

6

Use o iproute2.

ip route add unreachable 74.1.1.0/24

Nesse caso, se você está tentando negar o tráfego de saída para essa rede, é melhor usar o roteamento para negar essa rede, em vez do netfilter. Para entrada , é mais idiomático usar o netfilter, como em outra resposta aqui, mas com --src ao invés de --dst , e é melhor usar o ICMP admin proibido, ou simplesmente dropar. Você pode usar o RPDB (consulte ip-rule(8) , para obter o mesmo efeito, mas provavelmente ficará fora de lugar.

Não use ifconfig, route ou outras ferramentas do pacote net-tools ; eles estão demorando muito.

Você pode confirmar o que o próprio roteador usará como decisão de roteamento.

$ ip route get 74.1.1.0/24
RTNETLINK answers: Network is unreachable

Observe que o verbo 'get' não é o mesmo que 'show' (ou 'list'), já que 'calcula' a decisão de roteamento em vez de apenas filtrar e listar entradas na tabela de roteamento.

Os hosts do seu lado da rede terão a rede de destino do ICMP inacessível.

$ ping 74.1.1.1 -c 1
PING 74.1.1.1 (74.1.1.1) 56(84) bytes of data.
From 172.16.6.254 icmp_seq=1 Destination Net Unreachable

--- 74.1.1.1 ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0.7ms
$ echo $?
1

Se o espaço de usuário envolvido estiver com defeito e travar em vez de retornar um erro imediatamente, isso é outro problema. O kernel não pode compensar esse espaço de usuário com bugs.

    
por 06.08.2013 / 02:59
4

Você pode usar o netfilter

iptables -A FORWARD --dst 74.1.1.0/24 -j REJECT --reject-with icmp-net-unreachable

man iptables diz o seguinte sobre a opção --reject-with

--reject-with type
     The type given can be icmp-net-unreachable, icmp-host-unreachable,
     icmp-port-unreachable,  icmp-proto-unreachable,  icmp-net-prohibited,
     icmp-host-prohibited  or  icmp-admin-prohibited  (*)  which  return  the
     appropriate  ICMP  error  message (port-unreachable is the default).  The
     option tcp-reset can be used on rules which only match the TCP protocol:
     this causes a TCP RST packet to be sent back.  This is mainly useful for
     blocking ident (113/tcp) probes which frequently occur when sending mail to
     broken mail hosts (which won't accept your mail otherwise)
    
por 05.08.2013 / 20:18
1

Adicione uma rota apontando para lo para essa sub-rede:

route add -net 74.1.1.0/24 gw 127.0.0.1 lo

O comando ip tem um parâmetro blackhole que acabei de descobrir:

ip route add blackhole 74.1.1.0/24

Leia mais .

Parece que há uma opção reject - veja se isso faz o que você precisa:

route add -net 74.1.1.0/24 reject

    
por 05.08.2013 / 16:09
0

REJEITA = bata à porta, você grita vá embora!.

DROP = bate na porta, você se senta quieto e o visitante sai: teoria?: P

depende do que você está tentando alcançar, minha opinião é

REJECT diz para alguém tentar e continuar a conversa até que o ACCEPT seja alcançado  O DROP não diz nada, lá para renderizar mais conversas CLOSED,: up2you:).

    
por 11.09.2018 / 04:51

Tags