quarta-feira, 28 de maio de 2014

Falha de compartilhamento do samba autenticando no AD

Falha de compartilhamento do samba autenticando no AD

Tive um problema onde que algumas máquinas da rede não conseguiam mapear um compartilhamento de rede. O pior deste caso foi que umas funcionavam e outras não, o que dificulta a análise para solução do problema.
Depois de muito pesquisar e não encontrar nada, solicitei auxílio de um Analista Microsoft (valeu Thiago), esse cara é bom!


O erro é gerado por uma configuração do Windows 7, para solução do problema deve desativar uma diretiva de grupo local, o padrão é: Habilitada.



No executar digite: gpedit.msc
Vá até Configuração do Computador > Configurações do Windows > Configuração de Segurança > Diretivas Locais > Opções de Segurança


Cliente de rede Microsoft: assinar digitalmente a comunicação (sempre)        Desabilitada


Erros encontrados nos logs do Samba:

receive_smb_raw_talloc failed for client xx.xxx.xx.xx read error = NT_STATUS_CONNECTION_RESET.

Server exit (failed to receive smb request)

gid_to_sid: winbind failed to find a sid for gid 509

pdb_getsampwnam (TDB): error fetching database

error packet at smbd/reply.c(803) cmd=117 (SMBtconX) NT_STATUS_BAD_NETWORK_NAME

domingo, 5 de janeiro de 2014

Erro para montar Davfs2 box.com

Para aqueles que usavam o serviço e  parou de funcionar é simples, basta alterar os apontamentos de configuração para o endereço https://dav.box.com.
Se ainda não configurou, siga os passos abaixo:


Estes irão funcionar nas distros baseadas no Debian e Ubuntu.

Instale o davfs2
sudo apt-get install davfs2 
sudo adduser user davfs2

Configuração para montagem:
mkdir /home/user/box
echo "https://dav.box.com /home/user/box davfs rw,user,noauto 0 0"|sudo tee -a /etc/fstab
sudo chmod u+s /usr/sbin/mount.davfs

Configuração davfs2

No arquivo /etc/davfs2/davfs2.conf descomente a linnha:
#secrets         ~/.davfs2/secrets

Seguir com os comandos:
mkdir ~/.davfs2/
touch  ~/.davfs2/davfs2.conf
echo "use_locks 0" > ~/.davfs2/davfs2.conf
echo "https://dav.box.com login_box senha_box" > ~/.davfs2/secrets
chmod 600 ~/.davfs2/secrets
mount /home/user/box

Dica!
Aumente o espaço de cache para acesso rápido aos arquivos mais acessados, o padrão são só 50Mb.
cache_size      2048               # MiByte - 2GB

Erros e soluções
Para solução do erro abaixo, verifique se o endereço do servidor, usuário e senha estão corretos no arquivo:  ~/.davfs2/secrets  .
/sbin/mount.davfs:/etc/davfs2/davfs2.conf:35: user option in system configuration file
Please enter the username to authenticate with server https://dav.box.com or hit enter for none. Username:

Altere a permissão do arquivo chmod 600 ~/.davfs2/secrets
$ mount /home/user/box
/sbin/mount.davfs:/etc/davfs2/davfs2.conf:35: user option in system configuration file
/sbin/mount.davfs: file /home/user/.davfs2/secrets has wrong permissions

quinta-feira, 29 de agosto de 2013

Liberando acesso ao Skype no squid com autenticação kerberos

Um problema comum quando utilizamos a autenticação do squid via kerberos é a incompatibilidade com softwares que não negociam autenticação kerberos, o skype é um deles.

Vou descrever a forma que utilizei para contornar o problema:

Nas configurações abaixo, são liberados qualquer acesso via IP na porta 443, atendendo as necessidades para utilização do Skype, exceto via browser, desta forma, se for utilizado IP (https://69.171.242.27) no browser o acesso só será liberado após autenticação.
As configurações abaixo devem estar sobre as acls de autenticação.

Configurando ACLs
acl navegador browser Firefox
acl navegador browser Chrome
acl navegador browser IE
acl IPS url_regex -i ^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+):443
http_access allow IPS !navegador

Logs de autenticação kerberos
2013-01-23 10:58:40 10.10.10.10 - TCP_DENIED/407 CONNECT 69.171.242.27:443
2013-01-23 10:58:40 10.10.10.10. willian@LABLINUX.LAN TCP_MISS/200 CONNECT 69.171.242.27:443

Logs de acesso ao skype
2013-01-23 11:00:34 10.10.10.10 - TCP_MISS/200 CONNECT 65.55.64.250:443
2013-01-23 11:00:37 10.10.10.10 - TCP_MISS/200 CONNECT 212.161.8.36:443
2013-01-23 11:00:37 10.10.10.10 - TCP_MISS/200 CONNECT 189.54.194.15:443
2013-01-23 11:00:40 10.10.10.10 - TCP_MISS/200 CONNECT 213.166.51.4:443     

Caso queira restringir quais usuários podem acessar o skype, pode se criar mais uma acl do tipo src e especificar os endereços ips de origem.

acl navegador browser Firefox
acl ips_skype src 10.10.10.10
http_access allow IPS ips_skype !navegador

Lembrando que a porta 443 é liberado por default nas configurações de squid, sendo assim, geralmente o problema comum com o skype é o bloqueio e não a liberação.



sábado, 5 de novembro de 2011

Autenticando Squid no AD 2003/2008 via Kerberos




Devido a problemas de segurança com NTLMv1 e incompatibilidade com NTLMv2, realizei um estudo para autenticação do squid com AD via kerberos (puro!), foi uma tarefa bastante árdua, encontrei bons tutorias mas nenhum completo, sempre faltava algum detalhe de configuração ou dependências.
Segue tutorial e para quem quiser saber mais detalhes vejam as referências no final, possuem informações bastante úteis.

Distro utilizada: CentoOS 6.0 / Red Hat 6.0 com Active Diretory 2003/2008

Instalação dos programas e suas dependências.

GCC
# yum install gcc

Squid
Tive um melhor funcionamento com versões 3.x
# yum install squid

Ldap
# yum install openldap openldap-devel openldap-servers cyrus-sasl-ldap openldap-clients python-ldap nss-pam-ldapd

Kerberos
# yum install krb5-auth-dialog krb5-devel krb5-libs krb5-server krb5-workstation pam_krb5

Cyrus
# yum install cyrus-sasl-gssapi

Utilitários
# yum install wget bind-utils telnet tcpdump

Copiar e colar
# yum install gcc squid openldap openldap-devel openldap-servers cyrus-sasl-ldap openldap-clients python-ldap nss-pam-ldapd krb5-auth-dialog krb5-devel krb5-libs krb5-server krb5-workstation pam_krb5 cyrus-sasl-gssapi bind-utils telnet tcpdump -y

Kerberos Ldap
Com este programa será possível leitura de grupos do AD.
# wget http://sourceforge.net/projects/squidkerbauth/files/squidkerbldap/squid_kerb_ldap-1.2.2/squid_kerb_ldap-1.2.2.tar.gz/download
# tar -xvzf squid_kerb_ldap-1.2.2.tar.gz -C /usr/local/src/
# cd /usr/local/src/
# ./configure && make && make install

Msktutil
Este é usado para criar o keytab. Em outros fóruns citaram o ktpass para criação direto no servidor windows, comigo não funcionou.
# wget http://pkgs.repoforge.org/msktutil/msktutil-0.3.16.4-1.el6.rf.i686.rpm
# rpm -ivh msktutil-0.3.16.4-1.el6.rf.i686.rpm

Configurações
Nome do Dominio - lablinux.lan
Nome do servidor CentOS – squid
Nome do servidor AD - srv2003
Não existe firewall entre os servidores.
Selinux desabilitado.

IP AD: 10.10.10.1
IP SQUID: 10.10.10.2

# nslookup squid
Server:         10.10.10.1
Address:        10.10.10.1#53
Name:   squid.lablinux.lan
Address: 10.10.10.2

# nslookup 10.10.10.2
Server:         10.10.10.1
Address:        10.10.10.1#53
2.10.10.10.in-addr.arpa name = squid.lablinux.lan.

# cat /etc/hosts
127.0.0.1   localhost
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.10.10.1  srv2003.lablinux.lan lablinux.lan srv2003
10.10.10.2  squid.lablinux.lan squid

# cat /etc/resolv.conf
search lablinux.lan
nameserver 10.10.10.1

Os nomes dos servidores deverão estar cadastrados em um servidor dns, neste caso estou utilizando o DNS do servidor AD.

Kerberos
O arquivo /etc/krb5.conf
Atenção para os nomes com letras MAIÚSCULAS.

[libdefaults]
default_realm = LABLINUX.LAN
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
forwardable = yes
default_keytab_name = /etc/squid/HTTP.keytab
kdc_timesync = 1
ccache_type = 4
proxiable = true
# for Windows 2003
default_tgs_enctypes = rc4-hmac des-cbc-crc des-cbc-md5
default_tkt_enctypes = rc4-hmac des-cbc-crc des-cbc-md5
permitted_enctypes = rc4-hmac des-cbc-crc des-cbc-md5

#for windos 2008
#default_tkt_enctypes = arcfour-hmac-md5 des-cbc-crc des-cbc-md5
#default_tgs_enctypes = arcfour-hmac-md5 des-cbc-crc des-cbc-md5
[realms]
LABLINUX.LAN = {
kdc = srv2003.lablinux.lan
default_domain = LABLINUX.LAN
admin_server = srv2003.LABLINUX.LAN
}
[domain_realm]
.lablinux.lan = LABLINUX.LAN
lablinux.lan = LABLINUX.LAN
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

SQUID

#Parametro para autenticação de usuários
auth_param negotiate program /usr/bin/squid_kerb_auth -d -i -s HTTP/squid.lablinux.lan@LABLINUX.LAN
auth_param negotiate children 5
auth_param negotiate keep_alive on

