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, usaremos 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, usaremos 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, temos que 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 para o 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 e / ou portas específicas.
  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 como.
  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 outras localizações.
  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á 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 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 sua instalação do Apache mais segura, siga estes passos:

1. O usuário em que o Apache está sendo executado 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 um arquivo index.html presente nesse diretório.

Edite /etc/httpd/conf/httpd.conf (e os arquivos de configuração para hosts virtuais, se houver) e verifique se a diretiva Options, tanto no início quanto nos blocos de diretório, está definida como None:

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 servir conteúdo do diretório /var/www/html.

Configurando e protegendo o servidor FTP

Assim como no caso do Apache, o arquivo de configuração principal para o Vsftpd (/etc/vsftpd/vsftpd.conf) está 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 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 arquivos fora de seus respectivos diretórios iniciais.

Por fim, para permitir ao FTP ler arquivos no diretório inicial do usuário, defina a seguinte booleana 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: Limitar 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, hosts virtuais). Portanto, recomendo que você também consulte outros excelentes artigos neste site sobre o Apache.

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