firewall output bloqueado portas [RESOLVIDO]

1. firewall output bloqueado portas [RESOLVIDO]

Lucas Peregrino
Lucas Peregrino

(usa Debian)

Enviado em 09/10/2017 - 14:54h

Boa tarde estou com dificuldade para começar um firewall com output bloqueado o dns em não esta aceitando olha localmente muitas vezes trabalho com ele em output accept mais dessa vez preciso montar em drop teria como alguém me ajudar. mesmo liberando o 53 local ele não resolve o nome seja no 127.0.0.1 quanto no ip da maquina.

net=eth1
ip_net=192.168.1.23
rede=eth0
ip_rede=192.168.40.0/24
servidor=(192.168.40.254 192.168.40.253 192.168.40.252)


## Ativa
# -------------------------------------------------------
# Protecao contra responses bogus
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

# Protecao contra ataques de syn flood (inicio da conexao TCP). Tenta conter ataques de DoS.
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

# Finalmente: Habilitando o trafego IP, entre as Interfaces de rede
echo "1" > /proc/sys/net/ipv4/ip_forward

## Limpar tabelas
# -------------------------------------------------------
iptables -t filter -F
iptables -t nat -F

## Definindo o DROP
# -------------------------------------------------------
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

## Definindo o ICMP
# -------------------------------------------------------
iptables -A INPUT -p icmp -j ACCEPT
iptables -A FORWARD -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT

## Mascaramento de rede para acesso externo
# -------------------------------------------------------
iptables -t nat -I POSTROUTING -s $ip_rede -j MASQUERADE

## Liberando SSH
# -------------------------------------------------------
iptables -A INPUT -p tcp -d $ip_net --dport 22 -j ACCEPT #Entrada externa
iptables -A OUTPUT -p tcp -s $ip_net --sport 22 -j ACCEPT #Saida externa
iptables -A INPUT -p tcp -d ${servidor[0]} --dport 22 -j ACCEPT #Entrada interna
iptables -A OUTPUT -p tcp -s ${servidor[0]} --sport 22 -j ACCEPT #Saida interna

## Liberando DHCP
# -------------------------------------------------------
# iptables -A INPUT -p udp --sport 67 -d ${servidor[0]} -j ACCEPT #Entrada interna
# iptables -A OUTPUT -p udp -s ${servidor[0]} --dport 67 -j ACCEPT #Saida interna

# iptables -I INPUT -p tcp --dport 67 -j LOG --log-level info --log-prefix 'DHCP 67 >'
# iptables -I INPUT -p tcp --dport 67 -j LOG --log-level info --log-prefix 'DHCP 67 DROP>'

## Liberando DNS
# -------------------------------------------------------
iptables -A INPUT -p udp --sport 53 -d ${servidor[0]} -j ACCEPT #Entrada interna
iptables -A OUTPUT -p udp -s ${servidor[0]} --dport 53 -j ACCEPT #Saida interna

iptables -A FORWARD -p udp --sport 53 -d $ip_rede -j ACCEPT #Saida externa
iptables -A FORWARD -p udp -s $ip_rede --dport 53 -j ACCEPT #Entrada externa

iptables -I INPUT -p tcp --dport 53 -j LOG --log-level info --log-prefix 'DNS 53 >'
iptables -I INPUT -p tcp --dport 53 -j LOG --log-level info --log-prefix 'DNS 53 DROP>'

## Liberando HTTP 80 e HTTPS 443
# -------------------------------------------------------
iptables -A INPUT -p tcp --sport 80 -d $ip_net -j ACCEPT #Entrada externa local
iptables -A OUTPUT -p tcp -s $ip_net --dport 80 -j ACCEPT #Saida externa local

iptables -A INPUT -p tcp --sport 443 -d $ip_net -j ACCEPT #Entrada externa local
iptables -A OUTPUT -p tcp -s $ip_net --dport 443 -j ACCEPT #Saida externa local

iptables -A FORWARD -p tcp --sport 80 -d $ip_rede -j ACCEPT #Entrada externa rede interna
iptables -A FORWARD -p tcp -s $ip_rede --dport 80 -j ACCEPT #Saisa externa rede interna

