alexmontoanelli

a place to have some fun..

Autenticação centralizada com Ldap, usando Postfix, Dovecot e Samba: Parte2

Essa é a segunda parte desta série.
A primeira etapa você confere aqui.

Hoje vamos configurar a libnss e o nsswitch.conf, para que o sistema possa ver os usuários cadastrados na base ldap.

Antes vamos criar o seguinte arquivo ldif,  inserindo alguns usuarios e grupos na nossa base:

dn: ou=usuarios,dc=empresa,dc=com,dc=br
objectClass: organizationalUnit
objectClass: top
ou: usuarios

dn: ou=grupos,dc=empresa,dc=com,dc=br
objectClass: organizationalUnit
objectClass: top
ou: grupos

dn: ou=machines,ou=usuarios,dc=empresa,dc=com,dc=br
objectClass: organizationalUnit
ou: machines

dn: cn=meugrupo,ou=grupos,dc=empresa,dc=com,dc=br
objectClass: posixGroup
objectClass: top
gidNumber: 10000
cn: meugrupo

dn: uid=meuusuario,ou=usuarios,dc=empresa,dc=com,dc=br
objectClass: shadowAccount
objectClass: posixAccount
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
homeDirectory: /home/meuusuario
loginShell: /bin/false
uid: meuusuario
cn: meuusuario
uidNumber: 10000
sn: meuusuario
gidNumber: 10000
givenName: Meu Usuario

Após criar os usuários, insira eles na base com o seguinte comanda:

slapadd -l meuarquivo.ldif # para usar com a base em modo off-line, ou
cat meuarquivo.ldif | ldapadd -W -D "cn=Manager,dc=empresa,dc=com,dc=br"

Agora vamos instalar o nss_ldap, no freebsd, execute o seguinte comando:

cd /usr/ports/net/nss_ldap/
make install

Vamos editar o arquivo /usr/local/etc/nss_ldap.conf para que fique da seguinte forma:

host 127.0.0.1
base dc=empresa,dc=com,dc=br
ldap_version 3
rootbinddn cn=Manager,dc=empresa,dc=com,dc=br
port 389
scope sub
timelimit 30
bind_timelimit 30
bind_policy hard
nss_connect_policy persist
nss_paged_results yes
pagesize 1000
pam_login_attribute uid
pam_lookup_policy yes
nss_base_passwd         ou=usuarios,dc=empresa,dc=com,dc=br?sub
nss_base_shadow         ou=usuarios,dc=empresa,dc=com,dc=br?sub
nss_base_group          ou=grupos,dc=empresa,dc=com,dc=br?one

Criamos o arquivo /etc/ldap.secret, contendo a senha do Manager

echo "mInhaSenh@Secr37A" > /etc/ldap.secret
chmod 600 /etc/ldap.secret

Agora modificamos o /etc/nsswitch.conf para que fique assim:

group: files ldap
hosts: files dns
networks: files
passwd: files ldap
shells: files

Para testar se tudo deu certo, digite:

getent passwd # você verá os usuarios do sistema, a ultima linha estara listado o seu usuario
getent groups # você verá os grupos do sistema, a última linha estará listado o grupo criado

Bom é isso, por hoje é só pessoAll, até a próxima parte.

Abraços

August 17th, 2008 by alexm

Autenticação centralizada com Ldap, usando Postfix, Dovecot e Samba

Olá.

Vou postar aqui uma série de 5 artigos mostrando como integrar os serviços de email (Postfix, Dovecot), e o servidor de arquivos Samba, para usarem a mesma base de autenticação, no caso com Openldap.

Toda a brincadeira foi realizada em um FreeBSD 6.3 -p3, mais pode ser implantada em qualquer Linux sem problemas.

Parte 1 : Preparando o Openldap.

No FreeBSD, tento o ports instalado, pasta fazer o seguinte:

cd /usr/ports/net/openldap24-server
make
make install

As seguintes opções foram usadas:

SASL
TCP_WRAPPERS
BDB
ACCESSLOG
LASTMOD
SEQMOD
SYNCPROV
DYNAMIC_BACKENDS

Após isso, iremos instalar o nss_ldap, usado para integrar os usuários que serão cadastrados no openldap, ao sistema.

cd /usr/ports/net/nss_ldap/
make
make install

Agora vamos configurar nosso ldap.conf e slapd.conf para colocar o open-ldap no ar.

Vamos editar o arquivo /usr/local/etc/ldap.conf e adicionar a seguinte no arquivo

BASE    dc=empresa,dc=com,dc=br

Feito isso partimos para a configuração do slapd.conf, esse é o arquivo responsável pelo daemon do openldap.

Seguem as alterações necessárias:

include         /usr/local/etc/openldap/schema/core.schema
include         /usr/local/etc/openldap/schema/cosine.schema
include         /usr/local/etc/openldap/schema/inetorgperson.schema
include         /usr/local/etc/openldap/schema/misc.schema
include         /usr/local/etc/openldap/schema/nis.schema

access to dn.exact=""
        by * read

access to attrs=userPassword,sambaLMPassword,sambaNTPassword
        by anonymous auth
        by self write
        by * none

access to attrs=shadowLastChange
        by self write
        by * none

access to *
        by read

loglevel 256

#######################################################################
# BDB database definitions
#######################################################################

database        bdb
suffix          "dc=empresa,dc=com,dc=br"
rootdn          "cn=Manager,dc=empresa,dc=com,dc=br"
rootpw          {SSHA}D9t3cIySlQg2ugQYeSD5bkB+ZqWPaasx
mode    0700
directory       /var/db/openldap-data
# Indices to maintain
index   objectClass     eq
index   cn,uid,sn       eq
index   gidNumber       eq
index   mail,givenName,mailAlternateAddress,displayName eq,pres,sub
index   default eq

A senha no formato SSHA é obtida com o comando

slappasswd  -s mInhaSenh@Secr37A

Feito isso, vamos inserir a base do nosso banco, isso tudo em modo offline ainda.
Crie um arquivo com o seguinte conteúdo:

dn: dc=empresa,dc=com,dc=br
dc: empresa
objectClass: top
objectClass: domain

Agora vamos inserir esse registro na base:

slapadd -l MEU_ARQUIVO_TEMPORARIO -b 'dc=empreasa,dc=com,dc=br'

Feito isso, nosso banco pode ser posto no ar.
Adicione as seguintes flags ao seu arquivo /etc/rc.conf

slapd_enable="YES"
slapd_flags='-h "ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://127.0.0.1/"'
slapd_sockets="/var/run/openldap/ldapi"

Estas flags dizem para ativar o slapd no boot do bsd,  configura ele para ouvir em modo não ssl, em locallhost, e cria um unixsocket em /var. Abordagem com ssl será feita em outra etapa.

Agora vamos startar no OpenLdap

/usr/local/etc/rc.d/slapd start

Se tudo der certo, com um  simples ‘netstat -ln| egrep “\.389″‘ você verá uma saída semelhante a esta, informado que o slapd esta ouvindo na sua porta padrão:

[root@propague /root]# netstat -ln| egrep "\.389"
tcp4       0      0  127.0.0.1.389          127.0.0.1.63586        ESTABLISHED
tcp4       0      0  127.0.0.1.63586        127.0.0.1.389          ESTABLISHED
tcp4       0      0  127.0.0.1.389          127.0.0.1.50995        ESTABLISHED
tcp4       0      0  127.0.0.1.50995        127.0.0.1.389          ESTABLISHED
tcp4       0      0  127.0.0.1.389          127.0.0.1.57821        ESTABLISHED
tcp4       0      0  127.0.0.1.57821        127.0.0.1.389          ESTABLISHED
tcp4       0      0  127.0.0.1.389          127.0.0.1.61773        ESTABLISHED
tcp4       0      0  127.0.0.1.61773        127.0.0.1.389          ESTABLISHED

Para confirmar, execute:

ldapsearch -x

Deverá ser retornado a raiz de seu diretório informando que o mesmo foi criado com sucesso.
Caso você não consiga por seu ldap para rodar, tente rodar ele como root e modo debug.

/usr/local/libexec/slapd -d 256

Na maioria das vezes o erro é causado por permissões inválidas no diretório onde o ldap guarda seus arquivos.
Se for este o seu problema, você pode corrigir com o seguinte comando, e em seguida subir o daemon novamente

chow -R ldap:ldap /var/db/openldap-db
chmod -R 600 /var/db/openldap-db

Por hoje é isso, no próximo capitulo vamos inserir alguns usuários na base, e fazer o sistema enxergar eles, usando o nss, e editando o nsswitch.

Abraços e até mais.

August 7th, 2008 by alexm

Replicando Bases Ldap em 10 minutos

Buenas.

Configurações para replicar bases ldap usando o método syncrpl.

No Servidor ldap Master adicione as seguintes linhas no slapd.conf, nas respectivas sessões:

moduleload      syncprov

index   entryCSN        eq
index   entryUUID       eq

overlay syncprov
syncprov-checkpoint     100     10
syncprov-sessionlog     100

As 3 últimas linhas devem ir no final no arquivo abaixo das especificações dos bancos.

As linha ‘syncprov-checkpoint     100     10′ diz que é para forçar sincronização a cada 100 gravações, ou a cada 10 minutos. E a linha ‘syncprov-sessionlog     100′ mantem um registro das ultimas 100 entradas sincronizadas.

Note que adicionamos duas entradas ‘index’, então devemos parar o slapd, e reindexar a base com um ‘slapindex -vv’. Após um chown -R ldap:ldap /var/db/ldap/*, e subimos o serviço novamente.

Do lado dos ‘slaves’, você deve adicionar o seguinte:

index   entryCSN        eq
index   entryUUID       eq

syncrepl      rid=001
searchbase="dc=dominio,dc=com"
provider="ldaps://endereco.do.servidor.master"
binddn="cn=Manager,dc=dominio,dc=com"
bindmethod=simple
credentials="minhasenha"
filter="(objectClass=*)"
attrs="*,+"
#type="refreshOnly"
type="refreshAndPersist"
interval=00:00:05:00
retry="60 10 300 3"
scope=sub

updateref       "ldaps://endereco.do.servidor.master"

Explicando as linhas:

rid 001: é o identificador interno, você pode ter várias sessões para sincronizar, esse número deve ser único para cada entrada, e não deve ter mais que 3 números;

searchbase: apartir de qual nó, do serivdor ‘master’ deve-se iniciar o sincronismo;
provider: é o endereço do servidor master;

binddn: bindmethod e credentials são os dados referentes a autenticação;
filter, são quais objetos que desejamos sincronizar, objectClass=*, vai sincronizar todos os objetos;

attrs: especifica quais os atributos a serem sincronizados, ‘*,+’ irá sincronizar todos os atributos;

type, pode vir a ser refreshOnly ou refreshAndPersist, no modo refreshAndPersist, é iniciado umaconexão ao servidor master, e a cada nova alteração no ‘master’ a mesma já e atualizada no ‘slave’, no modo refreshOnly, o sincronimo ocorrerá apenas no interfao especificado pela variavel ‘interval;

interval: O tempo em que se deve conectar no master para sincronizar os dados, seu formato é ‘dd:hh:mm:ss’ onde ‘dd’ => dia, ‘hh’ => hora, ‘mm’ => minutos, ‘ss’ => segundos. Um valor como ’00:00:05:00′, representa uma atualização a cada 5 minutos

retry: especifica o tempo entre tentativas caso ocorra uma falha de conexão para a sincronização. O valor ’60 10 300 3′, diz que é para executar 10 tentativas a cada 60 segundos, e caso estas falhem, é para executar mais 3 tentativas a cada 300 segundos.

scope=sub: especifica o nivel de sincronização, pode ser ‘sub,child, one ou  base’

Após tudo configurado basta reiniciar o slave, e partir pro abraço.

Não esqueça de copiar a base atual do master, via ‘slapcat’ para o slave, inportando com um ‘slapadd’.
A base no slave deve estar vazia antes da importação, e após importar, atribua o usuário ldap aos arquivos gerados no diretório onde está o banco.

Abraços

June 25th, 2008 by alexm

Cisco + Squid 2.6 + FreeBSD 6.3 = WCCP2

Buenas.

Depois de sofridas semanas apanhando para fazer essa implantação, lendo muito manual, snifando tudo que dava, lendo código da interface ‘GRE’ tá ai um mini how-to de com colocar tudo isso pra funcionar.

Pra quem não conheçe muito, WCCP (Web Comunication Cache Protocol ) é um protocolo criado pela Cisco que visa diminuir seu tráfego web, redirecionando eles para servidores Cache na sua rede, de forma transparente.

Ai você me diz, ‘tá mais eu já tenho isso com meu Linux/Bsd usando iptables/pf, tudo transparente e de forma perfeita’, então te respondo, e se teu Squid cair, oque acontece ? Sua navegação pára certo ?

Então com o wccp isso não acontece, pois o roteador antes de encaminhar os pacotes, verifica se existe algum servidor cache disponivel, se sim, ai então ele faz o redirecionameto do pacote, via tunel GRE, mantendo a requisição intacta.

A requisição chegando no Cache, então ela é redirecionada para a porta do Squid, usando a mesma técnica de proxy transparente que você já usa hoje. Se o squid tiver a página no cache, a mesma é devolvida para o cliente, se ele não tiver, então ele busca, cacheia, e devolve para o cliente.

Vamos lá, passos nescessários:

No Cisco, no modo ‘configure’ faça o seguinte:

ip wccp web-cache
interface fastEthernet 0/1 #sua interface LAN
ip wccp web-cache redirect in
exit
exit

Compile o kernel do BSD com suporte a gre, adicionando a seguinte linha no seu arquivo de configuração do kernel:

device                  GRE

Detalhes de como compilar um kernel BSD, você encontra aqui.

Após compilado e rebootado o Server vamos criar o tunnel GRE:

ifconfig gre0 create
ifconfig gre0 IP_DESTE_SERVER 10.20.30.40 \
       netmask 255.255.255.255 link1 link2 \
       tunnel IP_DESTE_SERVER IP_INTERFACE_WAN_DO_CISCO up

No Firewall no caso pf.conf, vá as seguintes linhas redirecionando o trafego para o squid:

rdr on gre0 proto tcp from any to any port www -> 127.0.0.1 port 3128

Agora a configuração do squid, adicione o seguinte no seu squid.conf

wccp2_router IP_LAN_CISCO
wccp2_forwarding_method 1
wccp2_return_method 1
wccp2_service standard 0
wccp2_address IP_DESTE_SERVER

Ok, restarte seu squid, e veja no cisco com o comando ‘show ip wccp’ se ele está registrado, você vê isso, no item ‘Number of Service Group’, se estiver igual a 1, muito bem, está tudo pronto, e em teoria funcionando. Só fazer a requisição que o router vai interceptar e enviar para o squid.

Lembre-se este é um exemplo bem simples, onde não há preocupação com segurança.
Você pode e deve, incrementar o cisco para permitir que apenas um grupo de Caches se registre nele, isso tudo via acl, e aplicando mais algumas regras no pf.conf para dar mais segurança ao servidor.

Um detalhe importante é a versão da IOS do Cisco.
Nesse exemplo foi usada a versão 12.4(18), versão antigas a 12.4.11, possuem alguns bugs, entre eles um que você deve criar uma acl para excluir o ‘cache’ da lista da rede a ser roteada, caso contrario entrará em loop.

Bom é isso, qualquer dúvida é só entrar em contato.

Abraços

June 18th, 2008 by alexm

XEN: FreeBSD domU com HVM em hardware Intel VT

—–English—-

For those who are  trying to install the freebsd on a Intel VT hardware based, in  full-virtualized (hvm) mode in XEN, which is not necessary any change in the system, here is a hint that save you.

In compiling of the packages xen, and xen-tools, in the command ‘make’, you must add the variable ‘vmxassist = n’.

Both in make xen, and in make install.

In Gentoo Linux, as the whole process is done via emerge, you need to change the ebuilds, to add these variables.

Those who need them is only contact me.

See you soon, and sorry for my poor english. I do my best.

—–

Buenas.

Para quem tá sofrendo tentando instalar o FreeBsd em hardware Intel VT, no modo full-virtualized ( hvm ) no XEN, onde não é necessária nenhuma alteração no sistema, aqui vai a dica que salvará você.

Ao Compilar os pacotes xen, e xen-tools, no comando ‘make’, você deve adicionar a variável ‘vmxassist=n’.

Tanto no make xen, como no make install.

No Gentoo Linux, como todo o processo é feito via emerge, você precisar alterar as ebuilds, para adicionar estas variaveis.

Quem precisar delas é só entrar em contato.

Abraços e boa Virtualização.

June 12th, 2008 by alexm

Dicas Rápidas do vim

Seguem algumas dicas baseadas no Vim 7.1

Abrir mais de um arquivo na mesma janela, dividindo a tela ao meio horizontalmente:

vi -o /tmp/arquivo1 /tmp/arquivo2 …

Para dividir verticalmente, use -O, e para alternar entre as janelas, ctrl + w + w

Estando com o VI aberto em um arquivo e querendo abrir outro basta digitar

ctrl + w + n, a tela será dividia, agora ‘:vi /caminho/do/arquivo’

Para alterar o layout das janelas abertas, use: ctrl + w + k para levar a janela atual para cima,

ctrl + w + j , para leva-la para baixo, ctrl + w + l para leva-la ao lado direito, e ctrl + w + h para leva-la ao lado esquerdo.

Para ir ao shell, sem sair do vi, basta digitar um ‘:shell’, você receberá o shell, quando terminar, um ctrl + d, levará você ao vi novamente.

Apagar um endereço de ipv4 no meio do texto, é só teclar 7dw no modo comando, no inicio do ip.

Abraços e até.

May 2nd, 2008 by alexm

Ativando o Debug no Console do Cisco IOS

Dica rápida para ver os pacotes passando pelas interfaces do seu Cisco no console:

router.ri.unetvale#configure t
router.ri.unetvale(config)#no logging on
router.ri.unetvale#debug ip packet

Você já deverá ver no console mensagens de pacotes correndo pela tela.
Para para, digite

router.ri.unetvale# no debug all

Você ainda pode ter outros tipos de filtro como por exemplo:

#debug apenas de http
router.ri.unetvale#debug ip http
 
#igmp
router.ri.unetvale#debug ip igmp
 
#roteamento
router.ri.unetvale#debug ip routing
 
#nat
router.ri.unetvale#debug ip nat

Mais informações aqui: Cisco

Abraços

May 1st, 2008 by alexm

Compilando o Kernel do FreeBSD

Bom em alguns artigos anteriores falando sobre freeBSD, foi necessário a recompilação do kernel do mesmo.

Aqui vai um mini-how de como compilar o kernel, do freeBSD

Tendo os fontes do kernel instalado , entre no diretório /usr/src/sys/<arquitetura>/conf/.

Onde arquitetura será a correspondente a arquitetura da sua máquina (i386,amd64,ia64).

Copie o arquivo GENERIC para um arquivo que você usaŕa para seu kernel, por exemplo MEUKERNEL.

Edite o arquivo meu kernel, e adicione ou retire as opções que você desejar, por exemplo, para adicionar o suporte a PF (PacketFilter) e a Vlans, adicionas as seguintes linhas no final do arquivo:

device          pf
device          pflog
device          pfsync
options         ALTQ
options         ALTQ_CBQ
options         ALTQ_RED
options         ALTQ_RIO
options         ALTQ_HFSC
options         ALTQ_CDNR
options         ALTQ_PRIQ
options         ALTQ_NOPCC
options         BRIDGE
 
device          vlan

Agora digite

conf MEUKERNEL
cd ../compile/MEUKERNEL/
make clean;
make cleandepend;
make depend;
make;
make install

Pronto, basta rebotar para ter as nova opções de seu kernel ativadas.

Abraços

May 1st, 2008 by alexm

Criando VLANS no FreeBSD

Para começar compile o kernel do freeBSD com suporte a vlan, adicionado a linha abaixo no seu arquivo de configuração de Kernel.

device          vlan

Após kernel, compilado e rebotado, vamos as mágicas:

No rc.conf vão as seguintes linhas:

cat /etc/rc.conf
 
#aqui vão as id das vlans que você vai criar
cloned_interfaces="vlan12 vlan14" 
 
#subimos a interface que ira receber as vlans para UP
ifconfig_xl0="up"
 
#criamos nossa vlan12
ifconfig_vlan12="inet 10.1.1.1 netmask 255.255.255.0 vlan 12 vlandev xl0"
 
#criamos nossa vlan14
ifconfig_vlan14="inet 10.1.2.1 netmask 255.255.255.0 vlan 14 vlandev xl0"
 
#adicinamos um aliaas a vlan14 (2 ips na mesma interface)
ifconfig_vlan14_alias0="inet 10.1.3.1 netmask 255.255.255.0"

Bom é isso, reboote, ou digite

sh /etc/rc.d/netif restart

Abraços e até.

May 1st, 2008 by alexm

Automatize a criação de Vhosts com o mod_macro no apache

Mãos a Obra:

Página do módulo: http://www.coelho.net/mod_macro/

Para instalar no Gentoo, apenas digite:

emerge mod_macro

e espere terminar, após isso, edite o arquivo /etc/conf.d/apache2/ e adicione na linha APACHE2_OPTS a seguinte entrada: “-D MACRO”

Agora vamos criar nosso template de vhost.
Criamos o arquivo ‘/etc/apache2/vhosts.d/01.vhosts.macro.conf, com o seguinte conteudo

<macro Virtual $server $docroot>
<virtualhost>
        servername $server
        documentroot $docroot
 
        <ifmodule>
                ServerEnvironment apache apache
        </ifmodule>
</virtualhost>
</macro>
 
Include /etc/apache2/vhosts.d/vhosts.include

e no arquivo Include /etc/apache2/vhosts.d/vhosts.include, indicamos nossa macro e passamos os parâmetros:

 Use Virtual meusite1.com.br /var/www/meusite1.com.br/htdocs/
 Use Virtual meuoutrosite.com.br /var/www/meuoutrosite/htdocs/

Bom é isso, muito menos código em seus arquivos para criar vhosts.

Abraços

December 8th, 2007 by alexm