Como instalar e configurar, Linux, Nginx, MySQL, PHP 7 no CentOS 7 (LEMP)

LEMP - Linux, Nginx, Mysql, PHP

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.

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.




Adicionando nova regra ao Firewalld

firewall-cmd --permanent --zone=public --add-service=http

ou

firewall-cmd --permanent --zone=public --add-port=80/tcp

Restart firewalld

systemctl restart firewalld.service

Abra seu Browser e acesse:


http://IP_do_Seu_Servidor

Você verá a página Default do NGINX, que é exibida para fins de informação e teste.

Página Default do NGINX
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, vamos utilizar o Yum para instalá-lo.

yum install mariadb-server mariadb

Vamos iniciar o MariaDB no servidor e habilitá-lo para iniciar automaticamente 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


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.2

wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm
rpm -Uvh remi-release-7.rpm

Habilitar o repositório do php72:

yum install yum-utils -y
yum-config-manager --enable remi-php72

Instalar pacotes do PHP:

yum --enablerepo=remi,remi-php71 install php-fpm php-common

Instalando módulos comuns:

yum --enablerepo=remi,remi-php71 install php-opcache php-pecl-apcu php-cli php-pear php-pdo php-mysqlnd php-pgsql php-pecl-mongodb php-pecl-redis php-pecl-memcache php-pecl-memcached php-gd php-mbstring php-mcrypt php-xml

Configurando o processamento do PHP

Nós já temos agora, o php 7.2 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:

phpinfo

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 :

PHP Info 7.2

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…

Espero que tenha gostado!

Please follow and like us:

Segurança do phpMyAdmin contra ataque de Brute Force

phpMyAdmin com reCAPTCHA

Como padrão a página de login do phpMyAdmin apresenta apenas os campos Usuário e Senha, permitindo qualquer um com o nome de um usuário e senha de banco de dados válidos em seu servidor acessar e fazer alterações no banco de dados.

Um cracker poderia se utilizar de algum script de Brute Force para executar um “ataque de dicionário” a fim de encontrar sua senha com combinações de palavras, letras e símbolos.

Neste tutorial vamos adicionar uma camada extra de segurança ao phpMyAdmin a fim de impedir este tipo de ataque. Para isso, vamos utilizar o que considero ser a melhor solução até a data deste post, o Google Recaptcha . Antes de qualquer login será preciso resolver o captcha, impedindo qualquer tipo de ataque de Brute Force ao phpMyAdmin.

Mãos a obra!

Nota – Antes de começar:
Este passo a passo foi escrito utilizando um servidor com Painel CWP Pro (CentOS Web Panel) e CentOS 6, porém já testado em servidores com CentOS, Ubuntu, com ou sem Painel de controle (foram necessárias apenas algumas adaptações lógicas).


Passo 1:

Acesse a página do Google Recaptcha , em “Register a new site” :

Configurando reCAPTCHA do Google
  • Label : utilize seu dominio ou o hostname do servidor.
  • Marque reCAPTCHA v2
  • Domains: informe o IP e o nome de seu hostname
  • Clique em Register. Na tela a seguir copie o código de
    site key e secrect key . Vamos utilizá-los a seguir.

Passo 2:

Nota: os passos abaixo se referem a um servidor com o Painel CentOS Web Panel. Se não utiliza este Painel, localize o local de instalação do seu phpMyAdmin e siga os passos…

  • Acesse o local de instalação do phpMyAdmin
cd /usr/local/cwpsrv/var/services/pma/
  • Edite o arquivo de configuração
nano config.inc.php
  • Adicione as Linhas abaixo, substituindo
    Site key e Secret key pelos valores gerados no passo 1.
$cfg[‘CaptchaLoginPublicKey’] = ‘Site key’;
$cfg[‘CaptchaLoginPrivateKey’] = ‘Secret key’; 
  • Salve e saia do editor nano ( “ctrl+x “ e “y” )

Pronto, isso é tudo! Agora acesse seu phpMyAdmin. A partir de agora, você terá uma camada a mais de segurança no login :

Please follow and like us:

Como instalar o Locate no Linux

Como instalar e Utilizar o Locate

Locate é um utilitário de linha de comando para encontrar arquivos por nome no Linux, semelhante ao comando find. Ao que se propõe é mais rápido e eficiente em várias situações.

O Locate se utiliza do programa updatedb para criar um banco de dados com os nomes de arquivos no servidor Linux, dessa forma, fica bastante simples e rápido encontrar qualquer arquivo por nome.

Para instalar o Locate utilize:

CentOS/Red Hat

yum -y install mlocate

Ubuntu/Debian

apt-get install locate

Após a instalação precisamos atualizar o banco de dados que será o índice utilizado pelo locate:

updatedb

Exemplos de utilização do Locate:

Nesse primeiro e mais simples exemplo, desejamos encontrar o local de ifcfg-eth0, para isso utilizamos o comando :

locate ifcfg-eth0

Exemplo do comando Locate

Resultado do primeiro exemplo

Para ver a lista de parâmetros que podem ser utilizados pelo comando, utilize “locate –help”.

Abaixo seguem, exemplos com alguns desses parâmetros e formas de utilizá-los:

– Nesse exemplo utilizamos o parâmetro -c , para obter apenas o número de ocorrências do termo pesquisado

Comando Locate com opção -c

– No exemplo abaixo vamos atualizar nosso índice com resultados apenas dentro do diretório /home e armazenar o resultado na variável $HOME”

updatedb -l 0 -o $HOME/.mlocate.db -U /home

A seguir faremos uma pesquisa apenas com os resultados armazenados na variável $HOME:

locate -d $HOME/.mlocate.db [termo da pesquisa]

Locate em home com parâmetro -c

Locate em home com parâmetro -c

Locate em home por .html

Note que ao buscarmos a palavra *.html em $HOME (caso possua este tipo de arquivo em home) serão exibidos inúmeros resultados com o caminho completo deste termo da pesquisa, todos dentro do diretório  home.

– Com o parâmetro -i podemos fazer buscas ignorando se as letras do “termo da pesquisa”  estarão em Maiúscula ou minúscula .

[root@Exemplo ~]# locate -i [termo da pesquisa]

Existem ainda várias outras formas de utilizar o comando locate no linux. Acima foram descritos o que julguei ser o básico para iniciar a utilizar esse comando.

Dica:

Em muitos servidores, principalmente com muitos arquivos , é uma boa ideia criar uma entrada na cron para atualizar updatedb diariamente durante um momento de pouco uso do servidor. Abaixo segue um exemplo de como fazer isso :

crontab -e
      •   Provavelmente o conteúdo será aberto utilizando o editor vim. Para inserir nossos comandos pressione em seu teclado a tecla “Insert”, isso irá habilitar a inserção de novos comandos neste arquivo. Ao fazer isso certifique-se que ao final da tela será exibido “–INSERT –“
      • Insira o seguinte comando:
        23 0 * * * updatedb
      • Para salvar e sair do editor vim,  primeiro, digite a tecla “Esc”, a seguir utilize :wq , isso irá gravar as alterações e sair do vim.
      • Agora a cron do servidor irá executar diariamente às 23 horas o comando updatedb.
    • Referência:
      Package: mlocate (0.26-1): encontrar fichieros rapidamente no sistema de ficheiros, baseado no nome
Please follow and like us:

Como alterar a porta do SSH

SSH Secure Shell

Uma das primeiras tentativas de um cracker é identificar as portas em que os serviços como SSH, FTP, etc, estão utilizando. Identificado a porta, um cracker poderia iniciar alguns tipos de ataques como por exemplo,  força bruta, a fim de descobrir o usuário e senha para posterior invasão.

Como medida de segurança, o melhor a fazer é modificar a porta de conexão ao SSH.

1 – edite o arquivo de configuração do ssh

nano /etc/ssh/sshd_config

2 – Localize “Port 22” e modifique para a nova porta que deseja se conectar.
Procure não utilizar portas semelhantes as que já estão sendo utilizadas em seu servidor ( exemplo: 22, , 81, etc…) .

Port 36509

Salve e saia do editor nano ( “ctrl+x “ e “y” )
4 – Reinicie o sshd .

service sshd restart

ou (se utiliza CentOS 7 )

systemctl restart ssh

Na próxima vez que se conectar ao SSH , será preciso que informe a nova porta. Lembre-se de atualizar a porta de conexão em seu firewall.

Please follow and like us: