Série RHCSA: Instalando, Configurando e Protegendo um Servidor Web e FTP – Parte 9

A web server (also known as a HTTP server) is a service that handles content (most commonly web pages, but other types of documents as well) over to a client in a network.

A FTP server is one of the oldest and most commonly used resources (even to this day) to make files available to clients on a network in cases where no authentication is necessary since FTP uses username and password without encryption.

O servidor web disponível no RHEL 7 é a versão 2.4 do Apache HTTP Server. Quanto ao servidor FTP, utilizaremos o Very Secure Ftp Daemon (também conhecido como vsftpd) para estabelecer conexões seguras por TLS.

RHCSA: Installing, Configuring and Securing Apache and FTP – Part 9

Neste artigo, explicaremos como instalar, configurar e proteger um servidor web e um servidor FTP no RHEL 7.

Instalando o Apache e o Servidor FTP

Neste guia, utilizaremos um servidor RHEL 7 com um endereço IP estático de 192.168.0.18/24. Para instalar o Apache e o VSFTPD, execute o seguinte comando:

# yum update && yum install httpd vsftpd

Quando a instalação estiver concluída, ambos os serviços estarão desativados inicialmente, então precisamos iniciá-los manualmente por enquanto e habilitá-los para iniciar automaticamente a partir do próximo boot:

# systemctl start httpd
# systemctl enable httpd
# systemctl start vsftpd
# systemctl enable vsftpd

Além disso, precisamos abrir as portas 80 e 21, onde os daemons web e ftp estão ouvindo, respectivamente, para permitir o acesso a esses serviços de fora:

# firewall-cmd --zone=public --add-port=80/tcp --permanent
# firewall-cmd --zone=public --add-service=ftp --permanent
# firewall-cmd --reload

Para confirmar que o servidor web está funcionando corretamente, abra seu navegador e insira o IP do servidor. Você deverá ver a página de teste:

Confirm Apache Web Server

Quanto ao servidor ftp, teremos que configurá-lo mais adiante, o que faremos em um minuto, antes de confirmar que está funcionando conforme o esperado.

Configurando e Protegendo o Servidor Web Apache

O arquivo de configuração principal do Apache está localizado em /etc/httpd/conf/httpd.conf, mas pode depender de outros arquivos presentes dentro de /etc/httpd/conf.d.

Embora a configuração padrão deva ser suficiente para a maioria dos casos, é uma boa ideia se familiarizar com todas as opções disponíveis, conforme descrito na documentação oficial.

Como sempre, faça uma cópia de backup do arquivo de configuração principal antes de editá-lo:

# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.$(date +%Y%m%d)

Em seguida, abra-o com o editor de texto de sua preferência e procure pelas seguintes variáveis:

  1. ServerRoot: o diretório onde os arquivos de configuração, erro e log do servidor são mantidos.
  2. Listen: instrui o Apache a ouvir em um endereço IP específico e/ou portas.
  3. Include: permite a inclusão de outros arquivos de configuração, que devem existir. Caso contrário, o servidor falhará, ao contrário da diretiva IncludeOptional, que é ignorada silenciosamente se os arquivos de configuração especificados não existirem.
  4. User e Group: o nome do usuário/grupo para executar o serviço httpd.
  5. DocumentRoot: O diretório do qual o Apache servirá seus documentos. Por padrão, todas as solicitações são atendidas a partir deste diretório, mas links simbólicos e aliases podem ser usados para apontar para outras localizações.
  6. ServerName: essa diretiva define o nome do host (ou endereço IP) e a porta que o servidor usa para se identificar.

A primeira medida de segurança consistirá em criar um usuário e grupo dedicados (ou seja, tecmint/tecmint) para executar o servidor web e alterar a porta padrão para uma porta mais alta (9000 neste caso):

ServerRoot "/etc/httpd"
Listen 192.168.0.18:9000
User tecmint
Group tecmint
DocumentRoot "/var/www/html"
ServerName 192.168.0.18:9000

Você pode testar o arquivo de configuração com.

# apachectl configtest

e se tudo estiver OK, então reinicie o servidor web.

# systemctl restart httpd

e não se esqueça de habilitar a nova porta (e desabilitar a antiga) no firewall:

# firewall-cmd --zone=public --remove-port=80/tcp --permanent
# firewall-cmd --zone=public --add-port=9000/tcp --permanent
# firewall-cmd --reload

Observe que, devido às políticas do SELinux, você só pode usar as portas retornadas por

# semanage port -l | grep -w '^http_port_t'

para o servidor web.

Se você quiser usar outra porta (ou seja, a porta TCP 8100), você terá que adicioná-la ao contexto de porta do SELinux para o serviço httpd:

# semanage port -a -t http_port_t -p tcp 8100
Add Apache Port to SELinux Policies

Para tornar a instalação do Apache mais segura, siga estes passos:

1. O usuário no qual o Apache está sendo executado não deve ter acesso a um shell:

# usermod -s /sbin/nologin tecmint

2. Desabilite a listagem de diretórios para evitar que o navegador exiba o conteúdo de um diretório se não houver um arquivo index.html presente nesse diretório.

Edite o arquivo /etc/httpd/conf/httpd.conf (e os arquivos de configuração para virtual hosts, se houver) e certifique-se de que a diretiva Options, tanto no topo quanto nos blocos de diretórios, esteja definida como None:

Options None

3. Oculte informações sobre o servidor web e o sistema operacional nas respostas HTTP. Edite o arquivo /etc/httpd/conf/httpd.conf da seguinte forma:

ServerTokens Prod 
ServerSignature Off

Agora você está pronto para começar a servir conteúdo do seu diretório /var/www/html.

Configurando e Segurando o Servidor FTP

Assim como no caso do Apache, o arquivo de configuração principal para o Vsftpd (/etc/vsftpd/vsftpd.conf) é bem comentado e, embora a configuração padrão deva ser suficiente para a maioria das aplicações, você deve se familiarizar com a documentação e a página do manual (man vsftpd.conf) para operar o servidor ftp de forma mais eficiente (não posso enfatizar o suficiente!).

No nosso caso, essas são as diretivas usadas:

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
allow_writeable_chroot=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

Ao usar chroot_local_user=YES, os usuários locais serão (por padrão) colocados em uma prisão chroot em seus diretórios pessoais logo após o login. Isso significa que os usuários locais não poderão acessar arquivos fora de seus diretórios pessoais correspondentes.

Por fim, para permitir que o ftp leia arquivos no diretório pessoal do usuário, defina o seguinte booleano do SELinux:

# setsebool -P ftp_home_dir on

Agora você pode se conectar ao servidor ftp usando um cliente como o Filezilla:

Check FTP Connection

Observe que o registro de log /var/log/xferlog registra downloads e uploads, que coincidem com a listagem de diretórios acima:

Monitor FTP Download and Upload

Leia Também: Limite a largura de banda da rede FTP usada por aplicativos em um sistema Linux com Trickle

Resumo

Neste tutorial, explicamos como configurar um servidor web e um servidor FTP. Devido à vastidão do assunto, não é possível abordar todos os aspectos desses tópicos (por exemplo, hospedagem virtual de sites). Portanto, recomendo que você também verifique outros excelentes artigos neste site sobre Apache.

Source:
https://www.tecmint.com/rhcsa-series-install-and-secure-apache-web-server-and-ftp-in-rhel/