Problemas com Iptables

1. Problemas com Iptables

thinomar
thinomar

(usa Linux Mint)

Enviado em 20/03/2015 - 18:11h

Olá pessoal,

Estou tendo um problema com meu firewall. Estou tentando implantá-lo em uma rede pequena, bloqueando alguns sites inclusive, mas os bloqueios não estão ocorrendo.
Meu script do firewall:
### Interfaces ###
int=eth0
ext=ppp0


### Exclusão de regras ###
iptables -t nat -F
iptables -t mangle -F
iptables -t filter -F


### Exclusão de cadeias ###
iptables -X


### Reset em contadores ###
iptables -t nat -Z
iptables -t mangle -Z
iptables -t filter -Z


### Carregamento dos modulos ###
modprobe iptable_nat
modprobe iptable_filter
modprobe iptable_mangle


### Definição de políticas ###
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP


### Trafego http para Squid ###
#iptables -t nat -A PREROUTING -s 192.168.100.0/255.255.255.0 -p tcp --dport 80 -j REDIRECT --to-port 3128


### Regras INPUT ###
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Loopback #
iptables -A INPUT -i lo -j ACCEPT
# ICMP 0 #
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
# ICMP 8 #
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
# SSH #
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# FTP #
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
# OpenVPN #
iptables -A INPUT -p tcp --dport 1194 -j ACCEPT
# HTTP #
iptables -A INPUT -p tcp --dport 80 -j ACCEPT


### Regras FORWARD ###
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# ICMP #
iptables -A FORWARD -p icmp -j ACCEPT
# SMTP #
iptables -A FORWARD -p tcp --dport 25 -j ACCEPT
# SSH #
iptables -A FORWARD -p tcp --dport 22 -j ACCEPT
# FTP #
iptables -A FORWARD -p tcp --dport 21 -j ACCEPT
# POP #
iptables -A FORWARD -p tcp --dport 110 -j ACCEPT
# SSL #
iptables -A FORWARD -p tcp --dport 443 -j ACCEPT
# MS Terminal Server #
iptables -A FORWARD -p tcp --dport 3389 -j ACCEPT
# HTTP #
iptables -A FORWARD -p tcp --dport 80 -j ACCEPT
# HTTPS #
iptables -A FORWARD -p tcp --dport 443 -j ACCEPT
# VNC #
iptables -A FORWARD -p tcp --dport 5900 -j ACCEPT
# OpenVPN #
iptables -A FORWARD -p tcp --dport 1194 -j ACCEPT
# Sites #
for list in `cat /tmp/firewall/sites_bloq` ; do
iptables -I FORWARD -m string --algo bm --string $list -j DROP
done


### Regras OUTPUT ###
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT


### Regras POSTROUTING ###
iptables -t nat -A POSTROUTING -o $ext -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward


### Mensagem de encerramento ###
echo "Firewall ativado"


O arquivo sites_bloq está assim:
youtube.com
facebook.com
twitter.com
instagram.com


P.s. Nas máquinas com Windows, o bloqueio ocorre normalmente, mas nas com Linux não. Chequei pelo tcpdump e o tráfego de todas passa pelo firewall, por isso não sei o que fazer mais. :/

Caso possam me ajudar, agradeço.


  


2. Re: Problemas com Iptables

Carlos Alberto de Souza Barbosa
souzacarlos

(usa Outra)

Enviado em 20/03/2015 - 18:21h

Boa noite
Cara queria entender como seus hosts estão saindo pra Internet se vc não habilitou tráfego DNS, vc pode confirmar as configs de DNS das máquinas WIN e LINUX, não que tenha algo haver, mas seria bom pra começar

aguardo.


3. Re: Problemas com Iptables

thinomar
thinomar

(usa Linux Mint)

Enviado em 25/03/2015 - 13:40h

souzacarlos escreveu:

Boa noite
Cara queria entender como seus hosts estão saindo pra Internet se vc não habilitou tráfego DNS, vc pode confirmar as configs de DNS das máquinas WIN e LINUX, não que tenha algo haver, mas seria bom pra começar

aguardo.


Obrigado pela resposta, souzacarlos, e desculpe pela demora.

Bom, tinha esquecido de liberar o DNS. Ele está assim agora:
iptables -A FORWARD -p udp -s 192.168.100.0/24 --dport 53 -j ACCEPT
iptables -A INPUT -p udp -s 192.168.100.0/24 --dport 53 -j ACCEPT


