O speedtest-cli é uma ferramenta de linha de comando útil para administradores em servidores Linux testarem rapidamente a largura de banda, ping e outras informações. Este utilitário mantido pela Speedtest.net nos permite obter informações valiosas sobre o que está sendo oferecido pelo provedor de seu servidor linux.
Abaixo vamos abordar a instalação no CentOS/RedHat , Ubuntu/Debian e a forma manual que servirá para qualquer outra Distribuição Linux.
Execute o comando abaixo para o iniciar o teste de velocidade
speedtest-cli
Exemplo do teste
[root@gerenciandosrv ~]# speedtest-cli
Retrieving speedtest.net configuration...
Testing from OVH Hosting (xxx.xx.xx.xxx)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by TELUS (Montreal, QC) [1.07 km]: 7.488 ms
Testing download speed................................................................................
Download: 681.31 Mbit/s
Testing upload speed................................................................................................
Upload: 239.13 Mbit/s
Para executar o teste e gerar o link do Speedtest com o resultado utlize
speedtest-cli --share
[root@gerenciandosrv ~]# speedtest-cli --share
Retrieving speedtest.net configuration...
Testing from OVH Hosting (xxx.xx.xx.xxx)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by Openface Internet (Montreal, QC) [1.07 km]: 2.286 ms
Testing download speed................................................................................
Download: 732.54 Mbit/s
Testing upload speed................................................................................................
Upload: 224.14 Mbit/s
Share results: http://www.speedtest.net/result/8441139361.png
Importante: Alguns firewalls podem bloquear o teste, trazendo resultados de Download e Upload 00 Mbit/s . Neste caso sugiro pausar o firewall ou descobrir a porta utilizada pelo Speedtest para conexão.
O HTTP/2 torna nossas aplicações web mais rápidas, simples e robustas. O http2 abre uma série de novas oportunidades para otimizar nossas aplicações e melhorar o desempenho.
O principal objetivo do http/2 é reduzir a latência permitindo a multiplexação total de solicitações e respostas, minimizando a sobrecarga de protocolos por meio de compactação eficiente do http header, além de adicionar suporte para a priorização de solicitações e envio de dados aos servidores. Existem ainda um grande suporte de outros aprimoramentos de protocolo, como novos mecanismos de controle de fluxo, tratamento de erros e atualização, mas os recursos descritos acima são os mais importantes .
Mãos a obra
Notas – Antes de começar:
Certifique-se que você tenha instalado em seu domínio um certificado ssl válido. http/2 somente funciona com HTTPS
Este passo a passo foi escrito utilizando um servidor com Painel CWP Pro (CentOS Web Panel) e CentOS 6, porém, já foi testado no CentOS 7, com ou sem Painel de controle (foram necessárias apenas algumas adaptações lógicas).
-Acesse o SSH de seu servidor como root
Atualizando os packs do OS para a última versão
yum clean all
yum -y update
Atualizando Autoconf:
cd /usr/local/src
rm -rf autoconf-*
wget https://ftp.gnu.org/gnu/autoconf/autoconf-latest.tar.gz
tar zxvf autoconf-latest.tar.gz
cd autoconf-*
./configure --prefix=/usr
make && make install
Atualizando Openssl:
cd /usr/local/src
rm -rf openssl-*
wget https://www.openssl.org/source/openssl-1.0.2q.tar.gz
tar zxvf openssl-1.0.2q.tar.gz
cd openssl-*
./config --prefix=/usr --openssldir=/usr/lib64 shared
make && make install
Instalando Nghttp2:
cd /usr/local/src rm -rf nghttp2-*
yum install libtool -y
wget https://github.com/nghttp2/nghttp2/releases/download/v1.35.1/nghttp2-1.35.1.tar.gz
tar zxvf nghttp2-1.35.1.tar.gz
cd nghttp2-*
./configure --prefix=/usr
make && make install
Acesse o diretório de configuração do nginx
cd /etc/nginx/conf.d/vhosts/
Edite o arquivo “seudodominio_ssl.conf”
nano seudodominio_ssl.conf
Localize:
server {
listen xxx.xx.xxx.xx:443;
xxx é apenas um exemplo. não altere o ip
Adicione após “:443” ssl http2
server {
listen xxx.xx.xxx.xx:443 ssl http2;
Salve e saia do editor nano ( “ctrl+x “ e “y” )
Reiniciei o nginx
service nginx restart
Agora, vamos verificar se está tudo certo, acesse https://tools.keycdn.com/http2-test digite a url de seu site para verificar se o HTTP/2 está ativo
O comando tar (tape archive) é usado frequentemente no Linux para adicionar vários arquivos e pastas a um único arquivo. Os Arquivos tar são frequentemente compactados após serem criados, dando-lhes a extensão tar.gz(Gzip) ou tar.bz2(bzip2) principalmente. O comando tar possui um grande número de opções, mas precisamos lembrar apenas de algumas letras para criar ou extrair arquivos.
Abaixo, segue uma lista com os parâmetros mais importantes para o uso diário do tar ao compactar e descompactar arquivos:
-x (eXtract) Extrai os dados do arquivo .tar.gz
-c (Create) Cria um arquivo tar
-z (gZip) Utilizado para manipular o arquivo .tar.gz ou .tgz.
-j (Bzip2) Utilizado para manipular o arquivo .tar.bz2, .tar.bz ou .tbz.
-v (Verbose) Mostra na tela os arquivos que estão sendo comprimidos ou manipulados, um a um. Se não deseja ver os arquivos que estão sendo manipulados, você pode ignorar este parâmetro.
-f (File) Define que estamos trabalhando com arquivos.
Compactando um arquivo tar.gz
Por exemplo, se você possui um diretório /home/pedro e deseja compactar com tar.gz e nome backup-do-pedro.tar.gz utilize:
tar -czvf backup-do-pedro.tar.gz /home/pedro
Para compactar múltiplos diretórios utilize:
tar -czvf backup-geral.tar.gz /home/pedro /home/maria /home/jose
Descompactando um arquivo tar.gz
Para descompactar um arquivo tar.gz , utilize :
tar -xzvf nomedoarquivo.tar.gz
Embora a compactação gzip seja utilizada com mais frequência para criar arquivos .tar.gz ou .tgz o tar também suporta compactação bzip2. Isso nos permite criar arquivos compactados com bzip2, denominados arquivos .tar.bz2, .tar.bz ou .tbz.
O Gzip é mais rápido, mas geralmente comprime um pouco menos, criando o arquivo um pouco maior. O Bzip2 é mais lento, mas comprime um pouco mais, criando o arquivo um pouco menor.
Para utilizar a compactação com bzip2, basta substituir o -z para gzip nos comandos por um -j para bzip2.
O PHP é uma linguagem de script rica em recursos, mas quando utilizada de forma incorreta , intencionalmente ou não, pode comprometer grande parte do servidor web ou seus dados.
Através do arquivo php.ini em disable_functions, vamos criar uma lista de funções que devem ser desabilitadas por motivos de segurança.
Localizando o arquivo php.ini correto no servidor.
O primeiro passo é encontrar o arquivo php.ini correto no servidor. Existem vários cenários em um servidor web em que são criados vários arquivos php.ini . Por exemplo, se utilizamos o php-fpm com múltiplas versões do php instaladas em nosso servidor, haverá um php.ini para cada versão… Neste caso você deverá procurar o php.ini responsável por cada versão. O local correto irá variar dependendo de sua Distribuição Linux, se utiliza algum Painel de controle ou não , etc.
A forma mais simples de localizar o php.ini correto em nosso servidor é executando um arquivo php que nos traga através de “phpinfo()” todas as configurações de nosso php.
Crie um arquivo info.php em alguma url ativa em seu servidor web e insira
<?php
phpinfo();
?>
Acesse através de seu navegador web o arquivo info.php. Serão exibidas várias informações úteis sobre o php ativo nessa URL.
Localize: “Loaded Configuration File” . Este é o caminho correto para o php.ini que desejamos . Copie o caminho para php.ini , nós vamos utilizá-lo a seguir para informar em disable_functions as funções que desejamos desabilitar.
Acesse seu servidor linux utilizado o ssh e edite o arquivo php.ini
Em tempo, recomendo que por motivos de segurança desabilite allow_url_fopen e allow_url_include:
allow_url_fopen=Off
allow_url_include=Off
Salve (Ctrl+o) e saia do nano (Ctrl+x)
Reinicie o httpd server
Se utiliza o Apache e não possui o php-fpm:
Para CentOS/RedHat:
systemctl restart httpd
ou
service httpd restart
Para Debian/Ubuntu:
service apache2 restart
Se utiliza o PHP-FPM
O PHP-FPM (FastCGI Process Manager ), é um manipulador do PHP que funciona a parte, como um serviço e não um módulo. A forma correta de reiniciar irá variar dependendo de como foi instalado em seu servidor .
Para simplificar, acesse seu arquivo info.php criado anteriormente e note que em ” Loaded Configuration File” haverá um nome parecido com “php-fpmxxx” esse será o nome do processo que você deverá reiniciar .
Nome do processo php-fpm .Exemplo php-fpm72
Com as informações acima reinicie o serviço substituindo “php-fpmxxx” pelo nome encontrado em seu servidor. :
Para CentOS/RedHat:
systemctl restart php-fpmxxx
ou
service php-fpmxxx restart
Para Debian/Ubuntu:
service php-fpmxxx restart
Para se certificar que as configurações foram atualizadas, acesse novamente seu arquivo info.php e verifique em disable_functions se a lista de funções estão sendo exibidas.
Nota Final: Para informação, utilizando o php-fpm existem ainda outras formas de desabilitar as funções que não foram abordadas neste post.
FTP ou File Transfer Protocol é o protocolo de rede padrão da camada de aplicação usado para transferir o arquivo do cliente para o servidor.
O FTP simples é um protocolo inseguro porque todas as senhas e dados são transferidos em texto não criptografado. Ao usar o TLS, toda a comunicação será criptografada, tornando o FTP muito mais seguro.
O Pure-FTPd é um servidor FTP gratuito, com forte foco na segurança do software. É uma excelente opção, se deseja fornecer um serviço de FTP rápido, seguro e leve com muitos recursos .
Neste tutorial vamos abordar como habilitar o TLS no Pure-FTPd e criar um certificado SSL para ser utilzado pelo Pure-FTPd.
Primeiro Passo – Instalar OpenSSL
O OpenSSL é necessário para que TLS funcione. Para instalar utilize:
yum -y install openssl
Segundo Passo – Configurando Pure-FTPd
Edite o arquivo de configuração
nano /etc/pure-ftpd/pure-ftpd.conf
Para permitir sessões FTP e TLS, descomente removendo # e altere TLS para 1
TLS 1
Descomente as linhas abaixo removendo “#”
TLSCipherSuite HIGH
CertFile /etc/ssl/private/pure-ftpd.pem
salve e saia do nano ( CTRL+o , Ctrl+x)
Terceiro Passo – Criar o Certificado SSL para o TLS
Para utilizar o TLS, precisamos criar um certificado SSL. O primeiro passo é criar o local onde será armazenado nosso certificado.
mkdir -p /etc/ssl/private/
Agora, vamos gerar o certificar SSL com o comando :
Country Name (2 letter code) [XX]: <-- Digite a sigla do seu País (exemplo "BR").
State or Province Name (full name) []:<-- Digite seu estado ( exemplo : Minas Gerais)
Locality Name (eg, city) [Default City]:<-- Digite sua cidade
Organization Name (eg, company) [Default Company Ltd]: < -- Digite o nome de sua empresa ou organização.
Organizational Unit Name (eg, section) []:<-- Digite o setor responsável. (exemplo: Departamento de TI)
Common Name (eg, your name or your server's hostname) []:<-- Digite o nome de seu hostname
Email Address []:<-- Digite o e-mail de contato
Altere as permissões do arquivo SSL
chmod 600 /etc/ssl/private/pure-ftpd.pem
Reinicie o Pure-FTP
systemctl restart pure-ftpd.service
Feito ! Agora , você poderá se conectar utilizando seu programa de FTP configurando para utilizar TLS . Quando conectar será exibido informações sobre o certificado do Servidor com as informações que digitou anteriormente.
LEMP é um grupo de Software Livre. A sigla LEMP significa Linux, Nginx (pronuncia-se Engine x), MySQL e PHP .
Nginx é um software de servidor Web de código aberto robusto, pequeno, de alto desempenho, servidor proxy reverso e também servidor proxy de E-mail. Os dados do site serão armazenados em um banco de dados MySQL (usando MariaDB) e o conteúdo dinâmico será processado pelo PHP 7.4.
O Pré Requisito para continuar com esse tutorial é que você já tenha o Linux CentOS 7 instalado.
Primeiro passo – Instalar o Nginx
No CentOS o Nginx não está disponível no repositório padrão. Vamos adicionar o repositório EPEL para que possamos instalar o Nginx através do yum.
yum install epel-release
Com o repositório EPEL instalado no servidor, vamos instalar o nginx
yum install nginx
Vamos iniciar o nginx
systemctl start nginx
Nós já podemos acessar utilizando o IP de seu servidor, a página “default” do nginx e certificar que tudo está ok. Caso não saiba ou tenha certeza de qual é o IP utilize:
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
ou
curl http://icanhazip.com
Se está utilizando o CentOS 7, provavelmente precisará de uma nova regra ao Firewall padrão (firewalld), para permitir tráfego na porta 80.
Você verá a página Default do NGINX, que é exibida para fins de informação e teste.
Página Default do NGINX
Segundo Passo – Instalar MySQL(MariaDB)
Agora que temos o servidor web NGINX instalado e configurado, vamos instalar o MariaDB, que irá armazenar e gerenciar os dados do site. O MariaDB é mantido pela comunidade de desenvolvedores originais do antigo e conhecido MySQL.
O MariaDB vem com repositórios padrão do CentOS, bastaria utilizar o yum para instala-lo rapidamente. Porém nós desejamos instalar o MariaDB 10.4, que não é a versão disponível como padrão . Após atualizar o servidor com yum , vamos adicionar o repositório do MariaDB e definir a versão ‘0.4
yum update -y;
Crie o arquivo abaixo e insira:
nano /etc/yum.repos.d/MariaDB.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
EOF
Atualize o cache do yum
yum makecache fast
Instale o MariaDB
yum -y install MariaDB-server MariaDB-client
Vamos dar um start no MariaDB e habilita-lo para iniciar após o reboot.
systemctl start mariadb
systemctl enable mariadb
Com o MariaDB (MySQL) iniciado, precisamos executar um script de segurança que irá remover algumas configurações default e deixará nossa instalação mais segura.
mysql_secure_installation
A primeira opção irá perguntar qual é a senha do root para o MariaDB. Como acabamos de instalar o MariaDB, você deverá deixar esta opção em branco e pressionar enter para continuar. Na próxima questão será solicitado que digite uma senha para o root do MariaDB e confirme.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
New password: password
Re-enter new password: password
Password updated successfully!
Reloading privilege tables..
... Success!
Para as outras questões digite Y.
Remove anonymous users? [Y/n] Y
...
Disallow root login remotely? [Y/n] Y
...
Remove test database and access to it? [Y/n] Y
...
Reload privilege tables now? [Y/n] Y
Teceiro Passo – Instalar o PHP 7.4
O PHP é o responsável em processar o código para exibir conteúdo dinâmico. Ele poderá executar scripts, conectar-se ao bancos de dados MySQL para obter informações e entregar o conteúdo processado ao seu servidor da Web para exibição.
O primeiro passo será instalar o repositório do CentOS que contém os pacotes de instalação do PHP 7.4
Nós já temos agora, o php 7.4 e componentes instalados no servidor mas precisamos fazer algumas modificações para manter o servidor mais seguro.
Edite o arquivo principal de configuração do php:
nano /etc/php.ini
Vamos configurar o PHP para aceitar apenas URLs de arquivos que realmente existem no servidor. Isso atenua uma vulnerabilidade de segurança em que o interpretador PHP pode ser induzido a permitir a execução de código arbitrário se o arquivo .php solicitado não estiver presente no sistema de arquivos.
Localize cgi.fix_pathinfo altere para 0 , isso irá desabilitar essa função.Lembre-se de Remover o “;” antes do nome para descomentar essa função.
cgi.fix_pathinfo=0
Salve e saia do editor nano. ( ctrl+x , y)
Abra e edite o arquivo de configuração do php-fpm www.conf:
nano /etc/php-fpm.d/www.conf
Procure a linha “listen =” e modifique conforme abaixo:
listen = /var/run/php-fpm/php-fpm.sock
Localize listen.owner e listen.group . Descomente removendo o “;” antes das funções e altere para :
listen.owner = nginx
listen.group = nginx
Localize user e group. Altere os valores de apache para nginx
user = nginx
group = nginx
Salve e saia do editor nano. ( ctrl+x , y)
Agora, precisamos apenas iniciar nosso processador de PHP e habilitar para iniciar após o boot.
systemctl start php-fpm
systemctl enable php-fpm
Quarto Passo – Configurar Nginx para processar páginas PHP 7.2
Agora vamos criar um novo arquivo de configuração para o Nginx . Substitua em server_name “nome_dominio_ou_IP_do_Seu_Servidor” para o IP de seu servidor :
nano /etc/nginx/conf.d/default.conf
Insira o código abaixo:
server {
listen 80;
server_name nome_dominio_ou_IP_do_Seu_Servidor;
# note that these lines are originally from the "location /" block
root /usr/share/nginx/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Salve e saia do editor nano. ( ctrl+x , y)
Reinicie o nginx para que as modificações sejam carregadas.
systemctl restart nginx
Para Finalizar, vamos criar um arquivo de teste em php que trará informações sobre nosso servidor e php .
nano /usr/share/nginx/html/info.php
Insira o código:
Salve e saia do editor nano. ( ctrl+x , y) .
Agora acesse :
http://ip_do_seu_servidor/info.php
.
Será exibido uma página semelhante a :
Agora você tem o LEMP instalado e configurado em seu servidor da melhor forma possível. Com estas configurações você poderá hospedar em seu servidor os mais diversos sistemas, como por exemplo WordPress, Joomla, etc…