.. title: VPS: configuração básica
.. slug: vps-configuracao-basica
.. date: 2015/04/16 01:00:00
.. description: Este artigo pretende demonstrar a configuração básica de um VPS
.. category: tutoriais
.. tags: tutorial, vps, setup, configuração, administração, virtual private server
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:
:::shell
# %sudo ALL=NOPASSWD: ALL
para:
:::shell
%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:
:::shell
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_:
:::shell
*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_:
:::shell
#!/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][1].
## 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.
[1]: https://wiki.debian.org/GmailAndExim4 "GmailAndExim4"