<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
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.
Defina a hora
dpkg-reconfigure tzdata
date
Tudo bom.
Atualize o servidor
apt-get update
apt-get upgrade
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 adminuser
e o adiciona ao grupo sudo
e 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 sudo
grupo:
[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
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 sshlogin
grupo 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
Impedir spoofing de IP
Adicione ou edite as seguintes linhas em :/etc/host.conf
order bind,hosts
nospoof on
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
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 8080
para 8090
estão abertas para fins de desenvolvimento. Você pode querer removê-los se não os usar.
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