iptables -A FORWARD -p tcp --sport 443 -d $ip_rede -j ACCEPT #Entrada externa rede interna
iptables -A FORWARD -p tcp -s $ip_rede --dport 443 -j ACCEPT #Saisa externa rede interna



  


2. Re: firewall output bloqueado portas [RESOLVIDO]

Hector Nagao
heckjp

(usa elementary OS)

Enviado em 09/10/2017 - 15:47h

Cara...se eu não estou enganado, montar em drop o firewall não é para funcionar nada., pois os firewalls como iptables trabalham no sistema top/down, ou seja, a primeira regra escrita vai prevalecer as subsequentes. Então o porque de sempre liberar as portas desejadas para no final bloquear todo restante, caso contrário você bloqueará tudo antes mesmo de permitir.


3. Re: firewall output bloqueado portas

Leandro Silva
LSSilva

(usa Outra)

Enviado em 09/10/2017 - 16:45h

Lucas Peregrino escreveu:

Boa tarde estou com dificuldade para começar um firewall com output bloqueado o dns em não esta aceitando olha localmente muitas vezes trabalho com ele em output accept mais dessa vez preciso montar em drop teria como alguém me ajudar. mesmo liberando o 53 local ele não resolve o nome seja no 127.0.0.1 quanto no ip da maquina.

net=eth1
ip_net=192.168.1.23
rede=eth0
ip_rede=192.168.40.0/24
servidor=(192.168.40.254 192.168.40.253 192.168.40.252)


## Ativa
# -------------------------------------------------------
# Protecao contra responses bogus
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

# Protecao contra ataques de syn flood (inicio da conexao TCP). Tenta conter ataques de DoS.
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

# Finalmente: Habilitando o trafego IP, entre as Interfaces de rede
echo "1" > /proc/sys/net/ipv4/ip_forward

## Limpar tabelas
# -------------------------------------------------------
iptables -t filter -F
iptables -t nat -F

## Definindo o DROP
# -------------------------------------------------------
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

## Definindo o ICMP
# -------------------------------------------------------
iptables -A INPUT -p icmp -j ACCEPT
iptables -A FORWARD -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT

## Mascaramento de rede para acesso externo
# -------------------------------------------------------
iptables -t nat -I POSTROUTING -s $ip_rede -j MASQUERADE

## Liberando SSH
# -------------------------------------------------------
iptables -A INPUT -p tcp -d $ip_net --dport 22 -j ACCEPT #Entrada externa
iptables -A OUTPUT -p tcp -s $ip_net --sport 22 -j ACCEPT #Saida externa
iptables -A INPUT -p tcp -d ${servidor[0]} --dport 22 -j ACCEPT #Entrada interna
iptables -A OUTPUT -p tcp -s ${servidor[0]} --sport 22 -j ACCEPT #Saida interna

## Liberando DHCP
# -------------------------------------------------------
# iptables -A INPUT -p udp --sport 67 -d ${servidor[0]} -j ACCEPT #Entrada interna
# iptables -A OUTPUT -p udp -s ${servidor[0]} --dport 67 -j ACCEPT #Saida interna

# iptables -I INPUT -p tcp --dport 67 -j LOG --log-level info --log-prefix 'DHCP 67 >'
# iptables -I INPUT -p tcp --dport 67 -j LOG --log-level info --log-prefix 'DHCP 67 DROP>'

## Liberando DNS
# -------------------------------------------------------
iptables -A INPUT -p udp --sport 53 -d ${servidor[0]} -j ACCEPT #Entrada interna
iptables -A OUTPUT -p udp -s ${servidor[0]} --dport 53 -j ACCEPT #Saida interna

iptables -A FORWARD -p udp --sport 53 -d $ip_rede -j ACCEPT #Saida externa
iptables -A FORWARD -p udp -s $ip_rede --dport 53 -j ACCEPT #Entrada externa

iptables -I INPUT -p tcp --dport 53 -j LOG --log-level info --log-prefix 'DNS 53 >'
iptables -I INPUT -p tcp --dport 53 -j LOG --log-level info --log-prefix 'DNS 53 DROP>'

## Liberando HTTP 80 e HTTPS 443
# -------------------------------------------------------
iptables -A INPUT -p tcp --sport 80 -d $ip_net -j ACCEPT #Entrada externa local
iptables -A OUTPUT -p tcp -s $ip_net --dport 80 -j ACCEPT #Saida externa local