#Parametro para leitura de grupo no AD
external_acl_type grupo_internet ttl=3600 negative_ttl=3600 %LOGIN /usr/local/bin/squid_kerb_ldap -i -g internet -D LABLINUX.LAN -S srv2003.lablinux.lan@lablinux.lan

#Autenticação individual
acl autenticados proxy_auth REQUIRED
http_access allow autenticados

#Autenticação por grupo
acl site dstdomain www.terra.com.br (ou um arquivo com relação dos sites)
acl grupo external grupo_internet
http_access allow grupo site

Também configurei para não fazer cache das autenticações pois degradou muito performance do servidor.
No arquivo de inicialização do squid adicionar:

#vi /etc/init.d/squid

PATH=/usr/bin:/sbin:/bin:/usr/sbin
export PATH

KRB5RCACHETYPE=none
export KRB5RCACHETYPE


Integrando squid com AD

# kinit -V administrador
Password for administrador@LABLINUX.LAN:

Criando o keytab:
# msktutil -c -b "CN=COMPUTERS" -s HTTP/squid.lablinux.lan -h squid.lablinux.lan -k /etc/squid/HTTP.keytab --computer-name squid --upn HTTP/squid.lablinux.lan --server srv2003.lablinux.lan --verbose


Dar permissão para o usuário squid
#chown squid /etc/squid/HTTP.keytab
Após este comando deverá ser criado o arquivo HTTP.keytab dentro do diretório /etc/squid.
Este arquivo será utilizado para o squid verificar no AD a autenticidade do usuário na rede.

Testando as configurações

[root@squid etc]# klist -ek
Keytab name: WRFILE:/etc/squid/HTTP.keytab
KVNO Principal
---- --------------------------------------------------------------------------
  2 HTTP/squid.lablinux.lan@LABLINUX.LAN (DES cbc mode with CRC-32)
  2 HTTP/squid.lablinux.lan@LABLINUX.LAN (DES cbc mode with RSA-MD5)
  2 HTTP/squid.lablinux.lan@LABLINUX.LAN (ArcFour with HMAC/md5)


[root@squid etc]# kinit -V -k -t /etc/squid/HTTP.keytab HTTP/squid.lablinux.lan
Authenticated to Kerberos v5

[root@squid etc]# kvno HTTP/squid.lablinux.lan@LABLINUX.LAN
HTTP/squid.lablinux.lan@LABLINUX.LAN: kvno = 2

Reparem os números em vermelho, caso estejam diferentes apagar o computador do AD e cadastrar novamente no domínio.

Testar leitura de grupo no AD

#/usr/local/bin/squid_kerb_ldap -i -g internet -N host/squid.lablinux.lan@LABLINUX.LAN -D LABLINUX.LAN -S srv2003.lablinux.lan@lablinux.lan
Digitar um usuário do grupo internet <Enter>

Configurando o browser
É necessário configurar o proxy com o nome completo do servidor(FQDN):
squid.lablinux.lan, caso contrário não irá funcionar.

O IE6 não suporta este metodo de autenticação.
Realizei testes com IE7, chrome e firefox com sucesso.

Erros e soluções
Os erros são logados no arquivo cache.log do squid e para isso é necessário que no aquivo de configuração do squid.conf tenha a opção “-d”.

auth_param negotiate program /usr/bin/squid_kerb_auth -d -i -s
HTTP/squid.lablinux.lan@LABLINUX.LAN


2010/11/24 16:20:20| squid_kerb_auth: gss_acquire_cred() failed: Unspecified GSS failure. Minor code may provide
more information. Permission denied
2010/11/24 16:20:20| authenticateNegotiateHandleReply: Error validating user via Negotiate. Error returned 'BH
gss_acquire_cred() failed: Unspecified GSS failure. Minor code may provide more information. Permission denied

O aquivo HTTP.keytab não tem como dono o usuário squid.

2010/11/24 16:03:38| squid_kerb_auth: gss_accept_sec_context() failed: Unspecified GSS failure. Minor code may
provide more information. Key version number for principal in key table is incorrect
2010/11/24 16:03:37| authenticateNegotiateHandleReply: Error validating user via Negotiate. Error returned 'BH
gss_accept_sec_context() failed: Unspecified GSS failure. Minor code may provide more information. Key version
number for principal in key table is incorrect'

Versão da chave (keytab) está diferente com o servidore AD.
O keytab deverá ser apagado e criado novamente com o comando msktutil, caso o erro persita
será necessário apagar a maquina do AD e criar o keytab novamente.

As versões podem ser visualizadas com os comando abaixo:
# klist -ek
Keytab name: FILE:/etc/squid/HTTP.keytab
KVNO Principal
---- --------------------------------------------------------------------------
3 HTTP/squid.lablinux.lan@LABLINUX.LAN (DES cbc mode with CRC-32)
# kvno HTTP/squid.lablinux.lan@LABLINUX.LAN
HTTP/squid.lablinux.lan@LABLINUX.LAN: kvno = 3

Mais erros podem ser encontrado no link abaixo:

Referências: