Installare e mettere in sicurezza una vps debian

- 0 0
-
condivisioni
Installare un vps debian 7 e metterla in sicurezza
Installazione LEMP
Cominciamo con creare e installare una macchina pulita debian wheezy (7).
Una volta installata connettiamoci tramite root e andiamo subito ad aggiungere la repo di dotdeb
vim /etc/apt/sources.list
aggiungiamo queste 4 righe (le ultime 2 sono opzionali per installare php 5.6 e zend)
deb http://packages.dotdeb.org wheezy all
deb-src http://packages.dotdeb.org wheezy all
deb http://packages.dotdeb.org wheezy-php56-zts all
deb-src http://packages.dotdeb.org wheezy-php56-zts all
Finiamo con aggiungere la loro chiave e aggiornare le repo
wget https://www.dotdeb.org/dotdeb.gpg
sudo apt-key add dotdeb.gpg
apt-get update
Adesso cominciamo subito a installare nginx (con il comando apt-get install nginx) e passiamo a configurare il suo file come segue
mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
vim /etc/nginx/nginx.conf
e inseriamo questo nel file
user www-data;
worker_processes auto;
pid /run/nginx.pid;
# [ debug | info | notice | warn | error | crit ]
error_log /var/log/nginx/error.log warn;
events {
worker_connections 1024;
use epoll;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent"';
server_tokens off;
server_names_hash_max_size 64;
server_names_hash_bucket_size 64;
client_header_timeout 10m;
client_body_timeout 10m;
send_timeout 10m;
connection_pool_size 512;
client_header_buffer_size 8k;
large_client_header_buffers 8 8k;
request_pool_size 64k;
gzip on;
gzip_http_version 1.0;
gzip_buffers 16 8k;
gzip_comp_level 9;
gzip_min_length 2048;
gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_vary on;
output_buffers 16 32k;
postpone_output 1460;
sendfile on;
tcp_nopush on;
tcp_nodelay off;
keepalive_timeout 30;
keepalive_requests 10;
chunked_transfer_encoding off;
ignore_invalid_headers on;
include /etc/nginx/sites-enabled/*;
}
Diamo il comando nginx -t per vedere se il file è stato scritto correttamente e passiamo a installare il modulo php
apt-get install php5-cli php5-common
apt-get install php5-fpm php5-cgi
dati i due comandi andiamo a inserire le seguenti righe nei file di configurazione di php5-fpm
vim /etc/php5/fpm/php-fpm.conf
e inseriamo in fondo
pm.max_children = 25
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 10
pm.max_requests = 500
request_terminate_timeout = 30s
Adesso riavviamo il demone con service php5-fpm restart
Fatto questo ora dovremo andare a creare il nostro primo file per il nostro sito web, dunque:
vim /etc/nginx/sites-available/nostrosito
e all'interno scriviamo
server {
listen 80;
server_name ~^(\w*)\.?nostrosito\.it$;
index index.html;
root /var/www/nostrosito;
if ( $request_method !~ ^(GET|POST|HEAD)$ ) {
return 444;
}
location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|mov) {
if (-f $request_filename) {
expires max;
access_log off;
break;
}
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/nostrosito$fastcgi_script_name;
include fastcgi_params;
}
}
adesso creiamo un link simbolico
ln -s /etc/nginx/sites-available/nostrosito /etc/nginx/sites-enabled/nostrosito
Ora se tutto è andato correttamente possiamo creare un file .php e scrivere all'interno
<?php phpinfo(); ?>
così da vederne il risultato
Adesso che abbiamo configurato il nostro vps a elaborare e servire siti con contenuti statici e/o dinamici (ricordiamoci in caso avessimo bisogno di dover installare un db e un gestore di sessioni come redis per ottimizzare il load) possiamo passare a metterlo in sicurezza a partire dalla nostra sessione ssh.
Configuriamo dunque una chiave ssh per poter accedere alla nostra sessione
Partiamo dunque nel generare una chiave RSA (durante la creazione vi chiederà di inserire una password se vorrete)
ssh-keygen -t rsa
A questo punto, nella directory
cd ~/.ssh/
troveremo due file idrsa e idrsa.pub, copiamo dunque il nostro idrsa.pub nella directory dell'utente che useremo per loggarci ~/.ssh/authorizedkeys
Ora passiamo a configurare il demone ssh editando il file di configurazione in questo modo
vim /etc/ssh/sshd_config
Scriviamo
Port 22
AllowUsers vostro-nome-utente
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
UsePrivilegeSeparation yes
KeyRegenerationInterval 3600
ServerKeyBits 768
SyslogFacility AUTH
LogLevel INFO
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
IgnoreRhosts yes
RhostsRSAAuthentication no
HostbasedAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
PasswordAuthentication no
X11Forwarding no
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
AcceptEnv LANG LC_*
Fatto tutto non ci rimane altro che riavviare il demone ssh
service ssh restart
Adesso passiamo alla messa in sicurezza tramite firewall del port knocking (per aprire determinate porte solo su richieste telnet)
Passiamo dunque a installare il demone shorewall
apt-get install shorewall -y
e copiamo le config standard che sono nella doc del pacchetto
cp /usr/share/doc/shorewall/default-config/* /etc/shorewall/
modifichiamo il file zones
vim /etc/shorewall/zones
e scriviamo
#
# Shorewall version 4 - Zones File
#
# For information about this file, type "man shorewall-zones"
#
# The manpage is also online at
# http://www.shorewall.net/manpages/shorewall-zones.html
#
###############################################################################
#ZONE TYPE OPTIONS IN OUT
# OPTIONS OPTIONS
fw firewall
net ipv4
#LAST LINE - ADD YOUR ENTRIES ABOVE THIS ONE - DO NOT REMOVE
abbiamo definito la zona fw che identifica la rete locale dal punto di vista del firewall, e la zona net, considerata come la rete esterna
passiamo all'interfaccia di rete
vim /etc/shorewall/interfaces
E aggiungiamo le seguenti righe. Nel caso in cui la vostra interfaccia di rete si chiami diversamente, sostituite eth0 con il suo nome.
#
# Shorewall version 4 - Interfaces File
#
# For information about entries in this file, type "man shorewall-interfaces"
#
# The manpage is also online at
# http://www.shorewall.net/manpages/shorewall-interfaces.html
#
###############################################################################
#ZONE INTERFACE BROADCAST OPTIONS
net eth0 detect
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Adesso andiamo a bloccare tutto il traffico in entrata su tutte le porte (solo successivamente inseriremo le porte necessarie)
vim /etc/shorewall/policy
e scriviamo
#
# Shorewall version 4 - Policy File
#
# For information about entries in this file, type "man shorewall-policy"
#
# The manpage is also online at
# http://www.shorewall.net/manpages/shorewall-policy.html
#
###############################################################################
#SOURCE DEST POLICY LOG LIMIT:BURST
fw net ACCEPT
net all DROP info
all all REJECT info
#LAST LINE -- DO NOT REMOVE
In parole povere consentiamo tutto il traffico dall'interno del vps all'esterno e viceversa blocchiamo tutto il traffico in entrata loggandolo come info nei log
Adesso dobbiamo aprire le porte che ci interessano
vim /etc/shorewall/rules
andiamo a modificare ciò che ci interessa
#
# Shorewall version 4 - Rules File
#
# For information on the settings in this file, type "man shorewall-rules"
#
# The manpage is also online at
# http://www.shorewall.net/manpages/shorewall-rules.html
#
############################################################################################################################
#ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL RATE USER/ MARK
# PORT PORT(S) DEST LIMIT GROUP
ACCEPT net fw tcp www
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
In breve andiamo ad accettare net fw tcp www
infine facciamo partire shorewall in automatico ad ogni login, quindi andiamo a modificare
vim /etc/default/shorewall
cerchiamo lo startup e impostiamolo a 1
(attenzione a non far partire ancora il firewall o a riavviare la macchina, andiamo adesso a specificare le porte necessarie per aprire la porta 22 dell'ssh)
Installiamo port knocking
apt-get install knockd
modifichiamo il file
vim /etc/knockd.conf
e inseriamo
[ssh]
sequence = 6547:tcp,2547:tcp,3234:tcp,1852:tcp
seq_timeout = 5
start_command = /sbin/iptables --append dynamic -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
cmd_timeout = 60
stop_command = /sbin/iptables --delete dynamic -s %IP% -p tcp --dport 22 -j ACCEPT
Modifichiamo a piacimento le porte (magari leggermente piu alte) e portiamo a compimento la nostra sequenza entro 5 secondi che sbloccherà la porta ssh pe 60 secondi entro i quali dovremo fare il login con la nostra chiave ssh precedentemente creata
Adesso modifichiamo l'ultimo file
vim /etc/default/knockd
Troviamo la stringa START_KNOCKD e impostiamola a 1 per far partire knockd in automatico all'avvio.
Troviamo e decommentiamo la riga che contiene il flag KNOCKD_OPTS modificandolo in base al nome della nostra interfaccia di rete, nel caso di questo esempio:
KNOCKD_OPTS="-i eth0"
Fatto tutto questo possiamo avviare knockd
service knockd start
E infine avviamo shorewall
shorewall start