iptables -A INPUT -p tcp --sport 443 -d $ip_net -j ACCEPT #Entrada externa local
iptables -A OUTPUT -p tcp -s $ip_net --dport 443 -j ACCEPT #Saida externa local

iptables -A FORWARD -p tcp --sport 80 -d $ip_rede -j ACCEPT #Entrada externa rede interna
iptables -A FORWARD -p tcp -s $ip_rede --dport 80 -j ACCEPT #Saisa externa rede interna

iptables -A FORWARD -p tcp --sport 443 -d $ip_rede -j ACCEPT #Entrada externa rede interna
iptables -A FORWARD -p tcp -s $ip_rede --dport 443 -j ACCEPT #Saisa externa rede interna


Porque não faz da seguinte maneira?

A política é drop. Certo?
Separa sua lógica por chain.
Ex:

# Input
# Drop Invalid
iptables -A INPUT -m state --state INVALID -j LOG --log-prefix "Input - Invalid "
iptables -A INPUT -m state --state INVALID -j DROP
# Est. Related
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Libera seus serviços a nível de processo local (servidor), é necessário entender o INPUT.
# SSH
iptables -A INPUT -i $"Interface desejada" -p tcp --dport 22 -m state --state NEW --syn -j ACCEPT
# DNS - (Você precisa liberar consulta DNS para rede interna? Seu servidor irá ser DNS da rede interna? Se sim faça o seguinte ,,,)
iptables -A INPUT -i $"interface rede interna" -p tcp --dport 53 -m state --state NEW --syn -j ACCEPT
iptables -A INPUT -i $"interface rede interna" -p udp --dport 53 -m state --state NEW -j ACCEPT
# Libera demais serviços no servidor ....
....
....
# Libera loopback
iptables -A INPUT -i lo -j ACCEPT
# Log Padrão
iptables -A INPUT ! -i lo -j LOG --log-prefix "Drop Input ... "


Essa é a lógica que normalmente uso para se construir um firewall com política DROP statefull, se seguir o exemplo para FORWARD e OUTPUT também dará certo.
Essas regras aqui ó:
# Drop Invalid
iptables -A INPUT -m state --state INVALID -j LOG --log-prefix "Input - Invalid "
iptables -A INPUT -m state --state INVALID -j DROP
# Est. Related
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

São muito importantes quando se usa um firewall desta forma, não omita elas.

Se quiser liberar output para consulta de dns's externos, faça o seguinte:
Crie uma variável com dns confiáveis:
#Exemplo utilizando os do google - Solte espaço de um pro outro.
#Variável dns's confiáveis
trusted="8.8.8.8 8.8.4.4"
#Libera acesso à dns confiáveis à partir do localhost (servidor)
for ip in $trusted
do
iptables -A OUTPUT -p tcp --dport 53 -d $ip -m state --state NEW --syn -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -d $ip -m state --state NEW -j ACCEPT
done
#Libera acesso à dns' confiáveis à partir da rede (irá permitir a comutação entre intefaces atendendo aos seus critérios):
for ip in $trusted
do
iptables -A FORWARD -p tcp --dport 53 -s $localnet_address_range -d $ip -m state --state NEW --syn -j ACCEPT
iptables -A FORWARD -p udp --dport 53 -s $localnet_address_range -d $ip -m state --state NEW -j ACCEPT
done




4. Re: firewall output bloqueado portas

Lucas Peregrino
Lucas Peregrino

(usa Debian)

Enviado em 09/10/2017 - 22:40h

Boa noite a todos depois de muita procura conseguir realizar o dns funcionar usando da seguinte maneira.
iptables -A INPUT -p udp --sport 53 -d $ip_net --dport 1024:65535 -j ACCEPT #Entrada interna
iptables -A OUTPUT -p udp -s $ip_net --sport 1024:65535 --dport 53 -j ACCEPT #Saida interna

iptables -A INPUT -p udp --dport 53 -d ${ip_rede[0]} -j ACCEPT
iptables -A OUTPUT -p udp --sport 53 -s ${ip_rede[0]} -j ACCEPT


As regras acima deixaram o meu servidor pingar as regras a baixo deixaram as maquinas da rede se conectarem na internet DNS ok.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts