servidor dhcp + squid + windows

Iniciado por ricardodf3, 17 de Setembro de 2013, 21:29

tópico anterior - próximo tópico

ricardodf3

Caríssimos,

Instalei o ubuntu server 12.04
instalei também o dhcp-server
até aí tudo bem.
instalei o squid3
configurei tudo mas o squid não está bloqueando os sites que coloquei.

O que pretendo é o seguinte:
um modem vdsl gvt ligado em eth0, com ip fixo
um switch ligado em eth1 (ip fixo para eth1 no network/interfaces)

46 micros com windows xp/7 ligados ao switch, pegando ip via dhcp (dhcp sever instalado)

estes micros estão com dhcp e sem configuração de proxy

Preciso bloquear alguns sites que estes micros windows vão acessar.

instalei o squid mas não funcionou, pois se não ativar o proxy no windows não dá..

PAra este cenário, oque vocês me recomendam.
Já tenho experiência com ubuntu server desde o 8.0, mas ele não é mais suportado,
então estou montando este servidor com ubuntu 12.4

aguardo.
abraços.

Arthur Bernardes

Pode postar aqui as regras do seu squid.conf?

Tá muito confuso seu texto. Você quer bloquear sites sem ter que configurar as máquinas clientes, é isso? Ou se configurar dá erro?

Se você quer bloquear sites sem configurar manualmente as máquinas, você pode usar Proxy Transparente.

ricardodf3

Exatamente Arthur...
quero que o Squid funcione sem que seja preciso colocar configurações de proxy no windows.

a necessidades disto é que já tenha instalado 26 pontos de acesso wifi (access point)
e pessoas vão acessar atraves destes AP somente colocando senha do wifi.

deixa eu ser mais claro:

- modem vdsl gvt de 35 megas (dhcp disable)
- ubuntu server 12 com squid, dhcp server
- 46 computadores cabeados em um switch d-link.

-Estes micros cabeados ao switch deverão pegar o ip via dhcp server (será sempre o mesmo ip
  pos vou determiná-los cadastrando o endereço mac das máquinas e associando um ip)

- Não terá nenhuma configuração de ip ou proxy nas 46 maquinas. tudo automático pegando no servidor

- O squid deverá bloquear os sites proibidos. aqui entra minha dúvida: é possível esta configuração? ou o squid
sempre funciona somente se você colocar as configurações de proxy no windows?

vou postar o squid.conf amanha, pois esta rede é para uma escola e não estou lá agora.
abraço.

Arthur Bernardes

Prefira usar uma regra que bloqueie por palavras.

acl bloqueados dstdomain redtube.com
http_access deny bloqueados

acl palavrasproibidas dstdom_regex "/etc/squid3/palavrasproibidas"
http_access deny palavrasproibidas

acl url url_regex -i "/etc/squid3/palavrasproibidas"
http_access deny url


Esse arquivo /etc/squid3/palavrasproibidas deve conter as palavras que serão restringidas o acesso.

Foi assim que fiz para ter certeza do bloqueio (tanto palavras como a URL).

Para usar proxy transparente, deixe a primeira linha assim:

http_port 3128 transparent

Agora, você precisaria de uma regra no seu script de firewall, para redirecionar todo o tráfego da porta 80 para a porta do Squid (3128).

Caso necessário, abra a porta 3128 na configuração do firewall, para que o Squid possa receber as conexões.

iptables -A INPUT -i $iflocal -p tcp --dport 3128 -j ACCEPT
iptables -A INPUT -i $iflocal -p udp --dport 3128 -j ACCEPT


iptables -t nat -A PREROUTING -i $iflocal -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i $iflocal -p udp --dport 80 -j REDIRECT --to-port 3128


O $iflocal é uma variável que uso aqui no meu firewall, substitua pela sua interface da rede local.

Se você tiver um Script de Firewall, poste aqui pra nós vermos.

zekkerj

Você confirmou que o tráfego está passando pelo Squid? O log do Squid pode confirmar isso pra você.
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

ricardodf3

Meu squid:

http_port 3128 transparent
visible_hostname servidor

cache_access_log /var/log/squid3/access.log

acl rede_escola src 192.168.10.0/24

acl maquina src "etc/squid3/maquina"
acl proibidos url_regex -i "/etc/squid3/proibidos/relacao"
http_access deny proibidos !maquina

