anúncios

sábado, 15 de julho de 2017

Guia prático GIT

O que é Git ?

Git é um sistema de controle de versão distribuído, desenvolvido por Linus Torvalds para o Kernel Linux, tem sido utilizado em diversos projetos pessoais e/ou por uma equipe de desenvolvedores.
Git tem ser tornado o melhor sistema de versionamento utilizado em projetos de software.
Depois de conhecer o Git, podemos instalar-lo no SO que usa, verificar a lista de comandos mais utilizadas do Git e praticá-lo.

Frontend do Git: Github, Bitbucket, Gitlab

Download do Git
Git Bash for Windows

No Linux
Debian: # apt-get install git-core

CentOS: # yum install git

Configurações

O local das configurações do Git são armazenadas no diretório de usuário do Sistema Operacional no arquivo .gitconfig
Ex: Windows: C:\Users\Reginaldo\.gitconfig e Linux: /home/reginaldo/.gitconfig

As informações armazenadas no comando seguinte são armazenadas no arquivo mencionado acima.
Setar usuário: git config --global user.name "Reginaldo"
Setar e-mail: git config --global user.email "usuario@dominio.com"
Setar editor: git config --global core.editor vim
Setar ferramenta de merge: git config --global merge.tool vimdiff
Setar arquivos a serem ignorados: git config --global core.excludesfile ~/.gitignore

Lista de comandos mais utilizados
git init : usado para iniciar um repositório local do git(Esse comando criar um diretório .git com vários arquivos de configuração).

git add ou git add . : Esse comando adiciona arquivos ao index, isso prepara os arquivos para um novo commit.
A diferença de um para outro é que o git add . adiciona todos os arquivos na index e o outro é individual.

git commit -m "comentário" : Adiciona uma mensagem ao commit do arquivo adicionado.

git remote add origin : Esse comando vincula o alias origin a um repositório remoto.

git push origin master : Esse comando enviar os arquivo que estão no estagio HEAD (arquivos comitados) para o servidor remoto.
No comando acima você deve ter notado ORIGIN e o MASTER, o origin é um alias para o repositório remoto ex: origin = https://github.com/user/repositorio.git e master é um alias para o branch local Eex: master = workdir/repositorio.

git pull ou git pull origin master : Esse comando obtém os atualizações do repositório remoto para o branch master ou um branch especifico. você deve usa-lo sempre antes de começar a alterar os arquivo para não ter conflito com a versão que está no repositório remoto.

git clone : Esse comando cria uma cópia no diretório atual do repositório local ou remoto.

git checkout -b : Esse comando cria uma nova branch com um nome especifico com ele você também pode navegar entre os branchs (Ex: git checkout master para voltar ao master). Você pode criar quantos branchs quiser e depois junta-los criando um merge.

git remote show origin : Esse comando lista a url do alias origin do repositório remoto.

git remote add origin (url) : Esse comando adiciona um novo repositório remoto ao alias origin.

git remote set-url origin (nova url) : Esse comando muda a url atual do alias origin para um novo repositório remoto.

git log --decorate --graph --oneline : Esse comando exibi um log detalhado e colorido com os commit realizados e o status das branchs.

git merge nomedobranch : Como o nome já sugere ese comando faz a junção de um branch em outro branch selecionado.

git checkout hashdocommit : Esse comando da um rollback para o commit especificado.

git reset –hard HEAD~1 : Um dos n comandos usados para revert um commit, similar ao rollback no svn.

git branch -d nomebranch : Esse comando deleta um branch local.

git push origin :nomebranch : Esse comando deleta um branch remoto.

git blame [caminho-arquivo-projeto] : Esse comando exibe a última modificação de quem escreveu.

git bisect start [--term-{old,good}= --term-{new,bad}=] : Esse comando pesquisa o commit que introduziu o bug.

Atualização do fork com o repositório oficial
git remote add upstream < end-oficial >: Adiciona a url do repositório oficial junto ao seu fork no repositório local

git fetch upstream: Atualiza o seu fork com o repositório oficial

git merge upstream/master master: Aplica o merge do fork com o oficial

Considerações finais
Caso ainda não tenha conta no Github ou Bitbucket ou Gitlab, cria uma conta, um repositório e os commits dos arquivos correspondente ao seu projeto. É bom ressaltar que esses citados são frontend do Git para gerenciar os versionamentos de arquivos do projetos pela interface web. Como o Git é um sistema de controle de versão distribuído, pode-se usar os protocolos SSH ou FTP ou HTTP como servidor que ficarão os arquivos do projeto.

Referência
https://git-scm.com/book/pt-br/v2
Feito!

domingo, 21 de maio de 2017

Configurando ambiente de desenvolvimento PHP com framework Laravel

O que é Laravel?

Laravel é um framework PHP criado por Taylor Otwell. Laravel foi lançado em 09 de Junho de 2011.

O Laravel permite que se mantenha o foco em um projeto, minimizando a quantidade de código necessário para uma dada tarefa.

Laravel foi desenvolvido sobre o paradigma da programação Orientada a Objetos sob o padrão de arquitetura de software MVC.

Depois de conhecer o Laravel e para que serve, podemos seguir os procedimentos de configuração no ambiente de desenvolvimento PHP com Laravel na distribuição Linux Debian e/ou CentOS/RHEL/Fedora.

Instalação dos pré-requisitos

Antes é necessário instalar o servidor Apache ou Nginx, PHP e SGBD MySQL ou PostgreSQL. No presente howto será instalado o Apache, PHP e SGBD MySQL/MariaDB.

Requerimentos do Laravel
  • PHP >= 5.6.4
  • OpenSSL PHP Extension
  • PDO PHP Extension
  • Mbstring PHP Extension
  • Tokenizer PHP Extension
Caso não tenha o Apache, SGBD MySQL e PHP instalado, segue o howto Configurando ambiente PHP 7 no Debian e CentOS , se caso já tiver, vá para a próxima etapa.

Instalando os requerimentos
Mbstring PHP Extension
Debian:
PHP 5.6 # apt-get install php5-mbstring
PHP 7 # apt-get install php7.0-mbstring

CentOS:
PHP 5.6 # yum install php56w-mbstring
PHP 7 #yum install php7-mbstring

Tokenizer PHP Extension
Debian: #apt-get install php-tokenizer
XML PHP Extension
Debian: #apt-get install php-xml

Instalando o Composer
Debian:
# apt-get install curl

CentOS:
# yum install curl

Download do Composer
$ curl -sS https://getcomposer.org/installer | php
Setar permissão de execução
$ chmod +x composer.phar Mover para o diretório local
# mv composer.phar /usr/local/bin/composer
Atualizar o Composer
# composer self-update

Modos de instalação do Laravel
Escolha um dos modos de sua preferência

1. Global
$ composer global require "laravel/installer"
Depois de instalado, execute o comando laravel new projeto

2. Create-projet
No diretório raiz do servidor web (Apache ou Nginx)
$ composer create-project --prefer-dist laravel/laravel projeto

Servidor PHP embutido
$ php artisan serve
Irá exibir server at http://localhost:8000
Abre no browser e irá aparecer a página de boas vindas default do Laravel.
Isso se o projeto não tiver no diretório raiz do servidor web (Apache, Nginx)
Caso queira executar o projeto no servidor web, colocar o projeto no diretório raiz do servidor web e startar o serviço do Apache ou Ngninx, por fim acessar no browser http://localhost/projeto

Referências
https://laravel.com/docs/5.4
Feito!

sábado, 13 de maio de 2017

Configurando ambiente de desenvolvimento PHP com framework CodeIgniter

O que é CodeIgniter?

CodeIgniter é um framework PHP. A primeira versão pública do CodeIgniter foi lançada em 28 de fevereiro de 2006.

O CodeIgniter permite que se mantenha o foco em um projeto, minimizando a quantidade de código necessário para uma dada tarefa.

CodeIgniter foi desenvolvido sobre o paradigma da programação Orientada a Objetos sob o padrão de arquitetura de software MVC, mas também já dá suporte à metodologia HMVC, um nível hierárquico acima, absorvendo cada tríade MVC, tornando-a modular e, até certo ponto, independente das demais. Por ser mais recente e não nativo do CodeIgniter, o HMVC exige o download de alguns arquivos e a criação do diretório Modules para que funcione corretamente.

Depois de conhecer o CodeIgniter e para que serve, podemos seguir os procedimentos de configuração no ambiente de desenvolvimento PHP com CodeIgniter na distribuição Linux Debian e/ou CentOS/RHEL/Fedora.

Observação: A versão atual estável do CodeIgniter é 3.1.4 até a data de publicação deste post.

Instalação dos pré-requisitos

Antes é necessário instalar o servidor Apache ou Nginx, PHP e SGBD MySQL ou PostgreSQL. No presente howto será instalado o Apache, PHP e SGBD MySQL/MariaDB.

Debian: # apt-get install git-all
CentOS: #yum install git-all
Windows: Instale o Git Bash Git Bash
Se ainda não tem o ambiente PHP 7 no Windows, clique no link XAMPP e escolha o Setup Xampp com a versão do PHP 7. Faça o download e instale como qualquer software do Windows.
Se ainda não tem o ambiente PHP 7 no Debian ou CentOS, clique no link abaixo, caso já tenha ambiente PHP configurado, vá direto no próximo item do Howto.
Configurando ambiente PHP 7 no Debian e CentOS

Procedimentos de Configuração CodeIgniter
Substitua pelo seu usuário/grupo
No Linux:
# chown -R reginaldo:reginaldo /var/www/html/
$ cd /var/www/html
$ git clone "https://github.com/bcit-ci/CodeIgniter.git"
$ mv CodeIgniter/ projeto

No Windows:
Abre o Git Bash e acesse até o diretório c:/xampp/htdocs.
Considerando que fez a instalação default do XAMPP.
Execute: git clone "https://github.com/bcit-ci/CodeIgniter.git"
Move o nome default para o nome do projeto mv CodeIgniter/ projeto

NOTA: Remover o diretório oculto .git/ para não conflitar com as alterações feitas, pois esse não será versionado com o repositório do CodeIgniter, apenas no repositório do seu projeto.
$ rm -rf .git

Se for ambiente local: http://localhost/projeto
Caso seja ambiente na intranet: http://IPSERVIDOR/projeto
Se exibir a página default do CodeIgniter, como no screenshot, está correto.

Referências:
https://www.codeigniter.com/user_guide/
Feito!

segunda-feira, 9 de janeiro de 2017

Configurando servidor web Nginx integrado com PHP

Em servidores web, o mais comum ser utilizado é o Apache, porém existe outro servidor web bastante conhecido e com excelente desempenho de performance. O Nginx.

O presente howto explicará os procedimentos de instalação e configuração do servidor web Nginx integrado com PHP na distro Debian 8 e CentOS 7.

No Debian 8
# apt-get update
# apt-get install nginx php5-fpm php5 php5-mysql php5-mcrypt php5-gd php5-mysql mysql-server


No CentOS 7
# yum install epel-release
# yum update
# yum -y install nginx php php-gd php-mysql mysql-server


Startar o serviço Nginx
# service nginx start

Habilitar no boot
# systemctl enable nginx

O diretório root padrão do Nginx é /usr/share/nginx/www , mas vou alterar para deixar o mesmo diretório root do Apache, no caso /var/www/html

# mkdir -p /var/www/html

Ajustes de configuração para Nginx # vim /etc/php5/fpm/php.ini
Procure a linha cgi.fix_pathinfo=1 e troque 1 por 0
cgi.fix_pathinfo=0
# mv /etc/nginx/sites-available/default /etc/nginx/sites-available/default.orig

Se quiser ativar o SSL no Ngnix, precisará gerar o certificado auto-assinado e a chave.
Segue os procedimentos:
Criar certificados SSL auto-assinados
No Debian
# apt-get install openssl ca-certificates
No CentOS
# yum install openssl
Criar os diretórios para o certificado e a chave
# mkdir /etc/ssl/nginx/certs
# mkdir /etc/ssl/nginx/private


Criando os certificados auto-assinados
#openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/nginx/private/serverwww.key -out /etc/ssl/nginx/certs/serverwww.crt

Ajuste de permissão
chmod 600 /etc/ssl/nginx/private/serverwww.key
chmod 600 /etc/ssl/nginx/certs/serverwww.crt


