Pesquisa de site

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:

  1. ServerRoot: diretório onde são mantidos os arquivos de configuração, erros e log do servidor.
  2. Listen: instrui o Apache a escutar endereços IP e/ou portas específicos.
  3. 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.
  4. Usuário e Grupo: o nome do usuário/grupo para executar o serviço httpd.
  5. 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.
  6. 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.