netstryker
(usa Debian)
Enviado em 29/11/2013 - 17:54h
Olá amigos do VOL. Tenho a esperança de que possam me ajudar. A situação é a seguinte. Tenho um proxy transparente rodando perfeitamente no Debian Wheezy e por causa do maldito UltraSurf e por outras razões de segurança preciso transformar esse proxy em "não transparente". Antes de mais nada quero avisar que não adianta me indicar outros tópicos do VOL porque já li todos e nenhum deles me ajudou a resolver o meu problema. Vamos aos detalhes para que entendam o meu cenário:
1) Minha topologia de rede está assim:
-> Modem (Virtua) roteado > Roteador > Servidor Proxy > Switch > Estações de trabalho
Obs.: Não falemos sobre a minha topologia porque tudo está funcionando perfeitamente, inclusive o acesso remoto externo ao servidor por SSH via PuTTY usando o DDNS do no-ip.org.
2) O meu Servidor Proxy está com duas interfaces de rede configuradas como eth1 e eth2 em "/etc/udev/rules.d/70-persistent-net.rules" e ambas as interfaces estão com os seus respectivos MAC's amarrados no "iftab". A interface eth1 é o proxy/rede interna obviamente configurada como static (gateway 192.168.0.1). A interface eth2 é a internet que vem do roteador e está configurada por DHCP. O gateway do roteador é 192.168.1.1, logo, o "/etc/resolv.conf" está resolvendo automaticamente o DNS para 192.168.1.1.
ALGUMAS CONSIDERAÇÕES IMPORTANTES:
A) Tudo que tenho desenvolvido no servidor proxy é com base no livro do Carlos Marimoto. É claro que também tenho pesquisado muita coisa no VOL e em outros sites para comparar e escolher as melhores soluções para as minhas necessidades.
B) Estou com o apache2 instalado e rodando por causa do SARG, ambos rodando perfeitamente. Estou usando o path padrão "/var/www".
C) O perfil do meu proxy é radical, DENY para tudo exceto para os sites que estão liberados em "/etc/squid/rules-da/sites_permitidos.txt" na acl sites_permitidos.
MEUS PROBLEMAS COM O PROXY "NÃO TRANSPARENTE" SÂO:
1) Criei o script para usar o WPAD em "/var/www/wpad.dat", configurei nos browsers e funcionou perfeitamente, porém, ao tentar automatizar o WPAD instalando e configurando o "isc-dhcp-server" e o "bind9", se eu tentar configurar os browsers para descoberta automática de proxy não funciona. Funciona somente se eu configurar manualmente ou se eu configurar pelo script "http://192.168.0.1/wpad.dat". Eu realmente preciso do WPAD funcionando para a descoberta automática de proxy na minha rede. Depois do insucesso eu fiquei tão irritado que desinstalei o "isc-dhcp-server" e o "bind9".
2) O UltraSurf parou de funcionar como eu precisava, porém, o Skype e o Teamviewer não funcionam mais. Para piorar ainda mais, nos mail managers das estações de trabalho o SMTP e o POP dão erro e obviamente não estão mais enviando e recebendo mensagens. Tentei criar várias regras no iptables para liberar as portas, tudo sem sucesso. É impossível trabalhar sem e-mails e no caso da minha rede, não ter o Skype e o Teamviewer funcionando também, pois, ambos são de necessidades operacionais essenciais.
OBSERVAÇÕES IMPORTANTES:
1) Conforme eu já citei acima, no momento o "isc-dhcp-server" e o "bind9" não estão instalados, porém, eu preciso fazer com que o WPAD funcione para a descoberta automática de proxy.
2) Pelo que andei pesquisando, para que o proxy seja realmente "não transparente" as configurações "iptables -t nat -A POSTROUTING -o $ifinternet -j MASQUERADE" e "iptables -t nat -A PREROUTING -i $ifproxy -p tcp --dport 80 -j REDIRECT --to-port 3128" não podem estar ativas no iptables. Isso está correto!?
Conforme vocês verão nas minhas configurações abaixo, essas linhas estão comentadas e as variáveis "$ifinternet" e "$ifproxy" são respectivamente minha "eth2" (internet) e "eth1" (proxy/rede interna).
ABAIXO COMO ESTÂO OS MEUS ARQUIVOS DE CONFIGURAÇÃO:
===== "/etc/network/interfaces" ============================
# /etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback
# REDE INTERNA DA EMPRESA: Servidor -> Switch da Rede -> Estações de Trabalho
auto eth1
allow-hotplug eth1
iface eth1 inet static
address 192.168.0.1
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
# INTERNET: Modem -> Roteador -> Servidor
auto eth2
allow-hotplug eth2
iface eth2 inet dhcp
===== Script de firewall ============================
#! /bin/bash
### BEGIN INIT INFO
# Provides: netset
# Required-Start: squid network-manager
# Required-Stop: squid network-manager
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Inicia o proxy e o firewall
# Description: Inicia o proxy, firewall e compartilhamento de internet
### END INIT INFO
########################
# DECLARANDO VARIÁVEIS #
########################
# Interface do proxy
ifproxy="eth1"
# Interface da internet
ifinternet="eth2"
# EX: Rede interna
iflan="192.168.0.0/24"
################
# FUNÇÃO START #
################
start_netset() {
# EX: LIMPANDO AS REGRAS CRIADAS ANTERIORMENTE
# EX: Limpando a tabela filter
iptables -F
# EX: Limpando a tabela NAT
iptables -t nat -F
# EX: Limpando a tabela mangle
iptables -t mangle -F
# Ativando o NAT do iptables
modprobe iptable_nat
# Ativando o roteamento da conexão entre as interfaces
echo 1 > /proc/sys/net/ipv4/ip_forward
# Ativando o roteamento do proxy (transparente)
# Para usar o proxy normal e bloqueio do UltraSurf comentar para desativar
# iptables -t nat -A POSTROUTING -o $ifinternet -j MASQUERADE
# Bloqueando resposta do servidor ao PING
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
# Ativando proteção contra IP spoofing
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
iptables -A INPUT -m state --state INVALID -j DROP
# Autorizando pacotes da interface de loopback e rede local
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i $ifproxy -j ACCEPT
# Abrindo a porta 22 para conexão remota interna e externa via SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# EX: Abrindo a porta 10000 para conexão remota interna via Webmin
iptables -A INPUT -p tcp -i $ifproxy --dport 10000 -j ACCEPT
# EX: Abrindo a porta do Squid para a rede interna
iptables -A INPUT -p tcp -i $ifproxy --dport 3128 -j ACCEPT
# Bloqueando tentativas de conexão provenientes da Internet
iptables -A INPUT -p tcp --syn -j DROP
# EX: Liberandos as portas 80 e 443 apenas para o localhost
iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
# EX: Liberando FTP para o localhost
iptables -A OUTPUT -p tcp -m multiport --dports 20,21 -j ACCEPT
iptables -A OUTPUT -p udp -m multiport --dports 20,21 -j ACCEPT
# EX: Descartando pacotes inválidos
iptables -A FORWARD -m state --state INVALID -j DROP
# EX: Aceitando a passagem de pacotes de conexões já estabelecidas
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
# EX: Liberando portas de e-mail POP3 e SMTP
iptables -A FORWARD -p tcp -m multiport --dports 25,110,465,587,995 -j ACCEPT
iptables -A FORWARD -p udp -m multiport --dports 25,110,587,995 -j ACCEPT
# Ativando o Proxy Transparente
# Para usar o proxy normal comentar para desativar
# iptables -t nat -A PREROUTING -i $ifproxy -p tcp --dport 80 -j REDIRECT --to-port 3128
}
###############
# FUNÇÃO STOP #
###############
stop_netset() {
# Limpando a tabela filter
iptables -F
# Limpando a tabela NAT
iptables -F -t nat
# EX: Limpando a tabela mangle
iptables -t mangle -F
# EX: Ativando o roteamento da conexão entre as interfaces
echo 1 > /proc/sys/net/ipv4/ip_forward
# EX: Ativando o roteamento do proxy (transparente)
# EX: Para usar o proxy normal e bloqueio do UltraSurf comentar para desativar
# iptables -t nat -A POSTROUTING -o $ifinternet -j MASQUERADE
}
#################
# FUNÇÃO STATUS #
#################
status_netset() {
clear
iptables -L -v -n --line-numbers
echo
}
case "$1" in
"start") start_netset ;;
"stop") stop_netset ;;
"restart") stop_netset; start_netset ;;
"status") status_netset ;;
*) echo "Usar os parametros start, stop ou restart"
esac
exit 0
===== "/etc/squid/squid.conf" ============================
####### CONFIGURAÇÕES DO SQUID #######
####### PROXY DENY ALL (DA) #######
# Ativa o proxy transparente
# http_port 3128 transparent
# Ativa o proxy normal
http_port 3128
# Nome do servidor
visible_hostname servidor-proxy
# Idioma das mensagens de erro
error_directory /usr/share/squid/errors/Portuguese/
####### CONFIGURAÇÕES DE CACHE #######
# Deve ser 1/3 da RAM do servidor
cache_mem 1365 MB
maximum_object_size_in_memory 64 KB
maximum_object_size 1024 MB
minimum_object_size 0 KB
cache_swap_low 90
cache_swap_high 95
cache_dir ufs /var/spool/squid 5120 16 256
cache_access_log /var/log/squid/access.log
refresh_pattern ^ftp: 15 20% 2280
refresh_pattern ^gopher: 15 0% 2280
refresh_pattern . 15 20% 2280
####### ACL's PADRÃO #######
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl redelocal src 192.168.0.0/24
acl SSL_ports port 443 563
acl Safe_ports port 21 70 80 210 443 488 563 591 777 901 1025-65535
acl purge method PURGE
acl CONNECT method CONNECT
####### ACL's CUSTOMIZADAS #######
# Regras com permissões gerais
acl itau url_regex -i itau
acl caixa dstdomain .caixa.gov.br
acl macs_liberados arp "/etc/squid/rules-da/macs_liberados.txt"
acl sites_permitidos url_regex -i "/etc/squid/rules-da/sites_permitidos.txt"
# Regras de bloqueio de usuário
acl macs_bloqueados arp "/etc/squid/rules-da/macs_bloqueados.txt"
# Regras de liberação temporária
acl almoco time 12:00-13:00
acl sites_permitidos_almoco url_regex -i "/etc/squid/rules-da/sites_permitidos_almoco.txt"
# Regras com proibições gerais
acl extensoes_proibidas urlpath_regex -i "/etc/squid/rules-da/extensoes_proibidas.txt"
# Regras de controle de banda
acl banda_liberada arp "/etc/squid/rules-da/banda_liberada.txt"
acl banda_limitada arp "/etc/squid/rules-da/banda_limitada.txt"
####### PERMISSÕES E BLOQUEIOS PADRÃO #######
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
####### PERMISSÔES E BLOQUEIOS DAS ACL's CUSTOMIZADAS #######
# Regras com permissões gerais
always_direct allow itau
always_direct allow caixa
http_access allow macs_liberados
# Regras de bloqueio de extensões para download
http_access deny extensoes_proibidas
# Regras de liberação de sites (exceções)
http_access allow sites_permitidos
# Regras de liberação temporária
http_access allow sites_permitidos_almoco almoco
http_access deny sites_permitidos_almoco
# Regras de bloqueio de usuários
http_access deny macs_bloqueados
# Regras de controle de banda
delay_pools 2
delay_class 1 2
delay_parameters 1 -1/-1 -1/-1
delay_access 1 allow banda_liberada
delay_class 2 2
delay_parameters 2 -1/-1 204800/204800
delay_access 2 allow banda_limitada
####### PERMISSÃO DE REDE LOCAL E SERVIDOR #######
http_access allow localhost
http_access allow redelocal
####### BLOQUEIO DE USUÁRIOS FORA DA REDE #######
# Definir como "http_access allow all" para permitir
http_access deny all