anúncios

terça-feira, 27 de dezembro de 2016

Instalando e Configurando Servidor de E-mail Postfix

O presente Howto será explicado a instalação e configuração do servidor de e-mail Postfix no GNU/Linux Debian 8.5.

Note que você precisará configurar o DNS do domínio o qual irá criar as caixas de e-mail. Para tal você pode utilizar qualquer serviço que lhe permita configurar as entradas do tipo A, MX e TXT.

Neste howto será explicado como instalar e configurar o Postfix, Dovecot com SASL, filtros de e-mail ClamAV, Spamassassin e o Webmail Roundcube.

Observação: O editor de texto usado para configurar os arquivos de configuração foi o Vim, então o atalho para salvar e sair é ESC +:x ou ESC + :wq

1. Configuração do Servidor Mail
Hostname: mailserver
Domínio: saitam.int
1.1 Editar o arquivo /etc/hosts
# vim /etc/hosts
IP     mailserver.saitam.int     mailserver
1.2 Editar o arquivo /etc/hostname
# vim /etc/hostname
mailserver
# hostname -F /etc/hostname

2. Instalação dos pacotes do MTA Postfix
# apt-get update
# apt-get install postfix postfix-doc dovecot-imapd dovecot-pop3d amavisd-new arj cabextract cpio lzop nomarch ripole tnef unrar zoo

Durante a instalação do pacote do Postfix será questionado quanto ao tipo de mail server que estará configurando, selecione Internet Site. Também será questionado sobre o nome do mail server, digite no campo o seu hostname.

Observa os screenshots abaixo:




2.1 Criar o aliases
# vim /etc/aliases
postmaster: root
root: saitam
3. Criar certificados SSL auto-assinados
# apt-get install openssl ca-certificates

Para ter uma maior segurança é necessário criar um certificado digital SSL por você mesmo ou comprar um assinado, porém para fins didáticos será usado o openssl.

#openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/mailserver.saitam.int.key -out /etc/ssl/certs/mailserver.saitam.int.crt

3.1 Ajuste de permissão
chmod 600 /etc/ssl/private/mailserver.saitam.com.br.key
chmod 600 /etc/ssl/certs/mailserver.saitam.int.crt


4. Configuração do Postfix
Antes é bom fazer o backup do arquivo original
# mv /etc/postfix/main.cf /etc/postfix/main.cf.orig
Agora criar o arquivo main.cf novo com as suas configurações
# vim /etc/postfix/main.cf
# Informações de domínio, hostname, redes de acesso ao e-mail e o mailbox
mydomain = saitam.int
myhostname = mailserver.$mydomain
myorigin = $mydomain
mydestination = $myhostname, $mydomain, localhost.saitam.int, localhost
mynetworks = 127.0.0.0/8, 192.168.1.0/24, 192.168.10.0/24
home_mailbox = ~/Maildir/
#mailbox_command = procmail -a "$EXTENSION"
#espaço de 1GB = 1024*1024*1024
mailbox_size_limit = 1073741824
recipient_delimiter = +
inet_interfaces = all
inet_protocols = ipv4

# indica quem irá armazenar os e-mails
virtual_transport = dovecot

# SASL parameters
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_authenticated_header = yes
broken_sasl_auth_clients = yes

# 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_auth_only = yes
smtpd_tls_cert_file =  /etc/ssl/certs/mailserver.saitam.int.crt

smtpd_tls_key_file = /etc/ssl/private/mailserver.saitam.com.br.key

smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache

#Segurança
# Aceitar ligacoes apenas a partir da rede local
smtpd_client_restrictions = permit_mynetworks,
  reject

# Clientes locais podem enviar emails para qualquer endereco
smtpd_recipient_restrictions = permit_mynetworks,
  reject_unauth_destination

# Rejeitar ligacoes de clientes que nao saibam o seu hostname
smtpd_helo_restrictions = reject_unknown_sender_domain

# Rejeitar email de dominios que nao existem
smtpd_sender_restrictions = reject_unknown_sender_domain

4.1Configuração do SMTP com autenticação SASL
Antes o backup do arquivo original
# cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig # vim /etc/dovecot/dovecot.conf Descomentar a linha 33
base_dir = /var/run/dovecot
4.2 Alterações internas do Dovecot localizadas em /etc/dovecot/conf.d/
Editar o arquivo /etc/dovecot/conf.d/10-auth.conf
# vim /etc/dovecot/conf.d/10-auth.conf Descomentar a linha 10
disable_plaintext_auth = no
4.3 Habilitar o local das mensagens por usuário
Editar o arquivo /etc/dovecot/conf.d/10-mail.conf
# vim /etc/dovecot/conf.d/10-mail.conf Adicionar a linha abaixo
mail_location = maildir:~/Maildir 
4.4 Habilitar os protocolos pop3 e imap
Editar o arquivo /etc/dovecot/conf.d/10-master.conf
# vim /etc/dovecot/conf.d/10-master.conf
Descomentar/Adicionar as linhas correspondentes abaixo
 
service imap-login {
  inet_listener imap {
    port = 143
  }
  inet_listener imaps {
    port = 993
    ssl = yes
  }

service pop3-login {
  inet_listener pop3 {
    port = 110
  }
  inet_listener pop3s {
    port = 995
    ssl = yes
  }
}
4.5 Habilitar o SSL

O Dovecot apenas aceita as extensões .pem do SSL, no caso será feito uma cópia dos arquivos .crc e .key gerados via openssl no item 3.


# cp /etc/ssl/certs/mailserver.saitam.int.crt /etc/ssl/certs/mailserver.saitam.int.pem
# cp /etc/ssl/private/mailserver.saitam.int.key /etc/ssl/private/mailserver.saitam.int.pem
Editar o arquivo /etc/dovecot/conf.d/10-ssl.conf
# vim /etc/dovecot/conf.d/10-ssl.conf
Adicione o caminho correspondente ao certificado e chave do OpenSSL
ssl_cert = < /etc/ssl/certs/mailserver.saitam.int.pem
ssl_key = < /etc/ssl/private/mailserver.saitam.int.pem
5. SMTP Relay
Para enviar um e-mail para uso externo, precisa resolver os seguintes itens:
  • O servidor SMTP do fornecedor de acesso Internet (ISP) deve aceitar conexão ao servidor.
  • O endereço do remetente deve ser de um domínio registrado para poder receber respostas.
Para contornar esses itens, nada mais simples do que utilizar servidores e endereços válidos. Com isso ao enviar e-mails para uso externo, precisa fazer isso.
  • O servidor deverá enviar e-mail através de um servidor SMTP externo. Caso necessário deverá autenticar-se como utilizador válido.
  • O endereço e-mail deverá ser substituído por outro e-mail válido no uso externo.
Será usado o servidor SMTP do GMail (smtp.gmail.com)
Adicione no arquivo /etc/postfix/main.cf para o relay SMTP
# vim /etc/postfix/main.cf
#relay
relayhost = [smtp.gmail.com]
5.1 Configurar a ligação TLS com SASL_AUTH
Configurar a ligação encriptada (TLS) e autenticada (SASL_AUTH), também o arquivo que contém os dados de autenticação (password_maps)
# vim /etc/postfix/main.cf
# SASL SUPPORT FOR SERVERS
#
# The following options set parameters needed by Postfix to enable
# Cyrus-SASL support for authentication of mail servers.
#
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
Os dados de autenticação no servidor SMTP do GMail encontra-se no arquivo /etc/postfix/sasl/sasl_passwd
[smtp.gmail.com] seuemail@gmail:PasswordGMail
Ajuste de permissão para segurança
# chmod 600 /etc/postfix/sasl/sasl_passwd

A cada alteração do arquivo /etc/postfix/sasl/sasl_passwd deve atualizar a base de dados correspondente.
# postmap /etc/postfix/sasl/sasl_passwd

6. Mapeamento de endereços de e-mails
Ao enviar e-mails para o exterior, os endereços internos (saitam@saitam.int) devem ser substituídos por endereços externos (seuemail@gmail.com)
O Postfix deve ser configurado para usar o arquivo de mapeamento de endereços, o que é feito no arquivo /etc/postfix/main.cf
# vim /etc/postfix/main.cf Adicionar a linha abaixo
smtp_generic_maps = hash:/etc/postfix/generic
O arquivo com mapeamento de endereços consiste em uma lista de endereços locais e os correspondentes endereços externos.
O tamanho da lista não está limitado, podendo ser aumentada para conter os endereços dos diversos utilizadores locais.
Adapte para o seu usuário local e externo do SMTP
# vim /etc/postfix/generic
saitam@saitam.int seuemail@gmail.com
A cada alteração do arquivo /etc/postfix/generic deve atualizar a base de dados correspondente # postmap /etc/postfix/generic

7. Filtros de E-mail

O uso de filtros no servidor de e-mail permite as implementações de anti-vírus e anti-spam.
Esses filtros podem ser complementados com a ligação a um sistema anti-vírus, com o clamav e/ou sistema anti-spam, como o spamassassin.

7.1 Amavisd-new
# apt-get install amavisd-new
Editar o arquivo /etc/postfix/main.cf
Incluir no final do arquivo
# vim /etc/postfix/main.cf
# amavisd-new scanner
#
content_filter = amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings
Em seguida configurar o serviço do postfix para receber os e-mails filtrados do amavisd-new
Incluir no final do arquivo
# vim /etc/postfix/master.cf
# amavisd-new scanner
#
amavis unix - - - - 2 smtp
  -o smtp_data_done_timeout=1200
  -o smtp_send_xforward_command=yes
  -o disable_dns_lookups=yes
  -o max_use=20
  -o smtp_generic_maps=

127.0.0.1:10025 inet n - - - - smtpd
  -o content_filter=
  -o smtpd_delay_reject=no
  -o smtpd_client_restrictions=permit_mynetworks,reject
  -o smtpd_helo_restrictions=
  -o smtpd_sender_restrictions=
  -o smtpd_recipient_restrictions=permit_mynetworks,reject
  -o smtpd_end_of_data_restrictions=
  -o smtpd_restriction_classes=
  -o mynetworks=127.0.0.0/8
  -o smtpd_error_sleep_time=0
  -o smtpd_soft_error_limit=1001
  -o smtpd_hard_error_limit=1000
  -o smtpd_client_connection_count_limit=0
  -o smtpd_client_connection_rate_limit=0
  -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks
  -o local_header_rewrite_clients=
  -o local_recipient_maps=
  -o relay_recipient_maps=
  -o strict_rfc821_envelopes=yes
7.2 Filtro Anti-vírus ClamAV
Instalação do ClamAV
# apt-get install clamav clamav-docs clamav-daemon clamav-freshclam
Editar o arquivo /etc/amavis/conf.d/15-content_filter_mode
# vim /etc/amavis/conf.d/15-content_filter_mode
# Default antivirus checking mode
# Please note, that anti-virus checking is DISABLED by
# default.
# If You wish to enable it, please uncomment the following lines:

@bypass_virus_checks_maps = (
  \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
Criar usuário clamav ao grupo amavis
# adduser clamav amavis

Reiniciar os serviços
# service amavis restart
# service clamav-daemon restart


7.3 Filtro Anti-spam Spamassassin
# apt-get install spamassassin spamc
Ativar o daemon spamassassin no boot
# systemctl enable spamassassin.service

Editar o arquivo /etc/default/spamassassin para as regras de filtro
# vim /etc/default/spamassassin
# Cronjob
# Set to anything but 0 to enable the cron job to automatically update
# spamassassin's rules on a nightly basis
CRON=1
Reiniciar os serviços
# service spamassassin restart
# service postfix restart
# service dovecot restart

Na configuração por default, os e-mails considerados spam são colocados em quarentena e nenhuma informação chega ao destinatário. Nesta configuração queremos que os emails indiquem apenas as probabilidades de serem spam, deixando ao utilizador a escolha das acções a realizar.

As configurações personalizadas encontra-se no arquivo /etc/amavis/conf.d/50-user

# vim /etc/amavis/conf.d/50-user
use strict;

#
# Place your configuration directives here. They will override those in
# earlier files.
#
# See /usr/share/doc/amavisd-new/ for documentation and examples of
# the directives you can use in this file

$sa_spam_subject_tag = '***SPAM*** ';
$sa_tag_level_deflt = undef; # add spam info headers if at, or above that level
$sa_tag2_level_deflt = 6.31; # add 'spam detected' headers at that level
$sa_kill_level_deflt = 9999; # triggers spam evasive actions

#------------ Do not modify anything below this line -------------
1; # insure a defined return

A “sensibilidade” do filtro anti-spam pode ser afinada alterando o valor de $sa_tag2_level_deflt: Com um valor mais baixo, serão necessários menos indicadores para que a mensagem seja considerada spam. No entanto, este valor não deve ser inferior a 5, ou corremos o risco de todas as mensagens, mesmo as mais legítimas, começarem a ser classificadas como spam.

Reiniciar o serviço amavisd-new
# service amavis restart

8. Descarga de E-mail

Por fim, o servidor deverá descarregar as mensagens dos servidores remotos para o servidor local, de um modo automatizado.

8.1 Fetchmail
Instalação do pacote fetchmail
# apt-get install fetchmail

Criar um arquivo em algum lugar do servidor
# vim /home/usuario/.fetchmailrc
poll pop.gmail.com proto pop3 user "seuemail" pass "password" is "usuario@saitam.int" options ssl keep
Neste exemplo, o fetchmail irá descarregar o email do utilizador seuemail do servidor pop.gmail.com, utilizando o protocolo pop3 e uma ligação ssl e reencaminha-o para o utilizador usuario@saitam.int

A opção keep mantém as mensagens no servidor, o que é útil em fase de testes. Posteriormente, essa opção poderá ser retirada. Com alguns servidores pop3, é necessário acrescentar a opção uidl, que força o lado cliente a manter uma lista das mensagens já descarregadas e que garante que apenas as novas mensagens serão descarregadas.

Ajuste de permissão #chmod 600 /home/usuario/.fetchmailrc
Execução automatizada
Adicionar no cron para execução do fetchmail a cada 5 minutos
# contrab -e
# m h dom mon dow command
*/5 * * * * /usr/bin/fetchmail &> /dev/null
9. Criação de usuário e diretório da caixa de e-mail
9.1 Criação de usuário
# adduser saitam --shell=/bin/false
# adduser taise --shell=/bin/false

9.2 Criação dos diretórios para recebimento de e-mail do usuário
# mkdir /home/saitam/Maildir
# mkdir /home/saitam/Maildir/cur
# mkdir /home/saitam/Maildir/new
# mkdir /home/saitam/Maildir/tmp

# mkdir /home/taise/Maildir
# mkdir /home/taise/Maildir/cur
# mkdir /home/taise/Maildir/new
# mkdir /home/taise/Maildir/tmp

9.3 Criar o grupo email
# groupadd email
9.4 Setar permissão aos diretórios de usuários
# chown saitam:email /home/saitam/Maildir
# chown saitam:email /home/saitam/Maildir/cur
# chown saitam:email /home/saitam/Maildir/new
# chown saitam:email /home/saitam/Maildir/tmp

# chown taise:email /home/taise/Maildir
# chown taise:email /home/taise/Maildir/cur
# chown taise:email /home/taise/Maildir/new
# chown taise:email /home/taise/Maildir/tmp

OBS: A caixa postal do usuário deve ser criada para cada novo usuário do sistema.

10. WebMail
O WebMail, permite consultar o e-mail de forma pela interface web
. Atualmente existem dois: Squirrelmail e Roundcube. No presente howto será utilizado o Roundcube

O Roundcube é a aplicação web utilizada como webmail. Para que os usuários do servidor de e-mail não sejam obrigados a utilizar uma aplicação cliente como Thunderbird ou Outlook;

10.1 Instalação dos pacotes pré-requisitos
Necessário instalar o Apache, PHP e MySQL
# apt-get install apache2 php5 php5-cli mysql-server php5-curl php5-gd php5-imap php5-mcrypt php5-mysql
Também outros pacotes
# apt-get install php5-sasl php-auth-sasl php-net-smtp libnet-smtp-server-perl libnet-smtp-ssl-perl libidn2-0-dev libemail-mime-perl php-mail-mime php-mail-mimedecode
E o Net_IDNA2 do Perl
# pear install Auth_SASL Net_SMTP Net_IDNA2-0.1.1 Mail_mime Mail_mimeDecode

10.2 Ajustes de parâmetros no PHP
Edite o arquivo /etc/php5/apache2/php.ini para ajustar os parâmetros do PHP conforme abaixo:
# vim /etc/php5/apache2/php.ini
# Ajuste de memória máxima utilizada nas aplicações web 
memory_limit = 128M 
# Ajuste o tamanho máximo do arquivo aceito pelo PHP. # anexos maiores que 2MB upload_max_filesize = 16M post_max_size = 16M
# Ajuste básicos de segurança, para não identificar que esteja #
executando PHP no servidor expose_php = Off # Ajuste para não perder a sessão o tempo todo (tempo em segundos) session.gc_maxlifetime = 21600 # Ajuste de fuso horário # Lista de timezones http://php.net/manual/en/timezones.php date.timezone = America/Sao_Paulo
10.3 Criação do VirtualHost no Apache para o WebMail Roundcube
Criar o diretório webmail no root do Apache
# mkdir /var/www/html/webmail
# vim /var/www/html/webmail/mailserver.conf
< VirtualHost *:80>
  ServerAdmin root@saitam.int
  ServerName mailserver.saitam.int
  DocumentRoot /var/www/html/webmail
  < Directory /var/www/html/webmail>
  Options Indexes FollowSymLinks MultiViews
  AllowOverride All
  Order allow,deny
  Allow from all
  < /Directory>
  ErrorLog ${APACHE_LOG_DIR}/error-mailserver.log
  LogLevel warn
  CustomLog ${APACHE_LOG_DIR}/access-mailserver.log combined
< /VirtualHost>

< IfModule mod_ssl.c>
  
  # Se possuir um IP específico comente a linha acima e descomente abaixo
  # Ajustando o IP
  ServerAdmin root@saitam.int
  ServerName mailserver.saitam.int
  DocumentRoot /var/www/html/webmail
  < Directory /var/www/html/webmail>
  Options Indexes FollowSymLinks MultiViews
  AllowOverride All
  Order allow,deny
  allow from all
  < /Directory>
  ErrorLog ${APACHE_LOG_DIR}/error-mailserver.log
  CustomLog ${APACHE_LOG_DIR}/ssl-mailserver.log combined
  SSLEngine on
  # Caminhos para os dados de certificado
  SSLCertificateFile /etc/ssl/certs/mailserver.saitam.int.crt
  SSLCertificateKeyFile /etc/ssl/private/mailserver.saitam.int.key
  # Em alguns casos é preciso ajustar os certificados de cadeia ou de autoridade,
  # verifique com sua certificadora os detalhes
  #SSLCACertificateFile /etc/ssl/certs/cacert.pem
  #SSLCertificateChainFile /path/to/my/ca-bundle.crt
  # Ajustes para o Internet Explorer
  BrowserMatch "MSIE [2-6]" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
  BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
  < /VirtualHost>
< /IfModule>
10.4 Habilitar a porta 443 do VirtualHost
Edite o arquivo /etc/apache2/ports.conf para configurar o ServerName do VirtualHost
# vim /etc/apache2/ports.conf
ServerName mailserver
NameVirtualHost *:80
Listen 80
< IfModule mod_ssl.c>
  NameVirtualHost *:443
  # Nota: Clientes com Windows XP não suportam SNI 
  #e portanto você não pode usar um
  # mesmo IP para mais de um virtualhost!
  Listen 443
< /IfModule>
10.5 Habilitar o VirtualHost e SSL
Habilita o VirtualHost # a2ensite mailserver.conf
Habilita SSL
# a2enmod rewrite ssl
Reinicia o Apache
# service apache2 restart

10.6 Configuração de informação de Banco de Dados
Criando o banco de dados roundcube no MySQL
# mysql -u root -p
Enter password: < digite a senha de root que foi definida na instalação do MySQL >
# mysql> create database roundcube character set utf8;

Criado o usuário roundcube com sua respectiva senha para o banco criado anteriormente
# mysql> GRANT ALL on roundcube.* to roundcube@localhost identified by ‘roundcube_senha’;
Query OK, 0 rows affected (0.00 sec)
# mysql> quit
Bye

# cp /var/www/html/webmail/config/config.inc.php.sample /var/www/html/webmail/config/config.inc.php
Editar /var/www/html/webmail/config/db.inc.php.
# vim /var/www/html/webmail/config/config.inc.php
$config['db_dsnw'] = 'mysql://roundcube:roundcube@roundcube_senha@localhost/roundcube';
Ajuste de permissão do diretório de instalação por segurança
# chmod 000 /var/www/html/webmail/installer/

10.7 Instalação do Roundcube
Acessar até o diretório /var/www/html/webmal
#cd /var/www/html/webmail
Download: #wget -c 'https://sourceforge.net/projects/roundcubemail/files/roundcubemail/1.1.4/roundcubemail-1.1.4.tar.gz/download' -O roundcubemail-1.1.4.tar.gz
Extração:
#tar xvzf roundcubemail-1.1.4.tar.gz
Mover para o diretório raiz do Roundcube
#mv roundcubemail-1.1.4/* .
Mover o arquivo .htaccess para o diretório raiz do Roundcube
#mv roundcubemail-1.1.4/.htaccess .
Remover o arquivo o diretório diretório roundcubemail-1.1.4/ e compactado
#rm -rf roundcubemail-1.1.4/ roundcube.tar.gz
Ajuste de permissão
#chown www-data:www-data temp/ logs/
Importação da base do roundcube # mysql -u roundcube -p
Enter password: < digite a senha definida para roundcube, a mesma colocada no arquivo config.inc.php >
# mysql> use roundcube;
# mysql> source /var/www/html/webmail/SQL/mysql.initial.sql ;
# mysql> quit
Bye


Acesse no browser http://mailserver.saitam.int/webmail/installer/ e verifique se há algum detalhe faltando na configuração do servidor.
Se tiver OK, o botão NEXT será liberado e assim processguir nas etapas solicitadas com base do servidor
Acesse no browser em outro computador https://mailserver.saitam.int/webmail



Referências
[1] http://www.postfix.org/
[2] http://www.postfix.org/postconf.5.html
[3] http://www.postfix.org/postconf.5.html
[4] http://www.postfix.org/SASL_README.html#client_sasl
[5] http://www.postfix.org/SASL_README.html#client_sasl
[6] http://postfix.state-of-mind.de/patrick.koetter/smtpauth/smtp_auth_mailservers.html
[7] http://postfix.state-of-mind.de/patrick.koetter/smtpauth/smtp_auth_mailservers.html
[8] http://www.dovecot.org/
[9] https://www.openssl.org/
[10] https://www.linode.com/docs/email/clients/install-roundcube-on-ubuntu-14-04

Feito!

terça-feira, 20 de dezembro de 2016

Instalando, Configurando e Provisionando o Samba4 como Controlador de Domínio Active Directory (AD)

O presente Howto mostra os procedimentos necessários para instalação e configuração do Samba 4 como controlador de domínio Active Directory (AD) realizada nas distros Debian 8 e CentOS 7.

Observação: Recomendado usar a versão 4.4.5 por ser a mais estável no momento em ambiente de produção.

1. Configuração do servidor Samba
Hostname: samba4dc
Tipo de Serviço (Role): Domain Controler
Endereço IP: 192.168.1.4
Domínio: saitam.int
DNS Cliente: 192.168.1.4
Gateway default: 192.168.1.1

1.1 Criar o mapeamento do servidor
# vim /etc/hostname
samba4dc
# vim /etc/hosts
127.0.0.1 localhost.localdomain localhost
192.168.1.4 samba4dc.saitam.int samba4dc

# /etc/init.d/hostname.sh restart

2. Instalação dos pacotes pré-requisitos para o Samba4
No Debian:
# apt-get install acl attr autoconf bison gcc g++ debhelper dnsutils docbook-xml docbook-xsl flex gdb krb5-user libacl1-dev libaio-dev libattr1-dev libblkid-dev libbsd-dev libcap-dev libcups2-dev libgnutls28-dev libjson-perl libldap2-dev libncurses5-dev libpam0g-dev libparse-yapp-perl libpopt-dev libreadline-dev perl perl-modules pkg-config python-all-dev python-dev python-dnspython python-crypto xsltproc zlib1g-dev libgpgme11-dev python-gpgme python-m2crypto winbind libpam-winbind libnss-winbind
Durante o setup do Kerberos, preencha conforme solicitado
Reino por omissão do Kerberos versão 5: SEUDOMINIO.INT
No meu caso, coloquei SAITAM.INT
Servidores Kerberos para seu realm: 127.0.0.1
Servidor administrativo para seu realm Kerberos: 127.0.0.1

No CentOS:
# yum install perl gcc attr libacl-devel libblkid-devel gnutls-devel readline-devel python-devel gdb pkgconfig krb5-workstation zlib-devel setroubleshoot-server libaio-devel setroubleshoot-plugins policycoreutils-python libsemanage-python perl-ExtUtils-MakeMaker perl-Parse-Yapp perl-Test-Base popt-devel libxml2-devel libattr-devel keyutils-libs-devel cups-devel bind-utils libxslt docbook-style-xsl openldap-devel autoconf python-crypto pam-devel

3. Download e instalação do Samba4
# mkdir /opt/samba4 && cd /opt/samba4
# wget -c "https://download.samba.org/pub/samba/stable/samba-4.4.5.tar.gz"
# tar -xzvf samba-4.4.5.tar.gz
# cd samba-4.4.5

Checa as dependências
# ./configure
'configure' finished successfully (7m45.311s)

Se ocorrer OK no passo anterior, execute o make para compilação
# make
No meu caso em Debian 8.5 ocorreu o seguinte erro abaixo no final da compilação.
Build failed: -> task failed (err #139): {task: manpages/smb.conf.5 smb.conf.5.xml,parameters.all.xml -> smb.conf.5}
Depois de uma pesquisa, descobri que era o bug do pacote docbook-xsl na versão 1.78.1+dfsg-1, a solução foi remover esse pacote via APT, fazer o download deste pacote na versão corrente e instalar via dpkg.
Segue os procedimentos:
# aptitude remove docbook-xsl
# cd /opt/samba4
# wget -c "http://ftp.br.debian.org/debian/pool/main/d/docbook-xsl/docbook-xsl_1.79.1+dfsg-2_all.deb"
# dpkg -i docbook-xsl_1.79.1+dfsg-2_all.deb

Executar novamente o # make
NOTA: Esse pacote docbook-xsl está na versão TESTING do Debian até a data de publicação deste post.
Após o término de compilação
Waf: Leaving directory `/opt/samba4/samba-4.4.5/bin'
'build' finished successfully (1h2m12.706s)

A instalação propriamente
# make install
Após o término de instalação
Waf: Leaving directory `/opt/samba4/samba-4.4.5/bin'
'install' finished successfully (28m41.800s)

3.1 Adicionar os comandos do Samba no PATH do sistema
# export PATH=/usr/local/samba/bin/:/usr/local/samba/sbin/:$PATH

4. Download e instalação do Bind 9.9.9-P4
Foi necessário instalar o Bind de forma compilada para adicionar parâmetros para o Samba 4 necessários para usar o BIND9_DLZ
Dependências necessárias:
# apt-get install libglobus-gssapi-gsi-dev libgssapi-krb5-2 libkrb5-dev
# mkdir /opt/bind9 && cd /opt/bind9
# wget -c "http://ftp.isc.org/isc/bind9/9.9.9-P4/bind-9.9.9-P4.tar.gz"
# tar -xzvf bind-9.9.9-P4.tar.gz
# cd bind-9.9.9-P4
#./configure --prefix=/usr/local/bind9 --with-gssapi=/usr/include/gssapi --with-dlopen=yes
# make
# make install

4.1 Adicionar usuário e grupo para o Bind
# groupadd -g 35 named
# useradd -u 35 -g named -d /var/named -M -s /sbin/nologin named


4.2 Adicionar os comandos do Bind no PATH do sistema
#export PATH=/usr/local/bind9/bin/:/usr/local/bind9/sbin/:$PATH

5. Configuração do servidor DNS
Como o Bind foi compilado e instalado em /usr/local/bind9 os arquivos de configuração fica em /usr/local/bind9/etc que serve para as distros Debian e CentOS nesse caso.

5.1 Configuração dos arquivos essenciais do Bind
Download do servidor DNS Root
# wget -q -O /var/named/named.root https://www.internic.net/zones/named.root
# chown root:named /var/named/named.root
# chmod 640 /var/named/named.root


5.2 Configuração do arquivo named.conf
# vim /usr/local/bind9/etc/named.conf
# Global Configuration Options
options {

  auth-nxdomain yes;
  directory "/var/named";
  notify no;
  empty-zones-enable no;

  # IP addresses and network ranges allowed to query the DNS server:
  allow-query {
  127.0.0.1;   192.168.1.0/24;
  };

  # IP addresses and network ranges allowed to run recursive queries:
  # (Zones not served by this DNS server)
  allow-recursion {
  127.0.0.1;   192.168.1.0/24;
  };

  # Forward queries that can not be answered from own zones
  # to these DNS servers:
  forwarders {
  8.8.8.8;
  8.8.4.4;
  };

  # Disable zone transfers
  allow-transfer {
  none;
  };
 };

# Root Servers
# (Required for recursive DNS queries)
zone "." {
  type hint;
  file "named.root";
};

# Forward zone: localhost
zone "localhost" {
  type master;
  file "master/localhost.zone";
};

# Reverse zone: 127.0.0.
zone "0.0.127.in-addr.arpa" {
  type master;
  file "master/0.0.127.zone";
};

# Zona direta domínio rede local saitam.int
zone "saitam.in" {
  type master;
  file "master/db.saitam";
};
# Zona reversa 192.
zone "1.168.192.in-addr.arpa" {
  type master;
  file "master/db.192";
};

5.3 Configuração das zonas direta e reversa
Zona direta localhost
# vim /var/named/master/localhost.zone
$TTL 604800

@ IN SOA localhost. root.localhost. (
  2016121801 ; serial
  604800 ; refresh
  86400 ; retry
  2419200 ; expiry
  604800 ; minimum
  )
;
  NS localhost.

localhost. IN A 127.0.0.1
# chown named:named /var/named/master/localhost.zone
# chmod 640 /var/named/master/localhost.zone

Zona reversa localhost
# vim /var/named/master/0.0.127.zone
$TTL 604800

@ IN SOA localhost. root.localhost. (
  2016121801 ; Serial
  604800 ; Refresh
  86400 ; Retry
  2419200 ; Expire
  604800 ; Minimum TTL
  )
;
  IN NS localhost.

1 IN PTR localhost.
# chown named:named /var/named/master/0.0.127.zone
# chmod 640 /var/named/master/0.0.127.zone

Zona direta para domínio saitam.int
# vim /var/named/master/db.saitam
;
; BIND data file for local loopback interface
;
$TTL 604800
@ IN SOA saitam.int. root.saitam.int. (
  2016121801 ; Serial
  604800 ; Refresh
  86400 ; Retry
  2419200 ; Expire
  604800 ) ; Negative Cache TTL
  IN A 192.168.1.4
;
@ IN NS saitam.int.

  IN MX 5 saitam.int.

www IN CNAME saitam.int.
mail IN A 192.168.1.4
router IN A 192.168.1.1
gateway CNAME router
gw CNAME router
# chown named:named /var/named/master/db.saitam
# chmod 640 /var/named/master/db.saitam

Zona reversa do domínio saitam.int
# vim /var/named/master/db.192
;
; BIND reverse data file for local loopback interface
;
$TTL 604800
@ IN SOA saitam.int. root.saitam.int. (
  2016120701 ; Serial
  604800 ; Refresh
  86400 ; Retry
  2419200 ; Expire
  604800 ) ; Negative Cache TTL
;
@ IN NS saitam.int.
4 IN PTR saitam.int.
1 IN PTR router.saitam.int.
# chown named:named /var/named/master/db.192
# chmod 640 /var/named/master/db.192


5.4 Configuração do BIND_DLZ
Incluir o /usr/local/samba/private/named.conf no /usr/local/bind9/etc/named.conf na linha 1 # vim /usr/local/bind9/etc/named.conf
include "/usr/local/samba/private/named.conf";
5.5 Adicionar a atualização DNS do Kerberos em options
# vim /usr/local/bind9/etc/named.conf
Quando provisionar o samba vai criar essa chave e precisa ser adicionada aqui o path completo
tkey-gssapi-keytab "/usr/local/samba/private/dns.keytab"; 
5.6 Habilitar o DLZ_BIND
Edite o arquivo /usr/local/samba/private/named.conf e descomente a linha conforme a versão do Bind instalada, nesse caso o Bind 9.9
# vim /usr/local/samba/private/named.conf
 # For BIND 9.9.x
  database "dlopen /usr/local/samba/lib/bind9/dlz_bind9_9.so";
5.7 Adicionar o domínio no arquivo /etc/resolv.conf
# vim /etc/resolv.conf
domain saitam.int
search saitam.int
nameserver 192.168.1.4
5.8 Iniciar o serviço do Bind
Estando com os comandos do Bind no PATH do sistema, conforme feito anteriormente pode executar de qualquer lugar no terminal, caso não tenha feito ainda, reveja o procedimento no item 4.2 ou terá que executar os comandos Bind dentro do diretório /usr/local/bind9/bin e /usr/local/bind9/sbin
# named -u named
Para parar o serviço do Bind é killall named
OBS: Fica a seu critério criar um script Shell com opção start|stop no diretório de inicialização no boot.

6. Instalar e Configurar o NTP
No Debian: # apt-get install ntp
No CentOS: # yum install ntp
# vim /etc/ntp.conf
# Relogio Local
server 127.127.1.0
fudge 127.127.1.0 stratum 10

6.1 Testar o NTP
# ntpq -p
remote refid st t when poll reach delay offset jitter

 ns507230.ip-192 137.146.28.85 2 u - 64 1 192.071 2.852 1.057
 vel.itat.io 162.23.41.10 2 u 2 64 1 257.998 0.743 1.999
 alpha.rueckgr.a 131.188.3.222 2 u 4 64 1 247.913 6.323 0.004
 c.st1.ntp.br .ONBR. 1 u 1 64 1 40.179 0.290 0.863
*LOCAL(0) .LOCL. 10 l 5 64 1 0.000 0.000 0.004
6.2 Reiniciar o serviço NTP
Debian: # /etc/init.d/ntp restart
CentOS: # systemctl restart ntp
[ ok ] Restarting ntp (via systemctl): ntp.service.
7. Proversionar o Samba4
Server role: dc
NIS extensão habilidada
DNS interno back end: BIND9_DLZ
Kerberos realm e AD DNS zona: samba4dc.saitam.int
NetBIOS domínio name: samba4dc
Administrador de domínio:

7.1 Prover o Samba AD no modo interativo
Estando com os comandos do Samba no PATH do sistema, conforme feito anteriormente pode executar de qualquer lugar no terminal, caso não tenha feito ainda, reveja o procedimento no item 3.1 ou terá que executar os comandos do Samba dentro do diretório /usr/local/samba/bin e /usr/local/samba/sbin
# samba-tool domain provision --use-rfc2307 --interactive
Realm [SAITAM.INT]
Domain [SAITAM]:
Server Role (dc, member, standalone) [dc]:
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: BIND9_DLZ
Administrador password:
Retype password:
Once the above files are installed, your Samba4 server will be ready to use
Server Role: active directory domain controller
Hostname: samba4dc
NetBIOS Domain: SAITAM
DNS Domain: saitam.int
DOMAIN SID: S-1-5-21-3436644580-1722986177-1604106671

8. Configuração do Kerberos
Primeiramente renomear o arquivo original do krb5.conf para backup
# mv /etc/krb5.conf /etc/krb5.conf.orig
Copiar o krb5.conf do Samba4 para /etc
# cp /usr/local/samba/private/krb5.conf /etc
Criar um link símbolico
# ln -sf /usr/local/samba/private/krb5.conf /etc/krb5.conf
Incluir as linhas caso não exista, adapte para domínio e endereço IP de sua rede.
# vim /usr/local/samba/private/krb5.conf
[realms]
SAITAM.INT = {
kdc = 192.168.1.4
admin_server = 192.168.1.4
}
9. Serviço Samba 4
No Debian:
# systemctl restart smbd
# systemctl restart nmbd
# systemctl restart winbind

No CentOS:
Reiniciar o daemon do SystemD
# systemctl daemon-reload
# systemctl enable samba-ad-dc
# systemctl start samba-ad-dc

10. Testes de comunicação
DNS
Verificar se o arquivo de zona direta e reversa contém erros # named-checkzone saitam.int /var/named/master/db.saitam
zone saitam.int/IN: loaded serial 2016121801
OK 
# named-checkzone 1.168.192.in-addr /var/named/master/db.saitam/db.192
zone 1.168.192.in-addr/IN: loaded serial 2016121801
OK
# host -t A saitam.int
saitam.int has address 192.168.1.4

# host -t SRV _ldap._tcp.saitam.int.
_ldap._tcp.saitam.int has SRV record 0 100 389 samba4dc.saitam.int.

# host -t SRV _kerberos._udp.saitam.int.
_kerberos._udp.saitam.int has SRV record 0 100 88 samba4dc.saitam.int.
10.1 Teste do mecanismos de autenticação Kerberos
# kinit administrator@SAITAM.INT
Password for administrator@SAITAM.INT:
Warning: Your password will expire in 41 days on Qua 01 Fev 2017 16:05:34 BRST
# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@SAITAM.INT

Valid starting       Expires              Service principal
20-12-2016 16:47:15  20-12-2016 02:47:15  krbtgt/SAITAM.INT@SAITAM.INT
        renew until 20-12-2016 16:46:57
10.2 Autenticação com controlador de domínio Samba 4
# smbclient //localhost/netlogon -UAdministrator -c 'ls'
Enter Administrator's password:
Domain=[SAITAM] OS=[Windows 6.1] Server=[Samba 4.4.5]
  .                                   D        0  Sat Dec 17 18:08:21 2016
  ..                                  D        0  Sat Dec 17 18:08:48 2016

                9961324 blocks of size 1024. 5006248 blocks available
11. Administração de usuários e grupos do Samba 4 AD pelo terminal

Os comandos do Samba foram adicionados no PATH do sistema, caso não tenha adicionado ainda, reveja o procedimento no item 3.1 ou terá que executar os comandos do Samba dentro do diretório /usr/local/samba/bin e /usr/local/samba/sbin

11.1 Criar usuário no Samba 4 DC AD
# samba-tool user add usuario
New Password:
Retype Password:
User 'usuario' created successfully
11.2 Criar Grupo RH, Financeiro, TI dos setores da empresa
# samba-tool group add RH
Added group RH
# samba-tool group add Financeiro
Added group Financeiro 
# samba-tool group add TI
Added group TI 
11.3 Adicionar o usuário criado no grupo TI
# samba-tool group addmembers TI usuario
Added members to group TI 
11.4 Listar usuários
# samba-tool user list

11.5 Listar grupos
# samba-tool group list

12. Criar o arquivo smb.conf para compartilhamento de arquivos
# vim /usr/local/samba/etc/smb.conf
Arquivo smb.conf
Reinicie o serviço do Samba para efeito do smb.conf

13. Ingressar máquinas Windows no domínio Samba4 como AD
Agora é necessário ingressar as máquinas Windows no domínio, segue os procedimentos abaixo:
Maneira 1:
Clica com botão direito o atalho Meu Computador depois em Propriedades
Na aba Nome do computador, clica no botão ID de rede
Irá abrir o Assistente para identificação da rede, clique em Avançar, marque a opção Este computador faz parte de uma rede corporativa e o utiliza para conectar-me a outros computadores no trabalho, clique em Avançar, marque a primeira opção, antes de prosseguir tenha em mente o usuário,senha e nome de domínio que será pedido, clique em Avançar, e digite os dados respectivamente.
Maneira 2:
Clica com botão direito o atalho Meu Computador depois em Propriedades
Na aba Nome do computador, clica no botão Alterar, digite o nome de domínio, e OK.
No final do processo irá aparecer Bem-vindo ao domínio e avisará que deverá reiniciar o computador.

13.1 Cliente Windows 7 no domínio Samba 4 como AD


14. Instalação do RSAT no Windows 7 para gerenciar o Samba4 como se fosse o AD

Uma forma de gerenciar as novas GPOs de Windows 7 é com a ferramenta RSAT Segue abaixo o link para download e o processo de instalação/ativação caso você ainda não o conheça.

14.1. Faça o download do RSAT para Windows 7 SP1 através do link Tools RSAT for Windows 7 , respeitando o idioma e arquitetura da sua versão de Windows.
14.2.Instale esse pacote no seu PC.
14.3. Clique no botão Iniciar do Windows 7, digite Ativar Recursos e selecione “Ativar ou desativar recursos do Windows” .
14.4.Marque as opções desejadas em “Ferramentas de Administração de Servidor Remoto”, como na figura abaixo (você pode aproveitar e habilitar outros recursos como o Cliente Telnet) e clique em OK:
Após a instalação do RSAT por padrão o atalho para Ferramentas Administrativas já deve aparecer no seu Menu Iniciar do Windows.

Referências
[1] https://wiki.samba.org/index.php/Setting_up_Samba_as_an_Active_Directory_Domain_Controller
[2] https://wiki.samba.org/index.php/Time_Synchronisation
[3] https://wiki.samba.org/index.php/Setting_up_a_BIND_DNS_Server
[4] https://wiki.samba.org/index.php/BIND9_DLZ_DNS_Back_End
[5] https://wiki.samba.org/index.php/Adding_users_with_samba_tool

Feito!

domingo, 11 de dezembro de 2016

Gerenciando endereço IP com PHPIPAM

O que é PHPIPAM e para que serve?

O termo IPAM significa Internet Protocol Address Management, ou seja, é um sistema para gerenciamento dos números IPs de uma determinada rede. Com essa ferramenta o administrador de redes pode planejar, acompanhar e gerenciar a distribuição dos números IPs das redes ou subredes que ele administra.


PHPIPAM é uma ferramenta web para gerenciamento de endereços IP, opensource sob licença GPLv3, desenvolvido em PHP como Back-end e HTML5, CSS3, JS/jQuery como Front-end.

Características do PHPIPAM
  • Divisão de Sub-Redes
  • Suporte a IPv6
  • Autenticação LDAP/OpenLDAP
  • Notificação por e-mail
  • Verificação de host (Ping Check)
  • Calculadora Ipv4 / Ipv6
  • Gerenciamento de Ipv4 / Ipv6 e VLANs

Depois de conhecer o PHPIPAM e pra que serve, podemos seguir os procedimentos de instalação e configuração do PHPIPAM em seu servidor GNU/Linux Debian e/ou CentOS.

Observação: Testado no GNU/Linux Debian 8 (Jessie) / CentOS 7 e versão do PHPIPAM é 1.2.1 até a data de publicação deste post.

Instalação dos pacotes pré-requisitos do PHPIPAM
No Debian:
Atualizando o repositório de pacotes
# apt-get update
Instalando os pacotes pré-requisitos necessários
# apt-get install apache2 php5 php5-cli php5-mysql php5-mcrypt php5-json php-gettext php-xml-parser php5-gmp php5-ldap php-pear mysql-server openssl
No CentOS:
Atualizando o repositório de pacotes
#yum update
Instalando os pacotes pré-requisitos necessários
#yum install http php php-gd php-mysql mysql-server-devel mysql-server
Reiniciar o serviço do Apache e MySQL
# service httpd start
# service mysqld start


Download do PHPIPAM
# mkdir /tmp/phpipam && cd /tmp/phpipam
# wget -c "https://sourceforge.net/projects/phpipam/files/latest/download" -O phpipam-1.2.1.tar
# tar -xvf phpipam-1.2.1.tar -C /var/www/html

Parâmetros de Configuração
Informar as informações do nome da base de dados, usuário e senha no arquivo config.php localizado no diretório raíz do Apache dentro do diretório phpipam.
Antes renomeia o config.dist.php para config.php
# cd /var/www/html/phpipam
# mv config.dist.php config.php

Editar o arquivo config.php com as informações solicitadas
# vim config.php
$db['host'] = "localhost";
$db['user'] = "phpipam";
$db['pass'] = "phpipam_senha";
$db['name'] = "phpipam";

Na linha 51: define('BASE', "/phpipam");

Configuração da base de dados
Criando o banco de dados phpipam no MySQL
# mysql -u root -p
Enter password: < digite a senha de root que foi definida na instalação do MySQL >
# mysql> create database phpipam character set utf8;

Criado o usuário phpipam com sua respectiva senha para o banco criado anteriormente
# mysql> GRANT ALL on phpipam.* to phpipam@localhost identified by ‘phpipam_senha’;
Query OK, 0 rows affected (0.00 sec)
# mysql> quit
Bye

Importação da base SCHEMA.sql
# mysql -u phpipam -p
Enter password: < digite a senha definida para phpipam, a mesma colocada no arquivo config.php >
# mysql> use phpipam;
# mysql> source /var/www/html/phpipam/db/SCHEMA.sql;
# mysql> quit
Bye

Configuração do arquivo .htaccess
# vim /var/www/html/phpipam/.htaccess
Descomentar a linha e adicionar /phpipam como segue
RewriteBase /phpipam/

Criando VirtualHost no Apache
# vim /etc/apache2/sites-available/phpipam.conf

Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
allow from all

Habilitar o VirtualHost criado anteriormente
# a2ensite phpipam
Habilitar o módulo ReWrite do Apache
# a2enmod rewrite
Reload do Apache
# service apache2 reload
Acesse no browser http://IPSERVIDOR/phpipam

No primeiro acesso o password default para o admin é ipamadmin que depois é solicitado a troca do password.


Referências
http://phpipam.net/documents/installation/
Feito!