Série RHCSA: Instalando, Configurando e Protegendo um Servidor Web e FTP - Parte 9
Um servidor web (também conhecido como servidor HTTP) é um serviço que lida com conteúdo (geralmente páginas web, mas também outros tipos de documentos) para um cliente em uma rede.
Um servidor FTP é um dos recursos mais antigos e mais utilizados (até hoje) para disponibilizar arquivos aos clientes em uma rede nos casos em que nenhuma autenticação é necessária, pois o FTP usa nome de usuário e senha sem criptografia.
O servidor web disponível no RHEL 7 é a versão 2.4 do Apache HTTP Server. Quanto ao servidor FTP, usaremos o Very Secure Ftp Daemon (também conhecido como vsftpd) para estabelecer conexões protegidas por TLS.
Neste artigo explicaremos como instalar, configurar e proteger um servidor web e um servidor FTP no RHEL 7.
Instalando Apache e servidor FTP
Neste guia usaremos um servidor RHEL 7 com endereço IP estático 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 for concluída, ambos os serviços serão desabilitados inicialmente, então precisamos iniciá-los manualmente por enquanto e habilitá-los para iniciar automaticamente a partir da próxima inicialização:
systemctl start httpd
systemctl enable httpd
systemctl start vsftpd
systemctl enable vsftpd
Além disso, temos que abrir as portas 80 e 21, onde os daemons web e ftp estão escutando, respectivamente, para permitir o acesso externo a esses serviços:
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-service=ftp --permanent
firewall-cmd --reload
Para confirmar se o servidor web está funcionando corretamente, abra seu navegador e digite o IP do servidor. Você deverá ver a página de teste:
Quanto ao servidor FTP, teremos que configurá-lo ainda mais, 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 em /etc/httpd /conf.d
.
Embora a configuração padrão deva ser suficiente para a maioria dos casos, é uma boa ideia familiarizar-se 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 as seguintes variáveis:
- ServerRoot: diretório onde são mantidos os arquivos de configuração, erros e log do servidor.
- Listen: instrui o Apache a escutar endereços IP e/ou portas específicos.
- Incluir: 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.
- Usuário e Grupo: o nome do usuário/grupo para executar o serviço httpd.
- DocumentRoot: O diretório a partir do qual o Apache servirá seus documentos. Por padrão, todas as solicitações são obtidas deste diretório, mas links simbólicos e aliases podem ser usados para apontar para outros locais.
- ServerName: esta 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á na criação de um usuário e grupo dedicado (ou seja, tecmint/tecmint) para executar o servidor web e alterar a porta padrão para uma superior (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, 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, porta TCP 8100), você terá que adicioná-la ao contexto de porta SELinux para o serviço httpd:
semanage port -a -t http_port_t -p tcp 8100
Para proteger ainda mais a instalação do Apache, siga estas etapas:
1. O usuário que o Apache está executando não deve ter acesso a um shell:
usermod -s /sbin/nologin tecmint
2. Desative a listagem de diretórios para evitar que o navegador exiba o conteúdo de um diretório se não houver nenhum index.html presente nesse diretório.
Edite /etc/httpd/conf/httpd.conf
(e os arquivos de configuração para hosts virtuais, se houver) e certifique-se de que a diretiva Options, tanto na parte superior quanto nos níveis de bloco do diretório, está definido como Nenhum:
Options None
3. Oculte informações sobre o servidor web e o sistema operacional nas respostas HTTP. Edite /etc/httpd/conf/httpd.conf
da seguinte forma:
ServerTokens Prod
ServerSignature Off
Agora você está pronto para começar a veicular conteúdo do seu diretório /var/www/html.
Configurando e protegendo o servidor FTP
Como no caso do Apache, o arquivo de configuração principal do Vsftpd (/etc/vsftpd/vsftpd.conf)
é bem comentado e embora a configuração padrão deva ser suficiente para a maioria dos aplicativos , você deve se familiarizar com a documentação e a página de manual (man vsftpd.conf)
para operar o servidor FTP com mais eficiência (não consigo enfatizar isso o suficiente!).
No nosso caso, estas são as diretivas utilizadas:
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 seu diretório inicial logo após o login. Isso significa que os usuários locais não poderão acessar nenhum arquivo fora de seus diretórios pessoais correspondentes.
Finalmente, para permitir que o FTP leia arquivos no diretório inicial do usuário, defina o seguinte booleano SELinux:
setsebool -P ftp_home_dir on
Agora você pode se conectar ao servidor FTP usando um cliente como o Filezilla:
Observe que o log /var/log/xferlog
registra downloads e uploads, que concordam com a listagem de diretório acima:
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 cobrir todos os aspectos destes tópicos (ou seja, hosts virtuais). Assim, recomendo que você verifique também outros excelentes artigos deste site sobre Apache.