Backup do arquivo default de configuração
# mv /etc/nginx/sites-available/default /etc/nginx/sites-available/default.orig
Criar o arquivo default novo de configuração
# vim /etc/nginx/sites-available/default
server {
  listen 80;
  listen 443 ssl;
  ssl_certificate /etc/ssl/nginx/certs/serverwww.crt;
  ssl_certificate_key /etc/ssl/nginx/private/serverwww.key;

  ssl_session_cache shared:SSL:10m;
  ssl_session_timeout 5m;

  ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 
EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4
EECDH EDH+aRSA RC4 !EXPORT !aNULL !eNULL !LOW !3DES
!MD5 !EXP !PSK !SRP !DSS"; ssl_prefer_server_ciphers on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #root /usr/share/nginx/www; root /var/www/html; index index.php index.html index.htm; server_name www; location / { try_files $uri $uri/ /index.html; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { #root /usr/share/nginx/www; root /var/www/html; } ### Redirects e rewrites # Remove barras no final do endereço rewrite ^/(.*)/$ /$1 permanent; # Redirectiona antigas requisições para wp-contents rewrite ^/wp-content/.*/(.*)$ /$1/images/$2 permanent; ### Locations location ~* \.(js|css)$ { # Configurações para JavaScripts e CSS gzip_static on; # Compressão GZIP ativada expires 1w; # Browser cache de 1 semana } location ~* \.(jpg|jpeg|png|gif|ico)$ { # Configurações para imagens gzip_static on; # Compressão GZIP ativada expires 2w; # Browser cache de 2 semana } # pass the PHP scripts to FastCGI server listening on the php-fpm socket location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
Crie um arquivo info.php no diretório root configurado
< ?php
 phpinfo();
 ? >
Reinicie o serviço php5-fpm e Nginx
# /etc/init.d/php5-fpm restart
# /etc/init.d/nginx restart


Acesse no browser: http://IPSERVIDOR/info.php ou https://IPSERVIDOR/info.php
Feito!

quinta-feira, 5 de janeiro de 2017

Configurando OSSN na sua Intranet ou VPS

O que é OSSN?

OSSN é uma rede social desenvolvida em PHP com os mesmos recursos do Facebook. Pode ser usada como rede social na Intranet ou VPS, sendo apenas por funcionários da empresa, tornando uma rede social corporativa.

Depois de conhecer o OSSN, podemos instalar e configurar no seu servidor GNU/Linux Debian 8 na Intranet ou VPS.

1. Instalação dos pré-requisitos do OSSN
1.1 Instalação do Apache, PHP e MySQL
PHP 5.6
# apt-get install apache2 php5 php5-cli mysql-server php5-curl php5-gd php5-mcrypt php5-mysql mysql-server

PHP 7
No Debian 8.x
Adicionar no arquivo /etc/apt/sources.list as linhas abaixo
# echo -e "deb http://packages.dotdeb.org jessie all\n deb-src http://packages.dotdeb.org jessie all" >> /etc/apt/sources.list
Adicionar a chave GPG
# wget https://www.dotdeb.org/dotdeb.gpg
# apt-key add dotdeb.gpg

# apt-get apache2 php7.0 libapache2-mod-php7.0 php7.0-gd php7.0-curl php7.0-mcrypt php7-mysql mysql-server

1.2 Ajuste no PHP
Editar o arquivo php.ini
# vim /etc/php5/apache2/php.ini
Deixe como abaixo
allow_url_fopen = On
file_uploads = On
upload_max_filesize = 32M
ESC +:x (salva e sai do editor Vim)

2. Criação do banco, usuário e permissão de privilégios
# mysql -u root -p
Enter password: < digite a senha de root que foi definida na instalação do MySQL >

Criando o banco ossn
mysql> create database ossndb character set utf8;
Query OK, 1 row affected (0.06 sec)

Criando o usuário para o banco ossn
mysql> create user 'ossn'@'localhost' IDENTIFIED BY 'ossn_senha';
Query OK, 0 rows affected (0.10 sec)

Criando permissão de privilégios no banco ossn para o usuário ossn
mysql> GRANT ALL PRIVILEGES ON ossn.* TO ossn@localhost WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye


2.1 Download e configuração do OSSN
# mkdir /opt/ossn && cd /opt/ossn
# wget -c "https://www.opensource-socialnetwork.org/downloads/ossn-v4.3.1-1480759958.zip" -O ossn.zip
# unzip ossn.zip -d /var/www/html
# mkdir -p /var/www/ossn_data
# chown www-data:www-data -R /var/www/html/ossn/

3. Setup de instalação do OSSN
Acesse no browser http://IPouDOMINIO/ossn
Preenche os dados solicitados correspondente ao banco de dados e por fim os dados na conta de administrador.
PS: Pode ser instalado na raiz ao invés do /ossn

4. Certificado SSL
4.1 Criar certificados SSL auto-assinados
Caso queira acessar com HTTPS é necessário gerar o certificado SSL auto-assinado.
# apt-get install openssl ca-certificates

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

4.1 Ajuste de permissão
# chmod 600 /etc/ssl/private/ossn.key
# chmod 600 /etc/ssl/certs/ossn.crt


5. Criando VirtualHost para OSSN
# cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/ossn.conf
# vim /etc/apache2/sites-available/ossn.conf
Altere as linhas correspondentes ao certificado gerado por openSSL
  # Caminhos para os dados de certificado
  SSLCertificateFile /etc/ssl/certs/ossn.crt
  SSLCertificateKeyFile /etc/ssl/private/ossn.key
ESC +:x (salva e sai do editor Vim)

5.1 Habilitar o VirtualHost
# a2ensite ossn.conf

5.2 Habilita SSL
# a2enmod rewrite ssl

5.3 Reinicia o Apache
# service apache2 restart

Após finalizar, acesse via https://IPouDOMINIO/ossn ou caso instalou diretamente na raíz sem /ossn https://IPouDOMINIO
Crie uma conta da mesma forma como o Facebook, que enviará o link de ativação no e-mail fornecido na criação da conta de perfil.
Acesso de administração do OSSN: https://IPouDOMINIO/ossn/administrator
Use a conta que definiu na última etapa de instalação para a conta de admin com a respectiva senha.
Feito!

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!