Skip to content

Palestras sobre Zabbix e Puppet na Expotec 2016

logo-expotec
Bom dia!
 
Quem puder participar da Expotec 2016 em João Pessoa-PB http://www.expotec.org.br/agenda.html poderá assistir 3 palestras com membros da comunidade Zabbix-BR e ainda participar de um “bate papo” muito bom.
Abraço e fique com Deus.

Instalação e configuração do Taiga no Ubuntu Server 16.04/14.04

Informações Gerais

O Taiga é uma plataforma de gerenciamento de projetos para desenvolvedores ágeis, designers e gerentes de projeto que querem uma bela ferramenta que torna o trabalho verdadeiramente agradável.

Mais informações sobre o Taiga podem ser obtidas nas URLs abaixo:

http://taiga.pm

http://taiga.io 

Neste tutorial foi utilizada uma máquina virtual que executa o Ubuntu Server 16.04 ou 14.04 64 bits e o idioma do S.O é inglês (UTF8-US). O endereço do servidor no DNS interno é server.domain.com.br.

Instalando as dependências do Taiga

Crie o usuário taiga e acesse o diretório dele.

sudo adduser taiga
sudo addgroup admin
sudo adduser taiga admin
su taiga
cd /home/taiga

OBS.: Defina uma senha para o usuário Taiga e lembre-se dela para adicionar num arquivo de configuração mais adiante.

Para instalar o Taiga e as dependências foram executados os comandos abaixo.

sudo apt-get install -y build-essential binutils-doc autoconf flex bison libjpeg-dev libfreetype6-dev \
zlib1g-dev libzmq3-dev libgdbm-dev libncurses5-dev automake libtool libffi-dev curl git tmux gettext \
curl openssh-server ca-certificates postfix nginx python3 python3-pip python-dev python3-dev \
python-pip virtualenvwrapper libxml2-dev libxslt-dev libxslt1-dev python-lxml python-virtualenv \
openssl

Instalando e configurando o PostgreSQL

Antes de iniciar a instalação do Taiga, instale o PostgreSQL 9.5 com os comandos abaixo.

No Ubuntu 16.04:

sudo echo "deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main" > /etc/apt/sources.list.d/pgdg.list

No Ubuntu 14.04:

sudo echo "deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main" > /etc/apt/sources.list.d/pgdg.list

Nas duas versões do Ubuntu:

sudo wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get -y install postgresql-9.5 postgresql-contrib-9.5 postgresql-doc-9.5 postgresql-server-dev-9.5

Edite o arquivo /etc/postgresql/9.5/main/pg_hba.conf e configure o arquivo como mostrado abaixo.

Antes:

local     all       postgres      peer 
local     all       all          peer 
host     all      127.0.0.1/32  md5 
host     all      ::1/128           md5
 Depois:

local     all       postgres         trust 
local     all       all             trust 
host    all       127.0.0.1/32     trust 
host     all      ::1/128               trust

Outro arquivo que precisa ser editado é o /etc/postgresql/9.5/main/postgresql.conf conforme mostrado abaixo.

Antes:

#listen_addresses = 'localhost'
port = 5432

Depois:

listen_addresses = 'localhost'
port = 5432

Depois de alterar estes arquivos é preciso reiniciar o PostgreSQL para aplicar as configurações realizadas. Faça isso usando o comando abaixo.

sudo service postgresql restart

Crie o banco de dados e o usuário do banco a ser utilizado pelo Taiga.

sudo -u postgres createuser -a -d -E -P taiga
sudo -u postgres createdb taiga -O taiga

OBS.: Defina uma senha para o usuário Taiga. Ela pode ser diferente da senha do usuário taiga do sistema operacional. Lembre-se dela para adicionar num arquivo de configuração mais adiante.

Instalando e Configurando o Taiga-Back

Execute os comandos abaixo para criar o ambiente a ser usado na instalação e funcionamento do taiga-back.

source "/usr/share/virtualenvwrapper/virtualenvwrapper.sh"
sudo mkdir /opt/virtual_env/
export WORKON_HOME="/opt/virtual_env/"
sudo chown -R taiga:taiga /opt/virtual_env/

Baixe e instale o taiga-back com os comandos abaixo.

cd /home/taiga
git clone https://github.com/taigaio/taiga-back.git taiga-back
cd taiga-back
git checkout stable

No Ubuntu 16.04:

mkvirtualenv -p /usr/bin/python3.5 taiga
pip install -r requirements.txt

No Ubuntu 14.04:

mkvirtualenv -p /usr/bin/python3.4 taiga
pip install -r requirements.txt

Popule o banco de dados do taiga-back.

python manage.py migrate --noinput
python manage.py loaddata initial_user
python manage.py loaddata initial_project_templates
python manage.py loaddata initial_role
python manage.py compilemessages
python manage.py collectstatic --noinput

Crie o arquivo de configuração /home/taiga/taiga-back/settings/local.py com o conteúdo abaixo.

from .common import *

MEDIA_URL = "https://server.domain.com.br/media/"
STATIC_URL = "https://server.domain.com.br/static/"
ADMIN_MEDIA_PREFIX = "https://server.domain.com.br/static/admin/"
SITES["front"]["scheme"] = "https"
SITES["front"]["domain"] = "server.domain.com.br"

DATABASES = {
 'default': {
 'ENGINE': 'django.db.backends.postgresql',
 'NAME': 'taiga',
 'USER': 'taiga',
 'PASSWORD': 'PASSWORD_DB',
 'HOST': 'localhost',
 'PORT': '5432',
 }
}
SECRET_KEY = "taiga"

DEBUG = False
TEMPLATE_DEBUG = False
PUBLIC_REGISTER_ENABLED = True

ADMINS = (
 ("Admin", "yourlogin@domain.com.br"),
)
DEFAULT_FROM_EMAIL = "taiga@server.domain.com.br"
SERVER_EMAIL = DEFAULT_FROM_EMAIL

# Uncomment and populate with proper connection parameters
# for enable email sending. EMAIL_HOST_USER should end by @domain.tld
#EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
#EMAIL_USE_TLS = False
#EMAIL_HOST = "localhost"
#EMAIL_HOST_USER = "taiga"
#EMAIL_HOST_PASSWORD = "PASSWORD_S.O"
#EMAIL_PORT = 25

# Uncomment and populate with proper connection parameters
# for enable github login/singin.
#GITHUB_API_CLIENT_ID = "yourgithubclientid"
#GITHUB_API_CLIENT_SECRET = "yourgithubclientsecret"

Instalando e Configurando o Taiga-Frontend (interface web)

Execute os comandos abaixo para instalar a interface web do Taiga.

cd /home/taiga
git clone https://github.com/taigaio/taiga-front-dist.git taiga-front-dist
cd taiga-front-dist
git checkout stable

Crie o arquivo /home/taiga/taiga-front-dist/dist/conf.json com o conteúdo abaixo.

{
 "api": "https://server.domain.com.br/api/v1/",
 "eventsUrl": null,
 "eventsMaxMissedHeartbeats": 5,
 "eventsHeartbeatIntervalTime": 60000,
 "debug": false,
 "debugInfo": false,
 "defaultLanguage": "en",
 "themes": ["taiga"],
 "defaultTheme": "taiga",
 "publicRegisterEnabled": true,
 "feedbackEnabled": true,
 "privacyPolicyUrl": null,
 "termsOfServiceUrl": null,
 "maxUploadFileSize": null,
 "contribPlugins": []
}

Configurando o serviço Circus

Execute os comandos abaixo para instalar o circus.

cd /home/taiga
sudo pip2 install circus
mkdir /home/taiga/conf/ /home/taiga/logs/

Crie o arquivo /home/taiga/conf/circus.ini com o seguinte conteúdo.

[circus]
check_delay = 5
endpoint = tcp://127.0.0.1:5555
pubsub_endpoint = tcp://127.0.0.1:5556
statsd = true

[watcher:taiga]
working_dir = /home/taiga/taiga-back
cmd = gunicorn
args = -w 3 -t 60 --pythonpath=. -b 127.0.0.1:8001 taiga.wsgi
uid = taiga
numprocesses = 1
autostart = true
send_hup = true
stdout_stream.class = FileStream
stdout_stream.filename = /home/taiga/logs/gunicorn.stdout.log
stdout_stream.max_bytes = 10485760
stdout_stream.backup_count = 4
stderr_stream.class = FileStream
stderr_stream.filename = /home/taiga/logs/gunicorn.stderr.log
stderr_stream.max_bytes = 10485760
stderr_stream.backup_count = 4

[env:taiga]
PATH = /opt/virtual_env/taiga/bin:$PATH
TERM=rxvt-256color
SHELL=/bin/bash
USER=taiga
LANG=en_US.UTF-8
HOME=/home/taiga
#No Ubuntu 16.04
PYTHONPATH=/opt/virtual_env/taiga/lib/python3.5/site-packages
#No Ubuntu 14.04 
#PYTHONPATH=/opt/virtual_env/taiga/lib/python3.4/site-packages

No Ubuntu 16.04

Crie o arquivo /lib/systemd/system/circus.service com o seguinte conteúdo.

[Unit]
Description=Job that runs the circus daemon
After=syslog.target network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/circusd /home/taiga/conf/circus.ini

[Install]
WantedBy=multi-user.target

No Ubuntu 14.04:

Crie o arquivo /etc/init/circus.conf com o seguinte conteúdo.

start on filesystem and net-device-up IFACE=lo
stop on runlevel [016]

respawn
exec /usr/local/bin/circusd /home/taiga/conf/circus.ini

Inicie o serviço circus com o serguinte comando.

sudo service circus start

Configurando o serviço Nginx

Crie a chave de criptografia 4096 bits para ser usado no SSL.

cd /etc/ssl
sudo openssl dhparam -out dhparam.pem 4096

OBS.: A execução do comando acima pode demorar algumas horas ou até um dia inteiro. O jeito é ter muuuuuita paciência.

Para a execução deste tutorial, foi criado um certificado auto-assinado com validade de 10 anos para ser usado pelo Taiga. Abaixo estão os comandos.

sudo mkdir -p /etc/ssl/certs
sudo openssl genrsa -des3 -out /etc/ssl/certs/server.key 2048 
sudo openssl req -new -key /etc/ssl/certs/server.key -out /etc/ssl/certs/server.csr 
sudo cp -v /etc/ssl/certs/server.{key,original} 
sudo openssl rsa -in /etc/ssl/certs/server.original -out /etc/ssl/certs/server.key 
sudo rm -v /etc/ssl/certs/server.original 
sudo openssl x509 -req -days 3650 -in /etc/ssl/certs/server.csr -signkey /etc/ssl/certs/server.key -out /etc/ssl/certs/server.crt
sudo rm -v /etc/ssl/certs/server.csr

Crie o arquivo /etc/nginx/sites-available/taiga com o seguinte conteúdo.

server {
 listen 80 default_server;
 server_name server.domain.com.br;
 return 301 https://$server_name$request_uri;
}

server {
 listen 443 ssl default_server;
 server_name server.domain.com.br;

large_client_header_buffers 4 32k;
 client_max_body_size 50M;
 charset utf-8;

index index.html;

# Frontend
 location / {
 root /home/taiga/taiga-front-dist/dist/;
 try_files $uri $uri/ /index.html;
 }

# Backend
 location /api {
 proxy_set_header Host $http_host;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Scheme $scheme;
 proxy_set_header X-Forwarded-Proto $scheme;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 proxy_pass http://127.0.0.1:8001/api;
 proxy_redirect off;
 }

location /admin {
 proxy_set_header Host $http_host;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Scheme $scheme;
 proxy_set_header X-Forwarded-Proto $scheme;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 proxy_pass http://127.0.0.1:8001$request_uri;
 proxy_redirect off;
 }

# Static files
 location /static {
 alias /home/taiga/taiga-back/static;
 }

# Media files
 location /media {
 alias /home/taiga/taiga-back/media;
 }

add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
 add_header Public-Key-Pins 'pin-sha256="klO23nT2ehFDXCfx3eHTDRESMz3asj1muO+4aIdjiuY="; pin-sha256="633lt352PKRXbOwf4xSEa1M517scpD3l5f79xMD9r9Q="; max-age=2592000; includeSubDomains';

ssl on;


 ssl_certificate /etc/ssl/certs/server.crt;
 ssl_certificate_key /etc/ssl/certs/server.key;
#ssl_trusted_certificate /etc/ssl/certs/ca.crt;
 ssl_session_timeout 5m;
 ssl_protocols TLSv1.2;
 ssl_prefer_server_ciphers on;
 ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK';
 ssl_session_cache shared:SSL:10m;
 ssl_dhparam /etc/ssl/dhparam.pem;
 ssl_stapling on;
 ssl_stapling_verify on;
}

Remova o site padrão do nginx e habilite a configuração do site do taiga.

sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/taiga /etc/nginx/sites-enabled/taiga

Teste a configuração do nginx

sudo nginx -t

Se o resultado do comando anterior for igual ao que está abaixo, então a configuração está certa.

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Reinicie o serviço nginx.

sudo service nginx restart

O Taiga estará acessível na URL: https://server.domain.com.br. O login padrão é admin e a senha é 123123

taiga

Fonte:

https://taigaio.github.io/taiga-doc/dist/setup-production.html

 

Lançamento da versão 2.0.0 da Apostila sobre Puppet

apostila

Olá!

A equipe da Instruct produziu uma apostila sobre o básico do Puppet (usando a versão 3.x). A versão 1.0 desta apostila está aqui: http://instruct.com.br/lancamento-apostila-puppet-basico/

Desde Nov/2015, eu estava ajudando Miguel e Guto (ambos da Instruct) a atualizar o conteúdo da apostila para dar suporte ao Puppet 4.x.

Domingo passado (19/06/2016), Miguel (dono da Instruct) cedeu a apostila para a comunidade Puppet-BR e me deu permissão para liderar as edições. Agora a apostila pertence a comunidade e ela servirá para ajudar os novos usuários de Puppet.

Já concluí as edições iniciais e estou lançando a versão 2.0.0 da apostila, que recebeu novos capítulos e teve o conteúdo completamente revisado.

Vocês podem baixar o PDF final aqui: https://github.com/puppet-br/apostila-puppet/releases

Quem quiser ajudar na edição e atualização da apostila, pode ter acesso ao código fonte e instruções aqui: https://github.com/puppet-br/apostila-puppet

Bons estudos!

Abraço e fica com Deus. 🙂

Instalando o PuppetDB e integrando ao PuppetServer e ao PuppetExplorer e PuppetBoard no Ubuntu Server 14.04/16.04, Debian 8, Red Hat 6 e 7 e CentOS 6 e 7

Aviso:

Este tutorial foi escrito para ensinar a montar um servidor Puppet usando os pacotes Puppet-Server e PuppetDB (da PuppetLabs), PuppetExplorer (da Spotify) e PuppetBoard. Este ambiente usa pacotes do Puppet 4.x.

Se você ainda não sabe o que é Puppet, como funciona e para que serve, sugiro parar por aqui e começar a estudar os links que estão nesta página: http://blog.aeciopires.com/primeiros-passos-com-o-puppet

 

Os tutoriais de instalação do Puppet-Server podem ser encontrados nas páginas abaixo. A leitura e implementação deles é requisito para a continuação deste tutorial.

No Debian 8 e Ubuntu Server 14.04/16.04:
http://blog.aeciopires.com/configurando-um-ambiente-puppet

No CentOS 6/7 e Red Hat 6/7:
http://blog.aeciopires.com/configurando-um-ambiente-puppet-2

Instalando o PostgreSQL no PuppetServer

 

Antes de iniciar a instalação do PuppetDB, instale o PostgreSQL 9.5 com os comandos abaixo.

No CentOS/RedHat 6 64 bits:

rpm -ivh --force https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-6-x86_64/pgdg-redhat95-9.5-2.noarch.rpm
yum -y install postgresql95-server postgresql95-contrib
service postgresql-9.5 initdb
chkconfig postgresql-9.5 on 

No CentOS/RedHat 7 64 bits:

rpm -ivh --force https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-7-x86_64/pgdg-redhat95-9.5-2.noarch.rpm
yum -y install postgresql95-server postgresql95-contrib
/usr/pgsql-9.5/bin/postgresql95-setup initdb
service postgresql-9.5 start
chkconfig postgresql-9.5 on 

No Debian 8:

su -
echo "deb http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main" > /etc/apt/sources.list.d/pgdg.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
apt-get update
apt-get -y install postgresql-9.5

No Ubuntu Server 14.04:

sudo su
echo "deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main" > /etc/apt/sources.list.d/pgdg.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
apt-get update
apt-get -y install postgresql-9.5

No Ubuntu Server 16.04:

echo "deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main" > /etc/apt/sources.list.d/pgdg.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
apt update
apt -y install postgresql-9.5

Edite o arquivo /etc/postgresql/9.5/main/pg_hba.conf (no Debian/Ubuntu) ou /var/lib/pgsql/9.5/data/pg_hba.conf (no CentOS/Red Hat) e configure o arquivo como mostrado abaixo.

Antes:

local     all       postgres      peer 
local     all       all          peer 
host     all      127.0.0.1/32  md5 
host     all      ::1/128           md5 

Depois:

local     all       postgres         trust 
local     all       all             trust 
host    all       127.0.0.1/32     trust 
host     all      ::1/128               trust 

 Outro arquivo que precisa ser editado é o /etc/postgresql/9.5/main/postgresql.conf (no Debian/Ubuntu) ou /var/lib/pgsql/9.5/data/postgresql.conf (no CentOS/Red Hat) conforme mostrado abaixo.

Antes:

#listen_addresses = 'localhost'
port = 5432

Depois:

listen_addresses = 'localhost'
port = 5432

 Depois de alterar estes arquivos é preciso reiniciar o PostgreSQL para aplicar as configurações realizadas. Faça isso usando o comando abaixo.

No Debian/Ubuntu:

service postgresql restart

No CentOS/Red Hat:

service postgresql-9.5 restart

Agora crie o banco de dados e usuário para o puppetdb com a sequencia de comandos abaixo.

su postgres
createdb puppetdb
createuser -a -d -E -P puppetdb
exit

Opcionalmente, a instalação do PostgreSQL e a criação do banco de dados, pode ser realizado usando o módulo Puppet puppetlabs-postgresql https://forge.puppetlabs.com/puppetlabs/postgresql.

Fonte:
https://www.postgresql.org/download/linux/ubuntu
https://www.postgresql.org/download/linux/debian
https://www.postgresql.org/download/linux/redhat
http://yum.postgresql.org/repopackages.php

Instalando o PuppetDB no PuppetServer

Assumindo que você já instalou o PuppetServer, o Puppet-Agent e o PostgreSQL usando os tutoriais e comandos indicados nas seções anteriores, instale o PuppetDB com o comando abaixo.

puppet resource package puppetdb ensure=latest

Fonte:
https://docs.puppet.com/puppetdb/4.1/install_from_packages.html

Configurando a integração do PuppetDB com PostgreSQL

No servidor PuppetServer, edite o arquivo /etc/puppetlabs/puppetdb/conf.d/database.ini e altere as seguinte linhas:

[database]
 classname = org.postgresql.Driver
 subprotocol = postgresql
 subname = //localhost:5432/puppetdb
 username = puppetdb
 password = SENHA-DO-USUARIO-PUPPETDB

 

OBS.: A porta padrão do PostgreSQL é 5432/TCP e ela foi configurada na seção anterior.

Agora edite o arquivo /etc/puppetlabs/puppetdb/conf.d/jetty.ini e altere os parâmetros abaixo para deixá-los com os valores mostrados em negrito.

[jetty]
 host = 0.0.0.0
 port = 8080
 ssl-host = 0.0.0.0
 ssl-port = 8081

Execute o comando abaixo para gerar os certificados a serem usados pelo PuppetDB e configurar o arquivo jetty.ini.

puppetdb ssl-setup

Reinicie o PuppetDB com o comando abaixo:

service puppetdb restart

Fonte:

https://docs.puppet.com/puppetdb/latest/configure.html

Configurando a integração do PuppetServer com o PuppetDB

Ainda no servidor PuppetServer, instale o pacote puppetdb-termini com o comando abaixo.

puppet resource package puppetdb-termini ensure=latest

Crie o arquivo /etc/puppetlabs/puppet/puppetdb.conf e adicione o seguinte conteúdo:

[main]
 server_urls = https://puppetserver.domain.com.br:8081

Edite o arquivo /etc/puppetlabs/puppet/puppet.conf e adicione o seguinte conteúdo na seção [master].

storeconfigs = true
storeconfigs_backend = puppetdb
reports = store,puppetdb
reportstore = /var/log/puppetlabs/puppet

Crie o arquivo /etc/puppetlabs/puppet/routes.yaml com o seguinte conteúdo:

---
 master:
   facts:
     terminus: puppetdb
     cache: yaml

Atribua as permissões corretas ao arquivo com o comando abaixo:

chown -R puppet:puppet `puppet config print confdir`

Reinicie o PuppetServer com o comando abaixo:

service puppetserver restart

Os arquivos de log do PuppetDB ficam em: /var/log/puppetlabs/puppetdb/

O PuppetDB ficará acessível em: http://puppetserver.domain.com.br:8080 ou https://puppetserver.domain.com.br:8081

perf-dash-large

OBS.: Se não conseguir acessar a interface web do PuppetDB, verifique se há algum firewall bloqueando a porta.

No CentOS/Red Hat 6, você pode desabilitar o firewall seguindo estas instruções: http://www.cyberciti.biz/faq/fedora-redhat-centos-5-6-disable-firewall

No CentOS/Red Hat 7, você pode desabilitar o firewall seguindo estas instruções: http://www.liquidweb.com/kb/how-to-stop-and-disable-firewalld-on-centos-7

Você também pode precisar desabilitar o SELinux no CentOS/RedHat. Siga estas instruções: http://www.revsys.com/writings/quicktips/turn-off-selinux.html ou http://aruljohn.com/info/centos-selinux/

Fonte:
https://docs.puppet.com/puppetdb/4.1/connect_puppet_master.html

Instalando o PuppetExplorer

Os módulos Puppet de instalação do PuppetExplorer e dependências podem ser instalados no Puppet-Server usando os comandos abaixo.

puppet module install puppetlabs-apache
puppet module install puppetlabs-apt
puppet module install spotify-puppetexplorer 

Agora edite o aquivo /etc/puppetlabs/code/environments/production/manifests/site.pp e adicione o seguinte conteúdo:

node puppetserver.domain.com.br {
   class {'::puppetexplorer':
     vhost_options => {
       rewrites  => [ { rewrite_rule => ['^/api/metrics/v1/mbeans/puppetlabs.puppetdb.query.population:type=default,name=(.*)$  https://puppetserver.domain.com.br:8081/api/metrics/v1/mbeans/puppetlabs.puppetdb.population:name=$1 [R=301,L]'] } ] }
     }
}

Agora execute o comando abaixo.

puppet agent -t

Ao final da instalação, o PuppetExplorer ficará acessível em: https://puppetserver.domain.com.br

events

OBS.: O módulo de instalação do PuppetExplorer foi declarado passando o recurso vhost_options, afim de corrigir um bug no PuppetExplorer devido a uma atualização realizada no PuppetDB. Veja o report em: https://github.com/spotify/puppetexplorer/issues/49 normalmente, o PuppetExplorer deveria ser instalado apenas usando a declaração abaixo no arquivo site.pp.

node puppetserver.domain.com.br {
   include puppetexplorer
 }

Fonte:
https://groups.google.com/forum/#!topic/puppet-users/VDywEgW2Y54
https://forge.puppet.com/spotify/puppetexplorer
https://github.com/spotify/puppetexplorer

Instalando o PuppetBoard

Se você não quiser usar o PuppetExplorer, pode usar o PuppetBoard.

Os módulos Puppet de instalação do PuppetBoard e dependẽncias podem ser instalados no Puppet-Server usando os comandos abaixo.

puppet module install puppetlabs-apache
puppet module install puppetlabs-apt
puppet module install puppet-puppetboard 

Agora edite o aquivo /etc/puppetlabs/code/environments/production/manifests/site.pp e adicione o seguinte conteúdo:

node puppetserver.domain.com.br {
   class {'apache': }
   # Configure Apache on this server
   class { 'apache::mod::wsgi': }
   # Configure Puppetboard
   class { 'puppetboard':
     manage_git        => 'latest',
     manage_virtualenv => 'latest',
     reports_count      => 50
   }
   # Configure Access Puppetboard
   class { 'puppetboard::apache::vhost':
   vhost_name => 'puppetserver.domain.com.br',
   port       => 443,
   ssl        => true,
   }
}

Agora execute o comando abaixo.

puppet agent -t

Ao final da instalação, o PuppetBoard ficará acessível em: https://puppetserver.domain.com.br

overview

 

É possível que você enfrente o problema abaixo na instalação do PuppetBoard no CentOS/Red Hat 7.

Erro:

Execution of '/usr/bin/rpm -e python-devel-2.7.5-34.el7.x86_64' returned 1: error: Failed dependencies:
python2-devel is needed by (installed) python-virtualenv-1.10.1-2.el7.noarch
Error: /Stage[main]/Python::Install/Package[python-dev]/ensure: change from 2.7.5-34.el7 to absent failed: Execution of '/usr/bin/rpm -e python-devel-2.7.5-34.el7.x86_64' returned 1: error: Failed dependencies:
python2-devel is needed by (installed) python-virtualenv-1.10.1-2.el7.noarch

Solução:

Edite o arquivo /etc/puppetlabs/code/environments/production/modules/python/manifests/install.pp. Altere todas as ocorrências de:

package { 'python-dev':
ensure => $dev_ensure,
name => $pythondev,
}

Para:

package { 'python-dev':
ensure => present,
#ensure => $dev_ensure,
name => $pythondev,
}

Depois execute:

puppet agent -t

Fonte:
https://forge.puppet.com/puppet/puppetboard

Configurando os Agentes Puppet

Em cada máquina que executa o Puppet-Agent, adicione no arquivo /etc/puppetlabs/puppet/puppet.conf o seguinte conteúdo:

[agent]
 report = true

Reinicie o Puppet-Agent com o comando abaixo:

service puppet restart

Opcional: instalando o PuppetBoard e PuppetExplorer através do projeto PCP

Alguns membros da comunidade Puppet-BR, desenvolveram o projeto PCP que facilita a criação de um servidor PuppetServer, PuppetDB com PuppetExplorer e PuppetBoard em uma VM gerenciada pelo Vagrant.

Para mais informações acesse: https://github.com/puppet-br/pcp

OBS.: O PCP não é recomendado para ser usado em ambientes de produção. É indicado apenas em ambientes de desenvolvimento e testes com Puppet.

Novidades sobre o curso “De A a Zabbix”

A_a_Zabbix

Olá!

Eu, André Déo e Adail Spinola, somos autores do livro “De A a Zabbix“.

Se você ainda não leu o livro ou deseja aprender mais sobre Zabbix (http://zabbix.com) pode participar de um curso presencial com um de nós.

Os cursos são presenciais realizados em datas e cidades diferentes, de acordo com a diponibilidade de cada autor (veja a ementa, preço e outras informações nos links abaixo).

Curso com Adail: http://spinola.net.br/blog/curso-de-a-a-zabbix/

Curso comigo: http://blog.aeciopires.com/curso-de-a-a-zabbix/

Curso com André: http://andredeo.blogspot.com.br/2016/05/curso-de-a-zabbix.html

Curso no CT- Novatec com um dos três autores: http://ctnovatec.com.br/cursos/trilha-redes-de-computadores/curso-monitoracao-de-redes-com-zabbix/

 

Os cursos são realizados com o mesmo padrão de qualidade que fez com que muitos leitores confiassem no que está escrito no livro, nos blogs, sites e slides, bem como no suporte cotidiano prestado por cada um de nós na comunidade Zabbix-BR (http://zabbixbrasil.org).

A ideia é extender a experiência escrita no livro, através de mais exemplos, exercícios, maiores detalhes e trocas de experiências.

Abraço e fica com Deus.

Primeiros passos com Docker

thumbnail2253

Olá!

Estou começando a dar os primeiros passos com o Docker e quero compartilhar os links que já estudei até aqui e que servem de bússola para quem quer começar a usá-lo também. Esta página será atualizada à medida que eu encontrar mais documentos relevantes.

O que é Docker? Por que usá-lo? Instalando o Docker:

Docker versus VmWare:

Documentos sobre Docker:

Slides:

Comunidade/Fórum Docker:

Livros

Meu repositório no Docker Hub: https://hub.docker.com/r/aeciopires/

Configurando o Grafana para funcionar sobre HTTPS

Captura de tela de 2016-05-26 17:19:23

Neste tutorial http://zabbixbrasil.org/?p=1674, eu mostrei como instalar o Grafana no Debian 8 e Ubuntu 16.04 (ambos 64 bits). Nesse mesmo tutorial mostrei como integrá-lo ao Zabbix.

 

Agora vou mostrar como configurar o Grafana para funcionar sobre HTTPS, usando um certificado auto-assinado.

Os comandos abaixo foram executados no Debian 8 e Ubuntu 16.04 (ambos 64 bits).

Criando um certificado auto-assinado

Primeiro crie uma chave privada RSA. Execute os comandos abaixo.

sudo apt-get -y install openssl
sudo mkdir /etc/certs
cd /etc/certs/
sudo openssl genrsa -des3 -out server.key 2048
sudo cp server.key server.key.org
sudo openssl rsa -in server.key.org -out server.key
sudo rm server.key.org

Defina uma senha para a chave.

Agora crie uma requisição de assinatura de certificado. Execute o comando abaixo.

openssl req -new -key server.key -out server.csr

Durante a execução do comando acima serão solicitados os dados do certificado e que serão exibidos no navegador do usuário. Veja o exemplo abaixo.

Country Name (2 letter code) [GB]:BR
State or Province Name (full name) [Berkshire]:Estado
Locality Name (eg, city) [Newbury]:Cidade
Organization Name (eg, company) [My Company Ltd]Minha empresa LTDA
Organizational Unit Name (eg, section) []:Meu setor de trabalho
Common Name (eg, your name or your server’s hostname) []:nomeservidor.empresa.com.br
Email Address []:email@empresa.com.br
Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Agora assine o certificado.

sudo openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt

Usando, o comando acima, você estará assinando o certificado com validade de 10 anos (aproximadamente 3650 dias). Se quiser mudar este tempo, altere a quantidade de dias no parâmetro -days.

Configurando o Grafana para funcionar sobre HTTPS

Quando o Grafana é instalado via pacote .deb, o arquivo de configuração fica em: /etc/grafana/grafana.ini.

Edite o arquivo /etc/grafana/grafana.ini e altere os parâmetro abaixo para ficar da seguinte maneira.

Antes:

;protocol = http
;http_port = 3000
;cert_file = 
;cert_key = 

Depois:

protocol = https

http_port = 443

cert_file = /etc/certs/server.crt

cert_key = /etc/certs/server.key

Agora é só reiniciar o Grafana.

sudo service grafana-server restart

O Grafana estará acessível na URL: https://ip-servidor

 

Fonte:

http://www.akadia.com/services/ssh_test_certificate.html

http://docs.grafana.org/installation/configuration/

Customizando o Glassfish 4 no Ubuntu 16.04

Hoje (10/05/2016), a versão do Glassfish Open Source Edition mais recente e recomendada para uso em produção é a 4.1.1, que pode ser obtida nesta página: https://glassfish.java.net/download.html

Para usar o Glassfish 4 é necessário instalar o Java 8. O Java 8 da Oracle pode ser obtido neste link http://www.oracle.com/technetwork/java/javase/downloads/index.html e instalado no Ubuntu seguindo este tutorial: http://www.webupd8.org/2012/09/install-oracle-java-8-in-ubuntu-via-ppa.html

O Glassfish padrão contém algumas vulnerabilidades de segurança e para minimizá-las é necessário customizá-lo. Os valores padrão do Glassfish estão nesta página https://docs.oracle.com/cd/E26576_01/doc.312/e24928/overview.htm#GSADG00695

Os manuais do Glassfish estão disponíveis nesta página: https://glassfish.java.net/documentation.html

Customizando o Glassfish

 

1- Foi obtido o Glassfish 4.1.1 acessando a página http://download.java.net/glassfish/4.1.1/release/glassfish-4.1.1.zip. Com isso foi baixado o arquivo glassfish-4.1.1.zip no diretório /home/aecio/Downloads.

2- Descompacte o arquivo glassfish-4.1.1.zip e altere o nome da pasta descompactada para glassfishv4.

cd /home/aecio/Downloads
unzip glassfish-4.1.1.zip
mv glassfish4/ glassfishv4

3- Algumas configurações de segurança são listadas nestas páginas:

https://glassfish.java.net/docs/4.0/security-guide.pdf

Hide Glassfish Server Information

https://community.oracle.com/thread/2362026?start=0&tstart=0

http://blog.eisele.net/2011/05/securing-your-glassfish-hardening-guide.html

https://dzone.com/articles/securing-your-glassfish

4- Mova o diretório glassfishv4 para o diretório /opt e aplique as permissões de acesso.

sudo mv /home/aecio/Downloads/glassfishv4 /opt
sudo chmod -R 700 /opt/glassfishv4
sudo chown -R root:root /opt/glassfishv4

5- Crie o arquivo /etc/init.d/glassfish com o seguinte conteúdo.

—————————- INICIO do /etc/init.d/glassfish ————————

#!/bin/bash
# chkconfig: 345 90 90
# description: glassfish (GLASSFISH) Web Server JAVA Aplication
#

### BEGIN INIT INFO
# Provides: glassfish
# Required-Start: $local_fs $network $syslog
# Should-Start: $remote_fs $named $time
# Required-Stop: $local_fs $network $syslog
# Should-Stop: $remote_fs $named
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: GLASSFISH
# Description: glassfish (GLASSFISH) Web Server JAVA Aplication
### END INIT INFO

#----------------------------------------------------
# informa se o usuario que estah rodando o comando eh root
isroot(){
MYUID=$(id | cut -d= -f2 | cut -d\( -f1)
[ $MYUID -eq 0 ] && echo YES || echo NO
}

#--------------------------------
getPID(){
PID=$(ps ax | pgrep -fl $GLASSFISHEXEC  | sed "s/^ *//" | cut --field=1 --delimiter=" ")
echo $PID > $PID_FILE
}

#--------------------------------
isRunning(){
local PID="$1"
[ -z "$PID" ] && return 1
ps -p $PID > /dev/null 2>&1 && return 0 || return 1
}

#--------------------------------
status(){
getPID

[ -f $PID_FILE ] || return 3
PID=$(cat $PID_FILE )

if [ -z "$PID" ]; then
   echo "[INFO] Glassfish is not running..." 
   return 1
fi

if isRunning $PID; then
   echo "[INFO] Glassfish is running: PID=$PID"
   return 0 
else
   echo "[INFO] Glassfish is not running..." 
   return 1
fi
}

#--------------------------------
stop(){

if [ ! -f $PID_FILE ]; then
   echo "[INFO] Glassfish is not running..."
   return 0
fi

PID=$(cat $PID_FILE )
[ -z "$PID" ] && return 0
if isRunning $PID ; then
   echo "[INFO] Stopping Glassfish..."
   kill -9 $PID
   sleep 2
   return 0
fi
}

#--------------------------------
start(){

if [ -f $PID_FILE ]; then
   PID=$(cat $PID_FILE )
   if [ -z "$PID" ]; then
      echo "[INFO] Starting Glassfish..."
      $GLASSFISH_ASADMIN start-domain
      getPID
      return 0
   fi

   if isRunning $PID; then
     echo "[INFO] Glassfish is already running. Use \"restart\""
     return 0
   else
     echo "[INFO] Starting Glassfish..."
     $GLASSFISH_ASADMIN start-domain
     getPID
     return 0
   fi
else
   echo "[INFO] Starting Glassfish..."
   $GLASSFISH_ASADMIN start-domain
   getPID
   return 0
fi
}

#--------------------------------
# MAIN
#--------------------------------

#----- Variaveis
GLASSFISHEXEC=glassfishv4
GLASSFISHDIR=/opt/glassfishv4
GLASSFISHBINDIR=/opt/glassfishv4/glassfish/bin
GLASSFISH_ASADMIN=$GLASSFISHBINDIR/asadmin
PID_FILE=/tmp/glassfish.pid


if [ $(isroot) = NO ] ; then
        echo "[ERROR] Voce deve ser root para executar este comando."
        echo "Execute o comando \"sudo $CMDLINE\""
        exit 4
fi

# Define usage string, used in more than one place.
usage="[INFO] Usage: $0 {start|stop|restart|status}"

# Check that we have one parameter: action
if [ $# -ne 1 ] ; then
  if [ $# -lt 1 -o "$1" = "" ] ; then
    echo "[ERROR] $0: action not specified"
  else
    echo "[ERROR] $0: too many parameters"
  fi
  echo "$usage"
  exit 2
fi
action="$1"



case $action in
start)
        start
        RETURN=$?
        ;;

stop)
        stop
        RETURN=$?
        ;;
restart)
        stop
        start
        RETURN=$?
        ;;

status)
        status
        RETURN=$?
        ;;
*)
        # If we don't recognize action, consider it an invalid argument.
        # If the standard adds actions we don't support, exit should be 3 for those.
        echo "[ERROR] $0: action \"$action\" not recognized"
        echo "$usage"
        exit 3
        ;;
esac
exit $RETURN

———————– FIM do /etc/init.d/glassfish ———————-

6- Dê permissão de execução ao script /etc/init.d/glassfish.

sudo chmod 755 /etc/init.d/glassfish
sudo chown root:root /etc/init.d/glassfish

7- Habilite a inicialização do Glassfish no boot do Sistema Operacional.

sudo update-rc.d -f glassfish defaults

8- Inicie o Glassfish com o comando abaixo.

sudo /etc/init.d/glassfish start

9- O log do Glassfish fica em: /opt/glassfishv4/glassfish/domains/domain1/logs/ A porta padrão do HTTP é 8080, a porta padrão do HTTPS  8181 e a porta padrão do console administrativo é 4848.

10- Por padrão, a primeira senha do usuário admin do Glassfishv4 eh vazia. Altere-a com os seguintes comandos.

sudo /opt/glassfishv4/glassfish/bin/asadmin --user admin --port 4848 change-admin-password
sudo /etc/init.d/glassfish restart

Para persistir a nova senha, execute o comando abaixo, informe o login admin e depois a nova senha.

sudo /opt/glassfishv4/glassfish/bin/asadmin login

11- Habilite o acesso remoto a interface web do Glassfish com o comando abaixo.

sudo /opt/glassfishv4/glassfish/bin/asadmin enable-secure-admin
sudo /etc/init.d/glassfish restart

12- Desabilite o uso dos protocolos SSLv2, SSLv3, TLSv1, TLSv1.1 e cifras fracas na porta HTTPS e do console administrativo com os comandos abaixo.

sudo /opt/glassfishv4/glassfish/bin/asadmin set server.network-config.protocols.protocol.http-listener-2.ssl.ssl2-enabled=false
sudo /opt/glassfishv4/glassfish/bin/asadmin set server.network-config.protocols.protocol.http-listener-2.ssl.ssl3-enabled=false
sudo /opt/glassfishv4/glassfish/bin/asadmin set configs.config.server-config.network-config.protocols.protocol.http-listener-2.ssl.tls-enabled=false
sudo /opt/glassfishv4/glassfish/bin/asadmin set configs.config.server-config.network-config.protocols.protocol.http-listener-2.ssl.tls11-enabled=false
sudo /opt/glassfishv4/glassfish/bin/asadmin set 'configs.config.server-config.network-config.protocols.protocol.http-listener-2.ssl.ssl3-tls-ciphers=+TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,+TLS_DHE_DSS_WITH_AES_128_CBC_SHA,+TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256,+TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256,+TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA,+TLS_ECDH_RSA_WITH_AES_128_CBC_SHA,+TLS_ECDH_anon_WITH_AES_128_CBC_SHA,+TLS_ECDH_ECDSA_WITH_NULL_SHA,+TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,+TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,+TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA'
sudo /opt/glassfishv4/glassfish/bin/asadmin set server.network-config.protocols.protocol.sec-admin-listener.ssl.ssl2-enabled=false
sudo /opt/glassfishv4/glassfish/bin/asadmin set server.network-config.protocols.protocol.sec-admin-listener.ssl.ssl3-enabled=false
sudo /opt/glassfishv4/glassfish/bin/asadmin set 'configs.config.server-config.network-config.protocols.protocol.sec-admin-listener.ssl.ssl3-tls-ciphers=+TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,+TLS_DHE_DSS_WITH_AES_128_CBC_SHA,+TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256,+TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256,+TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA,+TLS_ECDH_RSA_WITH_AES_128_CBC_SHA,+TLS_ECDH_anon_WITH_AES_128_CBC_SHA,+TLS_ECDH_ECDSA_WITH_NULL_SHA,+TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,+TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,+TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA'
sudo /etc/init.d/glassfish restart