Mesmo após a alteração, o problema persiste. O DNS de ambas está no 192.168.100.1, que é o host que faz o DHCP, DNS e onde gerenciamos as regras de tráfego de rede. O gateway do servidor que está fazendo o papel de firewall está neste mesmo host, 192.168.100.1.




4. Re: Problemas com Iptables

thinomar
thinomar

(usa Linux Mint)

Enviado em 25/03/2015 - 14:14h


Não sei se isso tem relação também, mas dei um tcpdump com o source sendo uma maquina linux e depois sendo uma maquina windows, e na linux, basicamente nao há trafego se eu não solicitar alguma página e o tráfego é todo direcionado para carregar a página solicitada. Olhe um trecho:
14:12:26.466634 IP 192.168.100.234.60032 > 8.8.8.8.53: 1610+ A? www.facebook.com. (34)
14:12:26.466671 IP 192.168.100.234.60032 > 8.8.8.8.53: 1610+ A? www.facebook.com. (34)
14:12:26.466677 IP 192.168.100.234.34709 > 8.8.8.8.53: 37130+ A? www.facebook.com. (34)
14:12:26.466690 IP 192.168.100.234.34709 > 8.8.8.8.53: 37130+ A? www.facebook.com. (34)
14:12:26.466695 IP 192.168.100.234.34709 > 8.8.8.8.53: 60180+ AAAA? www.facebook.com. (34)
14:12:26.466703 IP 192.168.100.234.34709 > 8.8.8.8.53: 60180+ AAAA? www.facebook.com. (34)
14:12:27.267913 IP 192.168.100.234.54075 > 8.8.8.8.53: 8449+ A? fbstatic-a.akamaihd.net. (41)
14:12:27.267958 IP 192.168.100.234.54075 > 8.8.8.8.53: 8449+ A? fbstatic-a.akamaihd.net. (41)
14:12:27.267965 IP 192.168.100.234.54075 > 8.8.8.8.53: 58072+ AAAA? fbstatic-a.akamaihd.net. (41)
14:12:27.267973 IP 192.168.100.234.54075 > 8.8.8.8.53: 58072+ AAAA? fbstatic-a.akamaihd.net. (41)
14:12:27.267978 IP 192.168.100.234.51382 > 8.8.8.8.53: 10985+ A? fbstatic-a.akamaihd.net. (41)
14:12:27.267990 IP 192.168.100.234.51382 > 8.8.8.8.53: 10985+ A? fbstatic-a.akamaihd.net. (41)


Já o Windows flooda o servidor de pacotes ack, mandando entre 5 e 10 por segundo, impossibilitando até de ver as requisições http. Trecho:
14:15:31.899926 IP 192.168.100.32.64580 > 192.168.100.5.22: Flags [.], ack 3037, win 255, length 0
14:15:32.105397 IP 192.168.100.32.64580 > 192.168.100.5.22: Flags [.], ack 3185, win 254, length 0
14:15:32.306623 IP 192.168.100.32.64580 > 192.168.100.5.22: Flags [.], ack 3333, win 254, length 0
14:15:32.507223 IP 192.168.100.32.64580 > 192.168.100.5.22: Flags [.], ack 3481, win 253, length 0
14:15:32.648941 IP 192.168.100.32.137 > 192.168.100.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
14:15:32.651916 IP 192.168.100.32.64580 > 192.168.100.5.22: Flags [.], ack 3777, win 252, length 0
14:15:32.860710 IP 192.168.100.32.64580 > 192.168.100.5.22: Flags [.], ack 3925, win 252, length 0
14:15:32.863911 IP 192.168.100.32.64580 > 192.168.100.5.22: Flags [P.], seq 0:84, ack 4073, win 251, length 84
14:15:32.863929 IP 192.168.100.32.64580 > 192.168.100.5.22: Flags [P.], seq 84:136, ack 4073, win 251, length 52
14:15:33.071019 IP 192.168.100.32.64580 > 192.168.100.5.22: Flags [.], ack 4385, win 256, length 0
14:15:33.275276 IP 192.168.100.32.64580 > 192.168.100.5.22: Flags [.], ack 4533, win 256, length 0


Não sei se tem alguma relação com isso, mas mandei pro caso de dar alguma pista.

Desde já, obrigado.


5. Re: Problemas com Iptables

Carlos Alberto de Souza Barbosa
souzacarlos

(usa Outra)

