VPS: configuração básica

Este artigo integra o tutorial em três partes sobre como Configurar e Administrar um VPS para diversos usos, como hospedagem de sites, backups, etc. Para ter acesso às outras partes visite os links a seguir:


O presente texto objetiva documentar os passos gerais para a configuração inicial de um VPS (Virtual Private Server). Optou-se por escolher softwares e configurações que ofereçam um consumo baixo de memória, visto que o servidor de teste possui 128 MB de memória RAM disponível.

Segurança Básica

Os primeiros passos na configuração do servidor devem ser aqueles relacionados à segurança básica. É necessária a criação de um usuário que executará tarefas administrativas por intermédio do comando sudo. O acesso seguro será feito pelo servidor dropbear (mais leve que o openssh) via par de chaves pública/privada e o firewall iptables deixará abertas apenas as portas necessárias.

Senhas e Usuários

Fazer o primeiro login com a senha de root oferecida pela empresa. Mudar a senha do root para uma forte (que pode ser gerada no site www.random.org).

# passwd

Criar um usuário para administração, instalar o programa sudo (caso ainda não esteja instalado) e adicionar o usuário ao grupo sudo.

# adduser nome-do-usuário
# apt-get update && apt-get upgrade
# apt-get install sudo
# adduser nome-do-usuário sudo
# visudo

O comando visudo abre o arquivo /etc/sudoers para edição. A seguinte linha deve ser descomentada e alterada de:

# %sudo ALL=NOPASSWD: ALL

para:

%sudo ALL=(ALL) ALL

Assim, já é possível sair da conta root e fazer login com o novo usuário paraos próximos passos.

SSH

Instalação do Dropbear

O openssh será substituído pelo dropbear que, por sua vez, será gerenciado pelo xinetd:

# apt-get update && apt-get upgrade
# apt-get install dropbear
# apt-get install xinetd

Configurar o xinetd, criando o arquivo /etc/xinetd.d/dropbear com o seguinte conteúdo:

service dropbear
{
     socket_type  = stream  
     only_from    = 0.0.0.0  
     wait         = no  
     user         = root  
     protocol     = tcp  
     server       = /usr/sbin/dropbear  
     server_args  = -i -w  
     disable      = no  
     port         = número-da-porta  
     type         = unlisted  
}

É interessante mudar o valor de port para uma porta de acesso que seja diferente da padrão (22). Talvez 2222 ou alguma porta mais alta, como 50000. Os valores de server_args significam:

  • -i = Roda como serviço
  • -w = Não permite login do usuário root

Parar o servidor openssh, evitar que ele inicie ao boot e reiniciar o xinetd para que o dropbear passe a ser o servidor ssh padrão:

# invoke-rc.d ssh stop
# update-rc.d -f ssh remove
# invoke-rc.d xinetd restart

Login via chaves pública/privada

O login utilizando-se de um par de chaves pública/privada adiciona uma camada extra de segurança. Caso ainda não se possua um par de chaves, deve gerá-lo localmente (assumindo-se que há uma distribuição GNU/Linux instalada com openssh):

$ ssh-keygen -t dsa

Isso criará duas chaves, uma pública (id_dsa.pub) e uma privada (id_dsa) no diretório ~/.ssh. Será requisitada uma senha, que pode ser definida ou não.

Caso se possua uma chave privada, basta extrair a pública com o seguinte comando:

$ ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub

Em poder da chave pública, deve-se copiá-la para o servidor:

$ scp -P porta ~/.ssh/id_dsa.pub usuário@servidor:~

Fazer login no servidor e adicionar o conteúdo do arquivo id_dsa.pub ao arquivo ~/.ssh/authorized_keys, configurando as permissões necessárias:

$ ssh -p porta usuário@servidor
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ touch ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys
$ cat ~/id_dsa.pub >> ~/.ssh/authorized_keys
$ rm ~/id_dsa.pub

Modificar o arquivo /etc/xinetd.d/dropbear para permitir somente o login sem senha, adicionando a opção -s a server_args. Reiniciar o xinetd para que a mudança tenha efeito.

Firewall

A configuração do Firewall seguinte libera apenas as portas necessárias (por enquanto, 80 para o servidor web e a porta para acesso seguro). Colocar o seguinte conteúdo no arquivo /etc/iptables.up.rules:

*filter

# http://articles.slicehost.com/2010/4/30/ubuntu-lucid-setup-part-1

#  Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT

#  Accepts all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#  Allows all outbound traffic
#  You can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT

# Allows HTTP and HTTPS connections from anywhere (the normal ports for websites)
-A INPUT -p tcp --dport 80 -j ACCEPT
#-A INPUT -p tcp --dport 443 -j ACCEPT

# UN-COMMENT THESE IF YOU USE INCOMING MAIL!

# Allows POP (and SSL-POP)
#-A INPUT -p tcp --dport 110 -j ACCEPT
#-A INPUT -p tcp --dport 995 -j ACCEPT

# SMTP (and SSMTP)
#-A INPUT -p tcp --dport 25 -j ACCEPT
#-A INPUT -p tcp --dport 465 -j ACCEPT

# IMAP (and IMAPS)
#-A INPUT -p tcp --dport 143 -j ACCEPT
#-A INPUT -p tcp --dport 993 -j ACCEPT

#  Allows SSH connections (only 3 attempts by an IP every minute, drop the rest to prevent SSH attacks)
-A INPUT -p tcp -m tcp --dport PORTA -m state --state NEW -m recent --set --name DEFAULT --rsource
-A INPUT -p tcp -m tcp --dport PORTA -m state --state NEW -m recent --update --seconds 60 --hitcount 3 --name DEFAULT --rsource -j DROP
-A INPUT -p tcp -m state --state NEW --dport PORTA -j ACCEPT

# Allow ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

# log iptables denied calls (Can grow log files fast!)
#-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

# Reject all other inbound - default deny unless explicitly allowed policy
#-A INPUT -j REJECT
#-A FORWARD -j REJECT

# It's safer to just DROP the packet
-A INPUT -j DROP
-A FORWARD -j DROP

COMMIT

IMPORTANTE: mudar o valor de PORTA para a porta que reflita sua configuração de acesso do dropbear. Para que as regras tenham efeito a cada boot, é necessário adicionar o script na inicialização. Para tanto, adicionar um arquivo com o seguinte conteúdo em /etc/network/if-pre-up./iptables:

#!/bin/sh
/sbin/iptables-restore < /etc/iptables.up.rules

Também é necessário fazê-lo executável com o comando:

# chmod +x /etc/network/if-pre-up.d/iptables

Logs

O logwatch é uma ferramenta útil para acompanhar os logs do sistema via email. Instalação:

# apt-get install logwatch

Para configuração, verificar os arquivos de exemplo em /usr/share/logwatch/default.conf/.

Servidor de email

Por fim, é interessante deixar um servidor de email rodando, para receber via email os logs do sistema gerados pelo logwatch. Para tanto, vamos instalar o exim configurado com uma conta comum do gmail.

Instalação:

# apt-get install exim4-daemon-light mailutils

Configuração:

# dpkg-reconfigure exim4-config

passwd.client

*.google.com:email@gmail.com:senha

exim4.conf.localmacros

MAIN_TLS_ENABLE = 1

Para outros detalhes sobre este tipo de configuração de email, verificar a página GmailAndExim4.

Outras ações

Syslog

Para gerenciar os logs do sistema iremos utilizar o daemon syslog. O VPS de teste possui o rsyslogd, então vamos removê-lo:

# invoke-rc.d rsyslog stop
# update-rc.d -f rsyslog remove

Instalar syslogd:

# apt-get install inetutils-syslogd

Configurar syslogd:

# invoke-rc.d inetutils-syslogd stop
# rm -rf /var/log/*.log
# rm -rf /var/log/mail.*
# rm -rf /var/log/debug
# rm -rf /var/log/syslog
# rm -rf /var/log/fsck
# rm -rf /var/log/news

Arquivo de configuração do syslog (/etc/syslog.conf):

*.*;mail.none;cron.none -/var/log/messages
  cron.*                -/var/log/cron
  mail.*                -/var/log/mail

Adicionar ao logrotate (/etc/logrotate.d/inetutils-syslogd):

/var/log/cron
/var/log/mail
/var/log/messages {
    rotate 4
    weekly
    missingok
    notifempty
    compress
    sharedscripts
    postrotate
    /etc/init.d/inetutils-syslogd reload >/dev/null
endscript
}

Reiniciar syslog:

# invoke-rc.d inetutils-syslogd start

Remoção de pacotes

Alguns pacotes pré instalados no VPS não são necessários, ou serão substituídos por outros, então vamos removê-los:

# apt-get remove bind9
# apt-get remove 'samba*'
# apt-get remove portmap
# invoke-rc.d apache2 stop
# update-rc.d -f apache2 remove
# apt-get remove 'apache2*'
# invoke-rc.d nscd stop
# update-rc.d -f nscd remove
# apt-get remove nscd  
# invoke-rc.d sendmail stop
# update-rc.d -f sendmail remove
# apt-get remove 'sendmail*'

Locales e tempo do servidor

# dpkg-reconfigure locales
# dpkg-reconfigure tzdata

Mudar Shel

Para mudar o shell de bash para mksh:

# apt-get install mksh

Mudar /etc/passwd trocando o bash pelo mksh.

Conclusão

Estes foram os passos inicais para configurar um VPS de 128 mb, procurando deixá-lo preparado para a instalação de outros servidores (web, base de dados, backup). Ãpós o conjunto de instruções relatadas neste artigo, o VPS em questão está consumindo 15 mb de memória RAM, deixando espaço para um servidor web com suporte a PHP, que será o foco do próximo tutorial.

Comentários

Comments powered by Disqus