Squid3 + Apache2 problema de redirecionamento com IPTABLES

Iniciado por Said Dias, 22 de Junho de 2012, 16:20

tópico anterior - próximo tópico

Said Dias

Amigos boa tarde.

tenho uma maquina ubuntu 10.04, nela tenho o DHCPD, APACHE2, BIND e um FIREWALL


## Script  /etc/dhcp3/dhcpd.conf

ddns-update-style none ;
option domain-name "altecnologic";
option domain-name-servers 10.172.13.1 ;
authoritative ;
subnet 10.172.13.0 netmask 255.255.255.0 {
range 10.172.13.10 10.172.13.250 ;
option subnet-mask 255.255.255.0 ;
option routers 10.172.13.1 ;
max-lease-time 7200 ;

}


## Script /etc/network/interfaces

auto lo
iface lo inet loopback

auto eth2
iface eth2 inet dhcp

auto eth1
iface eth1 inet static
address 10.172.13.1
netmask 255.255.255.0

auto eth1:0
iface eth1:0 inet static
address 192.168.200.254
netmask 255.255.255.0

##  /etc/apache2/ports.conf
Listen 80

<IfModule mod_ssl.c>
    Listen 443
</IfModule>





Quando um cliente acessa a rede sem fio, o meu firewall redireciona ele para uma pagina na web onde ele deve colocar suas credenciais, se as credenciais forem aceitas a pagina web executa um script no meu servidor, e então libera ele para navegar. Nesse caso meu sistema funciona perfeitamente.

Então resolvi colocar o SQUID3 para funcionar, minha dificuldade é fazer o squid funcionar com o apache2.
Se eu paraliso os serviços apache e firewall o squid funciona perfeitamente. mas quando eu ativo os serviços apache e firewall o squid nao funciona.
eu sei que tenho que redirecionar o pacotes para o squid com o iptables, nas ja tentei e nao obtive sucesso.
Irei deixar o meu firewall aqui e se voces tiverem alguma sugestão ficarei muito grato.

## script /etc/firewall


*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A FORWARD -i lo -j ACCEPT
-A INPUT -m state --state INVALID -j DROP
-A INPUT -p icmp -m icmp --icmp-type 0 -m length --length 30:1100 -m limit --limit 4/sec -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 0 -j DROP
-A INPUT -p icmp -m icmp --icmp-type 8 -m length --length 30:1100 -m limit --limit 4/sec -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j DROP
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp --dport 2250 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 22,53,67,80,953 -j ACCEPT
-A INPUT -p udp -m multiport --dports 53,67,80,953 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#
#####################################################################
### Inicio das configuracoes para o ALTECNOLOGIC na tabela filter ###
#####################################################################
#
# Cria a chain ALTECNOLOGIC na tabela filter
-N ALTECNOLOGIC
#
### Acesso aos radios
#
-A FORWARD -s 172.16.0.0/16 -d 192.168.1.0/24 -j ACCEPT
-A FORWARD -d 172.16.0.0/16 -s 192.168.1.0/24 -j ACCEPT
#
# Redireciona o resto do FORWARD (trafego entrante e sainte) para ALTECNOLOGIC
-A FORWARD -j ALTECNOLOGIC
# Permite acesso livre ao SITE ALTECNOLOGIC.com.br
-A ALTECNOLOGIC -s 187.17.96.84 -j ACCEPT
-A ALTECNOLOGIC -d 187.17.96.84 -j ACCEPT
-A ALTECNOLOGIC -s 72.232.181.75 -j ACCEPT
-A ALTECNOLOGIC -d 72.232.181.75 -j ACCEPT
-A ALTECNOLOGIC -s 72.232.38.195 -j ACCEPT
-A ALTECNOLOGIC -d 72.232.38.195 -j ACCEPT
# Bloqueia o resto
-A ALTECNOLOGIC -j DROP
#############################################################
### Final das configuracoes para o ALTECNOLOGIC na filter ###
#############################################################
#
COMMIT
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -o eth2 -j MASQUERADE
##################################################################
### Inicio das configuracoes para o ALTECNOLOGIC na tabela nat ###
##################################################################
#
# Cria a chain ALTECNOLOGIC na tabela nat
-N ALTECNOLOGIC
#
### Acesso aos radios
#
-A PREROUTING -s 172.16.0.0/16 -p tcp --dport 8001 -j DNAT --to 192.168.1.1:80
-A PREROUTING -s 172.16.0.0/16 -p tcp --dport 8002 -j DNAT --to 192.168.1.2:80
-A PREROUTING -s 172.16.0.0/16 -p tcp --dport 8003 -j DNAT --to 192.168.1.3:80
-A PREROUTING -s 172.16.0.0/16 -p tcp --dport 8004 -j DNAT --to 192.168.1.4:80
-A PREROUTING -s 172.16.0.0/16 -p tcp --dport 8005 -j DNAT --to 192.168.1.5:80
-A PREROUTING -s 172.16.0.0/16 -p tcp --dport 8006 -j DNAT --to 192.168.1.6:80
-A PREROUTING -s 172.16.0.0/16 -p tcp --dport 8007 -j DNAT --to 192.168.1.7:80
-A PREROUTING -s 172.16.0.0/16 -p tcp --dport 8008 -j DNAT --to 192.168.1.8:80
-A PREROUTING -s 172.16.0.0/16 -p tcp --dport 8009 -j DNAT --to 192.168.1.9:80
-A PREROUTING -s 172.16.0.0/16 -p tcp --dport 8010 -j DNAT --to 192.168.1.10:80
-A POSTROUTING -s 172.16.0.0/16 -d 192.168.1.0/24 -j SNAT --to 192.168.1.254
#
# Redireciona o resto da PREROUTING (trafego sainte) para ALTECNOLOGIC

-A PREROUTING -i eth1 -j ALTECNOLOGIC
# Permite acesso livre ao SITE ALTECNOLOGIC.com.br
-A ALTECNOLOGIC -d 187.17.96.84 -j ACCEPT
-A ALTECNOLOGIC -d 72.232.181.75 -j ACCEPT
-A ALTECNOLOGIC -d 72.232.38.195 -j ACCEPT
# Captura pacotes DNS e HTTP
-A ALTECNOLOGIC -p tcp -m multiport --dports 53,80 -j REDIRECT
-A ALTECNOLOGIC -p udp -m multiport --dports 53,80 -j REDIRECT
-A ALTECNOLOGIC -p tcp --dport 8000 -j REDIRECT --to 80
-A ALTECNOLOGIC -p tcp --dport 8080 -j REDIRECT --to 80
#-A PREROUTING -i eth1 -s
#################################################################
### Final das configuracoes para o ALTECNOLOGIC na tabela nat ###
#################################################################
#
COMMIT


## Script /etc/squid3/squid.conf


http_port 3128 transparent
#always_direct allow all
cache_mem 64 MB
cache_swap_low 90
cache_swap_high 95
cache_dir ufs /var/spool/squid3 8000 16 256
maximum_object_size 30000 KB
maximum_object_size_in_memory 40 KB
access_log /var/log/squid3/access.log squid
cache_log /var/log/squid3/cache.log
cache_store_log /var/log/squid3/store.log
pid_filename /var/log/squid3/squid3.pid
mime_table /usr/share/squid3/mime.conf
diskd_program /usr/lib/squid3/diskd
unlinkd_program /usr/lib/squid3/unlinkd
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern (cgi-bin|\?) 0 0% 0
refresh_pattern . 0 20% 4320
quick_abort_max 16 KB
quick_abort_pct 95
quick_abort_min 16 KB
request_header_max_size 20 KB
reply_header_max_size 20 KB
request_body_max_size 0 KB
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
acl lan_foltran src 10.172.13.0/24
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 1863 # 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
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow lan_foltran
cache_mgr Thiago
#mail_program mail
#cache_effective_user proxy
#cache_effective_group proxy
#httpd_suppress_version_string off
visible_hostname quiosque
error_directory /usr/share/squid3/errors/Portuguese/