Enviado em 26/03/2015 - 23:48h

Boa noite

Quem é esse cara aqui "192.168.100.5"

Outra coisa reparou q a máquina com Linux tá resolvendo tudo direto no 8.8.8.8 - como esta teu arquivo de resolução de nomes no linux?

Aguardo.











6. Re: Problemas com Iptables

Perfil removido
removido

(usa Nenhuma)

Enviado em 27/03/2015 - 09:58h


O Iptables bloqueia e gerencia apenas trafego IPv4.

O ip6tables é quem gerencia trafego IPv6.

O lance é que normalmente o ip6tables está lá com tudo com ACCEPT.

Possíveis soluções são desligar o trafego IPV6 do firewall dropando TUDO.

ou desativar o PROTOCOLO IPV6 com ipv6.disable=1 (colocar no grub ou lilo) Existem outras formas!!

OU manter dois firewall na rua rede... Um com iptables para IPV4 e outro com ip6tables para IPV6. Logicamente DOBRANDO
seu trabalho de manter regras e testar situações.



7. Re: Problemas com Iptables

Buckminster
buckminster

(usa Debian)

Enviado em 27/03/2015 - 13:01h

Faça um teste, acrescente as regras na posição abaixo:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -i ! $ext -j ACCEPT <<< acrescente

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state NEW -i ! $ext -j ACCEPT <<< acrescente

iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT <<< deixe assim esta regra
iptables -A OUTPUT -m state --state NEW -i ! $ext -j ACCEPT <<< acrescente

Salve, reinicie e poste aqui o que acontecer.


E veja o seguinte:
14:12:26.466690 IP 192.168.100.234.34709 > 8.8.8.8.53: 37130+ A? www.facebook.com. (34)
14:12:26.466695 IP 192.168.100.234.34709 > 8.8.8.8.53: 60180+ AAAA? www.facebook.com. (34)

repare na interrogação após A e AAAA, ou seja o problema está no DNS, tanto do IPv4 quanto do IPv6..

Verifique também o arquivo resolv.conf.



8. Re: Problemas com Iptables

thinomar
thinomar

(usa Linux Mint)

Enviado em 27/03/2015 - 15:23h

Olá pessoal. Vamos na ordem:

souzacarlos
192.168.100.5 é o servidor onde se encontra o firewall
192.168.100.1 é o servidor que faz o DHCP, DNS e balanceamento de rede, além de ser onde os links de internet estão conectados. Resumidamente, é o gateway real da rede.
Vou deixar o resolv.conf no final.

kyetoy
Valeu pela dica. Dropei tudo no IPv6, mas o problema persiste :/
ip6tables -P INPUT DROP
ip6tables -P FORWARD DROP
ip6tables -P OUTPUT DROP


buckminster
Valeu, cara, mas o problema ainda continua: o firewall barra o Windows mas não barra o Linux :/
Sobre as regras, como o output informou que Can't use -i with OUTPUT, mudei o -i para -o
Mudei o DNS e, agora, o tráfego, verificando pelo tcpdump, está semelhante ao Windows, mas o Linux ainda passa livremente pelo Firewall.

Script:
### Exclui todas as regras ###
iptables -t nat -F
iptables -t mangle -F
iptables -t filter -F

### Exclui cadeias customizadas ###
iptables -X

### Zera os contadores das cadeias ###
iptables -t nat -Z
iptables -t mangle -Z
iptables -t filter -Z

### Carrega os modulos ###
modprobe iptable_nat
modprobe iptable_filter
modprobe iptable_mangle

### Define a política padrão do firewall ###
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
# Ip6tables #
ip6tables -P INPUT DROP
ip6tables -P FORWARD DROP
ip6tables -P OUTPUT DROP


### Liberando DNS Server ###
iptables -A FORWARD -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT

### Jogando tráfego da porta 80 para o SQUID TRANSPARENT ###
#iptables -t nat -A PREROUTING -s 192.168.100.0/255.255.255.0 -p tcp --dport 80 -j REDIRECT --to-port 3128

### Regras INPUT ###
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -i !$EXT -j ACCEPT
# Loopback #
iptables -A INPUT -i lo -j ACCEPT
# ICMP 0 #
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
# ICMP 8 #
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
# SSH #
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# FTP #
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
# OpenVPN #
iptables -A INPUT -p tcp --dport 1194 -j ACCEPT
# HTTP #
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
for list in `cat /tmp/firewall/sites_bloq` ; do
iptables -I INPUT -m string --algo bm --string $list -j DROP
done

