Configuração do servidor web Linode Debian 7

<a name=top> </a>

Índice

<br>

I Informação Básica

  • Defina o nome do host
  • Defina o FQDN
  • Defina a hora
  • Atualize o servidor
  • Instale um compilador

II Configuração de usuário Admin

  • Crie o usuário administrador
  • Configuração SSH

III Fortaleça a rede

  • sysctl
  • Impedir spoofing de IP
  • Memória compartilhada segura
  • Tabelas IP
  • Setup fail2ban

IV LAMP +

  • Postfix e gmail
  • Apache
  • MySQL
  • PHP

V Prepare-se para os usuários

  • Editar MOTD
  • Permissões de configuração e umask
  • Git
  • Oh meu ZSH
  • Cadeia de Chroot facilitada
  • / etc / skel setup

Manutenção VI

  • Logwatch
  • RKhunter e CHKRootkit
  • Tigre
  • Tarefas Administrativas

<br>

Introdução

<br>

Novamente, isso vem de uma necessidade egoísta de registrar meu progresso em um projeto de administração de sistema.

Acabei de configurar meu Linode do jeito que gosto e acho que estou prestes a recomeçar, muitos de nós somos assim, uh, só porque sinto que poderia ter perdido algumas coisas aqui e ali. E que, além da enorme pesquisa que foi feita, não deveria ser muito difícil de reproduzir. Contanto que eu saiba o que estou fazendo …

Fiz anotações ao longo do caminho sabendo que provavelmente precisaria reproduzi-lo em algum momento. Parece que a necessidade é mais urgente do que pensei, então farei de novo, com uma abordagem diferente desta vez, e documentarei as coisas aqui.

Iremos configurar um disco que conterá um servidor web Debian 7 totalmente configurado. Note que eu acho que você pode copiar e colar tudo no ubuntu e funcionará bem.

Comece implantando um Debian 7 em seu linode. Depois de inicializado, vamos ao que interessa.

ssh root@linodedomain.com or IP

<br>

Tutorial

<br>
<a name=basicinfo> </a>

Informação básica

Defina o nome do host

echo "mysuperhostname" > /etc/hostname
hostname
-F /etc/hostname
hostname

^ top ^

Defina o FQDN

Adicione esta linha ao seu arquivo/etc/hosts

<YOUR IP>  mysuperhostname.linodedomain.com  mysuperhostname

Certifique-se de adicionar um registro A para mysuperhostname.linodedomain.com que aponta para o seu IP.

^ top ^

Defina a hora

dpkg-reconfigure tzdata
date

Tudo bom.

^ top ^

Atualize o servidor

apt-get update
apt
-get upgrade

^ top ^

Instale um compilador

Você vai precisar em algum momento …

apt-get install build-essential

^ top ^
<br>
<a name=admin> </a>

Configuração do usuário administrador

Crie o usuário administrador

apt-get install sudo
adduser adminuser

usermod
-a -G sudo adminuser
groupadd admin

usermod
-a -G admin adminuser
dpkg
-statoverride --update --add root admin 4750 /bin/su

Isso cria nosso adminusere o adiciona ao grupo sudoe admin, que agora é o único outro grupo que pode fazer su com root.

Ok, vamos endurecer, ou até mesmo suavizar por enquanto nosso arquivo sudoers, mas antes disso mude o editor padrão. Liste os editores disponíveis primeiro para ter certeza de que o vim está lá:

update-alternatives --list editor
sudo update
-alternatives --set editor /usr/bin/vim.basic
visudo

Adicione isto para limitar o tempo em que a senha do sudo é lembrada:

Defaults        timestamp_timeout=10

Também faremos isso para que nosso usuário administrador não tenha que digitar sua senha no sudo, pelo menos durante a configuração, você pode alterá-la novamente depois. Certifique-se de adicionar isso no FIM do arquivo, para que não seja sobrescrito pela linha% sudo. Assim que nossa configuração principal estiver concluída

adminuser ALL=(ALL) NOPASSWD: ALL

Você também pode adicionar isto em vez de adicionar o usuário ao sudogrupo:

[your username] ALL=(ALL:ALL) ALL

Mas acho mais limpo gerenciar o que você pode fazer por meio de grupos, o que faremos novamente mais tarde.

Agora podemos sudo com nosso novo usuário, vamos fazer logon novamente:

exit
ssh adminuser@linodedomain
.com

^ top ^

Configuração SSH

Gere sua chave em sua máquina e copie-a para o servidor:

cd ~/.ssh
ssh
-keygen -t rsa -C "email@host"
scp
~/.ssh/id_rsa.pub adminuser@linodedomain.com:

Em seguida, faça login novamente e limpe a chave com as permissões corretas:

mkdir .ssh
mv id_rsa
.pub .ssh/authorized_keys
chown
-R adminuser:adminuser .ssh
chmod
700 .ssh
chmod
600 .ssh/authorized_keys

Vamos criar nosso sshlogingrupo e adicionar nosso usuário administrador a ele

sudo groupadd sshlogin
sudo usermod
-a -G sshlogin adminuser

Agora vamos proteger o SSH um pouco mais e nos preparar para as restrições posteriores, observe que estou fazendo um backup do arquivo de configuração antes de fazer alterações e gosto de comentar a linha que alterei e adicionar outra para substituí-la pelas alterações feitas . Você pode facilmente referir-se aos padrões desta forma e até mesmo reverter para a configuração original. Adquira o hábito de fazer isso para todas as alterações do arquivo de configuração.

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.back
sudo vim
/etc/ssh/sshd_config

Ao adicionar isso, tornamos SÓ os usuários que fazem parte do grupo sshlogin podem fazer o login através do ssh

Port = XXXX
LoginGraceTime 30
PermitRootLogin no
UseDNS no
DebianBanner no
Banner /etc/issue.net
AllowGroups sshlogin
ClientAliveInterval 600
ClientAliveCountMax 0

Altere o número da porta SSH padrão se quiser, eu escolho não fazer. Mantenha-o abaixo de 1024, as portas com esse número só podem ser ouvidas por usuários root ou root. Ferramentas como Fail2Ban manterão nossos logs limpos de força bruta SSH, então não há necessidade de ofuscar nesta parte.

Mude para qualquer banner que flutue em seu barco, eu gosto do tipo de gov:/etc/issue.net

***************************************************************************
NOTICE TO USERS



This computer system is the private property of its owner, whether
individual
, corporate or government. It is for authorized use only.
Users (authorized or unauthorized) have no explicit or implicit
expectation
of privacy.

Any or all uses of this system and all files on this system may be
intercepted
, monitored, recorded, copied, audited, inspected, and
disclosed to your employer
, to authorized site, government, and law
enforcement personnel
, as well as authorized officials of government
agencies
, both domestic and foreign.

By using this system, the user consents to such interception, monitoring,
recording
, copying, auditing, inspection, and disclosure at the
discretion
of such personnel or officials. Unauthorized or improper use
of this system may result in civil and criminal penalties and
administrative
or disciplinary action, as appropriate. By continuing to
use this system you indicate your awareness of and consent to these terms
and conditions of use. LOG OFF IMMEDIATELY if you do not agree to the
conditions stated
in this warning.

****************************************************************************

Além disso, verifique o homem para todos os valores que você está definindo, você pode aprender uma coisa ou duas. E google, google, google 🙂

Verifique se você faz parte do grupo sshlogin. Fui expulso assim, não é divertido.

id adminuser

Reinicie o SSH e vamos experimentar nossa chave 🙂

sudo service ssh restart

Você também pode criar um arquivo ~ / .ssh / config em sua máquina para fazer um alias:

Host aliasname
HostName linodedomain.com
Port 22
User adminuser

De agora em diante, mude a porta SSH se você mudou no seu sshd_config.

ssh aliasname

Evite dores e faça isso imediatamente:

cd ~
echo
"syntax on" > .vimrc

Você não deve ter um arquivo e isso ativará o realce de sintaxe..vimrc

^ top ^
<br>
<a name=network> </a>

Rede rígida

sysctl

sudo cp /etc/sysctl.conf /etc/sysctl.back.conf
sudo vim
/etc/sysctl.conf

Último lembrete para fazer backup de seus arquivos de configuração padrão;)

 # Make server reboot on low memory
vm
.panic_on_oom=1
kernel
.panic=10

# Specific to Linode, experiment.
vm
.swappiness=25

# IP Spoofing protection
net
.ipv4.conf.all.rp_filter = 1
net
.ipv4.conf.default.rp_filter = 1

# Ignore ICMP broadcast requests
net
.ipv4.icmp_echo_ignore_broadcasts = 1

# Disable source packet routing
net
.ipv4.conf.all.accept_source_route = 0
net
.ipv6.conf.all.accept_source_route = 0
net
.ipv4.conf.default.accept_source_route = 0
net
.ipv6.conf.default.accept_source_route = 0

# Ignore send redirects
net
.ipv4.conf.all.send_redirects = 0
net
.ipv4.conf.default.send_redirects = 0

# Block SYN attacks
net
.ipv4.tcp_syncookies = 1
net
.ipv4.tcp_max_syn_backlog = 2048
net
.ipv4.tcp_synack_retries = 2
net
.ipv4.tcp_syn_retries = 5

# Log Martians
net
.ipv4.conf.all.log_martians = 1
net
.ipv4.icmp_ignore_bogus_error_responses = 1

# Ignore ICMP redirects
net
.ipv4.conf.all.accept_redirects = 0
net
.ipv6.conf.all.accept_redirects = 0
net
.ipv4.conf.default.accept_redirects = 0
net
.ipv6.conf.default.accept_redirects = 0

# Ignore Directed pings
net
.ipv4.icmp_echo_ignore_all = 1

Adicione tudo isso e recarregue essas configurações

sudo sysctl -p

^ top ^

Impedir spoofing de IP

Adicione ou edite as seguintes linhas em :/etc/host.conf

order bind,hosts
nospoof on

^ top ^

Memória compartilhada segura

Adicione isto ao seu arquivo:/etc/fstab

tmpfs /dev/shm tmpfs defaults,noexec,nosuid 0 0

Monte-o.

sudo mount -a

^ top ^

Tabelas IP

Vamos criar um novo arquivo de tabelas de IP que carregaremos nas tabelas de IP para complementar o que o fail2ban já possui.

sudo vim /etc/iptables.firewall.rules

Copie isso, de acordo com suas próprias configurações de porta:

*filter

# Allow 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

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

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

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

# Allow ports for testing
-A INPUT -p tcp --dport 8080:8090 -j ACCEPT

# Allow ports for MOSH (mobile shell)
-A INPUT -p udp --dport 60000:61000 -j ACCEPT

# Allow SSH connections
# The -dport number should be the same port number you set in sshd_config
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT

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

# Log iptables denied calls
-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

COMMIT

Salve as regras e prepare um script de rede

sudo iptables-restore  < /etc/iptables.firewall.rules
sudo iptables
-L
sudo vim
/etc/network/if-pre-up.d/firewall

Copie isso no script que você criou

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

Torne-o executável

sudo chmod +x /etc/network/if-pre-up.d/firewall

Isso garantirá que as tabelas de IP sejam salvas na reinicialização do servidor. Observe que as portas tcp 8080para 8090estão abertas para fins de desenvolvimento. Você pode querer removê-los se não os usar.

^ top ^

Setup fail2ban

sudo apt-get install fail2ban
sudo cp
/etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo vim
/etc/fail2ban/jail.local

Adicionar ou editar essas linhas

destemail = admin@linodedomain.com
action
= %(action_mwl)s

[ssh]

enabled
= true
port
= ssh
filter
= sshd
logpath
= /var/log/auth.log
maxretry
= 6

[ssh-ddos]

enabled
= true
port
= ssh
filter
= sshd-ddos
logpath
= /var/log/auth.log
maxretry
= 6

Basicamente, certifique-se de que ssh e ssh-dos estejam configurados como true e altere a porta ssh se necessário.

sudo service fail2ban restart

Observe que fail2bans adiciona sua própria regra ao iptables durante a inicialização, sem necessidade de adicioná-los ao nosso script.

^ top ^
<br>
<a name=lamp> </a>

LAMP +

Postfix e gmail

Primeiro, vamos começar configurando nosso servidor de e-mail usando o gmail, porque quem administra seu próprio servidor de e-mail atualmente;)

sudo apt-get install postfix mailutils libsasl2-2 ca-certificates libsasl2-modules

Escolha o site da Internet para a configuração e insira qualquer e-mail, você alterará mais tarde.

sudo vim /etc/postfix/main.cf

Adicione isso no final

relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable
= yes
smtp_sasl_password_maps
= hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options
= noanonymous
smtp_tls_CAfile
= /etc/postfix/cacert.pem
smtp_use_tls
= yes

Crie nosso arquivo de senha

vim /etc/postfix/sasl_passwd

E adicione a seguinte linha:

[smtp.gmail.com]:587    USERNAME@gmail.com:PASSWORD

Se você quiser usar o domínio do Google App, substitua @ gmail.com por @ domain.com.

Corrija a permissão e atualize a configuração do postfix para usar o arquivo