raidicar

Com qual comando vc tentou redirecionar os pacotes via iptables?
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
Quem ama extremamente, deixa de viver em si e vive no que ama. Na vida três coisas são certas, o amor, a morte e o Linux !
Se Platão disse, então realmente sofremos de uma perigosa doença mental.

Said Dias

isso mesmo iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128

Mas não funciona, o squid não gera os logs

zekkerj

Citar...
# Redireciona o resto da PREROUTING (trafego sainte) para ALTECNOLOGIC

-A PREROUTING -i eth1 -j ALTECNOLOGIC
# Permite acesso livre ao SITE ALTECNOLOGIC.com.br
-A ALTECNOLOGIC -d 187.17.96.84 -j ACCEPT
-A ALTECNOLOGIC -d 72.232.181.75 -j ACCEPT
-A ALTECNOLOGIC -d 72.232.38.195 -j ACCEPT
# Captura pacotes DNS e HTTP
-A ALTECNOLOGIC -p tcp -m multiport --dports 53,80 -j REDIRECT
-A ALTECNOLOGIC -p udp -m multiport --dports 53,80 -j REDIRECT
...

A porta 80 já está sendo redirecionada pro Apache, que provavelmente está em modo Proxy.
Provavelmente apenas acesso ao tal site da Altenologic vai passar pelo teu proxy, já que esses não são redirecionados pro Apache.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

Said Dias

zekkerj obrigado pela resposta.
tente me ajudar por favor.

O que eu preciso e que os logs sejam gerados pelo squid ou de outra forma.

se tiver que mudar alguma coisa na configuração eu mudaria, só preciso que o sistema fique com essas caracteristicas.

Tenho duas placas de rede.
uma recebe a internet e a outra distribui para a rede wifi.
o meu firewall bloqueia o acesso a internet
Quando usuário acessa a rede sem fio ele recebe um ip pelo DHCP
quando ele tenta acessar a internet ele é redirecionado para um site onde deve colocar o usuario e senha.
se esses dados estiverem corretos um script é exucutado conforme abaixo

#!/bin/bash
PATH=/bin:/usr/bin:/sbin:/usr/sbin
. ./config.sh
echo -e "Content-type: text/html\n"
if [ ! "`echo $HTTP_REFERER | grep 'altecnologic.com.br'`" ]; then
  echo "`date +%Y-%m-%d\ %H:%M:%S`: $REMOTE_ADDR: referer invalido: $HTTP_REFERER" >> $BDIR/log/autoriza.log
  echo "<head><meta http-equiv=\"refresh\" content=\"0;url=$LOGIN\"></head>"
  exit
fi
awkcmd="/^$REMOTE_ADDR / { print \$3 }"
mac=`sudo arp -n | awk "$awkcmd"`
echo -e "SESSAO=$QUERY_STRING\nBYTES=0" > /var/www/cgi-bin/sessoes/$REMOTE_ADDR
iptables -t nat -I ALTECNOLOGIC -s $REMOTE_ADDR -j ACCEPT
iptables -I ALTECNOLOGIC -s $REMOTE_ADDR -j ACCEPT
iptables -I ALTECNOLOGIC -d $REMOTE_ADDR -j ACCEPT



zekkerj

Já mudou a configuração de redirecionamento que eu destaquei lá em cima? Onde vc redireciona as portas 53 e 80 pra seu servidor?
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

Said Dias

Essa liberação iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128 eu posso colocar nesse script que libera a maquina do usuário ou tem que ficar obrigatoriamente no firewall?

zekkerj

Tem que ficar no Firewall.

Mas repito, antes de fazer isso você tem que rever a outra regra que já está redirecionando a porta 80.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

Said Dias

Beleza, mas não entendi onde que tenho que reverter.
E outra coisa, o local onde ficará o "iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128" posso colocar no final do firewall? ou isso tem uma ordem?