Como fazer um proxy transparente no centos

1. Como fazer um proxy transparente no centos

Renan Morais
Arautog

(usa CentOS)

Enviado em 05/10/2012 - 14:06h

qual configuração que eu posso fazer para que o squid/proxy funcione sem eu precisar ficar setando o proxy de maquina em maquina ?


  


2. Re: Como fazer um proxy transparente no centos

Alex
alexhctp

(usa Linux Mint)

Enviado em 05/10/2012 - 15:27h

Oi Amigo,

Você precisa mudar o parâmetro http_port 3128 do squid.conf para http_port 3128 transparent
ou seja, ou que era assim:
http_port 3128

Vai ficar assim:
http_port 3128 transparent

Depois de fazer isso, você redireciona todo o trafego da rede destinado a porta 80 para o ip do seu proxy. Para isso usa o iptables.

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o ethx -j MASQUERADE
iptables -t nat -A PREROUTING -s 192.168.x.x/255.255.255.0 -p tcp --dport 80 -j REDIRECT --to-port 3128

Com isso terás um squid completamente trasparent.

Alem disso, sugiro que leia o topico a seguir:
http://www.vivaolinux.com.br/topico/Off-Code-Cafe/ATENCAO-1

Abraço!


3. Re: Como fazer um proxy transparente no centos

Renan Morais
Arautog

(usa CentOS)

Enviado em 05/10/2012 - 15:36h

alexhctp escreveu:

Oi Amigo,

Você precisa mudar o parâmetro http_port 3128 do squid.conf para http_port 3128 transparent
ou seja, ou que era assim:
http_port 3128

Vai ficar assim:
http_port 3128 transparent

Depois de fazer isso, você redireciona todo o trafego da rede destinado a porta 80 para o ip do seu proxy. Para isso usa o iptables.

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o ethx -j MASQUERADE
iptables -t nat -A PREROUTING -s 192.168.x.x/255.255.255.0 -p tcp --dport 80 -j REDIRECT --to-port 3128

Com isso terás um squid completamente trasparent.

Alem disso, sugiro que leia o topico a seguir:
http://www.vivaolinux.com.br/topico/Off-Code-Cafe/ATENCAO-1

Abraço!


então eu ja fiz isso que falam, ja li varios topicos mais nenhum funcionou...
quando eu coloko o proxy no navegador ele funciona tudo lindo....
mais quando tiro ele nao bloqueia nada.

coloquei essas regras que vc disse...
meu iptable-config esta dessa maneira

#####################################----------########################################

# VARIAVEIS
REDELOCAL=192.168.1.0/255.255.255.0
## ??????????????????- ##

# LIMPA CONFIGURACOES ANTERIORES
/sbin/iptables -t nat ?flush
/sbin/iptables ?flush
## ??????????????????- ##

# CARREGANDO MODULOS IPTABLES
/sbin/modprobe iptable_nat
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_gre
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
## ??????????????????- ##

# ATIVANDO COMPARTILHAMENTO DE CONEXAO
echo 1 > /proc/sys/net/ipv4/ip_forward
## ??????????????????- ##

# OBRIGA AS ESTACOES A USAR O PROXY
/sbin/iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
/sbin/iptables -t nat -A PREROUTING -s 192.168.1.100/255.255.255.0 -p tcp --dport 80 -j REDIRECT --to-port 312
## LIBERANDO PORTA IMAP POP SMTP ##
/sbin/iptables -t nat -A POSTROUTING -s $REDELOCAL -p tcp ?dport 25 -j MASQUERADE
/sbin/iptables -t nat -A POSTROUTING -s $REDELOCAL -p tcp ?dport 110 -j MASQUERADE
/sbin/iptables -t nat -A POSTROUTING -s $REDELOCAL -p tcp ?dport 587 -j MASQUERADE
/sbin/iptables -t nat -A POSTROUTING -s $REDELOCAL -p tcp ?dport 993 -j MASQUERADE
## ??????????????????- ##


########################################----------------#####################################################


4. Re: Como fazer um proxy transparente no centos

Alex
alexhctp

(usa Linux Mint)

Enviado em 05/10/2012 - 15:55h


/sbin/iptables -t nat -A PREROUTING -s 192.168.1.100/255.255.255.0 -p tcp --dport 80 -j REDIRECT --to-port 312



Amigo, Observa que você ta aplicando a regra apenas à um ip, o 192.168.1.100, alem disso, você ta apontando o redirecionamento para a porta 312, verifica se essa porta é a que foi usada no squid.conf.

Para que a regra se aplique a todas as maquinas da rede, você precisa colocar 192.168.1.0/255.255.255.0 como rede alvo da regra.

Tenta ver isso e me diga se resolveu.

Aguardo a sua posição.


5. Re: Como fazer um proxy transparente no centos

Renan Morais
Arautog

(usa CentOS)

Enviado em 05/10/2012 - 16:14h

alexhctp escreveu:


/sbin/iptables -t nat -A PREROUTING -s 192.168.1.100/255.255.255.0 -p tcp --dport 80 -j REDIRECT --to-port 312



Amigo, Observa que você ta aplicando a regra apenas à um ip, o 192.168.1.100, alem disso, você ta apontando o redirecionamento para a porta 312, verifica se essa porta é a que foi usada no squid.conf.

Para que a regra se aplique a todas as maquinas da rede, você precisa colocar 192.168.1.0/255.255.255.0 como rede alvo da regra.

Tenta ver isso e me diga se resolveu.

Aguardo a sua posição.


Desculpe minha desatenção...
entao a porta é 3128 ja arrumei.
e o ip esse 192.168.1.100 é o da placa eth1 que seria a saida. seria o proxy
placa de rede minha estão da seguinte forma
eth0
IP: 10.0.0.160
Mascara: 255.0.0.0
Gateway: 10.254.254.254

eth1
ip : 192.168.1.100
mascara: 255.255.255.0

tentei do jeito que vc me disse... porem nao bloqueou o site... so bloqueia se eu colocar o proxy no navegador. ahh tbm ja coloquei o ip na faixa 192.168.1.0


6. Re: Como fazer um proxy transparente no centos

Alex
alexhctp

(usa Linux Mint)

Enviado em 05/10/2012 - 17:16h

Amigo, vamos por partes...
Pode ser alguma coisa diferente da receita de bolo que ta dando problema.

Me conta como vc ta inicializando esse script de firewall.

Você pode tbm emitir o comando #netstat | grep 3128 para ver se o servidor esta ouvindo na porta 3128 e ver se tem atividade nela.

Veja o que deu, me posta os resultados. Se for o caso, começamos o firewall do zero e vemos o que ta pegando....


7. tenta essa configuração

André Luis M. da Silva
an_lumesil

(usa Ubuntu)

Enviado em 06/10/2012 - 10:06h

# COMPARTILHA A INTERNET
39 modprobe iptable_nat
40 echo "1" > /proc/sys/net/ipv4/ip_forward
41 iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
42 iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
43 iptables -t nat -A PREROUTING -p tcp -i eth2 --dport 80 -j REDIRECT --to-por t 3128



8. Re: Como fazer um proxy transparente no centos

Renan Morais
Arautog

(usa CentOS)

Enviado em 07/10/2012 - 14:13h

Meu firewall está funcionando dbowa, meu squid tbm. porem só consigo bloquear os sites quando coloco o proxy no navegador.
ja fiz redirecionamento de portas tudo mais...ja li varios artigos, e nao conseguir arrumar isso.

meu squid está da seguinte forma :
##############################
# Copyright © 2009 - Andrio Jasper ##
# Todos os direitos reservados. ##
# Ao utilizar este aquivo manter os ##
# direitos autorais ##
############################

# Opcoes para suportar proxy transparente.
#nao esquecer de trocar a faixa de ip pela da sua rede
http_port 10.10.10.1:3128
http_port 10.10.10.1:3129 transparent

#Está porta é usada para troca de informações entre servidores proxy.
#Não use o ICP se você tem um único proxy-pai que você sempre usa.
#Para desabilitar, bastacolocar um 0. Padrão: 3130
icp_port 0

#Especifica o número da porta através do qual o Squid irá receber e
#enviar requisições HTCP de e para caches vizinhos. Para desabilitar,
#colocar 0. O padrão é 4827.
htcp_port 0

#Ela é responsável por dizer ao Squid que ele deve buscar os dados diretamente
#na origem, sem passar pelos vizinhos na hierarquia. Padrao do squid
hierarchy_stoplist cgi-bin ?

#Esta ACL diz ao squid para não armazenar em cache o conteúdo dos CGI's, pois
#obviamente não é interessante por tratar-se de conteúdo dinâmico
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY

#Quantidade de memoria usada pelo squid
cache_mem 800 MB

#esvazia o cache
cache_swap_low 80
cache_swap_high 85

#tamanho maximo para gravacao no cache squid
maximum_object_size 1024 MB

#tamanho minimo para gravacao no cache squid
minimum_object_size 0 KB

# Tamanho maximo dos objetos mantidos em memoria.
maximum_object_size_in_memory 800 KB
ipcache_size 3072
ipcache_low 90
ipcache_high 93

# politica de substituicao dos objetos quando se esgota o espaco destinado ao cache em disco.
# lru: mantem os objetos referenciados recentemente.
# heap GDSF: otimiza o "hit rate" por manter objetos pequenos e
# e populares no cache, guardando assim um numero maior de objetos.
# heap LFUDA: otimiza o "byte hit rate" por manter objetos populares
# no cache sem levar em conta o tamanho. Se for utilizado este, o
# maximum_object_size devera ser aumentado para otimizar o LFUDA.
cache_replacement_policy heap LFUDA

#define a politica de substituicao dos objetos em memoria
#da mesma forma como o cache_replacement_policy
memory_replacement_policy heap GDSF

#Esta TAG determina onde e como será feito o cache e o tamanho
#a cada 1GB (1024), deve separar 15mb de memoria
###cache_dir ufs /var/spool/squid/cache1 2048 16 64
###cache_dir ufs /var/spool/squid/cache2 2048 16 64
###cache_dir ufs /var/spool/squid/cache3 2048 16 64
###cache_dir ufs /var/spool/squid/cache4 2048 16 64
###cache_dir ufs /var/spool/squid/cache5 2048 16 64

# Log de requisicoes.
cache_access_log /var/log/squid/access.log
# Log do cache.
cache_log /var/log/squid/cache.log
# Log de objetos guardados. Pode ser desativado.
cache_store_log none

#Pode ser usada para especificar uma lista de servidores DNS no
#lugar no /etc/resolv.confdns_nameservers Endereço_IP
#nao esquecer de trocar a faixa de dns pela da sua faixa
dns_nameservers 201.10.128.3
dns_nameservers 201.10.120.3

#TAG's referentes ao processo de autenticação.
###auth_param basic children 5
###auth_param basic realm Squid proxy-caching web server
###auth_param basic credentialsttl 2 hours
###auth_param basic casesensitive off

#Estas opções são o padrão do Squid e
#configuram como serão tratados os tempos de vida dos objetos no cache
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern (cgi-bin|\?) 0 0% 0
refresh_pattern . 0 20% 4320

#O cache pode ser configurado para continuar com o download de requisições abortadas
###quick_abort_min 0 KB
###quick_abort_max 0 KB
###quick_abort_pct 100

#Tempo de vida para requisições falhas. Certos tipos de erros (como
#conexão recusada ou página não encontrada) são marcados como
#"sem-cache" por um determinado tempo. Padrão de 5 minutos
negative_ttl 3 minutes

#Tempo de vida para resultados bem sucedidos de resolução DNS. Se você
#realmente precisar alterar esse valor, não deixe inferior a 1 minuto.
#Padrão de 6 horas.
positive_dns_ttl 5 minutes

#Alguns clientes podem parar o envio de pacotes TCP enquanto deixam o recebimento em aberto.
#Algumas vezes o Squid não consegue diferenciar conexões TCP totalmente fechadas e parcialmente fechadas.
#Mudando essa opção para off fará com que o Squid imediatamentefeche a conexão quando a leitura do socket
#retornar "sem mais dados para leitura"
half_closed_clients off

#Estas ACL's fazem parte da configuração padrão do Squid e é o mínimo
#recomendável para seu uso não sendo necessária nenhuma alteração nas mesmas
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
acl BADPORTS port 7 9 11 19 22 23 25 53 110 119 513 514 3128 8080
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # 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 CONNECT method CONNECT
acl sites-bloqueados dstdomain "/etc/squid/regras/sites-bloqueados"

# ---- Cache do Windows Update ----
refresh_pattern au.download.windowsupdate.com/.*\.(cab|exe|msi) 10080 100% 43200 reload-into-ims
refresh_pattern download.microsoft.com/.*\.(cab|exe|msi) 10080 100% 43200 reload-into-ims
refresh_pattern msgruser.dlservice.microsoft.com/.*\.(cab|exe|msi) 10080 100% 43200 reload-into-ims
refresh_pattern windowsupdate.com/.*\.(cab|exe|msi) 10080 100% 43200 reload-into-ims
refresh_pattern www.microsoft.com/.*\.(cab|exe|msi) 10080 100% 43200 reload-into-ims

##nao esquecer de trocar a faixa de ip pela da sua rede
acl rede src 10.10.10.0/24
http_access allow localhost
http_access allow rede

#Definição de regras de acesso referentes as ACL's da parte da configuração
#padrão do Squid, também não é necessária nenhuma alteração, portanto apenas
#acrescente as suas próprias regras a estas;
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny BADPORTS
http_access deny CONNECT !SSL_ports
http_access deny sites-bloqueados

#Esta regra de acesso é recomendada para uso como última regra da lista define
#o acesso ao proxy. Ela diz ao Squid que se nenhuma das regras anteriores for
#aplicada o acesso será então negado
http_access allow all

#Permite o acesso a porta icp de acordo com a configuração feita na ACL all
#que no nosso caso representa qualquer origem. Está porta é usada para troca
#de informações entre servidores proxy.
#Não use o ICP se você tem um único proxy-pai que você sempre usa.
#icp_access allow rede

# Usuario sob o qual ira rodar o Squid.
cache_effective_user squid
# Grupo sob o qual ira rodar o Squid.
cache_effective_group squid

#Mostra o nome do servidor configurado nas mensagens de erro
###visible_hostname andrio.jasper@lgmtecnologia.com.br

#Desligando essa variavel, faz com que o squid descarregue a memoria nao
#utilizada, chamando uma funcao interna free() do squid, ao inves de ficar
#com ela para futuras operaçoes.
memory_pools off

#Por padrão o Squid irá incluir o ip ou nome da sua máquina nas solicitações HTTP.
#Ele irá saber o ip da sua máquina interna como também saber qual classe ip você usa internamente.
#Para o site visitado não interessa para ele qual seu ip interno, o importante é que você visitou o site.
forwarded_for off

#Apresenta as mensagens de erro em Portugues
###error_directory /usr/share/squid/errors/Portuguese

#Por padrão o Squid já possui essa configuração como ativa. Ela serve para não colocar no log os
#parâmetros que são passados junto ao endereço acessado pelo usuário. Assim garante a privacidade.
#As vezes quando se usa filtro por palavras e um site apresenta acesso negado é interessante setar
#essa opção como off para verificar no log o endereço completo.
strip_query_terms off

#Local para gravar os arquivos core em caso de falhas do squid (/var/spool/squid)
# ou Evitar que sejam feitos coredumps (none).
coredump_dir none

# Resolve um problema com conexões persistentes que ocorre com certos servidores,
# e que provoca delays em nosso cache.
detect_broken_pconn on

# Provoca um ganho de performance ao usar conexões Pipeline (requisições em paralelo)
#o Squid irá trabalhar com 2 requisições paralelamente
pipeline_prefetch on


e meu arquivo de iptlabes da seguinte forma :

#!/bin/sh

# Variáveis
# -------------------------------------------------------
iptables=/sbin/iptables
IF_EXTERNA=eth0
IF_INTERNA=eth1


# Ativa módulos
# -------------------------------------------------------
/sbin/modprobe iptable_nat
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ipt_LOG
/sbin/modprobe ipt_REJECT
/sbin/modprobe ipt_MASQUERADE


# Ativa roteamento no kernel
# -------------------------------------------------------
echo "1" > /proc/sys/net/ipv4/ip_forward


# Proteção contra IP spoofing
# -------------------------------------------------------
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter


# Zera regras
# -------------------------------------------------------
$iptables -F
$iptables -X
$iptables -F -t nat
$iptables -X -t nat
$iptables -F -t mangle
$iptables -X -t mangle


# Determina a política padrão
# -------------------------------------------------------
$iptables -P INPUT DROP
$iptables -P OUTPUT DROP
$iptables -P FORWARD DROP


#################################################
# Tabela FILTER
#################################################


# Dropa pacotes TCP indesejáveis
# -------------------------------------------------------
$iptables -A FORWARD -p tcp ! --syn -m state --state NEW -j LOG --log-level 6 --log-prefix "FIREWALL: NEW sem syn: "
$iptables -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP


# Dropa pacotes mal formados
# -------------------------------------------------------
$iptables -A INPUT -i $IF_EXTERNA -m unclean -j LOG --log-level 6 --log-prefix "FIREWALL: pacote mal formado: "
$iptables -A INPUT -i $IF_EXTERNA -m unclean -j DROP


# Aceita os pacotes que realmente devem entrar
# -------------------------------------------------------
$iptables -A INPUT -i ! $IF_EXTERNA -j ACCEPT
$iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$iptables -A OUTPUT -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
$iptables -A FORWARD -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT


# Proteção contra trinoo
# -------------------------------------------------------
$iptables -N TRINOO
$iptables -A TRINOO -m limit --limit 15/m -j LOG --log-level 6 --log-prefix "FIREWALL: trinoo: "
$iptables -A TRINOO -j DROP
$iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 27444 -j TRINOO
$iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 27665 -j TRINOO
$iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 31335 -j TRINOO
$iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 34555 -j TRINOO
$iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 35555 -j TRINOO


# Proteção contra tronjans
# -------------------------------------------------------
$iptables -N TROJAN
$iptables -A TROJAN -m limit --limit 15/m -j LOG --log-level 6 --log-prefix "FIREWALL: trojan: "
$iptables -A TROJAN -j DROP
$iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 666 -j TROJAN
$iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 666 -j TROJAN
$iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 4000 -j TROJAN
$iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 6000 -j TROJAN
$iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 6006 -j TROJAN
$iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 16660 -j TROJAN


# Proteção contra worms
# -------------------------------------------------------
$iptables -A FORWARD -p tcp --dport 135 -i $IF_INTERNA -j REJECT


# Proteção contra syn-flood
# -------------------------------------------------------
$iptables -A FORWARD -p tcp --syn -m limit --limit 2/s -j ACCEPT


# Proteção contra ping da morte
# -------------------------------------------------------
$iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT


# Proteção contra port scanners
# -------------------------------------------------------
$iptables -N SCANNER
$iptables -A SCANNER -m limit --limit 15/m -j LOG --log-level 6 --log-prefix "FIREWALL: port scanner: "
$iptables -A SCANNER -j DROP
$iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -i $IF_EXTERNA -j SCANNER
$iptables -A INPUT -p tcp --tcp-flags ALL NONE -i $IF_EXTERNA -j SCANNER
$iptables -A INPUT -p tcp --tcp-flags ALL ALL -i $IF_EXTERNA -j SCANNER
$iptables -A INPUT -p tcp --tcp-flags ALL FIN,SYN -i $IF_EXTERNA -j SCANNER
$iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -i $IF_EXTERNA -j SCANNER
$iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -i $IF_EXTERNA -j SCANNER
$iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -i $IF_EXTERNA -j SCANNER


# Loga tentativa de acesso a determinadas portas
# -------------------------------------------------------
$iptables -A INPUT -p tcp --dport 21 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: ftp: "
$iptables -A INPUT -p tcp --dport 23 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: telnet: "
$iptables -A INPUT -p tcp --dport 25 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: smtp: "
$iptables -A INPUT -p tcp --dport 80 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: http: "
$iptables -A INPUT -p tcp --dport 110 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: pop3: "
$iptables -A INPUT -p udp --dport 111 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: rpc: "
$iptables -A INPUT -p tcp --dport 113 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: identd: "
$iptables -A INPUT -p tcp --dport 137:139 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: samba: "
$iptables -A INPUT -p udp --dport 137:139 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: samba: "
$iptables -A INPUT -p tcp --dport 161:162 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: snmp: "
$iptables -A INPUT -p tcp --dport 6667:6668 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: irc: "
$iptables -A INPUT -p tcp --dport 3128 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: squid: "


# Libera acesso externo a determinadas portas
# -------------------------------------------------------
$iptables -A INPUT -p tcp --dport 22 -i $IF_EXTERNA -j ACCEPT
$iptables -A INPUT -p tcp --dport 10000 -i $IF_EXTERNA -j ACCEPT


# Libera acesso de smtp para fora apenas para o IP XXX.XXX.XXX.XXX
# -------------------------------------------------------
#$iptables -A FORWARD -p tcp -d ! XXX.XXX.XXX.XXX --dport 25 -j LOG --log-level 6 --log-prefix "FIREWALL: SMTP proibido: "
#$iptables -A FORWARD -p tcp -d ! XXX.XXX.XXX.XXX --dport 25 -j REJECT


#################################################
# Tabela NAT
#################################################


# Ativa mascaramento de saída
# -------------------------------------------------------
$iptables -A POSTROUTING -t nat -o $IF_EXTERNA -j MASQUERADE


# Proxy transparente
# -------------------------------------------------------
$iptables -t nat -A PREROUTING -i $IF_INTERNA -p tcp --dport 80 -j REDIRECT --to-port 3129
$iptables -t nat -A PREROUTING -i $IF_INTERNA -p tcp --dport 8080 -j REDIRECT --to-port 3129


# Redireciona portas para outros servidores
# -------------------------------------------------------
#$iptables -t nat -A PREROUTING -d 192.168.1.100 -p tcp --dport 22 -j DNAT --to-destination 10.0.0.1


# Redireciona portas na própria máquina
# -------------------------------------------------------
#$iptables -A PREROUTING -t nat -d 192.168.1.100 -p tcp --dport 5922 -j REDIRECT --to-ports 22


Estou rodando o sistema Centos 6 com Webmin em uma maquina virtual com 2 placas de redes configuradas da seguinte forma:
eth0 - Internet
Ip: 192.168.1.100
Mascara:255.255.255.0
Gateway:192.168.1.1


eth1 - Local
Ip:10.10.10.1
Mascara:255.0.0.0


alguem poderia me dar uma luz ? do que estou fazendo errado ?
gostaria que bloqueasse os sites sem precizar setar o proxy.


9. Re: Como fazer um proxy transparente no centos

Alex
alexhctp

(usa Linux Mint)

Enviado em 08/10/2012 - 17:48h

Companheiro,

Tomei a liberdade de "fuçar" no seu script de firewall e dei uma reformulada nele. Observei que algumas regras estavam fora de lugar, o que algumas vezes pode gerar uma certa confusão no iptables. Enfim, resumindo, o segredo de um script de firewall facil de compreender eh seguir uma sequencia:

TABELA = CHAIN
FILTER = INPUT
FILTER = FORWARD
FILTER = OUTPUT

TABELA = CHAIN
NAT = PREROUTING
NAT = POSTROUTING

MANGLE
Lembrando que as regras de bloqueio vem antes das regras de liberação.
Se tu seguir esse escopo, seu firewall sera sucesso.

PS.: Gostei muito do seu script, vou dar uma trabalhada nele durante essa semana.

Outra coisa, eu reagrupei as suas regras, mas voce vai ter de testar e reagrupar de acordo com a sua necessidade.

Espero ter ajudado.

Att,

_______________________________________________________
#!/bin/sh

# Variáveis
# -------------------------------------------------------
iptables=/sbin/iptables
IF_EXTERNA=eth0
IF_INTERNA=eth1


# Ativa módulos
# -------------------------------------------------------
/sbin/modprobe iptable_nat
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ipt_LOG
/sbin/modprobe ipt_REJECT
/sbin/modprobe ipt_MASQUERADE


# Ativa roteamento no kernel
# -------------------------------------------------------
echo "1" > /proc/sys/net/ipv4/ip_forward


# Proteção contra IP spoofing
# -------------------------------------------------------
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter


# Zera regras
# -------------------------------------------------------
$iptables -F
$iptables -X
$iptables -F -t nat
$iptables -X -t nat
$iptables -F -t mangle
$iptables -X -t mangle


# Determina a política padrão
# -------------------------------------------------------
$iptables -P INPUT DROP
$iptables -P OUTPUT DROP
$iptables -P FORWARD DROP


### Sequencia correta
### PRIMEIRO - Adicionar as Chains personalizadas

$iptables -N TRINOO
$iptables -N TROJAN
$iptables -N SCANNER

### Povoa as chains personalizadas

$iptables -A TRINOO -m limit --limit 15/m -j LOG --log-level 6 --log-prefix "FIREWALL: trinoo: "
$iptables -A TRINOO -j DROP

$iptables -A TROJAN -m limit --limit 15/m -j LOG --log-level 6 --log-prefix "FIREWALL: trojan: "
$iptables -A TROJAN -j DROP

$iptables -A SCANNER -m limit --limit 15/m -j LOG --log-level 6 --log-prefix "FIREWALL: port scanner: "
$iptables -A SCANNER -j DROP



### SEGUNDO
#################################################
# Tabela FILTER
#################################################

### INPUT
# Proteção contra port scanners
# -------------------------------------------------------


$iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -i $IF_EXTERNA -j SCANNER
$iptables -A INPUT -p tcp --tcp-flags ALL NONE -i $IF_EXTERNA -j SCANNER
$iptables -A INPUT -p tcp --tcp-flags ALL ALL -i $IF_EXTERNA -j SCANNER
$iptables -A INPUT -p tcp --tcp-flags ALL FIN,SYN -i $IF_EXTERNA -j SCANNER
$iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -i $IF_EXTERNA -j SCANNER
$iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -i $IF_EXTERNA -j SCANNER
$iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -i $IF_EXTERNA -j SCANNER


# Loga tentativa de acesso a determinadas portas
# -------------------------------------------------------
$iptables -A INPUT -p tcp --dport 21 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: ftp: "
$iptables -A INPUT -p tcp --dport 23 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: telnet: "
$iptables -A INPUT -p tcp --dport 25 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: smtp: "
$iptables -A INPUT -p tcp --dport 80 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: http: "
$iptables -A INPUT -p tcp --dport 110 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: pop3: "
$iptables -A INPUT -p udp --dport 111 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: rpc: "
$iptables -A INPUT -p tcp --dport 113 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: identd: "
$iptables -A INPUT -p tcp --dport 137:139 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: samba: "
$iptables -A INPUT -p udp --dport 137:139 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: samba: "
$iptables -A INPUT -p tcp --dport 161:162 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: snmp: "
$iptables -A INPUT -p tcp --dport 6667:6668 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: irc: "
$iptables -A INPUT -p tcp --dport 3128 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: squid: "


# Libera acesso externo a determinadas portas
# -------------------------------------------------------
$iptables -A INPUT -p tcp --dport 22 -i $IF_EXTERNA -j ACCEPT
$iptables -A INPUT -p tcp --dport 10000 -i $IF_EXTERNA -j ACCEPT

# Dropa pacotes mal formados
# -------------------------------------------------------
$iptables -A INPUT -i $IF_EXTERNA -m unclean -j LOG --log-level 6 --log-prefix "FIREWALL: pacote mal formado: "
$iptables -A INPUT -i $IF_EXTERNA -m unclean -j DROP


# Aceita os pacotes que realmente devem entrar
# -------------------------------------------------------
$iptables -A INPUT -i ! $IF_EXTERNA -j ACCEPT
$iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


# Proteção contra trinoo
# -------------------------------------------------------

$iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 27444 -j TRINOO
$iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 27665 -j TRINOO
$iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 31335 -j TRINOO
$iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 34555 -j TRINOO
$iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 35555 -j TRINOO


# Proteção contra tronjans
# -------------------------------------------------------


$iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 666 -j TROJAN
$iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 666 -j TROJAN
$iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 4000 -j TROJAN
$iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 6000 -j TROJAN
$iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 6006 -j TROJAN
$iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 16660 -j TROJAN


### FORWARD
# Dropa pacotes TCP indesejáveis
# -------------------------------------------------------
$iptables -A FORWARD -p tcp ! --syn -m state --state NEW -j LOG --log-level 6 --log-prefix "FIREWALL: NEW sem syn: "
$iptables -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP

$iptables -A FORWARD -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT


# Proteção contra worms
# -------------------------------------------------------
$iptables -A FORWARD -p tcp --dport 135 -i $IF_INTERNA -j REJECT


# Proteção contra syn-flood
# -------------------------------------------------------
$iptables -A FORWARD -p tcp --syn -m limit --limit 2/s -j ACCEPT


# Proteção contra ping da morte
# -------------------------------------------------------
$iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT


# Libera acesso de smtp para fora apenas para o IP XXX.XXX.XXX.XXX
# -------------------------------------------------------
#$iptables -A FORWARD -p tcp -d ! XXX.XXX.XXX.XXX --dport 25 -j LOG --log-level 6 --log-prefix "FIREWALL: SMTP proibido: "
#$iptables -A FORWARD -p tcp -d ! XXX.XXX.XXX.XXX --dport 25 -j REJECT


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


#################################################
# Tabela NAT
#################################################


# Proxy transparente
# -------------------------------------------------------
$iptables -t nat -A PREROUTING -i $IF_INTERNA -p tcp --dport 80 -j REDIRECT --to-port 3129
$iptables -t nat -A PREROUTING -i $IF_INTERNA -p tcp --dport 8080 -j REDIRECT --to-port 3129


# Redireciona portas para outros servidores
# -------------------------------------------------------
#$iptables -t nat -A PREROUTING -d 192.168.1.100 -p tcp --dport 22 -j DNAT --to-destination 10.0.0.1


# Redireciona portas na própria máquina
# -------------------------------------------------------
#$iptables -A PREROUTING -t nat -d 192.168.1.100 -p tcp --dport 5922 -j REDIRECT --to-ports 22

# Ativa mascaramento de saída
# -------------------------------------------------------
$iptables -A POSTROUTING -t nat -o $IF_EXTERNA -j MASQUERADE


10. Re: Como fazer um proxy transparente no centos

Alex
alexhctp

(usa Linux Mint)

Enviado em 11/10/2012 - 16:13h

Olá companheiro,

Por gentileza, mantenha-nos informados quanto ao status da solução do seu problema.

Abraço!


11. Re: Como fazer um proxy transparente no centos

Renan Morais
Arautog

(usa CentOS)

Enviado em 12/10/2012 - 14:59h

então amigo,
estou ainda tentando resolver, nao deu certo ainda, sempre pra usar o proxy eu preciso mudar configurações de proxy no navegador de maquina por maquina.
mais estou ainda trabalhando nisso .... assim que der certo eu posto aqui o que fiz...






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts