Integrando Postfix com Active Directory
Nos ultimos dias tive que migrar o servidor de email do meu trabalho, de forma que todos os usuários se autentiquem com o mesmo usuário e senha do Active Directory,assim centralizando os serviços. Depois de alguns dias de estudos consegui a autenticação. Aqui vou demonstrar apenas uma configuração basica de um servidor de emails autenticando no AD utilizando Postfix com o Dovecot. Toda configuração será usando os Debian como sistema.
Instalando pacotes necessários
apt-get install postfix postfix-ldap dovecot-common dovecot-imapd dovecot-pop3d
Crie o usuário vmail
Este usuário é responsavel pela manipulação das contas de emails
useradd vmail -s /bin/false -d /home/vmail
Crie o diretório onde ficarão os e-mails dos usuários
chown -R vmail:vmail /home/vmail chmod -R 700 /home/vmail
Configuração do postfix
Cria o arquivos ldap-users.cf com a seguinte conf
server_host = 10.10.10.1 search_base = dc=intranet,dc=com version = 3 query_filter = (&(objectclass=person)(samaccountname=%s)) result_attribute = samaccountname result_format = %u/Maildir/ bind = yes bind_dn = ldap@intranet.com bind_pw = senha do usuario ldap
obs: O server_host será o endereço do AD e o search_base será a base de consulta LDAP
obs2: Observer que a linha bind_dn =ldap@intranet.com, o ldap é um usuário do AD
o main.cf com configuração basica:
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
readme_directory = no
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = localhost.localdomain, localhost
home_mailbox = Maildir/
relayhost =
mynetworks = 127.0.0.0/8 ,10.10.10.0/16
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
virtual_mailbox_domains = mail.teste.com
virtual_mailbox_base = /home/vmail/
virtual_mailbox_maps = ldap:/etc/postfix/ldap-users.cf
virtual_uid_maps = static:1001 # Aqui coloca-se o valor do uid do usuario vmail
virtual_gid_maps = static:1001 # Aqui coloca-se o valor do gid do usuario vmail
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_mynetworks,
permit_sasl_authenticated, reject_unauth_destination
broken_sasl_auth_clients = yes
Configurando dovecot
em /etc/dovecot/dovecot.conf
protocols = imap imaps pop3 pop3s
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_location = maildir:/home/vmail/%u/Maildir/
mail_privileged_group = mail
mail_debug = no
valid_chroot_dirs = /home/vmail
maildir_copy_with_hardlinks = yes
protocol imap {
mail_plugin_dir = /usr/lib/dovecot/modules/imap
imap_client_workarounds = delay-newmail outlook-idle netscape-eoh
}
protocol pop3 {
pop3_uidl_format = %08Xu%08Xv
mail_plugin_dir = /usr/lib/dovecot/modules/pop3
pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}
protocol managesieve {
sieve=~/.dovecot.sieve
sieve_storage=~/sieve
}
auth_username_format = %Lu
auth_debug = no
auth default {
mechanisms = plain login
socket listen {
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}
passdb ldap {
args = /etc/dovecot/dovecot-ldap.conf
}
userdb static {
args = uid=1001 gid=1001 home=/home/vmail/%u
}
user = root
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0600
user = vmail
group = vmail
}
client {
path = /var/run/dovecot/auth-client
mode = 0660
}
}
}
dict {
}
plugin {
}
Em dovecot-ldap.conf
hosts = 10.10.10.1 base = dc=intranet,dc=com ldap_version = 3 auth_bind = yes auth_bind_userdn = dominio\%u
obs: O hosts será o endereço do AD e o base será a base de consulta LDAP
Instalando Syslog-ng com Mysql
1 – Primeiro instalamos os seguintes pacotes:
mysql-server-5.0 syslog-ng php5 php5-mysql
2 – Usando o Debian:
apt-get install mysql-server-5.0 syslog-ng php5 php5-mysql
3 – Edite o arquivo /etc/php5/apache2/php.ini e descomente a linha extension=mysql.so
extension=mysql.so
4 - Edite o arquivo /etc/default/syslog-ng descomentanto a seguinte linha:
CONSOLE_LOG_LEVEL=1
Configurando o syslog.conf
1 – Em seguida vamos para configuração do syslog-ng em /etc/syslog-ng/syslog-ng.conf e faça as seguintes alterações:
1.1)
#(this is equivalent to the "-r" syslogd flag) # udp();
deixe assim:
# (this is equivalent to the "-r" syslogd flag) udp();
1.2)
# enable or disable DNS usage # syslog-ng blocks on DNS queries, so enabling DNS may lead to # a Denial of Service attack # (default is yes) use_dns(no);
deixe assim:
# enable or disable DNS usage # syslog-ng blocks on DNS queries, so enabling DNS may lead to # a Denial of Service attack # (default is yes) use_dns(yes); dns_cache(yes);
baixe o arquivo phpsyslogng-2.8 e descompacte dentro de /var/www/:
tar -xvzf phpsyslogng-2.8.tar.gz --directory=/var/www/
Renomei o pacote parar phpsyslogng:
mv phpsyslogng-2.8 phpsyslogng
Entre no diretorio script e edite os arquivos
cd /var/www/phpsyslogng/scripts
Adcione a seguinte configuração ao syslog-ng:
cat syslog.conf >> /etc/syslog-ng/syslog-ng.conf
Edite o script syslog2mysql deixando ele assim:
#!/bin/bash if [ ! -e /var/log/mysql.pipe ] then mkfifo /var/log/mysql.pipe fi while [ -e /var/log/mysql.pipe ] do mysql -u root --password=SENHA syslog < /var/log/mysql.pipe >/dev/null done
Adicione a o banco:
mysql -uroot -p < dbsetup.sql
Adicionando o script syslog2mysql.sh na inicialização
cp syslog2mysql.sh /usr/local/scripts/ ln -s /usr/local/scripts/syslog2mysql.sh /etc/init.d/syslog2mysql.sh
Então coloque-o em /etc/rc.local
/etc/init.d/syslog2mysql.sh &
Configurando O Cliente Linux
No cliente basta editar o arquivo /etc/syslog.conf adicionando a seguinte linha:
*.* @vm-syslog-ng
e restartando o serviço de log:
/etc/init.d/sysklogd restart
Alterando a codificação do roundcubemail
Recentemente tive alguns problemas com a codificação do Roundcube. Por Padrão ele vem com UTF-8 e precisei mudar para ISO-8859-1, pois alguns usuários estavam informando que, algumas mensagens enviadas pelo webmail para alguns remetentes estavam chegando “bagunçadas”.
Então fiz os seguintes passos:
Dentro do diretorio do roundcube edite o arquivo:
program/include/iniset.php
Alterar a linha
define('RCMAIL_CHARSET', 'UTF-8');
Por
define('RCMAIL_CHARSET', 'ISO-8859-1');
Depois basta reiniciar o servidor web.
/etc/init.d/apache2 restart
Comando ‘df’ diz que a partição está cheia, enquanto ‘du’ reporta espaço livre
1. Verificar o espaço em disco com o comando df:
/home/suporte# df -h Filesystem Size Used Avail Use% Mounted on /dev/hda2 28G 1.8G 25G 7% / tmpfs 443M 0 443M 0% /lib/init/rw udev 10M 48K 10M 1% /dev tmpfs 443M 0 443M 0% /dev/shm /dev/hda1 4.6G 150M 4.3G 4% /boot /dev/hda3 3.7G 72M 3.5G 3% /tmp /dev/hdb1 37G 37G 100% /var
Observe que o /var está cheio com 100% de uso.
2. Entao vamos verificar dentro do /var o que está consumindo tanto espaço com o comando du:
/var# du -shxc *
2.7M backups
384M cache
872M lib
4.0K local
24K lock
5.4G log
16K lost+found
43M mail
4.0K opt
176K run
207M spool
8.0K tmp
4.3G virtualmail
4.6G www
16G total
Veja que o diretorio /var tem apenas 16G ocupado e não os 37G ditos pelo comando df.
Isso acontece pelo fato de apesar dos arquivos não aparecerem mais num ls ou du, eles ainda estão no sistema de arquivos até que o processo os libere. Quando um determinado processo for reiniciado ele usará as novas bibliotecas e o sistema então removerá as antigas definitivamente.
Corrigindo o problema
3. Com o comando lsof podemos identificar os arquivos,que apesar de apagados, ainda podem
estar em uso e assim combinando com outros comandos mata-los.
lsof | awk '$9 ~ /\/var\// {system("if ! [ -e " $9 " ]; then kill -HUP " $2 " ; fi ")}'
Onde $9 é o arquivo e $2 o PID do processo. E é importante entender
como o processo se comporta diante do sinal HUP. Na maioria dos leva o
processo a re-ler seu arquivo de configuração.
4.Após este procedimento use o comando df e veja o resultado:
/home/suporte# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hda2 28G 1.8G 25G 7% /
tmpfs 443M 0 443M 0% /lib/init/rw
udev 10M 48K 10M 1% /dev
tmpfs 443M 0 443M 0% /dev/shm
/dev/hda1 4.6G 150M 4.3G 4% /boot
/dev/hda3 3.7G 72M 3.5G 3% /tmp
/dev/hdb1 37G 16G 19G 46% /var
5. Em ultimo caso, se os procedimentos acima não tenham dado resultados positivos, reinicie o servidor e realize o procedimento de numero 4.
Passei por esse problema nos ultimos dias, espero que sirva de ajuda para outra pessoa =)
Servidor DHCP e Compartilhando a Internet.
Segue um Breve tutorial sobre o compartilhamento de Internet e uma configuração rapida e simples de um servidor DHCP em uma maquina rodando Debian.
Vamos começar instalando o pacote equivalente ao servidor DHCP.
#apt-get install dhcp3-server
A configuração principal de seu servidor está no dhcpd.conf;
#vim /etc/dhcp3/dhcpd.conf
O Exemplo de uma configuração no dhcpd.conf:
ddns-update-style none;
default-lease-time 600; #Controla o tempo de renovação de IP(600 = tempo em segundos)
max-lease-time 7200; # tempo maximo em que uma maquina pode usar determinado IP (7200 = tempo em segundos)
authoritative;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.1 192.168.1.20; # O Range determina a faixa de IP reservada, geralmente usada para ip fixos.
option routers 192.168.1.1; # Gateway da rede.
option domain-name-servers 200.177.250.12,200.204.0.10; # Endereço dos seus servidores dns.
option broadcast-address 192.168.1.255; #broadcast da rede.
}
Após feita a configuração, e importante lembrar que a configuração esta utilizando 2 placas de rede e deve-se adicionar a placa que irá compartilhar a Internet em /etc/default/dhcp3-server na linha:
INTERFACES="eth1"
obs: eth1 no caso será sua placa com endereço de rede interno.
Logo em seguida basta reiniciar para o servidor DHCP atualizar todas as configurações;
#/etc/init.d/dhcp3-server restart
Com o servidor devidamente configurado, vamos agora compartilhar a Internet. O compartilhamento e feito através do iptables com os seguintes comandos;
#modprobe iptables_nat
#echo 1 > /proc/sys/net/ipv4/ip_forward
#iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Obs: eth0 é a interface de rede que recebe a Internet.
Para facilitar a vida de todo mundo e mais interessante criar um script para que as regras sejam habilitadas automaticamente no Boot;
#vim /etc/init.d/compartilha_internet.sh
O script pode ficar bem simples assim;
#!/bin/bash
modprobe iptables_nat #comando que ativa o modulo iptables_nat responsavel pelo suporte ao roteamento de pacotes.
echo 1 > /proc/sys/net/ipv4/ip_forward #esse comando ativa o ip_forward que é responsavel pelo encaminhamento de pacotes.
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE #regra de roteamento
Vamos torna-lo executavel.
chmod +x /etc/init.d/compartilha_internet
Após feito o script basta adicionar a linha ”/etc/init.d/compartilha_internet” no final do ”/etc/rc.local”.Assim sempre será executado no Boot.
=) acho que ficou legal!
Arquivos e suas permissões no Linux!
Arquivos
No linux todos os arquivos e diretórios possuem permissões específicas para diferenciar à que grupo e usuário pertence um determinado arquivo ou diretório. Com o comando ‘ls’ pode-se observar como funciona a tipagem de arquivos e suas permissões.
Por exemplo :
bjunior@rasta:~$ ls -l drwxr-xr-x 2 bjunior bjunior 4096 2007-11-20 16:31 Music drwxr-xr-x 2 bjunior bjunior 4096 2007-11-20 16:31 Pictures drwxr-xr-x 2 bjunior bjunior 4096 2007-11-20 16:31 Public
Primeiramente, é analisar a primeira coluna, pois é onde mostra que tipo de arquivo ele é.
Seguindo a descrição a baixo pode-se observar facilmente o tipo do arquivo:
* - – Arquivo comum
* b – Dispositivo de bloco(armazenamento)
* c – Dispositivo de caracter(serial)
* d – Diretório
* l – Link simbólico
* s – Socket de comunicação entre processos
* p – Pipe de comunicação entre processos
Como falei anteriormente, basta observar a primeira coluna para saber qual o tipo do arquivo, no caso do exemplo, todos os arquivos são diretórios.
Permissões
Agora que já sei qual o tipo de um determinado arquivo, vou mostrar a forma que acho mais simples de definir permissões a um arquivo e tentar explica-las. As permissões no linux são atribuídas a três níveis específicos,são eles:
*O Dono do arquivo, que é o usuário que criou o arquivo,Apenas pode ser alterado pelo root.
*O grupo dono do arquivo, Geralmente é o grupo do usuário criador, também só pode ser alterado pelo root.
*Outros, são os usuários que não criaram o arquivo nem fazem parte do grupo do criador.
Como as permissões são atribuídas aos três níveis citados acima, onde cada nível irá possui uma combinação de “r(Leitura)”,”w(escrita)” e “x(execução)”. veja o exemplo;
drwxr-xr-x 2 bjunior bjunior 4096 2007-11-20 16:31 Public
Seguindo a linha temos:
d - Informando que o arquivo é um diretório. rwx - Informando que o dono do arquivo tem permissão de leitura,escrita e execução. r-x - Informando que o grupo dono do arquivo tem permissão apenas de leitura e execução. r-x - Informando que outro usúarios que desejam acessar o arquivo tem permissão apenas de leitura e execução.
Como altero as permissões?
Na minha opinião a forma que irei mostrar é a mais simples para quem está começando no linux, que é pelo método da atribuição direta, onde as alterações são realizadas com o sinal de (=)com o uso das letras “r”,”w” e “x” indicando as permissões com o uso do comando chmod, lembrando que as permissões de um arquivo apenas pode ser alterado pelo dono do arquivo ou o usuário root.
Exemplo:
drwxr-xr-x 2 bjunior bjunior 4096 2007-11-20 16:31 Public # chmod u=r,g=rwx,o=w /home/bjunior/Public # ls -l # dr--rwx-w- 2 bjunior bjunior 4096 2007-11-20 16:31 Public
*Observe as alterações.
Sendo:
u - Representando o nível de usuário dono do arquivo. g - Representando o nível de grupo do dono do arquivo. o - Representando todos os outros usuários.
Espero que sirva como auxílio para alguém. =)