13- Comandos para mudar a porta padrão do HTTP para 80 e HTTPS para 443.

sudo /opt/glassfishv4/glassfish/bin/asadmin set configs.config.server-config.network-config.network-listeners.network-listener.http-listener-1.port=80

sudo /opt/glassfishv4/glassfish/bin/asadmin set configs.config.server-config.network-config.network-listeners.network-listener.http-listener-2.port=443

sudo /etc/init.d/glassfish restart

14- Se deseja habilitar o uso do certificado emitido por uma autoridade certificado como a GlobalSign, siga os seguintes passos.

São necessários os seguintes arquivos:

GlobalSign.pem (certificado da entidade certificadora raíz).
intermediate.pem (certificado intermediário da entidade certificadora).
hostname.pfx (arquivo contendo as chaves pública e privada do certificado emitido para um host ou domínio).

Crie o diretório /etc/certs

sudo mkdir /etc/certs/

Copie os arquivos keystore.jks e cacerts.jks que existem no diretório do Glassfish.

cd /opt/glassfishv4/glassfish/domains/domain1/config/
sudo cp keystore.jks cacerts.jks /etc/certs/
cd /etc/certs/

Cadastrando o certificado emitido no keystore.jks e cacerts.jks
Etapa 1) Divida o certificado no formato pfx em dois arquivos: um no formato .crt e outro na chave privada no formato .key.

Como foi recebido o certificado hostname.pfx, será necessário extrair a partir dele os arquivos no formato .crt (certificado público) e .key (chave privada).

OBS.: Neste tutorial o arquivo hostname.pfx será chamado de homolog.pfx.

sudo openssl pkcs12 -in homolog.pfx -nocerts -nodes -out homolog.key
sudo openssl pkcs12 -in homolog.pfx -clcerts -nokeys -out homolog.crt

OBS.: Após cada comando acima informe a senha usada na emissão do certificado.

Etapa 2) Crie um arquivo keystore PKCS12 da chave privada e do certificado público.

De posse dos arquivos .crt e .key, será necessário criar um arquivo keystore PKCS12, para unir as duas chaves novamente, mas em outro formato: o .p12.

sudo openssl pkcs12 -export -name my-cert -in homolog.crt -inkey homolog.key -out keystore.p12

OBS.: Após o comando acima informe a senha usada na emissão do certificado.

Etapa 3) Converta a keystore PKCS12 em uma keystore JKS

De posse da keystore PKCS12, será necessário converter a chave do formato .p12 para o formato .jks (formato suportado pelo Glassfish). O comando abaixo vai gerar o arquivo keystore.jks.

OBS.: A senha usada no armazenamento dos certificados no arquivo keystore.jks é: changeit.

sudo keytool -importkeystore -destkeystore keystore.jks -srckeystore keystore.p12 -srcstoretype pkcs12 -alias my-cert

Agora o arquivo keystore.jks está pronto.

Etapa 4) Importe os certificados das entidades certificadoras

Agora importe no arquivo cacerts.jks, os certificados das entidades certificadoras: GlobalSign.pem, intermediate.pem e o certificado público do domínio homolog.crt (que foi gerado no início do tutorial).

OBS.: A senha usada no armazenamento dos certificados no arquivo keystore.jks e cacerts é: changeit.

sudo keytool -import -v -trustcacerts -alias globalsignr3ca -file GlobalSign.pem -keystore cacerts.jks -storepass changeit


sudo keytool -import -v -trustcacerts -alias globalsignr3ca-inter -file intermediate.pem -keystore cacerts.jks -storepass changeit


sudo keytool -import -v -trustcacerts -alias my-cert -file homolog.crt -keystore cacerts.jks -storepass changeit

OBS.: A importar o certificado da GlobalSign, pode ser exibida a mensagem de que ele já está cadastrado no alias globalsignr3ca. Se isso acontecer apenas ignore e siga adiante.

Para listar o certificado importado, use o comando abaixo.

sudo keytool -list -keystore keystore.jks -alias my-cert -v

Etapa 5) Cadastrando o keystore.jks e cacerts.jks no Glassfishv4. Execute a sequencia de comandos abaixo, mas alterando os valores em negrito de acordo com o seu ambiente.

sudo /opt/glassfishv4/glassfish/bin/asadmin set 'configs.config.server-config.network-config.protocols.protocol.http-listener-2.ssl.cert-nickname=my-cert';
sudo /opt/glassfishv4/glassfish/bin/asadmin create-jvm-options '-Djavax.net.ssl.keyStore=/etc/certs/keystore.jks';
sudo /opt/glassfishv4/glassfish/bin/asadmin create-jvm-options '-Djavax.net.ssl.keyStorePassword=changeit';
sudo /opt/glassfishv4/glassfish/bin/asadmin create-jvm-options '-Djavax.net.ssl.trustStore=/etc/certs/cacerts.jks';
sudo /opt/glassfishv4/glassfish/bin/asadmin create-jvm-options '-Djavax.net.ssl.trustStorePassword=changeit';
sudo /opt/glassfishv4/glassfish/bin/asadmin create-jvm-options '-Dcom.sun.enterprise.security.httpsOutboundKeyAlias=my-cert';
sudo /opt/glassfishv4/glassfish/bin/asadmin create-jvm-options '-Djavax.net.ssl.keyStoreAlias=my-cert';
sudo /opt/glassfishv4/glassfish/bin/asadmin create-jvm-options '-Djavax.net.ssl.keyAlias=my-cert';

Reinicie o Glassfish com o comando abaixo, que o certificado será aplicado e a aplicação passará a utilizá-lo nas requisições HTTPS.

sudo /etc/init.d/glassfish restart

15) Execute os comandos abaixo para aplicar configurações de segurança no Glassfish

#disable client-initiated renegotiation (to decrease the surface for DoS attacks)

sudo /opt/glassfishv4/glassfish/bin/asadmin create-jvm-options -Djdk.tls.rejectClientInitiatedRenegotiation=true
#get rid of http header field value "server" (Glassfish obfuscation)
sudo /opt/glassfishv4/glassfish/bin/asadmin create-jvm-options -Dproduct.name=""
#disable sending x-powered-by in http header (Glassfish obfuscation)
sudo /opt/glassfishv4/glassfish/bin/asadmin set server.network-config.protocols.protocol.http-listener-1.http.xpowered-by=false
sudo /opt/glassfishv4/glassfish/bin/asadmin set server.network-config.protocols.protocol.http-listener-2.http.xpowered-by=false
sudo /opt/glassfishv4/glassfish/bin/asadmin set server.network-config.protocols.protocol.admin-listener.http.xpowered-by=false
#disable SSLv3 nas portas iiop
sudo /opt/glassfishv4/glassfish/bin/asadmin set server.iiop-service.iiop-listener.SSL.ssl.ssl3-enabled=false
sudo /opt/glassfishv4/glassfish/bin/asadmin set server.iiop-service.iiop-listener.SSL_MUTUALAUTH.ssl.ssl3-enabled=false

#enable only access local at console Web Admin Glassfish

sudo /opt/glassfishv4/glassfish/bin/asadmin set server.network-config.network-listeners.network-listener.admin-listener.address=127.0.0.1

Reinicie o Glassfish com o comando abaixo, que o certificado será aplicado e a aplicação passará a utilizá-lo nas requisições HTTPS.

sudo /etc/init.d/glassfish restart

16) Execute a sequencia de comandos abaixo se quiser redirecionar todo o tráfego da porta 80 para 443 automaticamente.

sudo /opt/glassfishv4/glassfish/bin/asadmin create-protocol --securityenabled=false http-redirect
sudo /opt/glassfishv4/glassfish/bin/asadmin create-http-redirect --redirect-port 443 --secure-redirect true http-redirect
sudo /opt/glassfishv4/glassfish/bin/asadmin create-protocol-filter --protocol http-redirect --classname org.glassfish.grizzly.config.portunif.HttpRedirectFilter redirect-filter
sudo /opt/glassfishv4/glassfish/bin/asadmin create-protocol --securityenabled=false pu-protocol
sudo /opt/glassfishv4/glassfish/bin/asadmin create-protocol-finder --protocol pu-protocol --targetprotocol http-listener-2 --classname org.glassfish.grizzly.config.portunif.HttpProtocolFinder http-finder
sudo /opt/glassfishv4/glassfish/bin/asadmin create-protocol-finder --protocol pu-protocol --targetprotocol http-redirect --classname org.glassfish.grizzly.config.portunif.HttpProtocolFinder http-redirect
sudo /opt/glassfishv4/glassfish/bin/asadmin set configs.config.server-config.network-config.network-listeners.network-listener.http-listener-1.protocol=pu-protocol

Reinicie o Glassfish com o comando abaixo, que o certificado será aplicado e a aplicação passará a utilizá-lo nas requisições HTTPS.

sudo /etc/init.d/glassfish restart

Criando um Pool de Acesso ao PostgreSQL no Glassfish

Se você tiver uma aplicação Web a ser implantada no Glassfish e que usa o banco de dados PostgreSQL, você pode usar os comandos para criar um recurso JDBC que usa o pool de conexões do Glassfish para gerenciar o acesso ao banco. Fazendo isso, será necessário que você ajuste o código da sua aplicação para ela usar o pool criado no Glassfish.

Abaixo estão os comandos para criar o pool e o recurso JDBC.

/opt/glassfishv4/glassfish/bin/asadmin create-jdbc-connection-pool --restype javax.sql.DataSource --datasourceclassname org.postgresql.ds.PGSimpleDataSource --maxpoolsize 100 --property "User=DBUSER:Password=DBPASSWORD:DatabaseName=DBASE:ServerName=DBHOST:PortNumber=DBPORTNUMBER" POOL_NAME
/opt/glassfishv4/glassfish/bin/asadmin create-jdbc-resource --connectionpoolid POOL_NAME RESOURCE_NAME
/etc/init.d/glassfish restart

Os comandos abaixo, confirguram a capacidade do pool de se reconectar ao banco de dados, em caso de perda de conexão.

/opt/glassfishv4/glassfish/bin/asadmin set resources.jdbc-connection-pool.POOL_NAME.connection-validation-method=custom-validation

/opt/glassfishv4/glassfish/bin/asadmin set resources.jdbc-connection-pool.POOL_NAME.validation-classname=org.glassfish.api.jdbc.validation.PostgresConnectionValidation

/opt/glassfishv4/glassfish/bin/asadmin set resources.jdbc-connection-pool.POOL_NAME.is-connection-validation-required=true

/opt/glassfishv4/glassfish/bin/asadmin set resources.jdbc-connection-pool.POOL_NAME.fail-all-connections=true
/etc/init.d/glassfish restart

Deploy e undeploy de aplicação no Glassfish

Abaixo estão os comandos para implantar (deploy) uma aplicação .war ou .ear no Glassfish.
/opt/glassfishv4/glassfish/bin/asadmin deploy --force=true --name=APP APP.war
/etc/init.d/glassfish restart
Abaixo estão os comandos para desimplantar (undeploy) uma aplicação no Glassfish.
/opt/glassfishv4/glassfish/bin/asadmin undeploy --name=APP 
/etc/init.d/glassfish restart

 

Fontes:

https://www.nabisoft.com/tutorials/glassfish/installing-glassfish-41-on-ubuntu
http://www.java-samples.com/showtutorial.php?tutorialid=1214
http://askubuntu.com/questions/587683/glassfish-ssl-console-handshake-exception
http://stackoverflow.com/questions/12860289/import-ssl-certificate-in-glassfish
https://www.nabisoft.com/tutorials/glassfish/installing-glassfish-41-on-ubuntu
http://grepthelinuxblog.blogspot.com.br/2012/02/glassfish-ssl-verisign-certificate.html
http://grburgos.blogspot.com.br/2010/07/glassfish-v3-with-ssl-using-verisign.html
https://glassfish.java.net/wiki-archive/How_to_ssl_versign.html
https://docs.oracle.com/cd/E19798-01/821-1751/ablqz/index.html
https://www.digicert.com/ssl-support/jks-import-export-java.htm
http://stackoverflow.com/questions/34726305/getting-ssl-certificate-to-work-with-payara-4-1/34808985
http://www.guj.com.br/t/sucesso-glassfish-v3-ssl-certificado-serasa-globalsign-etc/195965
http://www.denizoguz.com/2011/01/02/installing-godaddy-ssl-certificates-on-glassfish-v3-step-by-step/

 

Customizando o Tomcat 8

Informações iniciais

Hoje (03/08/2016), a versão do Tomcat mais recente e recomendada para uso em produção é a 8.5.4, que pode ser obtida nesta página: https://tomcat.apache.org/download-80.cgi

Para usar o Tomcat 8 é necessário instalar o Java 8. O Java 8 da Oracle pode ser obtido neste link http://www.oracle.com/technetwork/java/javase/downloads/index.html e instalado no Ubuntu seguindo este tutorial: http://www.webupd8.org/2012/09/install-oracle-java-8-in-ubuntu-via-ppa.html

O Tomcat padrão contém algumas vulnerabilidades de segurança e para minimizá-las é necessário customizá-lo.

1- Foi obtido o Tomcat 8.5.4 acessando a página https://tomcat.apache.org/download-80.cgiCom isso foi baixado o arquivo apache-tomcat-8.5.4.zip no diretório /home/aecio/Downloads.

2- Descompacte o arquivo apache-tomcat-8.5.4.zip e altere o nome da pasta descompactada para tomcat8.

cd /home/aecio/Downloads
unzip apache-tomcat-8.5.4.zip
mv apache-tomcat-8.5.4/ tomcat8

3- Algumas configurações de segurança são listadas nesta página: https://www.owasp.org/index.php/Securing_tomcat

4- Mantenha comentado todos os usuários listados no arquivo tomcat8/conf/tomcat-users.xml. Isso evitará que qualquer usuário possa gerenciar o Tomcat via Web. Todas as configurações no Tomcat devem ser feitas via linha de comando ou edição de arquivos.

5- Altere o arquivo tomcat8/conf/server.xml para conter:

Antes:

<Server port="8005" shutdown="SHUTDOWN">

Depois:

<Server port="-1" shutdown="Shutd0wn-ADICIONE-OUTRA-PALAVA-DIFICIL">

6- Altere a porta padrão do HTTP de 8080 para 80 no arquivo tomcat8/conf/server.xml .

Antes:

<Connector port="8080" protocol="HTTP/1.1"

Depois:

<Connector port="80" protocol="HTTP/1.1"

7- Remova os diretórios existentes dentro de tomcat8/webapps/.

rm -rf tomcat8/webapps/docs
rm -rf tomcat8/webapps/examples
rm -rf tomcat8/webapps/host-manager
rm -rf tomcat8/webapps/manager

8- Remova o diretório tomcat8/conf/Catalina/

rm -rf tomcat8/conf/Catalina

9- Oculte a versão do Tomcat.

cd tomcat8/lib
jar xf catalina.jar org/apache/catalina/util/ServerInfo.properties
cd org/apache/catalina/util/

Edite o arquivo ServerInfo.properties e altere a seguinte linha:

Antes:

server.info=Apache Tomcat/8.5.4.0

Depois:

server.info=Apache Tomcat

Empacote o arquivo novamente.

cd /home/aecio/Downloads/tomcat8/lib
jar uf catalina.jar org/apache/catalina/util/ServerInfo.properties
rm -rf org/
cd ..

10- Crie o usuario tomcat e defina uma senha difícil para ele.

sudo adduser tomcat

ou:

sudo useradd tomcat
sudo passwd tomcat

Mova o tomcat8 para o diretório /opt e aplique a permissão 700 para o usuário tomcat.

sudo mv /home/aecio/Downloads/tomcat8 /opt
sudo chmod -R 700 /opt/tomcat8
sudo chown -R tomcat:tomcat /opt/tomcat8

11- Se quiser habilitar a porta do HTTPS e usar um certificado válido emitido por uma autoridade certificadora como a GlobalSign ou outra, siga o seguintes passos:

a) Cadastre o o certificado emitido pela autoridade certificadora (no formato .pfx) num arquivo /etc/certs/keystore.jks e os certificados raíz e intermediário num arquivo/etc/certs/cacerts.jks (veja os links abaixo).

https://support.globalsign.com/customer/en/portal/articles/2121490-java-keytool—create-keystore

https://support.globalsign.com/customer/portal/articles/1352403-java-codesigning-jks-method—certificate-generation-and-installation

https://support.globalsign.com/customer/pt_br/portal/articles/1352403-assinatura-de-c%C3%B3digo-java-jks—gera%C3%A7%C3%A3o-e-instala%C3%A7%C3%A3o-de-certificado

https://support.globalsign.com/customer/pt_br/portal/articles/1223425-instalar-e-configurar-certificado-ssl—tomcat

https://docs.oracle.com/cd/E19798-01/821-1841/gjrgy/index.html

https://docs.oracle.com/cd/E19798-01/821-1751/ghlgv/index.html

Dê permissões de acesso ao usuário tomcat para o diretório /etc/certs.

sudo chmod -R 700 /etc/certs
sudo chown -R tomcat:tomcat /etc/certs

b) Habilite o HTTPS na porta 443 usando a configuração abaixo no arquivo tomcat8/server.xml. Isso dará suporte apenas ao protocolo TLS1.2 com cifras fortes.

 <Connector port="443" maxThreads="150" disableUploadTimeout="true"
 acceptCount="100" scheme="https" secure="true" clientAuth="false" 
 SSLEnabled="true" sslProtocol="TLSv1.2" sslEnabledProtocols="TLSv1.2" keyAlias="alias-cert" 
 keystoreFile="/etc/certs/keystore.jks" keystorePass="changeit" 
 keystoreType="JKS" truststoreFile="/etc/certs/cacerts.jks" 
 truststorePass="changeit" truststoreType="JKS"
 ciphers="TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
 TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,
 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
 TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256,
 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,
 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
 TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384,
 TLS_ECDH_RSA_WITH_AES_256_CBC_SHA,TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA,
 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,
 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
 TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256,
 TLS_ECDH_RSA_WITH_AES_128_CBC_SHA,TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA"
 />

Essas configurações de segurança do protocolo HTTPS foram obtidas em:

https://tomcat.apache.org/tomcat-8.0-doc/security-howto.html

https://www.owasp.org/index.php/Securing_tomcat

http://www.maximporges.com/2009/11/18/configuring-tomcat-ssl-clientserver-authentication/

Java based SSL connection to Tomcat with server and client certifications
Tomcat web application with SSL client certificates

https://blog.eveoh.nl/2014/02/tls-ssl-ciphers-pfs-tomcat/

https://tomcat.apache.org/tomcat-8.0-doc/ssl-howto.html

https://www.digicert.com/ssl-certificate-installation-tomcat.htm

https://www.mulesoft.com/tcat/tomcat-ssl

https://br.godaddy.com/help/como-gerenciar-uma-csr-e-instalar-um-certificado-ssl-no-tomcat-4x5x6x7x-5239

https://www.sslshopper.com/tomcat-ssl-installation-instructions.html

https://support.globalsign.com/customer/en/portal/articles/1223425-tomcat—install-ssl-certificate

http://www.mkyong.com/tomcat/how-to-configure-tomcat-to-support-ssl-or-https/

https://www.geocerts.com/install/tomcat

http://helpdesk.ssls.com/hc/en-us/articles/203505171-How-to-install-a-SSL-certificate-on-a-Tomcat-server

12- Crie o arquivo /etc/init.d/tomcat com o seguinte conteúdo.

----------------------------  /etc/init.d/tomcat  ------------------------
#!/bin/bash
# chkconfig: 345 88 88
# description: tomcat (TOMCAT) Tomcat

### BEGIN INIT INFO
# Provides: tomcat
# Required-Start: $local_fs $network $syslog
# Should-Start: $remote_fs $named $time
# Required-Stop: $local_fs $network $syslog
# Should-Stop: $remote_fs $named
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: TOMCAT
# Description: tomcat (TOMCAT) Tomcat
### END INIT INFO

#----------------------------------------------------
# informa se o usuario que estah rodando o comando eh root
isroot(){
MYUID=$(id | cut -d= -f2 | cut -d\( -f1)
[ $MYUID -eq 0 ] && echo YES || echo NO
}

#--------------------------------
getPID(){
#PID=$(ps ax | pgrep -fl $TOMCATEXEC  | sed "s/^ *//" | cut --field=1 --delimiter=" " | head -n1)
PID=$(ps aux | grep org.apache.catalina.startup.Bootstrap | grep -v grep | awk '{ print $2 }')
echo $PID > $PID_FILE
}

#--------------------------------
isRunning(){
local PID="$1"
[ -z "$PID" ] && return 1
ps -p $PID > /dev/null 2>&1 && return 0 || return 1
}

#--------------------------------
status(){
getPID

[ -f $PID_FILE ] || return 3
PID=$(cat $PID_FILE )

if [ -z "$PID" ]; then
   echo "[INFO] Tomcat is not running..." 
   return 1
fi
if isRunning $PID; then
   echo "[INFO] Tomcat is running: PID=$PID"
   return 0 
else
   echo "[INFO] Tomcat is not running..." 
   return 1
fi
}

#--------------------------------
stop(){

if [ ! -f $PID_FILE ]; then
   echo "[INFO] Tomcat is not running..."
   return 0
fi

PID=$(cat $PID_FILE )
[ -z "$PID" ] && return 0
if isRunning $PID ; then
   echo "[INFO] Stopping Tomcat..."
   kill -9 $PID
   sleep 2
   return 0
fi
}

#--------------------------------
start(){

if [ -f $PID_FILE ]; then
   PID=$(cat $PID_FILE )
   if [ -z "$PID" ]; then
      echo "[INFO] Starting Tomcat..."
      cd $TOMCATDIR
      $TOMCAT_SCRIPT_STARTUP > /dev/null 2>&1 &
      cd - > /dev/null &
      getPID
      return 0
   fi

   if isRunning $PID; then
     echo "[INFO] Tomcat is already running. Use \"restart\""
     return 0
   else
     echo "[INFO] Starting Tomcat..."
     cd $TOMCATDIR
     $TOMCAT_SCRIPT_STARTUP > /dev/null 2>&1 &
     cd - > /dev/null &
     getPID
     return 0
   fi
else
   echo "[INFO] Starting Tomcat..."
   cd $TOMCATDIR
   $TOMCAT_SCRIPT_STARTUP > /dev/null 2>&1 &
   cd - > /dev/null &
   getPID
   return 0
fi
}

#--------------------------------
# MAIN
#--------------------------------

#-----------Variaveis
TOMCATEXEC=tomcat
TOMCATDIR=/opt/tomcat8
TOMCAT_SCRIPT_STARTUP=/opt/tomcat8/bin/startup.sh
PID_FILE=/tmp/tomcat.pid


if [ $(isroot) = NO ] ; then
        echo "[ERROR] Voce deve ser root para executar este comando."
        echo "Execute o comando \"sudo $CMDLINE\""
        exit 4
fi

# Define usage string, used in more than one place.
usage="[INFO] Usage: $0 {start|stop|restart|status}"

# Check that we have one parameter: action
if [ $# -ne 1 ] ; then
  if [ $# -lt 1 -o "$1" = "" ] ; then
    echo "[ERROR] $0: action not specified"
  else
    echo "[ERROR] $0: too many parameters"
  fi
  echo "$usage"
  exit 2
fi
action="$1"



case $action in
start)
        start
        RETURN=$?
        ;;

stop)
        stop
        RETURN=$?
        ;;
restart)
        stop
        start
        RETURN=$?
        ;;

status)
        status
        RETURN=$?
        ;;
*)
        # If we don't recognize action, consider it an invalid argument.
        # If the standard adds actions we don't support, exit should be 3 for those.
        echo "[ERROR] $0: action \"$action\" not recognized"
        echo "$usage"
        exit 3
        ;;
esac
exit $RETURN
-----------------------  end of /etc/init.d/tomcat  ----------------------

13- Dê permissão de execução ao script /etc/init.d/tomcat.

sudo chmod 755 /etc/init.d/tomcat
sudo chown root:root /etc/init.d/tomcat

14- Habilite a inicialização do Tomcat no boot do Sistema Operacional.

No Debian/Ubuntu:

sudo update-rc.d -f tomcat defaults

No CentOS/RedHat 6.x:

sudo chkconfig --add /etc/init.d/tomcat
sudo chkconfig tomcat on

15- Inicie o Tomcat com o comando abaixo.

sudo /etc/init.d/tomcat start