http_access allow rede_escola
http_access deny all


meu arquivo /etc/rc.local

route add default gw 192.168.1.1
modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -a postrouting -o eth0 -j masquerade
iptables -t nat -a prerouting -i eth0 -p tcp --dport 80 -j redirect --to-port 3128

meu arquivo /etc/dhcp/dhcpd.conf

ddns-update-style none;
default-lease-time 600;
max-lease-time 7200;

authoritative;

subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.5 192.168.10.20;
option domain-name-servers 201.10.1.3, 201.10.120.3;
option routers 192.168.10.1;
option broadcast-address 192.168.10.255;
}


meu arquivo /network/interfaces

auto lo
iface lo inet loopback

#ligado ao modem
auto eth0
iface eth0 inet static
address 192.168.1.40
netmask 255.255.255.0
gateway 192.168.1.1

#ligado ao switch
auto eth1
iface eth1 inet static
address 192.168.10.1
netmask 255.255.255.0
gateway 192.168.10.1


o squid nao funciona e a internet que é de 35 mb só navega na metade da velocidade.

abraços.

Arthur Bernardes

Olha, prefira criar um script de firewall pra você, fica bem melhor.

Vou postar aqui um exemplo simples de firewall de acordo com sua rede, ok?

Abra o terminal, abra um novo arquivo com o seguinte comando.

sudo gedit /etc/init.d/firewall

Dentro dessa janela, cole o seguinte conteúdo:

Código (/etc/init.d/firewall) Selecionar
#!/bin/bash

#### Declarando variáveis ####

# Interface da Internet:
ifinternet="eth0"

# Interface da Rede Local
iflocal="eth1"

# IP da Internet
ip_internet="192.168.1.40"

# IP da Rede Local
rede_local="192.168.10.0/24"

#### Função "start" ####

iniciar(){

## Limpa todas as regras ##

iptables -F
iptables -t nat -F
iptables -t mangle -F

## Carrega módulos ##

modprobe ip_tables
modprobe iptable_mangle
modprobe iptable_nat

## Habilita roteamento no kernel ##

echo 1 > /proc/sys/net/ipv4/ip_forward

## Compartilha a internet ##

iptables -t nat -A POSTROUTING -o $ifinternet -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter

#### Regras de Firewall ####

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i $iflocal -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p udp --dport 80 -j ACCEPT
iptables -A FORWARD -i lo -j ACCEPT
iptables -A FORWARD -i $iflocal -j ACCEPT
iptables -A FORWARD -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -p udp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --syn -s $rede_local -j ACCEPT

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

#### Tráfego para Squid #####
iptables -A INPUT -i $iflocal -p tcp --dport 3128 -j ACCEPT
iptables -A INPUT -i $iflocal -p udp --dport 3128 -j ACCEPT
iptables -t nat -A PREROUTING -i $iflocal -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i $iflocal -p udp --dport 80 -j REDIRECT --to-port 3128

}

parar(){
iptables -F
iptables -F -t nat
}

status (){
iptables -L -v -n
}

case "$1" in
"start") iniciar ;;
"stop") parar ;;
"restart") parar; iniciar ;;
"status")status;;
*) echo "Use os parâmetros start, stop ou status"
esac


Mais uma vez volto a repetir, se a eth1 é o gateway, então não precisa definir gateway para ela no interfaces.

Então, deixe-o assim:

Código (/etc/network/interfaces) Selecionar
auto lo
iface lo inet loopback

## Interface da Internet ##
auto eth0
iface eth0 inet static
address 192.168.1.40
netmask 255.255.255.0
gateway 192.168.1.1

## Interface da Rede Local ##
auto 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


O que acha de deixar o squid.conf assim:

Código (/etc/squid3/squid.conf) Selecionar
http_port 3128 transparent
visible_hostname Escola
cache_mem 350 MB
cache_access_log /var/log/squid3/access.log

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 SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
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 901 # swat
acl Safe_ports port 1025-65535 # portas altas
acl purge method PURGE
acl CONNECT method CONNECT

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

acl bloqueados dstdomain redtube.com
http_access deny bloqueados

acl palavrasproibidas dstdom_regex "/etc/squid3/palavrasproibidas"
http_access deny palavrasproibidas

acl url url_regex -i "/etc/squid3/palavrasproibidas"
http_access deny url

acl redelocal src 192.168.10.0/24
http_access allow localhost
http_access allow redelocal
http_access deny !redelocal

http_access deny all


Obs: Aqui acl bloqueados dstdomain redtube.com você deve colocar os sites (URL's) que deseja bloquear.

Agora, também, você deve criar o arquivo /etc/squid3/palavrasproibidas e dentro dele colocar as palavras que você quer que sejam bloqueadas.

Agora, vamos funcionar o Firewall, apague as entradas de seu firewall no /etc/rc.local, dê permissão de execução ao novo script de firewall com sudo chmod +x /etc/init.d/firewall, então execute-o com sudo service firewall start, reinicie o squid com sudo service squid3 restart, então teste sua rede.

Duvido que tenha somente 5 máquinas na rede, então aumente a range do DHCP, deixe-o assim:

Código (/etc/dhcp/dhcpd.conf) Selecionar
ddns-update-style none;
default-lease-time 600;
max-lease-time 7200;

authoritative;

subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.100 192.168.10.200;
option domain-name-servers 8.8.8.8, 8.8.4.4;
option routers 192.168.10.1;
option broadcast-address 192.168.10.255;
}


Reinicie o serviço com sudo service isc-dhcp-server restart

Se tudo der certo, coloque agora os serviços para iniciarem durante a carga do sistema.

sudo update-rc.d isc-dhcp-server defaults
sudo update-rc.d squid3 defaults
sudo update-rc.d firewall start 99 2 3 4 5 . stop 0 1 6

ricardodf3

Arthur,

obrigado pela ajuda.
fiz as alterações que você sugeriu mas não conectou.
o server só se conectou ao modem quando acrescentei a linha abaixo ao rc.local
route add default gw 192.168.1.1

minha interface para o modem é a eth0

como não tenho rc.d e sim rc.local,
é lá que tenho que fazer executar o firewall, certo?

abraço.

Arthur Bernardes

Você executou os últimos comandos?

Eles deram alguma saída de erro?

ricardodf3

eu olhei o log do boot para ver qual era a mensagem, pois passou rápido demais,
o que tem lá é:
unknow job: S20isc-dhcp-server

em outra linha:

/etc/rc.local: 15: /etc/local: isc-dhcp-server: not found

ricardodf3

opa...
retirei uma linha errada do rc.local.

a mensagem agora é:


unknow job: S20isc-dhcp-server



ricardodf3

inseri novamente o comando sudo update-rc.d isc-dhcp-server defaults

ele retornou a mensagem:

system start/stop links for /etc/init.d/isc-dhcp-server already exist

zekkerj

Citarsudo update-rc.d isc-dhcp-server defaults
sudo update-rc.d squid3 defaults
sudo update-rc.d firewall start 99 2 3 4 5 . stop 0 1 6

Essas linhas não devem ser colocadas no rc.local, ao contrário, vc deve executá-las em uma sessão normal, apenas uma vez.
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

ricardodf3

entendo,
mas só funciona quando coloco no rc.local.
tentei 3 vezes fazer um firewall e não funcionou.
formatei já 3 vezes, segui todo o roteiro que me passou e não funcionou.

Bom, fiz mais algumas alterações e agora funcionou.
mas a alegria durou pouco. depois de uns 20 minutos navegando em um pc de teste,
a conexão caiu.
tentei restartar o sistema e nada
entrei no /var/log/upstart e no isc-dhcp-server tem mensagem com três linhas erradas:
uma dizendo que falta o dns, outra que faltam : no endereço da placa de rede que coloquei para o dhcp dar ip fixo
e outro erro dizendo que o tempo de liberação do dhcp é logo demais.

o problema é que no arquivo dhcpd.conf está tudo ok. aliás nem alterei ele para que isto acontecesse.

abraço.

Arthur Bernardes


CitarUma observação importante é que sempre que configurar um servidor com duas placas de rede, você deve configurar o servidor DHCP para escutar apenas na placa da rede local. No Debian, esta configuração vai no arquivo "/etc/default/dhcp3-server". Procure pela linha:

INTERFACES=""

... e adicione a placa que o servidor DHCP deve escutar, como em:

INTERFACES="eth0"

Para que a configuração entre em vigor, basta reiniciar o serviço novamente.