Post

xoyize.xyz KVM Debian (Islande)

serveur KVM Debian situé en Islande

xoyize.xyz KVM Debian (Islande)

xoyize.xyz

KVM serveur islandais

Première connexion SSH

Via SSH
ssh root@37.235.49.24
Màj
apt update && apt upgrade
Installer nano curl et tmux
apt install curl tmux

Création utilisateur

Utilisateur xoy
useradd -m -d /home/xoy/ -s /bin/bash xoy
Mot de passe xoy
passwd xoy
Déconnexion puis connexion ssh en mode utilisateur
ssh xoy@37.235.49.24

SSH via clé

Sur le poste distant , générer un jeu de clé
$ ssh-keygen -t rsa -b 4096 -C kvm-iceland -f ~/.ssh/kvm-iceland
Copier la clé publique depuis le poste distant dans /home/$USER
$ scp ~/.ssh/kvm-iceland.pub xoy@37.235.49.24:/home/xoy/

Copier le contenu de la clé publique dans /home/$USER/.ssh/authorized_keys
$ cd ~
Sur le KVM ,créer un dossier .ssh

1
2
3
pwd  #pour vérifier que l'on est sous /home/$USER
mkdir .ssh
cat /home/$USER/kvm-iceland.pub >> /home/$USER/.ssh/authorized_keys

et donner les droits
chmod 600 /home/$USER/.ssh/authorized_keys
effacer le fichier de la clé
rm /home/$USER/kvm-iceland.pub
Modifier la configuration serveur SSH
su # passage en superutilisateur
nano /etc/ssh/sshd_config

1
2
3
Port = 48022
PermitRootLogin no
PasswordAuthentication no

Relancer openSSH
# systemctl restart sshd

Accès depuis le poste distant avec la clé privée
$ ssh -p 48022 -i ~/.ssh/kvm-iceland xoy@37.235.49.24

sudo

passage en superutilisateur et installation sudo
$ su
apt install sudo
Configuration simplifiée ,ajouter utilisateur et ses droits en fin de fichier
echo "xoy ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

Fuseau/Locales

Fuseau horaire en mode console root
# dpkg-reconfigure tzdata

1
2
3
4
5
6
  Geographic area: 8  # Europe
  Time zone: 37       # Paris

Current default time zone: 'Europe/Paris'
Local time is now:      Fri Dec 23 18:26:28 CET 2016.
Universal Time is now:  Fri Dec 23 17:26:28 UTC 2016.

Locales
dpkg-reconfigure locales

1
2
3
4
Generating locales (this might take a while)...
  en_GB.UTF-8... done
  fr_FR.UTF-8... done
Generation complete.

ipinfo.io

curl ipinfo.io

1
2
3
4
5
6
7
8
9
{
  "ip": "37.235.49.24",
  "hostname": "24.49.235.37.in-addr.arpa",
  "city": "Hafnarfjörður",
  "region": "Gullbringusysla",
  "country": "IS",
  "loc": "64.0653,-21.9545",
  "org": "AS50613 Thor Data Center ehf"
}

Reykjavik iceland

session SSH ne se termine pas correctement lors d’un “reboot” à distance

Si vous tentez de redémarrer/éteindre une machine distance par ssh, vous pourriez constater que votre session ne se termine pas correctement, vous laissant avec un terminal inactif jusqu’à l’expiration d’un long délai d’inactivité. Il existe un bogue 751636 à ce sujet. Pour l’instant, la solution de contournement à ce problème est d’installer :

1
sudo apt-get install libpam-systemd

cela terminera la session ssh avant que le réseau ne tombe.
Veuillez noter qu’il est nécessaire que PAM soit activé dans sshd.

Nom d’hôte et non de domaine

1
sudo nano /etc/hosts
1
2
3
4
5
6
7
127.0.0.1       localhost
#149.154.157.240        240.157.154.149.in-addr.arpa    240
37.235.49.24    xoyize.xyz      vpna
# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
1
2
sudo nano /etc/hostname
         vpna

Valider et vérifier

1
2
3
4
5
sudo hostname vpna
hostname
	  vpna
hostname -f
	xoyize.xyz

Sauvegarde via shuttle

Installer rsync

1
sudo apt install rsync # debian

Ajout utilisateur de backupuser qui ne peut exécuter que rsync et de la clé publique du “serveur de sauvegarde”

1
2
3
4
5
#création utilisateur backup
sudo useradd backupuser -c "limited backup user" -m -u 4210
#ajout clé publique ssh dans le fichier authorized_keys du nouvel utilisateur
sudo mkdir /home/backupuser/.ssh
sudo nano /home/backupuser/.ssh/authorized_keys    #coller le contenu /home/backupuser/.ssh/id_rsa.pub copié sur terminal du serveur shuttle (yanspm.com)

Création script bash rsync-wrapper.sh

1
sudo nano /home/backupuser/rsync-wrapper.sh

Contenu du script

1
2
3
4
5
#!/bin/sh
 
date > /home/backupuser/backuplog
#echo $@ >> /home/backupuser/backuplog
/usr/bin/sudo /usr/bin/rsync "$@";

Droits sur le fichier

1
2
sudo chown backupuser:backupuser /home/backupuser/rsync-wrapper.sh
sudo chmod 755 /home/backupuser/rsync-wrapper.sh

Edition fichier sudoers pour un accès root à l’exécution de rsync

1
sudo -s

Ajouter ligne suivante en fin de fichier,exécution en mode root de rsync

1
2
echo "backupuser ALL=NOPASSWD: /usr/bin/rsync" >> /etc/sudoers
exit

systemd/journal

Ajout de l’utilisateur courant au groupe systemd-journal

1
sudo gpasswd -a $USER systemd-journal

Accès utilisateur aux fichiers log

1
sudo gpasswd -a $USER adm

Après déconnexion puis reconnexion , l’utilisateur a accès au journal:

1
$ journalctl

Pour avoir les lignes NON TRONQUEES

1
$ export SYSTEMD_LESS=FRXMK journalctl

Pour un mode permanent ,modifier ~/.bashrc

1
$ echo "export SYSTEMD_LESS=FRXMK journalctl" >> ~/.bashrc

DNS/OVH

Modifier les DNS sur OVH

1
2
3
4
5
6
7
$TTL 3600
@	IN SOA dns106.ovh.net. tech.ovh.net. (2016122302 86400 3600 3600000 300)
                          IN NS     ns106.ovh.net.
                          IN NS     dns106.ovh.net.
                          IN A      37.235.49.24
                          IN AAAA   2a03:f80:354:37:235:49:24:1
*                         IN CNAME  xoyize.xyz.

Clé Diffie-Hellman

Génération puis envoi de la clé depuis poste distant

1
2
openssl dhparam -out ~/Private/dh/diffie-hellman-4096.pem -outform PEM -2 4096
scp -P 48022 -i /home/yannick/.ssh/kvm-iceland ~/Private/dh/diffie-hellman-4096.pem xoy@37.235.49.24:/tmp/dh4096.pem

Mise en place sur le serveur

1
2
3
  sudo mv /tmp/dh4096.pem /etc/ssl/private
  sudo chown root. /etc/ssl/private/dh4096.pem
  sudo chmod 640 /etc/ssl/private/dh4096.pem

Motd

10-sysinfo avec contenu de 11-sysinfo car noyau kernel > 3.0.0
Météo /etc/update-motd.d/98-meteo

1
2
#!/bin/bash
/usr/local/bin/ansiweather-fr.sh -l Reykjavik,IS -u metric -s true

Serveur OpenVPN

Le client Iceland-vpn.ovpn

Configuration server.conf

Fichiers de configuration serveur OpenVpn

1
/etc/openvpn/server.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
port 1194
proto udp
dev tun
user nobody
group nogroup
persist-key
persist-tun
keepalive 10 120
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
push "redirect-gateway def1 bypass-dhcp" 
crl-verify crl.pem
ca ca.crt
cert server.crt
key server.key
tls-auth tls-auth.key 0
dh dh.pem
auth SHA256
cipher AES-128-CBC
tls-server
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-128-GCM-SHA256
status openvpn.log
verb 3
1
/etc/sysctl.conf 
1
2
3
4
5
6
7
8
9
# enable packet forwarding for IPv4
net.ipv4.ip_forward=1
# enable packet forwarding for IPv6
net.ipv6.conf.all.forwarding=1

#net.ipv6.conf.all.proxy_ndp = 1
#net.ipv4.conf.all.accept_redirects = 0
#net.ipv6.conf.all.accept_redirects = 0

Validation immédiate avant reboot

1
2
sysctl net.ipv4.ip_forward=1
sysctl net.ipv6.conf.all.forwarding=1

Règles iptables

Création d’un fichier des règles ipv4

1
sudo nano /etc/ip4tables.rules  # modifier le port SSH si nécessaire
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
*filter

# Allow all loopback (lo) traffic and reject traffic
# to localhost that does not originate from lo.
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -s 127.0.0.0/8 -j REJECT
-A OUTPUT -o lo -j ACCEPT

# Allow ping and ICMP error returns.
-A INPUT -p icmp -m state --state NEW --icmp-type 8 -j ACCEPT
-A INPUT -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -p icmp -j ACCEPT

# Allow SSH.
-A INPUT -i eth0 -p tcp -m state --state NEW,ESTABLISHED --dport 48022 -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m state --state ESTABLISHED --sport 48022 -j ACCEPT

# Allow UDP traffic on port 1194.
-A INPUT -i eth0 -p udp -m state --state NEW,ESTABLISHED --dport 1194 -j ACCEPT
-A OUTPUT -o eth0 -p udp -m state --state ESTABLISHED --sport 1194 -j ACCEPT

# Allow DNS resolution and limited HTTP/S on eth0.
# Necessary for updating the server and keeping time.
-A INPUT -i eth0 -p udp -m state --state ESTABLISHED --sport 53 -j ACCEPT
-A OUTPUT -o eth0 -p udp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT
-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED --sport 53 -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT

-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED --sport 80 -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m state --state NEW,ESTABLISHED --dport 80 -j ACCEPT
-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED --sport 443 -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m state --state NEW,ESTABLISHED --dport 443 -j ACCEPT

# Allow traffic on the TUN interface.
-A INPUT -i tun0 -j ACCEPT
-A FORWARD -i tun0 -j ACCEPT
-A OUTPUT -o tun0 -j ACCEPT

# Allow forwarding traffic only from the VPN.
-A FORWARD -i tun0 -o eth0 -s 10.8.0.0/24 -j ACCEPT
-A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# Log any packets which don't fit the rules above...
# (optional but useful)
-A INPUT -m limit --limit 3/min -j LOG --log-prefix "iptables_INPUT_denied: " --log-level 4
-A FORWARD -m limit --limit 3/min -j LOG --log-prefix "iptables_FORWARD_denied: " --log-level 4
-A OUTPUT -m limit --limit 3/min -j LOG --log-prefix "iptables_OUTPUT_denied: " --log-level 4

# then reject them.
-A INPUT -j REJECT
-A FORWARD -j REJECT
-A OUTPUT -j REJECT

COMMIT

Importer les nouvelles règles

1
sudo iptables-restore < /etc/ip4tables.rules

Persistance des règles

1
sudo apt install iptables-persistent  #répondre yes/oui 2 fois

Si les règles ont changé ,il faut relancer

1
sudo dpkg-reconfigure iptables-persistent

Relancer le service

1
sudo systemctl restart openvpn.service

Rotation des fichiers log

Rotation des fichiers log openvpn

1
sudo nano /etc/logrotate.d/openvpn
1
2
3
4
5
6
/var/log/openvpn.log {
        rotate 6
        monthly
        compress
        missingok
}
  • surveille le fichier xxxx.log et génère une rotation une fois par mois - c’est l’ “intervalle de rotation”.
  • ‘rotate 6’ signifie qu’à chaque intervalle, on conserve 6 semaines de journalisation.
  • Les fichiers de logs sont compressés au format gzip en spécifiant ‘compress’
  • ‘missingok’ permet au processus de ne pas s’arrêter à chaque erreur et de poursuivre avec le fichier de log suivant.
Cet article est sous licence CC BY 4.0 par l'auteur.