Proxy transparent localhost, como?

1. Proxy transparent localhost, como?

Ghoost User
ghoostuser

(usa Arch Linux)

Enviado em 10/06/2014 - 05:15h

Galera aqui em casa tem um pc para familia, é linux, quero usar o proxy transparent do squid na propria maquina, impedindo as configuraçõesno navegador.

tipo eu ja fiz assim:
 
iptables -t nat -A PREROUTING -i lo -p tcp --dport 80 -j REDIRECT --to-port 3128

e bloquiei os sites pelo squid acrescentando assim:
 
acl bloqueados url_regex -i "/etc/squid/bloqueados"
http_access deny bloqueados


coloquei interface "lo (loopback)" que me falaram que é pra propria maquina, e
deixe o navegador sem proxy e não esta bloqueando, não funcionou. A interface da minha rede é wlan0.

Alguem sabe como deixar proxy transparente na propria maquina?

grato




  


2. Re: Proxy transparent localhost, como?

Buckminster
Buckminster

(usa Debian)

Enviado em 10/06/2014 - 05:23h

Coloque esas regras para proxy transparente na própria máquina:

iptables -t nat -A OUTPUT -m multiport -p tcp --dports 80,3128 -m owner --uid-owner proxy -j ACCEPT
iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 3128

em proxy na opção --uid-owner tu coloca o dono, que pode ser proxy ou squid, veja aí na tua máquina.



3. Re: Proxy transparent localhost, como?

Ghoost User
ghoostuser

(usa Arch Linux)

Enviado em 10/06/2014 - 05:38h

Buckminster escreveu:

Coloque esas regras para proxy transparente na própria máquina:

iptables -t nat -A OUTPUT -m multiport -p tcp --dports 80,3128 -m owner --uid-owner proxy -j ACCEPT
iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 3128

em proxy na opção --uid-owner tu coloca o dono, que pode ser proxy ou squid, veja aí na tua máquina.



eu tentei "proxy" e "squid" e deu a msg:

