Iptables: Protegendo um sistema Linux limitando todo o tráfego para um IP estático e loopback, usando o Iptables

1

Eu tenho um IP estático (no meu pc em casa), é suficiente para proteger um servidor remoto para meu próprio uso (da minha casa, ip estático, para servidor remoto) usando a seguinte regra?

# Allow all loopback (lo0) traffic and reject traffic
# to localhost that does not originate from lo0.
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -s 127.0.0.0/8 -j REJECT

#Allow traffic from address $STATIC_IP
-A INPUT -s $STATIC_IP -j ACCEPT
-A OUTPUT -d $STATIC_IP -j ACCEPT

#Reject everything else
-A INPUT -j REJECT
-A FORWARD -j REJECT
-A OUTPUT -j REJECT

COMMIT

Edit: Este é o meu último Iptables por Egor Vasilyvev resposta

Iptables para uso normal (sem dns, sem https, sem http para ips externos, apenas para meu ip estático X.X.X.X)

# Allow all loopback (lo0) traffic and reject traffic
# to localhost that does not originate from lo0.
-A INPUT -i lo -j ACCEPT
-A OUTPUT -i lo -j ACCEPT

#Allow traffic from address X.X.X.X
-A INPUT -s X.X.X.X -j ACCEPT
-A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

#Reject everything else
-A INPUT -j REJECT
-A FORWARD -j REJECT
-A OUTPUT -j REJECT

COMMIT

Editar: Regras adicionadas para permitir DNS, HTTP, HTTPS (necessário para baixar novos pacotes dos mirros de distribuição e para resolver nomes de host para IP)

Observe a regra adicional para loopback para evitar falsificação (consulte discussão abaixo)

-A INPUT ! -i lo -s 127.0.0.0/8 -j REJECT

Regras do Iptables para atualizar e instalar pacotes

*filter

#Allow all loopback (lo0) traffic and reject traffic
#to localhost that does not originate from lo0.
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -s 127.0.0.0/8 -j REJECT
-A OUTPUT -o lo -j ACCEPT

#Allow traffic from address X.X.X.X
-A INPUT -i eth0 -s X.X.X.X -j ACCEPT
-A OUTPUT -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

#Allow DNS
-A OUTPUT -o eth0 -p udp --dport 53 -j ACCEPT
-A INPUT -i eth0 -p udp --sport 53 -m conntrack --ctstate ESTABLISHED -j ACCEPT

#Allow HTTP
-A OUTPUT -o eth0 -p tcp --dport 80 -j ACCEPT
-A INPUT -i eth0 -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT

#Allow HTTPS
-A OUTPUT -o eth0 -p tcp --dport 443 -j ACCEPT
-A INPUT -i eth0 -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

#Reject everything else
-A INPUT -j DROP
-A FORWARD -j DROP
-A OUTPUT -j DROP

COMMIT

No momento, minha solução é alternar entre essas duas regras, usando a primeira regra para uso normal e mudando para a segunda (com DNS, HTTP e HTTPS) para atualizar e instalar pacotes.

    
por Joey 30.09.2017 / 18:02

2 respostas

2

Este é o servidor de regras? Se sim, então:

Você não precisa desta regra :

-A INPUT ! -i lo -s 127.0.0.0/8 -j REJECT

Esta regra é uma proteção contra falsificação. Você permite o tráfego somente de e para seu PC e, se confiar em seu PC, esta regra não é necessária

Aplicativos nos quais o endereço de loopback é necessário não funcionarão corretamente .

Você tem a política padrão de REJECT all e não tem regras que permitam o tráfego de loopback de OUTPUT . Adicione esta regra ao seu script:

-A OUTPUT -i lo -j ACCEPT

O seu servidor pode enviar tráfego para o seu PC .

Se isso é o que você precisa, suas regras estão corretas. Se somente seu PC precisar iniciar a troca de dados, suas regras estarão incorretas.

Substitua esta regra:

-A OUTPUT -d $STATIC_IP -j ACCEPT

para isso:

-A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
    
por 01.10.2017 / 14:35
1

Isso restringe o servidor a receber apenas tráfego que envia e enviar apenas tráfego para si mesmo. Com este conjunto de regras, você não poderá acessar o servidor mesmo para uso próprio de qualquer outro lugar. Enquanto isso irá proteger o servidor, ele também irá torná-lo inutilizável, então você provavelmente não quer fazer isso.

    
por 30.09.2017 / 18:04