### Regras FORWARD ###
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state NEW -i !$EXT -j ACCEPT
# ICMP #
iptables -A FORWARD -p icmp -j ACCEPT
# SMTP #
iptables -A FORWARD -p tcp --dport 25 -j ACCEPT
# SSH #
iptables -A FORWARD -p tcp --dport 22 -j ACCEPT
# FTP #
iptables -A FORWARD -p tcp --dport 21 -j ACCEPT
# POP #
iptables -A FORWARD -p tcp --dport 110 -j ACCEPT
# SSL #
iptables -A FORWARD -p tcp --dport 443 -j ACCEPT
# MS Terminal Server #
iptables -A FORWARD -p tcp --dport 3389 -j ACCEPT
# HTTP #
iptables -A FORWARD -p tcp --dport 80 -j ACCEPT
# HTTPS #
iptables -A FORWARD -p tcp --dport 443 -j ACCEPT
# VNC #
iptables -A FORWARD -p tcp --dport 5900 -j ACCEPT
# Sites #
for list in `cat /tmp/firewall/sites_bloq` ; do
iptables -I FORWARD -m string --algo bm --string $list -j DROP
done

### Regras OUTPUT ###
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state NEW -o !$EXT -j ACCEPT

### Regras POSTROUTING ###
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o $EXT -j MASQUERADE


resolv.conf:
nameserver 192.168.100.1
nameserver 8.8.8.8
nameserver 8.8.4.4


interfaces:
auto eth0
allow-hotplug eth0
iface eth0 inet static
address 192.168.100.234
network 192.168.100.0
netmask 255.255.255.0
broadcast 192.168.100.255
gateway 192.168.100.5
dns-nameservers 192.168.100.1


O gateway do firewall server, que é o 192.168.100.5, está configurado como 192.168.100.1

E é isso. Agradeço pela ajuda. Não sei se há mais algo que possa ser feito. Estou pensando em tentar implementar um proxy, squid ou dansguardian, e passar os bloqueios de sites para ele. Mas é isso. Novamente, obrigado.


9. Re: Problemas com Iptables

Buckminster
buckminster

(usa Debian)

Enviado em 27/03/2015 - 15:38h

Comente a linha abaixo no /etc/network/interfaces, reinicie a máquina e teste:

dns-nameservers 192.168.100.1

Outra possibilidade talvez seja alguma coisa no script, porque se a internet está funcionando nas máquinas Linux é porque o compartilhamento está funcionando e o compartilhamento é feito no mesmo script do Iptables.

Teste trocando essa linha

iptables -I INPUT -m string --algo bm --string $list -j DROP

por

iptables -I FORWARD -m string --algo bm --string $list -j DROP

Mas primeiro teste comentando o DNS acima, não se coloca DNS no arquivo /etc/network/interfaces.


10. Re: Problemas com Iptables

thinomar
thinomar

(usa Linux Mint)

Enviado em 27/03/2015 - 17:54h

buckminster escreveu:
Teste trocando essa linha
iptables -I INPUT -m string --algo bm --string $list -j DROP
por
iptables -I FORWARD -m string --algo bm --string $list -j DROP


Então, cara, o script tem as duas regras, a pra input e pra forward.

Tirei o DNS do interfaces e reiniciei, mas o problema persistiu, entao fui tirar a prova real para ver se o firewall estava servindo pra algo (algo além de dar dor de cabeça kkkk). Quando dropei a porta 443/tcp, nenhuma página https abriu mais no linux, exceto o google (???). Quando dropei a 80/tcp, todas as http pararam de funcionar também. Resolvi criar um regra do gênero "liberar tudo que não seja tal coisa", mas não funcionou, nem colocando "!" ou "^" na frente do $list. Estou tentando colocar alguma expressão regular nas páginas bloqueadas (que o iptables aceite).

Ah sim, testei com o -d também, assim:
for list in `cat /tmp/firewall/sites_bloq` ; do
iptables -I FORWARD -d $list -p tcp --dport 443 -j DROP
done


Mas acontece o mesmo.

Vou dando uma pesquisada aqui em expressões regulares para colocar na lista de sites bloqueados ou tentar implantar o dansguardian, ou squid msm, já que são bloqueios básicos, e, conseguindo algo, posto aqui.

Mas é isso galera, valeu pela ajuda. Abraços o/










Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts