Skip to content

Monthly Archives: May 2016

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:

Meus repositórios Docker:

Orquestração com Docker:

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 e André Déo mostramos como instalar o Grafana no Debian 8, CentOS 7 e Ubuntu 16.04 (ambos 64 bits). Nesse mesmo tutorial é mostrada a integração do Grafana com o Zabbix.

 

Agora será mostrado como configurar o Grafana para funcionar sobre HTTPS, usando um certificado auto-assinado.

 

Criando um certificado auto-assinado

Instale o pacote opensssl.

No Debian 8/Ubuntu 16.04:

sudo apt-get -y install openssl

No CentOS 7:

sudo yum install -y openssl

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

sudo mkdir /etc/certs
cd /etc/certs/
sudo openssl genrsa -aes256 -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 com validade para 10 anos (ou 3650 dias). Execute o comando abaixo.

openssl req -new -sha256 -days 3650 -key server.key -out server.csr

Durante a execução do comando acima será solicitado a senha da chave privada e 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 -sha256 -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 = 3000

cert_file = /etc/certs/server.crt

cert_key = /etc/certs/server.key

Agora é só reiniciar o Grafana.

No Debian 8/Ubuntu 16.04:

sudo service grafana-server restart

No CentOS 7:

sudo systemctl restart grafana-server

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

Aceite o certificado no navegador, pois o mesmo vai reclamar que o site está usando um certificado auto-assinado.

Os passos acima pode ser adaptados para a sua realidade, caso possua um certificado válido.

Se quiser configurar o Grafana para disponibilizar dashboards para cada cliente, siga os passos deste tutorial: http://andredeo.blogspot.com.br/2016/12/zabbix-e-grafana-disponibilizando-um.html

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_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_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 hostname.pfx -nocerts -nodes -out hostname.key
sudo openssl pkcs12 -in hostname.pfx -clcerts -nokeys -out hostname.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 hostname.crt -inkey hostname.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