root@slackware:/home/gabriel$ iptables -t nat -A OUTPUT -m multiport -p tcp --dports 80,3128 -m owner --uid-owner proxy -j ACCEPT
iptables v1.4.20: owner: Bad value for "--uid-owner" option: "proxy"
Try `iptables -h' or 'iptables --help' for more information.
root@slackware:/home/gabriel$


ae coloquei meu usuario inves de proxy e squid, não apareceu mensagem de erro, mais não esta funcionando, esta navegando nos sistes bloqueados do mesmo jeito. o proxy no navegador esta sem nada.
No squid.conf esta: http_port 3128 transparent



4. Re: Proxy transparent localhost, como?

Ghoost User
ghoostuser

(usa Arch Linux)

Enviado em 10/06/2014 - 12:30h

tipo, estava fazendo no slackware tava meio complicadinho, ae agora, passei o tentar com o debian.
No debian, qdo acrescento essas linhas no iptables...

iptables -t nat -A OUTPUT -m multiport -p tcp --dports 80 -m owner --uid-owner proxy -j ACCEPT
iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 3128


... o squid esta bloqueando todos os sites.
So adicionei essas linhas no iptables, esta tudo ACCEPT, o outoput,input...
E no squid ja esta como http_port 3128 transparent.

Amigos,alguem sabe o por que o squid esta bloqueando todos os sites? preciso muito.





5. Re: Proxy transparent localhost, como?

Buckminster
Buckminster

(usa Debian)

Enviado em 10/06/2014 - 19:26h

Posta aqui teu script de Iptables e teu squid.conf.


6. Re: Proxy transparent localhost, como?

Ghoost User
ghoostuser

(usa Arch Linux)

Enviado em 11/06/2014 - 00:07h

Buckminster escreveu:

Posta aqui teu script de Iptables e teu squid.conf.


Meu squid (apaguei os comentarios e deixei as regras principais, acrescentando meus sites bloqueados):


acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network

acl SSL_ports port 443 # https
acl SSL_ports port 563 # snews
acl SSL_ports port 873 # rsync
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 631 # cups
acl Safe_ports port 873 # rsync
acl Safe_ports port 901 # SWAT
acl purge method PURGE
acl CONNECT method CONNECT
acl bloqueados url_regex -i "/etc/squid/bloqueados"
http_access deny bloqueados
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
http_access allow localhost

http_access deny all

icp_access allow localnet
icp_access deny all


http_port 3128 transparent

hierarchy_stoplist cgi-bin ?


cache_mem 8 MB

access_log /var/log/squid/access.log common

refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880
refresh_pattern . 0 20% 4320

acl shoutcast rep_header X-HTTP09-First-Line ^ICY.[0-9]
upgrade_http0.9 deny shoutcast

acl apache rep_header Server ^Apache
broken_vary_encoding allow apache

visible_hostname debian

error_directory /usr/share/squid/errors/pt-br

hosts_file /etc/hosts

coredump_dir /var/spool/squid



Meu firewall:


#!/bin/bash

# IP
NETWORK=Meu_IP

# Interface da Rede Local
ILAN=wlan0


IPT=/sbin/iptables

/sbin/modprobe iptable_filter
/sbin/modprobe iptable_nat
/sbin/modprobe iptable_mangle
/sbin/modprobe ipt_LOG
/sbin/modprobe ipt_REDIRECT
/sbin/modprobe ipt_MASQUERADE

LIMPAR() {
# Removendo regras
$IPT -F
$IPT -t nat -F
$IPT -t mangle -F
# Apagando chains
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X
# Zerando contadores
$IPT -Z
$IPT -t nat -Z
$IPT -t mangle -Z
}

PARAR() {
# Limpando regras
LIMPAR
# Política Padrão
$IPT -P INPUT ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD ACCEPT
}

INICIAR() {
# Limpando regras
LIMPAR
# Política Padrão
$IPT -P INPUT DROP
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD DROP

########################## ATRIBUINDO SEGURANÇA ##########################
# Proteção para SYN Flood
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
# Rejeitar requisição de ICMP Echo destinado a Broadcasts e Multicasts
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# Ignorar Mensagens Falsas de icmp_error_responses
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
for i in /proc/sys/net/ipv4/conf/*; do
# Não Redirecionar Mensagens ICMP
echo 0 > $i/accept_redirects
# Proteção a Ataques IP Spoofing
echo 0 > $i/accept_source_route
# Permitir que Pacotes Forjados sejam logados pelo próprio kernel
echo 1 > $i/log_martians
# Verificar Endereço de Origem do Pacote (Proteção a Ataques IP Spoofing)
echo 1 > $i/rp_filter
done


#################### REGRAS P/ SERVIDORES ####################
# Bloqueando passagem diret na porta 80
$IPT -A FORWARD -p tcp --dport 80 -j DROP
# Apache - Servidor Web
$IPT -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
# Apache TomCat - Servidor Web
$IPT -A INPUT -p tcp --dport 8080 -j ACCEPT
# Bind9 - Servidor DNS
$IPT -A INPUT -p udp --dport 53 -j ACCEPT
# PostgreSQL - Servidor Postgresql
$IPT -A INPUT -i $ILAN -p tcp --dport 5432 -j ACCEPT
# Samba - Serviços de Diretório da Microsoft
$IPT -A INPUT -i $ILAN -p tcp -m multiport --dports 445,139 -j ACCEPT
$IPT -A INPUT -i $ILAN -p udp -m multiport --dports 137,138 -j ACCEPT

# Squid - Servidor Proxy
$IPT -A INPUT -i $ILAN -p tcp --dport 3128 -j ACCEPT
#$IPT -t nat -A PREROUTING -i $ILAN -p tcp --dport 80 -j REDIRECT --to-port 3128

############# Linha para proxy transparent localhost ################
$IPT -t nat -A OUTPUT -m multiport -p tcp --dports 80,3128 -m owner --uid-owner proxy -j ACCEPT
$IPT -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 3128

##################### ADICIONANDO REGRAS P/ SERVIÇOS #####################
# DNS - Serviço de Nomes de Dominios
$IPT -A FORWARD -o $ILAN -p udp -m multiport --dports 53,5353 -j ACCEPT
# FTP - Protocolo de Transferência de Arquivo
$IPT -A FORWARD -o $ILAN -p tcp --dport 21 -j ACCEPT
# HTTP - Protocolo de Transferência de Hypertext
$IPT -A FORWARD -o $ILAN -p tcp -m multiport --dports 80,8080 -j ACCEPT
# HTTPS - Protocolo de Transferência de Hypertext Seguro
$IPT -A INPUT -i $ILAN -p tcp --dport 443 -j ACCEPT
$IPT -A FORWARD -o $ILAN -p tcp --dport 443 -j DROP
$IPT -A FORWARD -o $ILAN -p udp --dport 123 -j ACCEPT
# Ping
$IPT -A INPUT -i $ILAN -p icmp --icmp-type 8 -j ACCEPT
$IPT -A FORWARD -o $ILAN -p icmp --icmp-type 8 -j ACCEPT
# POP3 - Protocolo de Correio
$IPT -A FORWARD -o $ILAN -p tcp --dport 110 -j ACCEPT
#POP3S - Protocolo de Correio Seguro
$IPT -A FORWARD -o $ILAN -p tcp --dport 995 -j ACCEPT
# PPTP - Protocolo de Encapsulamento Ponto a Ponto
$IPT -A FORWARD -o $ILAN -p tcp --dport 1723 -j ACCEPT
# SSH - Shell Seguro
$IPT -A FORWARD -o $ILAN -p tcp --dport 22 -j ACCEPT
# SMTP - Protocolo Simples para Transferência de Correio
$IPT -A FORWARD -o $ILAN -p tcp --dport 25 -j ACCEPT
# SSMTP - Protocolo Simples para Transferência de Correio Seguro
$IPT -A FORWARD -o $ILAN -p tcp --dport 465 -j ACCEPT
# TELNET
$IPT -A FORWARD -o $ILAN -p tcp --dport 23 -j ACCEPT
# XMPP - Protocolo de Presença e Mensagens Extensiva
$IPT -A FORWARD -o $ILAN -p tcp --dport 5222 -j ACCEPT
# Manter Conexões Estabelecidas
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# Liberando o Tráfego na Interface loopback
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A INPUT -p tcp --syn -j DROP

################################## LOG ###################################
$IPT -A INPUT -p tcp -m multiport ! --dports 0:1056 -j DROP
$IPT -A INPUT -p udp -j DROP
$IPT -A INPUT -p icmp -j DROP
$IPT -A INPUT -m limit --limit 3/m --limit-burst 3 -j LOG --log-prefix "LOG-FW: "
}
case "$1" in
start)
echo " * Starting Firewall iptables"
INICIAR
;;
stop)
echo " * Stopping Firewall iptables"
PARAR
;;
restart|reload)
echo " * Reloading Firewall iptables"
INICIAR
;;
*)
echo " * Usage: $0 {start|stop|restart|reload}"
exit 1
esac
exit 0



Foram essas duas linhas que acrescentei no firewall conforme foi dito...

$IPT -t nat -A OUTPUT -m multiport -p tcp --dports 80,3128 -m owner --uid-owner proxy -j ACCEPT
$IPT -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 3128

... e são elas que esta bloqueado todos os sites que tento navegar e no meu navegador não
expecifiquei nenhum proxy, esta padrão.

Porem, quando tiro essas duas linhas, e no navegador coloco o proxy: 'debian:3128' bloqueia os sites que
estão na minha lista de bloqueados de boa.





7. Re: Proxy transparent localhost, como?

Buckminster
Buckminster

(usa Debian)

Enviado em 11/06/2014 - 01:43h

Nem sei por onde começar...

Vamos começar por aqui:

acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network

se o proxy é em uma máquina somente, porque tu colocou 3 redes locais?
Copiou e colou de algum link?

Além disso tu nem liberou ou bloqueou nenhuma dessas localnet:

http_access allow ou deny localnet

Isso no Squid é a mesma coisa que não definir tua rede interna (entenda-se por rede interna no teu caso a rede do IP da tua máquina).
E no Squid sempre precisa definir a rede interna.

Execute ifconfig e veja qual é o teu IP. Se for, por exemplo, 192.168.1.1 a tua rede é 192.168.1.0. Daí esa será tua localnet.

O que define uma regra no Squid não é a regra de criação da ACL, mas sim o conjunto da regra de criação com a regra de bloqueio/liberação.
Assim:

acl tal
http_access dny ou allow tal

Mas o aconselhável é criar todas as ACLs primeiro num bloco só e depois em outro bloco só (todas as http_access) bloquear ou liberar.

E depois tu colocou no final

http_access deny all

negando tudo.

Essa regra acima não está errada, ela deve ficar no final mesmo, mas antes deve ter as regras http_access relacionadas com as regras ACLs de criação.

E depis tu colocou

icp_access allow localnet

Essa regra acima somente vai permitir o acesso no protocolo icp, mas não no http.
O icp produz os "hits" (acertou) ou os "miss" (perdeu) no log do Squid (ICP, Internet Cache Protocol ou Protocolo de Cache de Internet)

Resumindo, deve vir as regras de criação das ACLs

acl tal
acl tal1
acl tal2

e depois

http_access allow tal
http_access deny tal1
http_access deny tal2

Executa squid -v ou squid --version ou squid3 -v ou squid3 ---version

e posta aqui a versão do teu squid.

Tu criou dois arquivos gigantescos sem necessidade (Iptables e Squid).
Arquivos grandes assim são para servidores com muitas máquinas na rede.


E isso aqui:

PARAR() {
# Limpando regras
LIMPAR
# Política Padrão
$IPT -P INPUT ACCEPT << tu não está limpando nada aqui, aqui tu está definindo a política padrão de aceitar.
$IPT -P OUTPUT ACCEPT << aqui também.
$IPT -P FORWARD ACCEPT << aqui também.
}

INICIAR() {
# Limpando regras
LIMPAR
# Política Padrão
$IPT -P INPUT DROP
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD DROP

echo " * Starting Firewall iptables"
INICIAR
;;
stop)
echo " * Stopping Firewall iptables"
PARAR
;;
restart|reload)
echo " * Reloading Firewall iptables"
INICIAR
;;

E aí em cima está repetindo somente mudando as políticas padrões sem nenhuma necessidade. Ou seja, está dizendo para aceitar, depois para bloquear e depois para aceitar de novo. Isso não tem sentido.

E no Iptables nunca vi muito sentido em definir variáveis. Tu pode colocar direto

iptables regra...

Para quê criar um intermediário, ou seja, uma variável.
O Iptables por si só consome banda nos bloqueios e se tu colocar variáveis fica pior ainda.
Faça sempre teu script de forma mais simples e objetiva possível.

E vai lendo isso:

http://www.vivaolinux.com.br/artigo/Squid-Entendendo-um-pouco-as-configuracoes/
http://www.vivaolinux.com.br/artigo/Manual-traduzido-do-Squid/
http://www.vivaolinux.com.br/artigo/Manual-traduzido-do-Squid-Parte-2/
http://www.vivaolinux.com.br/artigo/Manual-traduzido-do-Squid-Parte-3/

http://www.vivaolinux.com.br/artigo/Manual-do-IPtables-Comentarios-e-sugestoes-de-regras




8. Re: Proxy transparent localhost, como?

Ghoost User
ghoostuser

(usa Arch Linux)

Enviado em 11/06/2014 - 02:49h

Bom, meu squid é: Squid Cache: Version 2.7.STABLE9 , aqui no DEbian 7.5.0 NetInst.

Acho que deu certo eeba!

Tipo, fiz o que você disse, removi aquelas redes internas, deixei uma, e no src, coloquei, exemplo: 14.12.7.0
e depois liberei com allow.

No iptables removi todas aquelas bagunças, coloquei aspenas as duas linhas mencionada por você...

iptables -t nat -A OUTPUT -m multiport -p tcp --dports 80,3128 -m owner --uid-owner proxy -j ACCEPT
iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 3128

... e funcionou!!! Esta bloqueando os sites/palavras da acl bloqueados. e os demais liberados.
Tudo isso sem configurar o proxy :)

No script de firewall, limpar seria a função limpar , aquelas linhas de ACCEPT é para apenas deixar as regras padrão do iptables, que é tudo accept. Antes dessas linhas, estou chamando a função LIMPAR, que
remove regras, chains..etc.

Bom, eu gosto de redes, mais confeço que não seu nada quase, eu não sabia o que era uma rede interna
depois dessa breve explicação ae, entendi. vou ver esses links que você passou
e aprender.


9. Re: Proxy transparent localhost, como?

Ghoost User
ghoostuser

(usa Arch Linux)

Enviado em 11/06/2014 - 22:26h

Tipo, e se eu tivesse um computador como 'servidor' em casa, e outro computador acessa a internet atraves desse 'servidor', como eu faria as regras de iptables? E no squid eu teria que colocar novas acls para outros que acessam este 'tal servidor'?


10. Re: Proxy transparent localhost, como?

Buckminster
Buckminster

(usa Debian)

Enviado em 11/06/2014 - 22:32h

gabrielscorpion escreveu:

Tipo, e se eu tivesse um computador como 'servidor' em casa, e outro computador acessa a internet atraves desse 'servidor', como eu faria as regras de iptables? E no squid eu teria que colocar novas acls para outros que acessam este 'tal servidor'?


Para isso seria melhor tu criar uma VPN (com SSH) por questões de segurança, se não teu Squid ficará aberto na internet.


11. Re: Proxy transparent localhost, como?

Ghoost User
ghoostuser

(usa Arch Linux)

Enviado em 12/06/2014 - 04:00h

Buckminster escreveu:

gabrielscorpion escreveu:

Tipo, e se eu tivesse um computador como 'servidor' em casa, e outro computador acessa a internet atraves desse 'servidor', como eu faria as regras de iptables? E no squid eu teria que colocar novas acls para outros que acessam este 'tal servidor'?


Para isso seria melhor tu criar uma VPN (com SSH) por questões de segurança, se não teu Squid ficará aberto na internet.


hum. Tipo, eu não sei muito de rede, não sei como fazer VPN(com SSH). Você poderia me dizer algum tutorial onde explique sobre isso ou se você pode explicar pra mim aprender?






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts