Post

Serveur de stockage OVZ-STORAGE-128 LiteServer Debian 9 IP 5.2.79.107

Serveur de stockage OVZ-STORAGE-128 LiteServer Debian 9 IP 5.2.79.107

Liteserver


LiteServer backup OVZ-STORAGE-128 ARRETE DEFINITIVEMENT le 24 septembre 2021

est votre partenaire pour une connectivité réseau de qualité. Nous avons les routes les plus courtes et les plus rapides vers des milliers de réseaux mondiaux. Nous avons des POP dans plusieurs pays avec une connectivité aux points d’échange locaux pour acheminer le trafic aussi efficacement que possible.
Notre réseau est rapide et évolutif à tout moment.

OpenVz Debian Stretch

Réinstallation complète le 11 septembre 2021.

Debian 9

OVZ-STORAGE-128
Mémoire : 128 Mo
Disk : 100 Go

IP V4 : 5.2.79.107
Gateway 5.2.79.1
Netmask 255.255.255.0
Nameserver 185.31.172.240
Nameserver 89.188.29.4

IP V6 : 2a04:52c0:101:7ae::7a5e
Subnet 2a04:52c0:101:7ae::/64
Gateway 2a04:52c0:101::1
Nameserver 2a01:6340:1:20:4::10
Nameserver 2a01:1b0:7999:446::1:4

Connexion root

1
ssh root@5.2.79.107

Changement mot de passe

1
passwd root

Mise à jour

1
apt update && apt upgrade

Installer utilitaires

1
apt install rsync curl tmux jq figlet git mailutils dnsutils p7zip-full -y

Hostname

1
hostnamectl
1
2
3
4
5
6
7
8
9
   Static hostname: ovz128
         Icon name: computer-container
           Chassis: container
        Machine ID: e99f11664be0498a9058bec3da43b127
           Boot ID: c1370365279a495f9caac1854599279a
    Virtualization: openvz
  Operating System: Debian GNU/Linux 9 (stretch)
            Kernel: Linux 2.6.32-042stab140.1
      Architecture: x86-64

Europe/Paris (TimeZone tzdata)

Europe/Amsterdam

1
dpkg-reconfigure tzdata
1
2
3
Current default time zone: 'Europe/Amsterdam'
Local time is now:      Sat Sep 11 16:22:49 CEST 2021.
Universal Time is now:  Sat Sep 11 14:22:49 UTC 2021.

Création utilisateur

Utilisateur usernl

1
useradd -m -d /home/usernl/ -s /bin/bash usernl

Mot de passe usernl

1
passwd usernl

Visudo pour les accès root via utilisateur usernl

1
2
apt install sudo 
echo "usernl     ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

Déconnexion puis connexion ssh en mode utilisateur

1
ssh usernl@5.2.79.107

OpenSSH, clé et script

OpenSSH

connexion avec clé
sur l'ordinateur de bureau Générer une paire de clé curve25519-sha256 (ECDH avec Curve25519 et SHA2) pour une liaison SSH avec le serveur.

1
ssh-keygen -t ed25519 -o -a 100 -f ~/.ssh/OVZ-STORAGE-128

Envoyer les clés publiques sur le serveur KVM

1
scp ~/.ssh/OVZ-STORAGE-128.pub usernl@5.2.79.107:/home/usernl/

sur le serveur KVM On se connecte

1
ssh usernl@5.2.79.107

Copier le contenu de la clé publique dans /home/$USER/.ssh/authorized_keys

1
cd ~

Sur le KVM ,créer un dossier .ssh

1
2
mkdir .ssh
cat $HOME/OVZ-STORAGE-128.pub >> $HOME/.ssh/authorized_keys

et donner les droits

1
chmod 600 $HOME/.ssh/authorized_keys

effacer le fichier de la clé

1
rm $HOME/*.pub

Modifier la configuration serveur SSH

1
sudo nano /etc/ssh/sshd_config

Modifier

1
2
3
Port 55036
PermitRootLogin no
PasswordAuthentication no

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.

Relancer openSSH

1
sudo systemctl restart sshd

Accès depuis le poste distant avec la clé privée

1
ssh usernl@5.2.79.107 -p 55036 -i ~/.ssh/OVZ-STORAGE-128  # choix par défaut ,pour la compatibilité avec l'ancien serveur de sauvegarde de 128Go

Outils, scripts motd et ssh_rc_bash

Motd

1
sudo rm /etc/motd && sudo nano /etc/motd
1
2
3
4
5
6
7
8
   ___ __   __ ____     _  ___  ___        
  / _ \\ \ / /|_  /___ / ||_  )( _ )       
 | (_) |\ V /  / /|___|| | / / / _ \       
  \___/  \_/_ /___|__  |_|/___|\___/  ____ 
 | __|   |_  )  |__  |/ _ \  / | /  \|__  |
 |__ \ _  / /  _  / / \_, /_ | || () | / / 
 |___/(_)/___|(_)/_/   /_/(_)|_| \__/ /_/  
                                           

Script ssh_rc_bash

ATTENTION!!! Les scripts sur connexion peuvent poser des problèmes pour des appels externes autres que ssh

1
2
3
wget https://static.xoyaz.xyz/files/ssh_rc_bash
chmod +x ssh_rc_bash # rendre le bash exécutable
./ssh_rc_bash        # exécution

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

1
2
3
4
5
6
7
8
9
Linux ovz128 2.6.32-042stab140.1 #1 SMP Thu Aug 15 13:32:22 MSK 2019 x86_64
   ___ __   __ ____     _  ___  ___        
  / _ \\ \ / /|_  /___ / ||_  )( _ )       
 | (_) |\ V /  / /|___|| | / / / _ \       
  \___/  \_/_ /___|__  |_|/___|\___/  ____ 
 | __|   |_  )  |__  |/ _ \  / | /  \|__  |
 |__ \ _  / /  _  / / \_, /_ | || () | / / 
 |___/(_)/___|(_)/_/   /_/(_)|_| \__/ /_/  
Last login: Sat Sep 11 16:30:39 2021 from 194.110.113.91

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

Locales

1
2
apt-get install locales
locale-gen en_US.UTF-8

Erreurs,Avertissements

Services

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
usernl@backup:~$ systemctl list-units --type=service
  UNIT                           LOAD   ACTIVE SUB     DESCRIPTION                                 
  console-getty.service          loaded active running Console Getty                               
  cron.service                   loaded active running Regular background program processing daemon
  dbus.service                   loaded active running D-Bus System Message Bus                    
  exim4.service                  loaded active running LSB: exim Mail Transport Agent              
  getty@tty2.service             loaded active running Getty on tty2                               
  networking.service             loaded active exited  Raise network interfaces                    
  quota.service                  loaded active exited  Initial Check File System Quotas            
● rc-local.service               loaded failed failed  /etc/rc.local Compatibility                 
  rsyslog.service                loaded active running System Logging Service                      
  ssh.service                    loaded active running OpenBSD Secure Shell server                 
  systemd-journal-flush.service  loaded active exited  Flush Journal to Persistent Storage         
  systemd-journald.service       loaded active running Journal Service                             
  systemd-logind.service         loaded active running Login Service                               
  systemd-remount-fs.service     loaded active exited  Remount Root and Kernel File Systems        
  systemd-sysctl.service         loaded active exited  Apply Kernel Variables                      
  systemd-tmpfiles-setup.service loaded active exited  Create Volatile Files and Directories       
  systemd-udev-trigger.service   loaded active exited  udev Coldplug all Devices                   
  systemd-udevd.service          loaded active running udev Kernel Device Manager                  
  systemd-update-utmp.service    loaded active exited  Update UTMP about System Boot/Shutdown      
  systemd-user-sessions.service  loaded active exited  Permit User Sessions                        
  user@1000.service              loaded active running User Manager for UID 1000                   
● vzquota.service                loaded failed failed  LSB: Start vzquota at the end of boot       

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

22 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

Désactiver rc.local et vzquota.service

1
2
sudo systemctl disable rc-local.service 
sudo systemctl disable vzquota.service

Parefeu (iptables)


On utilise un service systemd
Créer le fichier le script /sbin/iptables-firewall.sh

1
sudo nano /sbin/iptables-firewall.sh
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#!/bin/bash
# Configure iptables firewall

# Limit PATH
PATH="/sbin:/usr/sbin:/bin:/usr/bin"

# iptables configuration
firewall_start() {
###################
#      IPv4       #
###################

# refuser input et forward par défaut, accepter output
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT ACCEPT

# interface lo (loop) accessible
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# maintenir les connexions établies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# accepter en entrée le ping (icmp), et les
# connexions sur les ports nécessaires.
iptables -A INPUT -p icmp --icmp-type echo-request -m conntrack --ctstate NEW -m limit --limit 1/s --limit-burst 1 -j ACCEPT
iptables -A INPUT -p tcp --dport 55036 -j ACCEPT
iptables -A INPUT -p udp --dport 55036 -j ACCEPT

# accepter en sortie le ping, les requêtes HTTP(S), DNS,
# et les connexions sur les ports nécessaires.
iptables -A OUTPUT -p icmp --icmp-type echo-request -m conntrack --ctstate NEW -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT

###################
#      IPv6       #
###################

# refuser input et forward par défaut, accepter output
ip6tables -t filter -P INPUT DROP
ip6tables -t filter -P FORWARD DROP
ip6tables -t filter -P OUTPUT ACCEPT

# interface lo (loop) accessible
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A OUTPUT -o lo -j ACCEPT

# maintenir les connexions établies
ip6tables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
ip6tables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# accepter en entrée le ping (icmpv6), les
# connexions entrantes déjà établies et les connexions sur les ports nécessaires.
ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-request -m conntrack --ctstate NEW -m limit --limit 1/s --limit-burst 1 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 55036 -j ACCEPT
ip6tables -A INPUT -p udp --dport 55036 -j ACCEPT

# accepter en sortie le ping, les requêtes HTTP(S), DNS,
# et les connexions sur les ports nécessaires.
ip6tables -t filter -A OUTPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT
ip6tables -A OUTPUT -p udp --dport 53 -j ACCEPT
ip6tables -A OUTPUT -p tcp --dport 53 -j ACCEPT
}

# clear iptables configuration
firewall_stop() {
  iptables -F
  iptables -X
  iptables -P INPUT   ACCEPT
  iptables -P FORWARD ACCEPT
  iptables -P OUTPUT  ACCEPT
  ip6tables -F
  ip6tables -X
  ip6tables -P INPUT   ACCEPT
  ip6tables -P FORWARD ACCEPT
  ip6tables -P OUTPUT  ACCEPT
}

# execute action
case "$1" in
  start|restart)
    echo "Starting firewall"
    firewall_stop
    firewall_start
    ;;
  stop)
    echo "Stopping firewall"
    firewall_stop
    ;;
esac

Les droits et exécutable

1
2
sudo chown root:root /sbin/iptables-firewall.sh
sudo chmod 750 /sbin/iptables-firewall.sh 

Créer le service systemd iptables-firewall.service

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cat << EOF | sudo tee /etc/systemd/system/iptables-firewall.service
[Unit]
Description=iptables firewall service
After=network.target

[Service]
Type=oneshot
ExecStart=/sbin/iptables-firewall.sh start
RemainAfterExit=true
ExecStop=/sbin/iptables-firewall.sh stop
StandardOutput=journal

[Install]
WantedBy=multi-user.target
EOF

Recharger systemd manager

1
sudo systemctl daemon-reload

Lancer le service iptables et l’activer

1
2
sudo systemctl start iptables-firewall # vérifier le fonctionnement avant de valider
sudo systemctl enable iptables-firewall

Rsync

Création des dossiers

1
mkdir -p $HOME/{BiblioCalibre,CalibreTechnique,musique}

Copier la clé privée OVZ-STORAGE-128 dans le dossier ~/.ssh
Les droits : chmod 600 .ssh/OVZ-STORAGE-128

On se connecte depuis l’adresse ip 5.2.79.107 sur l’adresse ip 5.2.79.127 via ssh

1
ssh -p 55036 -i .ssh/OVZ-STORAGE-128 usernl@5.2.79.127
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
The authenticity of host '[5.2.79.127]:55036 ([5.2.79.127]:55036)' can't be established.
ECDSA key fingerprint is SHA256:NuFqR5id10fVzRLsSTqJ4vBpFnNYi+APGsvPYth6PHw.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[5.2.79.127]:55036' (ECDSA) to the list of known hosts.
Linux vps70253415 5.7.0-1-amd64 #1 SMP Debian 5.7.6-1 (2020-06-24) x86_64
                 ____  __  ___  ___  ____ _ _   _  ___ 
 __ __ _ __  ___|__  |/  \|_  )| __||__ /| | | / || __|
 \ V /| '_ \(_-<  / /| () |/ / |__ \ |_ \|_  _|| ||__ \
  \_/ | .__//__/ /_/  \__//___||___/|___/  |_| |_||___/
    __|_|   ___    ____  ___    _  ___  ____           
   | __|   |_  )  |__  |/ _ \  / ||_  )|__  |          
   |__ \ _  / /  _  / / \_, /_ | | / /   / /           
   |___/(_)/___|(_)/_/   /_/(_)|_|/___| /_/ 
You have new mail.
Last login: Sat Sep 11 17:00:05 2021 from 194.110.113.91

Synchronisation des dossiers entre 5.2.79.127 (xoyaz.xyz) et 5.2.79.107

1
nano $HOME/rsync-xoyaz-local.sh
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
55
56
57
58
59
#!/bin/bash

# Synchronisation entre serveurs ovz128 5.2.79.107 avec vps70253415 5.2.79.127

# Dossier local
REPLOC="/home/usernl" 
# Dossier distant xoyaz.xyz 5.2.79.127
REPDIS="/home/usernl/backup"
# Utilisateur distant
USERDIS="usernl@xoyaz.xyz"
# Port ssh
PORT="55036"
# Clé privée
PRIVKEY="/home/usernl/.ssh/OVZ-STORAGE-128"

echo "-----------------------------------------------
Synchro xoyaz.xyz 'musique' avec ovz128 'musique' " 
rsync -avz --progress --stats --human-readable --rsync-path="sudo rsync" -e "ssh -p $PORT -i $PRIVKEY -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" \
$USERDIS:$REPDIS/musique/* $REPLOC/musique/ ; \
 if [ $? -eq 0 ]; then \
 echo "Synchro xoyaz.xyz 'musique' avec ovz128 'musique' -> OK" | systemd-cat -t allsync -p info ; \
 else \
 echo "Synchro xoyaz.xyz 'musique' avec ovz128 'musique' -> ERREUR" | systemd-cat -t allsync -p emerg ; \
 fi

echo "-----------------------------------------------
Synchro xoyaz.xyz 'BiblioCalibre' avec ovz128 'BiblioCalibre' " 
rsync -avz --progress --stats --human-readable --rsync-path="sudo rsync" -e "ssh -p $PORT -i $PRIVKEY -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" \
$USERDIS:$REPDIS/BiblioCalibre/* $REPLOC/BiblioCalibre/ ; \
 if [ $? -eq 0 ]; then \
 echo "Synchro xoyaz.xyz 'BiblioCalibre' avec ovz128 'BiblioCalibre' -> OK" | systemd-cat -t allsync -p info ; \
 else \
 echo "Synchro xoyaz.xyz 'BiblioCalibre' avec ovz128 'BiblioCalibre' -> ERREUR" | systemd-cat -t allsync -p emerg ; \
 fi
 
echo "-----------------------------------------------
Synchro xoyaz.xyz 'CalibreTechnique' avec ovz128 'CalibreTechnique' " 
rsync -avz --progress --stats --human-readable --rsync-path="sudo rsync" -e "ssh -p $PORT -i $PRIVKEY -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" \
$USERDIS:$REPDIS/CalibreTechnique/* $REPLOC/CalibreTechnique/ ; \
 if [ $? -eq 0 ]; then \
 echo "Synchro xoyaz.xyz 'CalibreTechnique' avec ovz128 'CalibreTechnique' -> OK" | systemd-cat -t allsync -p info ; \
 else \
 echo "Synchro xoyaz.xyz 'CalibreTechnique' avec ovz128 'CalibreTechnique' -> ERREUR" | systemd-cat -t allsync -p emerg ; \
 fi

echo "-----------------------------------------------
Synchro xoyaz.xyz 'www' avec ovz128 'www' " 
rsync -avz --progress --stats --human-readable --rsync-path="sudo rsync" -e "ssh -p $PORT -i $PRIVKEY -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" \
$USERDIS:$REPDIS/www/* $REPLOC/www/ ; \
 if [ $? -eq 0 ]; then \
 echo "Synchro xoyaz.xyz 'www' avec ovz128 'www' -> OK" | systemd-cat -t allsync -p info ; \
 else \
 echo "Synchro xoyaz.xyz 'www' avec ovz128 'www' -> ERREUR" | systemd-cat -t allsync -p emerg ; \
 fi

clear
journalctl --no-pager -t allsync --since today

exit 0

Droit en exécution

1
chmod +x $HOME/rsync-xoyaz-local.sh

Ouvrir tmux et lancer le bash

1
2
3
tmux
cd $HOME
./rsync-xoyaz-local.sh

Ordonnancement (cron)

Tous les jours à 3h30

1
sudo crontab -e
1
30 2 * * * /home/usernl/rsync-xoyaz-local.sh
Cet article est sous licence CC BY 4.0 par l'auteur.