Instalação e Configuração no CentOS 7 do Apache com suporte ao Tomcat 9

Parte 1: Instalação e configuração do Tomcat

Nos servidores e nos hosts de usuário, incluindo o servidor web, edite o arquivo “/etc/hosts” para inserir o ip o nome de domínio do banco de dados conforme o exemplo Para a instalação manual do Tomcat é necessário a instalação (também manual) do JRE no servidor que hospeda o Tomcat.

Para isso utilize os comandos abaixo:

scp jre-.tar.gz nome-do-usuario@172.16.16.102:
tar -xvzf jre-.tar.gz
mv jre* /opt/java

Em seguida crie os links simbólicos para o Java:

ln -s /opt/java/bin/java /usr/sbin/java
ln -s /opt/java/bin/javac /usr/sbin/javac
ln -s /opt/java/bin/javaws /usr/sbin/javaws

O próximo passo é o upload do Tomcat:

scp apache-tomcat-.tar.gz nome-do-usuario@ip-do-servidor:
tar -xvzf apache-tomcat-.tar.gz
mv jre* /opt/tomcat

Para o Tomcat também é necessário a criação de um usuário para o serviço e associá-lo ao diretório do Tomcat:

adduser -M tomcat
cat /etc/shadow | grep tomcat
cat /etc/gshadow | grep tomcat
chown -R tomcat:tomcat /opt/tomcat

E, para que o serviço seja automaticamente utilizado crie o arquivo de inicialização do serviço (“tomcat.service”). Um exemplo do arquivo “/usr/lib/systemd/system/tomcat.service” é mostrado abaixo.

Exemplo do arquivo “/usr/lib/systemd/system/tomcat.service”:

[Unit]
Description=Tomcat 9 servlet container
After=network.target
[Service]
Type=forking
User=tomcat
Group=tomcat
Environment="JAVA_HOME=/opt/java"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom"
Environment="CATALINA_BASE=/opt/tomcat"
Environment="CATALINA_HOME=/opt/tomcat"
Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
[Install]
WantedBy=multi-user.target

Após a configuração do Tomcat, habilite-o e configure o firewall (abaixo):

systemctrl enable tomcat
firewall-cmd --zone=public --permanent --add-port=8009/tcp
firewall-cmd --zone=public --permanent --add-port=8080/tcp
firewall-cmd --reload
firewall-cmd --list-all
netstat -nap | grep 8009
netstat -nap | grep 8080

Em caso de erro ao habilitar o acesso a uma determinada porta, utilize os comandos abaixo substituindo NPORTA pelo número da porta da qual se deseja remover.

firewall-cmd --zone=public --remove-port=NPORTA/tcp
firewall-cmd --runtime-to-permanent
firewall-cmd --reload

A última tarefa necessário no Tomcat é a próprio configuração do serviço em si. Para criação de usuários no tomcat edite o final do arquivo “/opt/tomcat/bin/tomcat-users.xml” conforme mostrado abaixo.

Exemplo do arquivo “/opt/tomcat/bin/tomcat-users.xml”:

<role rolename="manager-gui"/>
<role rolename="manager-status"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="admin-gui"/>
<user username="admin" password="minhasenha" roles="manager-gui,manager-status,manager-script,manager-jmx,admin-gui"/>
</tomcat-users>

Não esqueça de remover os comentários (“<!–” e “–>”). Neste caso será criado o usuário “admin” com senha “minhasenha”. Para administração remota do servidor, edite os arquivos “/opt/tomcat/webapps/manager/META-INF/context.xml” e “/opt/tomcat/webapps/host-manager/META-INF/context.xml” comentado o conteúdo (abaixo). Isto permitirá que o Tomcat possa ser configurado pela interface web.

Exemplo do arquivo “*/context.xml”:

<!--  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127.\d+.\d+.\d+|::1|0:0:0:0:0:0:0:1" /> -->

Parte 2: Instalação e configuração do Apache para o Tomcat

Para o Apache com suporte a Tomcat, instale o servidor web com os comandos abaixo:

yum install httpd mod_ssl
systemctl enable httpd

Para verificação e configuração do firewall do servidor web, utilize os comandos:

firewall-cmd --get-service | grep http
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload

O próximo passo é configurar o site do Tomcat no servidor Apache criando um arquivo para a porta 80 (“redireciona.conf”) e um para a porta 443 (“tomcat.conf”) em “/etc/httpd/conf.d/”. Exemplos para estes arquivos de configuração são mostrados abaixo.

Exemplo de arquivo de configuração do website para porta 80 (“redireciona.conf”):

<VirtualHost *:80>
ServerName website.jaboatao.ifpe.edu.br
ServerAlias mytomcat.jaboatao.ifpe.edu.br
Redirect permanent / https://website.jaboatao.ifpe.edu.br
</VirtualHost>

Exemplo de arquivo de configuração do website para a porta 443 (HTTPS) (“tomcat.conf”):

<VirtualHost *:443>
SSLEngine On
SSLCertificateFile /var/www/certs/tomcat.crt
SSLCertificateKeyFile /var/www/certs/tomcat.key
ServerName website.servers.com.br
ServerAlias mytomcat.servers.com.br
ProxyRequests Off
ProxyPass / ajp://tomcat.servers.com.br:8009/
ProxyPassReverse / ajp://tomcat.servers.com.br:8009/
</VirtualHost>

Após a configuração do website e antes de reconfigura o servidor (“systemctl reload httpd”) crie o certificado digital autoassinado para o servidor web com o comando abaixo:

mkdir /var/www/certs
openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout /var/www/certs/tomcat.key -out /var/www/certs/tomcat.crt

O protocolo AJP [2] utilizado para a comunicação entre o servidor Apache e o servidor Tomcat não implementa criptografia ou quaisquer esquemas de segurança. Por isso deve ser utilizado somente dentro da rede do datacenter.

Por fim, para verificar a configuração do website acesse-o através de um browser e utilize os comandos abaixo:

apachectl configtest
apachectl -k restart
httpd -t
httpd -V
httpd -S
tail /var/log/httpd/error_log”.

Parte 3: Segurança do Tomcat e do Apache com SELinux

Quando um serviço é instalado manualmente no CentOS é necessário ter o serviço configurado para o uso com SELinux [1] para maior segurança do servidor. O SELinux (Security Enhanced Linux) é um sistema de controle de acesso obrigatório e por isso implementa um conjunto de regras (políticas) para autorizar ou proibir as operações.

O SELinux possui três modos de operação:
• Enforcing: O modo padrão que habilitará e aplicará a política de segurança do SELinux no sistema.
• Permissive: No modo Permissivo, o SELinux está ativado, mas não aplicará a política de segurança, apenas alertará e registrará ações. O modo permissivo é útil para solucionar problemas do SELinux.
• Disabled: o modo desativado do SELinux.

E, também possui três tipos específicos para os modos de operação:
• Targeted (Direcionada): todos os processos considerados importantes são protegidos.
• Minimum (Mínima): Modificação da política Targeted. Somente um conjunto de processos selecionados são protegidos.
• MLS (Multi-Level Security – Segurança Multinível): Refere-se a um esquema de segurança que aplica o Modelo de Acesso Obrigatório (MAM – Mandatory Acess Control).

Para verificar o modo de operação do SELinux visualize o arquivo “/etc/selinux/config” ou utilize o comando: “sestatus”. E, para a configuração do SELinux no servidor Tomcat instale os pacotes necessários conforme abaixo:

yum install policycoreutils-python setools-console

Verifique também o módulo do SELinux para o Tomcat:

semodule -l | grep tomcat

Configure os diretórios, o serviço Tomcat e o Java para utilizar o SELinux:

chcon -R -u system_u -r object_r -t tomcat_var_run_t /opt/tomcat
chcon -R -u system_u -r object_r -t bin_t /opt/java/bin

As variáveis “tomcat_var_run_t” e “bin_t” são chamadas no SELinux de domínios. Os domínios são conjuntos de direitos atribuídos pelo SELinux.

No Apache utilize os comandos abaixo. Habilite os arquivos de configuração do website e o certificado digital para utilizar o SELinux:

chcon -u system_u -r object_r -t httpd_config_t /etc/httpd/redireciona-tomcat.conf
chcon -u system_u -r object_r -t httpd_config_t /etc/httpd/tomcat.conf
chcon -R -u system_u -r object_r -t cert_t /var/www/certs

Por fim, verifique se o SELinux está habilitado e sendo utilizado pelo serviço com os comandos:

sestatus
ps auxZ | grep tomcat
ps auxZ | grep java
ls -lhaZ /opt/
ls -lhaZ /opt/tomcat/
ls -lhaZ /opt/java/

REFERÊNCIAS:

[1] https://debian-handbook.info/browse/pt-BR/stable/sect.selinux.html
[2] http://tomcat.apache.org/connectors-doc/ajp/ajpv13a.html
[3] https://selinuxproject.org/page/Main_Page
[4] https://wiki.centos.org/HowTos/SELinux
[5] https://debian-handbook.info/browse/pt-BR/stable/sect.apparmor.html

Publicado porDiego dos Passos

Olá a todos, eu sou o Diego. :) Atualmente sou professor do IFPE no campus de Jaboatão dos Guararapes. Neste website vocês encontrarão todas as informações relacionadas as atividades exercidas por mim na área de TI. O meu currículo lattes é: http://lattes.cnpq.br/4074265134616142 Contatos pelo e-mail: diego.silva@jaboatao.ifpe.edu.br Este e-mail é somente para atividades profissionais. :)