Distribuição Usada:
Ubuntu Server 8.04 (mas deve funcionar em qualquer uma)
Pacotes necessários:
samba-3.0.21c.tar.gz
squid-2.5.STABLE12.tar.gz
Considerações:
Nome do domínio: DOMINIO
Nome completo do domínio: DOMINIO.LOCAL
Nome do Servidor: SERVIDOR (Controlador de Domínio)
IP do Servidor(Controlador de Domínio): 192.168.0.1
Baixe os pacotes
# cd /usr/src
# wget http://ppp.samba.org/samba/ftp/stable/samba-3.0.21c.tar.gz
# wget http://www.squid-cache.org/Versions/v2/2.5/squid-2.5.STABLE12.tar.gz
Descompacte compile e instale o Samba
# tar zxvf samba-3.0.21c.tar.gz
# cd samba-3.0.21c/source
# ./configure --bindir=/bin --sbindir=/usr/sbin --with-winbind --with-winbind-auth-challenge
# make && make install
Copie a biblioteca do Winbind e crie um link simbólico
# cp /usr/src/samba-3.0.21c/source/nsswitch/libnss_winbind.so /lib
# ln -s /lib/libnss_winbind.so /lib/libnss_winbind.so.2
Edite o arquivo /etc/hosts o adicione o ip do controlador de domínio
# vim /etc/hosts
Coloque a seguinte linha alterando os nomes de acordo com sua rede e nomes
192.168.0.1 servidor.dominio.local servidor
Instale o ntpdate para sincronizar o horário dos servidores
# apt-get update
# apt-get install ntpdate
# ntpdate servidor
Instale os seguintes pacotes krb5-kdc krb5-config krb5-clients libpam-krb5 krb5-user
# apt-get install krb5-kdc krb5-config krb5-clients libpam-krb5 krb5-user
Edite o arquivo /etc/krb5.conf
# vim /etc/krb5.conf
E deixe da seguinte forma:
[libdefaults]
default_realm = DOMINIO.LOCAL
krb4_config = /etc/krb.conf
krb4_realms = /etc/krb.realms
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
v4_instance_resolve = false
v4_name_convert = {
host = {
rcmd = host
ftp = ftp
}
plain = {
something = something-else
}
}
fcc-mit-ticketflags = true
[realms]
DOMINIO.LOCAL = {
kdc = 192.168.0.1
admin_server = 192.168.0.1:749
default_domain = 192.168.0.1
}
[domain_realm]
domínio.local = DOMINIO.LOCAL
.domínio.local = DOMINIO.LOCAL
[login]
krb4_convert = true
krb4_get_tickets = false
# kinit administrador@DOMINIO.LOCAL
Onde “administrador” é uma conta administrador do servidor.
Dê o comando
# klist
Se tudo der certo você vera uma mensagem como esta:
klist: No credentials cache found (ticket cache FILE:/tmp/krb5cc_0)
Kerberos 4 ticket cache: /tmp/tkt0
klist: You have no tickets cached
# vim /etc/nsswitch.conf
altere as linhas:
passwd: compat
group: compat
para:
passwd: compat winbind
group: compat winbind
Crie e edite o arquivo /usr/local/samba/lib/smb.conf
# vim /usr/local/samba/lib/smb.conf
deixando assim:
[global]
workgroup = DOMINIO
server string = Servidor Proxy
netbios name = proxy
log file = /var/log/samba/%m.log
max log size = 0
security = domain
password server = SERVIDOR
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
encrypt passwords = yes
wins server = SERVIDOR
winbind separator = "+"
winbind uid = 10000-20000
winbind gid = 10000-20000
template homedir = /dev/null
template shell = /dev/null
winbind use default domain = yes
Crie a pasta e dê permissão e reinicie o samba
# mkdir /var/log/samba
# chmod 777 -R /var/log/samba/
# nmbd restart
# smbd restart
# winbindd restart
Agora vamos ingressar o servidor proxy no domínio e restartar o samba. Digite a senha do usuário usado (administrador no caso) após dar o comando de ingresso.
# net rpc join DOMINIO -U administrador
# nmbd restart
# smbd restart
# winbindd restart
Para testar digite “wbinfo –u”. Se tude der certo, você terá a listagem de usuários do domínio.
Agora vamos descompactar, compilar e instalar o squid.
# cd /usr/src
# tar zxvf squid-2.5.STABLE12.tar.gz
# cd squid-2.5.STABLE12
# ./configure --sbindir=/usr/sbin --sysconfdir=/etc/squid --enable-default-err-language=Portuguese --enable-delay-pools --enable-underscores --enable-auth="ntlm,basic" --enable-external-acl-helpers="winbind_group,wbinfo_group," --enable-store-io=ufs,aufs,diskd --enable-snmp --enable-linux-netfilter --enable-basic-auth-helpers="winbind" --enable-ntlm-auth-helpers="SMB,winbind" --with-winbind-auth-chalenge
# make && make install
# mv /etc/squid/squid.conf /etc/squid/squid.conf.original
# egrep -v "^#^$" /etc/squid/squid.conf.original > /etc/squid/squid.conf
Adicione as linhas a seguir ao seu squid.conf. As linhas em vermelho devem ser adicionadas, e as outras são apenas para referencia a localização das outras. Altere as acls abaixo a gosto para dar permissões diferentes aos usuários do proxy.
cache_effective_user proxy
auth_param ntlm program /bin/ntlm_auth DOMINIO/SERVIDOR --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm use_ntlm_negotiate off
auth_param ntlm children 10
auth_param ntlm max_challenge_reuses 0
auth_param ntlm max_challenge_lifetime 5 minutes
auth_param basic program /bin/ntlm_auth DOMINIO/SERVIDOR --helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic realm Digite seu login e senha.
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
acl CONNECT method CONNECT
acl acesso proxy_auth REQUIRED # Solicitando a autenticação
http_access allow manager localhost
http_access deny CONNECT !SSL_ports
http_access allow acesso # Liberando usuários autenticados
http_access allow all
Para finalizar
# mkdir /usr/local/squid/var/cache
# touch /usr/local/squid/var/logs/store.log
# touch /usr/local/squid/var/logs/access.log
# chown -R proxy.proxy /usr/local/squid/var/cache
# chown proxy /usr/local/squid/var/logs/store.log
# chown proxy /usr/local/squid/var/logs/access.log
# chown root.proxy /usr/local/samba/var/locks/winbindd_privileged
# winbindd restart
# nmbd restart
# smbd restart
# squid -z
# squid &
Não se esqueça de configurar o proxy no navegador das estações na porta 3128(ou mais conveniente caso alterou no squid.conf) e também não esqueçam de colocar o samba e winbind num script de inicializacao do sistema.(ex. /etc/rc.local). Qualquer dúvida fiquem a vontade para perguntar, pq responderei na medida do possível.
Cara, muito bom emsmo, acontece que faço isso tudo mas reinicio menu server, ele não loga mais, nem o root.
ResponderExcluirPode me ajudar?
daniel.leomil@gmail.com
Cara, seja um pouco mais específico no seu problema pra eu tentar te ajudar. Creio que seu problema não tem haver com os passos acima e sim problemas na distro/midia.
ResponderExcluirAmigo, eu fiz os passos que você mencionou acima, quando eu jogo os comandos wbinfo -t e wbinfo -u ele retorna tudo ok. Mas quando vou navegar ele bloqueio a navegacao. Eu nao tenho servidor Wins no meu DC, será que é por isso?
ResponderExcluirRevise seu squid.conf os nomes DOMINIO/SERVIDOR. Poste ai o log do squid. Eu nunca tentei fazer sem servidor Wins, pode ser a raiz do seu problema sim.
ResponderExcluirVou colocar como esta meu squid.conf
ResponderExcluirse puder me passa seu msn pelo email levi.seixas@gmail.com
# IDIOMA DAS PAGINAS DE ERROS
error_directory /usr/share/squid/errors/Portuguese
http_port 3128
visible_hostname fwpx.balcaonetwork.corp
cache_mem 64 MB
maximum_object_size_in_memory 64 KB
maximum_object_size 512 MB
minimum_object_size 0 KB
cache_swap_low 90
cache_swap_high 95
cache_dir ufs /var/spool/squid 51200 16 256
cache_access_log /var/log/squid/access.log
auth_param ntlm program /bin/ntlm_auth DOMINIO/SERVIDOR --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 10
auth_param basic program /bin/ntlm_auth DOMINIO/SERVIDOR --helper-protocol=squid-2.5-basic
auth_param basic realm Digite o LOGIN/SENHA
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
refresh_pattern ^ftp: 15 20% 2280
refresh_pattern ^gopher: 15 0% 2280
refresh_pattern . 15 20% 2280
acl all src 0.0.0.0/0.0.0.0
acl redelocal src 192.168.1.0/255.255.255.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
acl AuthorizedUsers proxy_auth REQUIRED
http_access allow all AuthorizedUsers
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
# REGRAS
acl dominios_bloqueados url_regex -i "/etc/squid/dominiosbloqueados"
http_access deny dominios_bloqueados
acl palavrasproibidas url_regex -s "/etc/squid/palavrasproibidas"
http_access deny palavrasproibidas
Ae mano,
ResponderExcluirTe tutorial rodou massa demais no meu Ubuntu Server 9. Agora me explicar uma coisa: Como eu faço pra fazer os bloqueios por grupos do Active Directory? tipo, me mostra eu colocaria que o grupo FINANCEIRO so pode acessar os sites A B e C.
Olá,
ResponderExcluirtambém gostaria de saber se é possível o bloqueio de acesso por grupos do AD.
Sim é possivel, no momento não disponho de um tutorial apresentável para postar aki.
ResponderExcluirObrigado.
Gelber, em primeiro lugar quero parabenizá-lo pelo excelente material. Coloquei pra funcionar na universidade que trabalho rodando sobre Debian Lenny autenticando no 2003. Antes disse tentei autenticar num Samba4 mas infelizmente o módulo ntlm_auth não está 100% OK, pois o Samba4 ainda está na versão alpha11. Para usar as regras de grupos, tem que adicionar o seguinte ao squid.conf:
ResponderExcluirexternal_acl_type nt_group %LOGIN /usr/lib/squid/wbinfo_group.pl
acl AllowedWindowsGroups external nt_group GrupodoAD
http_access allow AllowedWindowsGroups
Abraços!
ola amigo ,
ResponderExcluirprimeiro , parabens pela materia !!!
vou dar uma dica ( acho até que voce ja sabe )
se voce colocar
acl Safe_ports port 443 563 80 21 443 563 70 210 280 488 591 777 901 1025-65535
voce vai ter uma velocidade e desempenho melhor no seu squid ;)
vale a pena lembrar tbm de adicionar espelho das regras no iptables :D
O comando:
ResponderExcluirnet rpc getsid -S DOMINIO -I -U administrador
pode ser dado caso não consiga ingressar no domínio.
O comando:
ResponderExcluirnet rpc getsid -S DOMINIO -I (IP DO PDC) -U administrador
pode ser dado caso não consiga ingressar no domínio.
este último é o correto.