quinta-feira, 29 de março de 2012

Jboss 7.1 + CentOS 6.2

Buenas!

Pessoal, por esses dias precisei fazer uma implementação do Jboss 7.1 em cima de um CentOS 6.2 x86_64.
Bom, dei uma olhada na net se já havia alguma documentação mais prática para esse cenário, como não encontrei algo atualizado resolvi compartilhar meus passos.

Basicamente os passos são:
1 - Instalação mínima do CentOS
2 - Instalação de algumas dependências.
3 - Instalação do JDK.
4 - Instalação do Jboss.
5 - Configuração do serviço Jboss.
6 - Configurações do Jboss.

1 - Instalação mínima do CentOS.

Basicamente é instalar o SO sem qualquer pacote desnecessário. No menu de instalação do CentOS existe a opção "Minimal". Escolha ela e mande bala.

2 - Instalação de algumas dependências.

Esse ponto é opcional, mas eu costumo fazer para facilizar o trabalho e agora e posteriormente.

yum install vim tcpdump iptraf wget gunzip
yum upgrade

3 - Instalação do JDK.

Pode ser usado o OpenJDK ou o JDK da Sun. Eu preferi colocar o JDK da Sun devido a maior demanda deste por parte dos programadores que conheço.

- Download do JDK:

Essa é a última versão enquanto escrevo esse artigo.

- Instale o RPM:
rpm -ivh jdk-7u3-linux-x64.rpm

Ele deve instalar a estrutura principal em /usr/java/jdk*
OBS.: Onde eu coloco *, ajuste de acordo com o nome correto da pasta.

Uma prática legal é criar link simbólico padrão para o jdk. Dessa forma, sempre que precisar atualizar bastará alterar o link. Nesse exemplo criei uma pasta em /opt chamada java:

mkdir /opt/java

Dentro dessa pasta criei um link para o jdk instalado.

cd /opt/java
ln -s /usr/java/jdk* jdk

- Criar as variáveis de ambiente
cd /etc/profile.d

Cria o arquivo java.sh  e colocar o conteúdo abaixo:
vim java.sh

################
JAVA_HOME=/opt/java/jdk
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=$JAVA_HOME/lib
LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/amb64

export JAVA_HOME PATH CLASSPATH LD_LIBRARY_PATH
################

chmod 755 java.sh

4 - Instalação do Jboss

- Fazer o download da última versão:

- Descompacte em um lugar de sua escolha:
No meu caso decompactei em uma área reservada montada em /storage

cd /storage
gunzip jboss-as-7.1.1.Final/jboss-as-7.1.1.Final.zip

Assim como o JDK, criaremos um link para essa pasta:
cd /opt/java
ln -s /storage/jboss-as-7.1.1.Final jboss

- Criar as variáveis de ambiente:
cd /etc/profile.d

Criar o arquivo jboss.sh e colocar o conteúdo abaixo:
vim jboss.sh

################
JBOSS_HOME=/opt/java/jboss
PATH=$PATH:$JBOSS_HOME/bin

export JBOSS_HOME PATH
################ 

chmod 755 jboss.sh

- Criar usuário para executar o Jboss:
useradd jboss
passwd jboss

5 - Configuração do serviço Jboss. 

Esse passo é para criarmos um script de inicialização do Jboss, ou seja, padronizarmos a aplicação.
O próprio Jboss já vem com o exemplo de script para o init.d, usaremos ele fazendo apenas alguns ajustes.

cd /etc/init.d
cp -a  /opt/java/jboss/bin/init.d/jboss-as-standalone.sh jboss

Agora precisamos apenas ajustar a variável JBOSS_HOME nesse script. Ela fica na linha 28.
vim jboss
JBOSS_HOME=/opt/java/jboss

A documentação oficial sugere a criação de uma pasta para colocar o conf de inicialização:

mkdir /etc/jboss-as
cd /etc/jboss-as
cp -a /opt/java/jboss/bin/init.d/jboss-as.conf .

OBS.: Isso não influencia no funcionamento do Jboss. É apenas para o script de inicialização.

Nesse arquivo, apenas descomentei a variável JBOSS_USER colocando o usuário criado para o jboss.
No meu caso:

JBOSS_USER=jboss

- Criar entrada no chkconfig:
chkconfig --add jboss
chkconfig jboss on

6 - Configurações do Jboss.
 
Por último precisamos ajustar as permissões de acesso ao Jboss.
Inicialmente basta publicarmos a console de gerenciamento dele para uma interface acessível remotamente.
OBS.: Por padrão ela vem publicada apenas em localhost.

cd /opt/java/jboss/standalone/configuration/
vim standalone.xml

Perto da linha 275 edite o endereço das interfaces "public" e "management":

################
    <interfaces>
       <interface name="management">
           <inet-address value="${jboss.bind.address.management:0.0.0.0}"/>
        </interface>
        <interface name="public">
            <inet-address value="${jboss.bind.address:0.0.0.0}"/>
        </interface>
        <!-- TODO - only show this if the jacorb subsystem is added  -->
        <interface name="unsecure">
            <!--
              ~  Used for IIOP sockets in the standard configuration.
              ~                  To secure JacORB you need to setup SSL
              -->
            <inet-address value="${jboss.bind.address.unsecure:127.0.0.1}"/>
        </interface>
    </interfaces>

################

Assim você já conseguirá acessar e usar o seu jboss, mas ainda aconselho fortemente ler as dicas de segurança no endereço abaixo (em referências).

Pessoal, desculpe se eu esquecer algum detalhe mas escrevi bem rápido com a maioria das informações de cabeça (fiz a instalação esses dias). Se lembrar de mais alguma informação vou colocando aqui e se verificarem que esqueci algo, por favor, fiquem a vontade para contribuir.

Em breve pretendo publicar algo sobre hardening em Jboss.

Abraço!

Referências adicionais:

terça-feira, 27 de março de 2012

Boas Práticas de Segurança - Apache

Seguem algumas boas práticas de Segurança para protejer um servidor apache.
Fiz todos os testes com uma distro CentOS Linux.

Remover página de teste (Welcome)

1 - Edite o arquivo /etc/httpd/conf.d/welcome.conf.
2 - Comente todas as linhas desse arquivo.
#
#    Options -Indexes
#    ErrorDocument 403 /error/noindex.html
#
3 - Recarregue a configuração do apache: /etc/init.d/httpd reload

Personalizar página default para endereço não publicado

1 - Acesse o diretório /etc/httpd/conf.d e crie um arquivo de configuração seguindo o exemplo abaixo:

# vim security.conf

    Options -Indexes
    ErrorDocument 403 /error/security.html

    Options -Indexes
    ErrorDocument 403 /error/security.html

2 - Depois é só criar e personalizar a página security.html

Desabilitar versão do Apache

1 - Edite o arquivo httpd.conf
2 - Modifique a linha ServerTokens para:
ServerTokens Prod
3 - Recarregue as configurações do apache.

http://httpd.apache.org/docs/current/mod/core.html#servertokens

Desabilitar assinatura do servidor

Quando uma página que não existe é acessada, por exemplo, o apache mostra uma página de erro default com informações do servidor, porta, etc.
Não há nenhuma necessidade disso ser mostrado.

1 - Edite o arquivo httpd.conf.
2 - Modifique a linha ServerSignature para:
ServerSignature Off
3 - Recarregue a configuração do apache.

http://httpd.apache.org/docs/current/mod/core.html#serversignature

Desabilitar Trace

1 - Edite o arquivo httpd.conf.
2 - Adicione a linha abaixo no final do arquivo:
TraceEnable Off
3 - Recarregue a configuração do apache.

http://httpd.apache.org/docs/current/mod/core.html#traceenable

Negar acesso ao /

1 - Edite o arquivo httpd.conf.

    Options FollowSymLinks
    AllowOverride None
    Order Deny,Allow
    Deny from all

OBS.: Se tiver mais algum diretório que não precise ser publicado, bloqueie também.

Bom, conforme eu for me lembrando de mais dicas, vou colocando aqui.
Caso alguém tenha mais dicas, por favor, fique a vontade para comentar.

Abraço!