Block WAN Access - Permitir acesso à LAN - hosts Linux

3

O que eu quero fazer é bloquear o acesso à WAN e permitir que esses hosts conversem entre si na LAN 192.168.1.0/24. Essa configuração deve ser feita nos hosts em questão.

Existem algumas postagens semelhantes a isso, mas tendem a ser casos de uso específicos ou excessivamente complicados. Eu agora pago por internet por GB. Eu tenho algumas VMs que realmente não precisam de acesso à WAN após a configuração, mas parecem estar usando grandes quantidades de dados. (Servidor LDAP por algum motivo?)

Eu estou olhando para a filtragem DD-WRT, mas eu me perguntava como fazer esse host.

Eu também estarei procurando ativar o Acesso à WAN por 1 hora por dia. Isso pode ser feito via " script iptables " com o CRON, ou apenas via DD-WRT.

Eu estou supondo que o IPTables é o caminho a percorrer. Eu acho que todos os meus servidores usam IPTables, alguns têm UFW e alguns têm FirewallD.

Eu acho que isso pode ser uma "pergunta genérica" com respostas que devem funcionar em muitas / todas as distros. Mas só para adicionar, estou usando principalmente o Ubuntu 14/16 e o CentOS 6/7.

    
por FreeSoftwareServers 05.10.2017 / 09:44

2 respostas

5

Filtrando com IPTABLES

Isso pode ser feito criando um conjunto de regras para o tráfego permitido e eliminando o restante.

Para OUTPUT chain, crie regras para aceitar tráfego de loopback e tráfego para 192.168.24.0/24 network. A ação padrão é aplicada quando nenhuma regra é correspondida, defina como REJECT .

iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -d 192.168.1.0/24 -j ACCEPT
iptables -P OUTPUT REJECT

Para INPUT chain, você pode criar regras semelhantes. Permitir tráfego de loopback e rede local, descarte o restante.

Você pode corresponder o tráfego estabelecido (responder ao tráfego às conexões iniciadas pelo seu host) com uma única regra usando -m conntrack --ctstate ESTABLISHED . Dessa forma, você não precisa alterar a cadeia quando quiser ativar o acesso à Internet. Isso funciona quando você não executa nenhum programa / daemons esperando conexões fora de sua rede local.

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -P INPUT DROP

Se você precisar permitir conexões iniciadas fora de sua rede local, precisará configurar a INPUT chain da mesma maneira que a OUTPUT chain e usar um mecanismo semelhante para aplicar

Para permitir acesso irrestrito à rede (acesso à WAN), altere a ação padrão para ACCEPT . Para colocar os limites de volta, altere a ação padrão de volta para REJECT . O mesmo efeito é alcançado adicionando / removendo -j ACCEPT como última regra.

iptables -P OUTPUT ACCEPT

Você também pode usar o módulo iptables tempo para aceitar o tráfego em uma hora específica de um dia, caso em que você não precisa usar o cron. Por exemplo, para permitir qualquer tráfego de saída entre as 12:00 e as 13:00 com a seguinte regra:

iptables -A OUTPUT -m time --timestart 12:00 --timestop 13:00 -j ACCEPT
    
por 05.10.2017 / 10:05
2

Removendo a rota padrão

Quando você remove a rota padrão da tabela de roteamento do seu host, ela impede que ela se comunique com outros hosts fora da rede local. A rota padrão é configurada com ip route : ip route default add ... para adicionar a rota padrão e ip route del default para removê-la.

O tráfego do seu roteador ainda pode alcançar seu host. Você pode descartar tráfego para o qual não há rota conhecida para o endereço de origem, ativando o caminho inverso de filtragem .

Existem duas maneiras de configurar a filtragem de caminho inverso: sysctl ou iptables . O método sysctl aplica-se apenas ao ipv4, a regra iptables pode ser escrita tanto para o ipv4 quanto para o ipv6.

  • Para habilitar a filtragem de caminho reverso usando sysctl rp_filter :

    sysctl net.ipv4.conf.all.rp_filter = 1
    
  • Com iptables , usando rpfilter módulo:

    iptables -t raw -I PREROUTING -m rpfilter --invert -j DROP
    

    A mesma regra também funciona para ip6tables . Para nftables , use a declaração fib .

Para remover e restaurar a rota padrão, você pode usar um script simples com o cron:

#!/bin/sh -e
FILE="/root/default.gw"

case "$1" in
    "remove")
        route="$(ip route show default 0.0.0.0/0)"

        if [ -z "$route" ]; then
            echo "no default route configured"
            exit 1
        fi

        echo "$route" > $FILE
        ip route del default
        ip route flush cache
    ;;

    "restore")
        route="$(cat $FILE)"

        if [ -z "$route" ]; then
            echo "no default route saved"
            exit 1
        fi

        ip route add $route 
    ;;

    *)
        echo "invalid argument"
        echo "usage: $(basename -- $0) remove|restore"
        exit 1
esac
    
por 05.10.2017 / 11:30