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