O Node.js é um ambiente de execução de código aberto Javascript para facilmente construir do lado do servidor e aplicações de rede. A plataforma roda em Linux, OS X, FreeBSD e Windows, e suas aplicações são escritas em JavaScript. Os aplicativos podem ser executados na linha de comando, mas vamos ensiná-lo a executá-los como um serviço, de modo que será reiniciado automaticamente no reinício ou falha, para que você possa usá-los em um ambiente de produção.


Neste tutorial, vamos cobrir a criação de um ambiente de produção Node.js que é composto de duas máquinas CentOS 7; um servidor irá executar aplicativos Node.js geridos pela PM2, enquanto o outro vai fornecer aos usuários o acesso ao aplicativo através de um Nginx com proxy reverso apontando para o servidor de aplicativos.

Pré-requisitos

Este guia utiliza dois servidores CentOS 7 com rede virtual privada (os Clouds da LoopHOST possuem esta rede).

Utilizaremos a seguinte nomenclatura:

  • app: O servidor onde o Node.js irá executar, e o PM2
  • web: O servidor que iremos instalar o nginx, que irá agir como um proxy reverso. Os usuários irão acessar o ip público deste servidor, para chegar até a sua aplicação executada no Node.js.

É possível utilizar um único servidor para este tutorial, mas você precisará fazer algumas alterações ao longo dele. Simplesmente utilize o IP local da máquina (127.0.0.1) ao invés de utilizar o ip privado do servidor app.

Um diagrama de como sua infra estrutura ficará após seguir este tutorial:

Reverse Proxy to Node.js Application

Instalando o Node.js

Nós iremos criar a instalar a última versão estável do Node.js, no servidor app.

Primeiro, utilize o Yum para instalar as dependências necessárias:

  • yum install gcc-c++ make

O próximo passo é fazer o download do código fonte do Node.js.

Vá até a página de download do Node.js e encontre o link do ‘Source Code’. Copie o link e guarde.

Entre no seu diretório, e então substitua o link que copiou após o comando WGET.. exemplo abaixo:

  • cd ~
  • wget https://nodejs.org/dist/v0.12.5/node-v0.12.5.tar.gz

Agora extraia o arquivo baixado com este comando:

  • tar xvf node-v*

Acesse o diretório que foi extraído:

  • cd node-v*

Configure e compile o Node.js com estes comandos:

  • ./configure
  • make

Isto irá levar vários minutos para completar. Quando finalizar, instale o Node.js com este comando:

  • make install

Se voc6e quiser deletar o código fonte que baixou, após instalar, utilize o comando rm:

  • cd ~
  • rm -rf node-v*

A aplicação de execução do Node.js agora está instalado.

Instalar NPM (Node Package Manager)

Para ter acesso fácil a vários pacotes de Node, iremos instalar o npm.

Primeiro, instalamos o repositório EPEL com o comando abaixo:

  • yum install epel-release

Com o repositório instalado, agora podemos utilizar o yum para instalar a aplicação do npm:

  • yum install npm

Agora que temos o Node.js e o npm instalados, podemos prosseguir.

Instalar PM2

Agora vamos instalar PM2, que é um gerenciador de processos para aplicações Node.js. PM2 oferece uma maneira fácil de gerenciar e daemonize aplicações (executá-los como um serviço).

Usaremos Nó Embalado Modules (NPM), que é basicamente um gerenciador de pacotes para módulos nó que instala com Node.js, para instalar PM2 em nosso servidor de aplicativo. Utilize este comando para instalar o PM2:

    sudo npm install pm2@latest -g

Gerenciar aplicativos com PM2

PM2 é simples e fácil de usar. Nós vamos cobrir alguns usos básicos da PM2.

A primeira coisa que você vai querer fazer é usar o comando start pm2 para executar o aplicativo que você criou em segundo plano.. aqui iremos iniciar o arquivo hello.js:

    pm2 start hello.js

Isso também adiciona o aplicativo à lista de processos da PM2, que é emitido toda vez que você iniciar um aplicativo:
Saída:

┌──────────┬────┬──────┬───────┬────────┬─────────┬────────┬─────────────┬──────────┐
│ │ App nome modo ID de │ │ │ pid memória │ │ estado reinício uptime │ │ │ assistindo
├──────────┼────┼──────┼───────┼────────┼─────────┼────────┼─────────────┼──────────┤
│ │ Olá 0 │ │ garfo 30099 │ │ on-line 0 │ │ 0s 14.227 MB │ │ deficientes
└──────────┴────┴──────┴───────┴────────┴─────────┴────────┴─────────────┴──────────┘

Como você pode ver, PM2 atribui automaticamente um nome de App (com base no nome do arquivo, sem a extensão .js) e um ID de PM2. PM2 também mantém outras informações, como o PID do processo, o seu estado actual, e uso de memória.

Os aplicativos que estão sendo executados sob PM2 será reiniciado automaticamente se o aplicativo falha ou é morto, mas um passo adicional deve ser tomado para obter o aplicativo para iniciar na inicialização do sistema (boot ou reinicialização). Felizmente, PM2 oferece uma maneira fácil de fazer isso, o subcomando inicialização.

O subcomando startup gera e configura um script de inicialização para lançar PM2 e seus processos gerenciados em botas de servidor. Você também deve especificar a plataforma que está sendo executado, que é centos, no nosso caso:

    pm2 startup centos

A última linha da saída resultante incluirá um comando (que deve ser executado com privilégios de superusuário) que você deve executar:
Saída:

[PM2] Você tem que executar este comando como root. Execute o seguinte comando:
      sudo env PATH=$PATH:/usr/local/bin pm2 startup centos -u sammy

Execute o comando que foi gerado (semelhante à saída destacado acima) para definir PM2 para iniciar no boot (use o comando de sua própria saída):

    sudo env PATH=$PATH:/usr/local/bin pm2 startup centos -u sammy

Outro uso PM2 (Opcional)

PM2 oferece muitas subcomandos que permitem que você gerencie ou procurar informações sobre suas aplicações. Note que a execução PM2 sem nenhum argumento irá mostrar uma página de ajuda, incluindo o uso exemplo, que cobre o uso PM2 mais detalhadamente do que esta seção do tutorial.

Pare um aplicativo com este comando (especificar o nome PM2 App ou id):

pm2 stop exemplo

Reiniciar uma aplicação com este comando (especificar o nome PM2 App ou id):

    pm2 restart example

A lista de aplicações actualmente geridos pela PM2 também pode ser olhou para cima com o subcomando list:

    pm2 list

Mais informações sobre um aplicativo específico pode ser encontrado usando subcomando info (especificar o nome PM2 App ou id) ::

    pm2 info example

O monitor de processo PM2 pode ser puxado para cima com o subcomando monit. Isso exibe o status do aplicativo, CPU e uso de memória:

pm2 monit

Agora que a sua aplicação Node.js está sendo executado e gerido pela PM2, vamos configurar o proxy reverso.

Agora que a sua aplicação está em execução, e escutando em um endereço IP privado, você precisa criar uma maneira para que seus usuários para acessá-lo. Vamos configurar um servidor web Nginx como um proxy reverso para esta finalidade. Este tutorial irá configurar um servidor Nginx a partir do zero. Se você já tem uma configuração do servidor Nginx, você pode simplesmente copiar o bloco localização no bloco de servidor de sua escolha (verifique se o local não está em conflito com qualquer um dos conteúdos existentes do seu servidor web).

No servidor Web, vamos instalar o pacote de liberação Epel usando o yum:

    sudo yum install epel-release

Em seguida, instale Nginx:

sudo yum install nginx

Agora, abra o arquivo de configuração do Nginx para edição:

sudo vi /etc/nginx/nginx.conf

Encontre a linha onde a localização / é definido, dentro do bloco de servidor padrão. Deve ser algo parecido com isto:
trecho nginx.conf – localização / (antes)

        location / {
}

Substituí-lo com o seguinte bloco de código e não se esqueça de substituir o seu próprio nome de domínio para a directiva server_name (ou endereço IP se você não tem um domínio configurado), eo endereço IP privado do servidor de aplicativos para o APP_PRIVATE_IP_ADDRESS. Além disso, altere a porta (8080), se a aplicação está configurada para escutar em uma porta diferente:
trecho /etc/nginx/nginx.conf – localização / (depois)
   

location / {
proxy_pass http://APP_PRIVATE_IP_ADDRESS:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection ‘upgrade’;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}

Isso configura o servidor web para responder a solicitações na sua raiz. Supondo que o nosso servidor está disponível em example.com, acessando http://example.com/ através de um navegador web seria enviar o pedido para o endereço IP privado do servidor de aplicativos na porta 8080, que seria recebido e respondeu a pelo Node.js aplicação.

Você pode adicionar blocos de localização adicionais para o mesmo bloco servidor para fornecer acesso a outros aplicativos no mesmo servidor web. Por exemplo, se você também estavam executando outro aplicativo Node.js no servidor de aplicativo na porta 8081, você pode adicionar este bloco local para permitir o acesso a ele através http://example.com/app2:
Nginx Configuração – Localizações Adicionais

    location /app2 {
proxy_pass http://APP_PRIVATE_IP_ADDRESS:8081;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection ‘upgrade’;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}

Uma vez que você terminar de adicionar os blocos de localização para as suas aplicações, salvar e sair.

No servidor Web, reinicie Nginx e habilitá-lo para iniciar no boot:

    sudo systemctl restart nginx
sudo systemctl enable nginx

Assumindo que o seu aplicativo Node.js está em execução, e suas configurações de aplicativos e Nginx estão corretas, você deve ser capaz de acessar seu aplicativo através do proxy reverso do servidor web. Experimentá-lo, acessando o URL do seu servidor web (seu endereço IP público ou nome de domínio).

Você tem agora a sua aplicação Node.js correndo atrás de um proxy reverso Nginx. Esta configuração de proxy reverso é flexível o suficiente para fornecer a seus usuários acesso a outros aplicativos ou conteúdo web estática que você deseja compartilhar. Boa sorte com seu desenvolvimento Node.js!

Além disso, se você estiver olhando para criptografar as transmissões entre o servidor web e seus usuários, aqui está um tutorial que irá ajudá-lo a obter HTTPS (TLS / SSL) apoio configurar.

 

CloudFlare é uma empresa que fornece conteúdo de rede de distribuição (CDN) e serviços de DNS distribuídos, agindo como um proxy reverso para websites. Os Serviços gratuitos e pagos do CloudFlare pode ser utilizada para melhorar a segurança, velocidade e disponibilidade de um site de uma variedade de maneiras. Neste tutorial, vamos mostrar-lhe como usar o serviço de nível gratuito CloudFlare para proteger seus servidores web contra ataques DDoS em curso com base em HTTP, utilizando a opção ‘I’m Under Attack’.  Este modo de segurança pode mitigar ataques DDoS, apresentando uma página intersticial para verificar a legitimidade de uma conexão antes de passá-lo para seu servidor web.

Este tutorial pressupõe que você tenha o seguinte:

Um servidor web
Um domínio registrado que aponta para o seu servidor web
O acesso ao painel de controle do registro de domínio que emitiu o domínio

Você também deve se inscrever para uma conta CloudFlare antes de continuar. Note que este tutorial vai exigir o uso de servidores de nomes do CloudFlare.

Antes de usar qualquer um dos recursos CloudFlare, você deve configurar seu domínio para usar as DNS do CloudFlare.

Se você não tiver feito isso, faça o login para CloudFlare.

Após o login, você será levado para a página Get Started on CloudFlare. Aqui, você deve adicionar o seu site no CloudFlare:

Add a website
Digite o nome de domínio que você deseja usar no CloudFlare e clique no botão Scan para começar. Você deve ser levado para uma página parecida com esta:

Scanning your DNS records

Isso leva cerca de um minuto. Quando estiver completo, clique no botão Continuar.

A próxima página mostra os resultados da verificação do registro DNS. Certifique-se de que todos os seus registros DNS existentes estão presentes, pois estes são os registros que CloudFlare irá usar para resolver requisições para o seu domínio. No nosso exemplo, nós usamos cockroach.nyc como domínio:

Add DNS Records

Note-se que, para os registros A e CNAME que apontam para o seu servidor web, a coluna Status deve ter uma nuvem de laranja com uma seta que atravessa ele. Isso indica que o tráfego fluirá através de proxy reverso CloudFlare antes de ir para o seu servidor.

Em seguida, selecione o seu plano de CloudFlare. Neste tutorial, vamos selecionar a opção de plano gratuito. Se você quiser pagar por um plano diferente, porque você quer recursos CloudFlare adicionais, sinta-se livre para fazê-lo:

Select CloudFlare PlanA próxima página irá exibir uma tabela de servidores de nomes atuais do seu domínio e aquilo que deve ser alterado para. Dois deles deve ser alterado para servidores de nomes CloudFlare, e as entradas remanescentes devem ser removidas. Aqui está um exemplo do que a página pode olhar como se o seu domínio está usando os servidores de nomes DigitalOcean:

Change your nameservers

Para alterar servidores de nomes do seu domínio, faça o login para seu painel de controle do registrador de domínios e fazer as mudanças de DNS que o CloudFlare mostraste-o. Por exemplo, se você comprou seu domínio através de um registrador como GoDaddy ou NameCheap, você precisará fazer login no painel de controle do registrador apropriado e fazer as mudanças lá.

Quando você terminar de alterar os seus servidores de nomes, clique no botão Continuar. Pode levar até 24 horas para que os servidores de nomes para mudar, mas normalmente leva apenas alguns minutos.

Após você atualizar suas entradas de DNS’s, poderá levar um tempo para a propagação das alterações. Durante este período, você poderá ver a seguinte mensagem:

Pending nameservers

O status pendente significa que o CloudFlare está esperando para os servidores de nomes para atualizar para aqueles mostrados (por exemplo olga.ns.cloudflare.com e rob.ns.cloudflare.com). Se você tiver alterado servidores de nomes do seu domínio, tudo que você tem a fazer é esperar e volte mais tarde para que o status esteja atualizado. Se você clicar no botão Verificar novamente Nameservers ou navegar para o painel de instrumentos do CloudFlare, ele vai verificar se os servidores de nomes já atualizaram.

Depois que a atualização nameservers, seu domínio estará usando DNS CloudFlare e você vai ver que tem um status ativo, como este:

Active Status

Isto significa que o CloudFlare atua como um proxy reverso para o seu site, e você tem acesso a qualquer recursos estão disponíveis para o plano que você se inscreveu. Se você estiver usando o nível gratuito, como estamos neste tutorial, você terá acesso algumas das características que podem melhorar a segurança do seu site, velocidade e disponibilidade. Não vamos cobrir todas as funções deste tutorial, como estamos nos concentrando em mitigar ataques DDoS em curso, mas eles incluem CDN, SSL, cache de conteúdo estático, um firewall (antes do tráfego atinge seu servidor), e ferramentas de análise de tráfego.

Observe também o Resumo das Configurações, logo abaixo do seu domínio irá mostrar o nível do seu site atual de segurança (meio por padrão) e algumas outras informações.

Quando estiver tudo pronto, vamos dar uma olhada no que eu estou sob configuração do Modo de Ataque no firewall CloudFlare.

Por padrão, a segurança do firewall do CloudFlare é definido como Médio. Isso oferece alguma proteção contra os visitantes que são classificados como uma ameaça moderada, apresentando-as com uma página desafio antes de permitir-lhes continuar a seu site. No entanto, se o seu site é o alvo de um ataque DDoS, que pode não ser suficiente para manter seu site operacional. Neste caso, o que eu sou Under Attack Mode pode ser adequado para você.

Se você ativar esse modo, qualquer visitante de seu site será presenteado com uma página intersticial que executa algumas verificações de navegador e atrasa o visitante por cerca de 5 segundos antes de passá-los para o seu servidor. Ele será parecido com este;

Interstitial Page

Se as verificações passarem, o visitante será permitido através de seu site. A combinação de prevenir e retardar visitantes mal-intencionados se conectem a seu local é muitas vezes suficiente para mantê-lo em funcionamento, mesmo durante um ataque DDoS.

Nota: Os usuários devem ter JavaScript e cookies ativados para passar a página intersticial. Se isso não for aceitável, considere usar a configuração de segurança “Alta” firewall em seu lugar.

Tenha em mente que você só deverá ativar o modo I’m Under Attack quando o seu site é a vítima de um ataque DDoS. Caso contrário, ele deve ser desligado para que ele não atrasar usuários normais acessem seu site sem nenhum motivo.

Se você quiser habilitar o modo I’m Under Attack, a maneira mais fácil é ir para a página de Visão Geral CloudFlare (a página padrão) e selecione-o no menu Quick Actions:

Under Attack Mode action

As configurações de segurança irá mudar imediatamente para ‘Under Attack’. Agora, todos os visitantes para o seu site vai ser apresentado com a página intersticial CloudFlare que foi descrito acima.

Como o que eu sou Under Attack Mode só deve ser usado durante emergências, você deve desativá-lo se você não está sob ataque. Para fazer isso, vá até a página CloudFlare Visão Geral e clique no botão Desabilitar:

Eu sou Under Attack habilitado

Em seguida, selecione o nível de segurança que você gostaria de mudar. O padrão e geralmente recomendado, o modo é Média:

I'm Under Attack enabled

Disable I'm Under Attack Mode

Ao efetuar a migração de um servidor para outro, normalmente migrar as regras do iptables faz parte do processo. Abaixo ensinamos como fazer isso:

Pre-requisitos

Necessitamos de dois servidores. O servidor de origem, que é aquele que queremos migrar, chamaremos de ‘Servidor A’. O servidor de destino, que é para onde as regras devem ir, chamaremos de ‘Servidor B’.

Você precisará ter acesso completo aos servidores, como root ou utilizando o su/sudo.

Ver regras existentes

Antes de migrar suas regras existentes, vamos primeiro conferir elas. Digite o seguinte no ‘Servidor A’:

  • sudo iptables -S
Saída (exemplo):
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 15.15.15.51/32 -j DROP

The example rules above will be used to demonstrate the firewall migration process.

Exportar Regras

O comando iptables-save escreve as regras para stdout (standard out / saída padrão). Isto deixa fácil exportar as regras para um arquivo.

No ‘Servidor A’, aquele que tem as regras que queremos migrar, digite o comando iptables-save seguido do nome do arquivo que irá conter as regras exportadas, como aqui:

  • cd ~
  • sudo iptables-save > iptables-export

Isto irá criar o arquivo iptables-export, em seu diretório root (que acessamos antes do comando).

Copiar as regras para o novo servidor

Nós precisamos copiar as novas regras para o servidor de destino, o ‘Servidor B’. A maneira mais fácil de fazer isto é utilizando o comando scp ou copiar e colar o conteúdo no novo servidor. Iremos demonstrar a utilização do comando scp para copiar o arquivo para a pasta /tmp.

No ‘Servidor A’, execute este comando scp. Assegure-se de substituir as partes em negrito para o IP e usuário do seu servidor:

  • scp iptables-export usuario@servidor_b_ip_address:/tmp

Após fornecer a sua senha, o arquivo será copiado para a pasta /tmp no novo servidor.

Importar as regras

Com as regras no novo servidor, agora precisamos carregá-las no nosso iptables do servidor novo. Caso suas regras contenham endereços IPs, certifique-se de alterá-los para os do novo servidor.

Após concluir as alterações, vamos utilizar o comando iptables-restore para restaurá-las.

No Server B, o servidor de destino, execute este comando:

  • sudo iptables-restore < /tmp/iptables-export

Isto irá carregar as regras para o seu iptables. Você poderá confirmar utilizando o comando sudo iptables -S

Salvar regras

No Ubuntu

Para salvar as regras de forma permanente, precisamos instalar o pacote iptables-persistent

  • sudo apt-get install iptables-persistent

Durante a instalação, você será perguntado se deseja salvar suas atuais regras. Responda ‘yes’ para salvar.

Para atualizar suas regras no future, caso faça alterações, digite o comando abaixo:

  • sudo invoke-rc.d iptables-persistent save

CentOS 6 and antigos

No CentOS 6 e mais antigos —CentOS 7 utilize FirewallD por padrão — você poderá utilizar o comando abaixo para salvar as regras:

  • sudo service iptables save

Isto irá escrever elas no arquivo /etc/sysconfig/iptables, que é carregado durante a inicialização do servidor.

Na nova atualização do filezilla, você poderá receber erros ou ter lentidão na conexão ao servidor.

Confira o passo-a-passo para solucionar o problema:

Abra o filezilla, e vá no menu ‘arquivo’ e em ‘gerenciador de sites’ (atalho: Ctrl + S).

Após a janela ser aberta, selecione a conta configurada (lembre-se de utilizar a porta 21) e na opção de ‘criptografia’ selecione a opção “Only use plain FTP (insecure)“.

Depois de feito estes procedimentos, você conseguirá efetuar a conexão normalmente

Download do filezilla:

https://filezilla-project.org/download.php

Caso você possua um servidor Cloud ou VPS com cPanel/WHM, poderá querer bloquear o envio de emails a partir de um determinado domínio. Para isso, é muito simples:

Digite como ROOT no SSH:

touch /etc/blockeddomains
echo "dominio.com.br" >> /etc/blockeddomains

Depois vá em: WHM > Exim Configuration Editor > Advanced Editor

Na primeira caixa de espaço disponível digite:
domainlist blocked_domains = lsearch;/etc/blockeddomains

Agora, procure por "data = :fail: demo accounts are not permitted to relay email" e logo abaixo cole o seguinte:

reject_domains:

driver = redirect
# RBL Blacklist incoming hosts
domains = blocked_domains
allow_fail
data = :fail: Connection rejected: SPAM source $domain is manually blacklisted.

Caso você possua um servidor Cloud ou VPS com cPanel/WHM, poderá deparar-se com o seguinte erro após instalar o RVSkin:

Para corrigir é muito simples, apenas digite:

/scripts/perlinstaller YAML::Syck