Post

Serveur IPV6 cubieboard2 (armhf) Debian 10 rnmkcy.eu

Serveur IPV6 cubieboard2 (armhf) Debian 10 rnmkcy.eu

Cubieboard2

Matériel

  • AllWinnerTech SOC A20,ARM® Cortex™-A7 Dual-Core ARM® Mali400 MP2 Complies with OpenGL ES 2.0/1.1
  • 1GB DDR3 @480M
  • 3.4GB internal NAND flash, up to 64GB on SD slot, up to 2T on 2.5 SATA disk
  • 5VDC input 2A or USB otg input
  • 1x 10/100 ethernet, support usb wifi
  • 2x USB 2.0 HOST, 1x mini USB 2.0 OTG, 1x micro sd
  • 1x HDMI 1080P display output
  • 1x IR, 1x line in, 1x line out
  • 96 extend pin interface, including I2C, SPI, RGB/LVDS, CSI/TS, FM-IN, ADC, CVBS, VGA, SPDIF-OUT, R-TP, and more

Debian Buster

Texte alternatif
SDcard

SDcard créer avec les paquets debian armhf
Index of /debian/dists/buster/main/installer-armhf/current/images/netboot/SD-card-images/

  1. Télécharger firmware.Cubieboard2.img.gz et partition.img.gz puis se rendre dans le répertoire contenant les fichiers
  2. Insérer le lecteur USB/SDcard, relever le périphérique par dmesg , ex /dev/sdf
  3. Ecriture image sur la SDcard :
    sudo -s puis zcat firmware.Cubieboard2.img.gz partition.img.gz > /dev/sdf

Connexion liaison série

Utilisation module USB/Série /dev/ttyUSB0 et minicom
Insertion carte SD et mise sous tension Cubieboard2
Installation :

  • Language C
  • Europe/France
  • Hostname : cboard
  • Domaine :
  • Miroir : France , deb.debian.org
  • Http Proxy :
  • Root/mp : root/ytreu49
  • Utilisateur/mp : cub/cub49
  • Partionnement
    • SDcard /boot ext2 512M
    • SSD 128GO → / root 25Go ext4, /home 30Go ext4 ,swap 4Go
  • software to install :
    • SSH server
    • standard system utilities

A la fin de l’installation,redémarrage

Connexion utilisateur cub via liaison USB/Série et minicom
Passage en super utilisateur
su

Modifier sources.list

Ajout de contrib non-free

1
2
3
4
5
6
7
8
9
10
11
12
13
cat > /etc/apt/sources.list << EOF
# deb http://deb.debian.org/debian/ buster main

deb http://deb.debian.org/debian/ buster main contrib non-free
deb-src http://deb.debian.org/debian/ buster main contrib non-free

deb http://security.debian.org/debian-security buster/updates main contrib non-free
deb-src http://security.debian.org/debian-security buster/updates main contrib non-free

# buster-updates, previously known as 'volatile'
deb http://deb.debian.org/debian/ buster-updates main contrib non-free
deb-src http://deb.debian.org/debian/ buster-updates main contrib non-free
EOF

Adressage ipv4/ipv6

ipv6
La carte n’est joignable de l’internet que par son adresse IPV6
NextHop Freebox permet d’attribuer une adresse IPV6

Prefixe : 2a01:e34:eebf:df2::/64
Next Hop: fe80::c4:4ff:fe40:f0ff
Passerelle IPV6 Box : fe80::224:d4ff:fea6:aa20

Modifier interface réseau debian

1
nano /etc/network/interfaces
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
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet static
 address 192.168.0.47
 netmask 255.255.255.0
 network 192.168.0.0
 broadcast 192.168.0.255
 gateway 192.168.0.254
	
# This is an autoconfigured IPv6 interface
#iface eth0 inet6 auto

iface eth0 inet6 static
  address 2a01:e34:eebf:df2::1
  netmask 64
  post-up ip -6 route add default via fe80::224:d4ff:fea6:aa20 dev eth0

sudo

Installer sudo et modifier /etc/sudoers pour accès sans mot de passe à l’utilisateur cub

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

Ereindre systemctl poweroff , redémarrer et se connecter en mode utilisateur via ssh

1
ssh cub@192.168.0.47

on passe en su , sudo -s

Adresses IP

Vérifier les adresses IP : ip a

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 02:c4:04:40:f0:ff brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.47/24 brd 192.168.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 2a01:e34:eebf:df2::1/64 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::c4:4ff:fe40:f0ff/64 scope link 
       valid_lft forever preferred_lft forever

Version linux et debian: uname -a
Linux cboard 4.19.0-10-armmp-lpae #1 SMP Debian 4.19.132-1 (2020-07-24) armv7l GNU/Linux cat /etc/debian_version
10.5

Locales Timezone

locales fr_FR.UTF-8

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

TimeZone : Europe/Paris (facultatif car défini à l’installation de debian)

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

Machine : cboard , hostnamectl

1
2
3
4
5
6
7
8
root@cboard:/home/cub# hostnamectl                                                                                            
   Static hostname: cboard                                                                                                    
         Icon name: computer                                                                                                  
        Machine ID: 60edd3b461654c7bac35d1ec6691c5d7                                                                          
           Boot ID: 29b596fd2a2d4b2293374674ffd60397                                                                          
  Operating System: 8;;https://www.debian.org/Debian GNU/Linux 10 (buster)8;;                                                 
            Kernel: Linux 4.19.0-10-armmp-lpae                                                                                
      Architecture: arm                                                                                  

Les points de montage

1
2
3
/dev/sda1 on / type ext4 (rw,relatime,errors=remount-ro)
/dev/sda2 on /home type ext4 (rw,relatime)
/dev/mmcblk0p1 on /boot type ext2 (rw,relatime)

Date et heure (timesyncd)

L’heure système est erronée, il faut la mettre à jour manuellement

1
timedatectl set-time "2020-08-25 16:24:00"

Pour une mise à jour automatique

A-Vérifier

1
timedatectl                                                                                            
1
2
3
4
5
6
7
               Local time: Fri 2020-09-04 08:31:29 CEST                                                                       
           Universal time: Fri 2020-09-04 06:31:29 UTC                                                                        
                 RTC time: Fri 2020-09-04 06:31:30                                                                            
                Time zone: Europe/Paris (CEST, +0200)                                                                         
System clock synchronized: yes                                                                                                
              NTP service: active                                                                                             
          RTC in local TZ: no                                                                                                 

Tout est fonctionnel…

B-En cas de vérification non correcte

1-Retirer les services ntp (si installé)

1
2
3
systemctl stop ntp.service
systemctl disable ntp.service
systemctl status ntp.service
1
2
    ● ntp.service - Network Time Service
    Loaded: loaded (/lib/systemd/system/ntp.service; disabled; vendor preset: enabled)

2-Configurer timesyncd pour utiliser un serveur de temps

1
nano /etc/systemd/timesyncd.conf
1
2
3
[Time]  
NTP=  
FallbackNTP=0.fr.pool.ntp.org 1.fr.pool.ntp.org 2.fr.pool.ntp.org 3.fr.pool.ntp.org

3-Activer la synchro ntp

1
timedatectl set-ntp true

4-Activer le service timesyncd :

1
2
3
systemctl enable systemd-timesyncd.service
systemctl start systemd-timesyncd.service
systemctl status systemd-timesyncd.service
1
2
Active: active (running) since Tue 2020-08-25 17:42:51 CEST; 36s left
Status: "Synchronized to time server for the first time 51.77.12.38:123 (0.fr.pool.ntp.org)."

Si les erreurs suivantes apparaissent :

1
2
ConditionFileIsExecutable=!/usr/sbin/ntpd was not met  
Condition check resulted in Network Time Synchronization being skipped.  

Supprimer ntp : apt remove ntp ntpdate

5-Vérifier que tout est OK :

1
timedatectl status
1
2
3
4
5
6
7
               Local time: mar. 2020-08-25 18:12:53 CEST
           Universal time: mar. 2020-08-25 16:12:53 UTC
                 RTC time: mar. 2020-08-25 16:12:53
                Time zone: Europe/Paris (CEST, +0200)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

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) nommé cubie-ed25519 pour une liaison SSH avec le serveur KVM.

1
ssh-keygen -t ed25519 -o -a 100 -f ~/.ssh/cubie-ed25519

Envoyer la clé publique sur le serveur KVM

1
scp ~/.ssh/cubie-ed25519.pub cub@192.168.0.47:/home/cub/

sur le serveur KVM On se connecte

1
ssh cub@192.168.0.47

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

1
cd ~

Sur le KVM

1
2
3
4
mkdir .ssh  # créer un dossier .ssh
cat $HOME/cubie-ed25519.pub >> $HOME/.ssh/authorized_keys  # copier le contenu de la clé
chmod 600 $HOME/.ssh/authorized_keys # et donner les droits
rm $HOME/cubie-ed25519.pub # effacer le fichier de la clé

Modifier la configuration serveur SSH /etc/ssh/sshd_config

1
2
Port = 55035               # changement numéro port , facultatif  
PasswordAuthentication no  # Utilise la clé comme authentification

Relancer openSSH

1
sudo systemctl restart sshd

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

1
ssh -p 55035 -i ~/.ssh/cubie-ed25519 cub@192.168.0.47

Outils


motd, ssh_rc_bash , journalctl

Installer utilitaires

1
sudo apt install tmux figlet curl jq tree git gnupg -y

Motd

1
sudo rm /etc/motd && sudo nano /etc/motd
1
2
3
4
5
6
7
8
            _     _       _                        _ 
  __  _  _ | |__ (_) ___ | |__  ___  __ _  _ _  __| |
 / _|| || || '_ \| |/ -_)| '_ \/ _ \/ _` || '_|/ _` |
 \__| \_,_||_.__/|_|\___||_.__/\___/\__,_||_|  \__,_|
  _ _  _ _   _ __  | |__ __  _  _     ___  _  _      
 | '_|| ' \ | '  \ | / // _|| || | _ / -_)| || |     
 |_|  |_||_||_|_|_||_\_\\__| \_, |(_)\___| \_,_|     
                             |__/                    

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

journalctl : Ajout utilisateur courant au groupe systemd-journal et adm

1
2
sudo gpasswd -a $USER systemd-journal
sudo gpasswd -a $USER adm

Lignes non tronquées ,ajouter au fichier ~/.bashrc

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

Historique de la ligne de commande
Ajoutez la recherche d’historique de la ligne de commande au terminal. Tapez un début de commande précédent, puis utilisez shift + up (flèche haut) pour rechercher l’historique filtré avec le début de la commande.

1
2
3
# Global, tout utilisateur
echo '"\e[1;2A": history-search-backward' | sudo tee -a /etc/inputrc
echo '"\e[1;2B": history-search-forward' | sudo tee -a /etc/inputrc

Prise en compte après déconnexion/reconnexion

Iptables

parefeu

Créer le fichier le script /sbin/iptables-firewall.sh
Nous sommes en configuration IPV6 pour les accès http https externes

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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#!/bin/bash
# Configure iptables firewall

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

# iptables configuration
firewall_start() {

###################
#      IPv4       #
###################

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

# Autoriser loopback
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT

# ICMP (Ping)
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT

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

# SSH In/Out
iptables -t filter -A INPUT -p tcp --dport 55035 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 55035 -j ACCEPT

# HTTP + HTTPS Out
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT

# HTTP + HTTPS In
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT

# DNS In/Out
iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT

# NFS
iptables -t filter -A INPUT -s 192.168.0.0/24 -p tcp -m multiport --ports 111,2049,32764:32769 -j ACCEPT -m comment --comment "NFS Server"
iptables -t filter -A INPUT -s 192.168.0.0/24 -p udp -m multiport --ports 111,2049,32764:32769 -j ACCEPT -m comment --comment "NFS Server"

# NTP Out
iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT

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

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

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

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

# NDP pour toute interface de type broadcast
ip6tables -t filter -A INPUT -p icmpv6 --icmpv6-type neighbour-solicitation -m hl --hl-eq 255 -j ACCEPT
ip6tables -t filter -A INPUT -p icmpv6 --icmpv6-type neighbour-advertisement -m hl --hl-eq 255 -j ACCEPT
ip6tables -t filter -A INPUT -p icmpv6 --icmpv6-type router-advertisement -m hl --hl-eq 255 -j ACCEPT

ip6tables -t filter -A OUTPUT -p icmpv6 --icmpv6-type neighbour-solicitation -j ACCEPT
ip6tables -t filter -A OUTPUT -p icmpv6 --icmpv6-type neighbour-advertisement -j ACCEPT
ip6tables -t filter -A OUTPUT -p icmpv6 --icmpv6-type router-solicitation -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 -t filter -A OUTPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT

# SSH In/Out
ip6tables -t filter -A INPUT -p tcp --dport 55035 -j ACCEPT
ip6tables -t filter -A OUTPUT -p tcp --dport 55035 -j ACCEPT

# HTTP + HTTPS Out
ip6tables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
ip6tables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT

# HTTP + HTTPS In
ip6tables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
ip6tables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT

# DNS In/Out
ip6tables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
ip6tables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
ip6tables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
ip6tables -t filter -A INPUT -p udp --dport 53 -j ACCEPT

# NTP Out
ip6tables -t filter -A OUTPUT -p udp --dport 123 -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

Lancement et activation service Recharger systemd manager

1
sudo systemctl daemon-reload

Lancer le service iptables et l’activer

1
2
sudo systemctl start iptables-firewall
sudo systemctl enable iptables-firewall

NFS


NFS (Network File System) est un protocole qui permet d’accéder à des fichiers via le réseau. Il est basé sur le protocole RPC (Remote Procedure Call). Les clients montent la partition de la machine distante comme si c’était un disque local.

En mode su

Installation serveur NFS

1
apt install nfs-kernel-server

Vérification de l’installation

Exécuter rpcinfo pour confirmer que le serveur est lancé, et accepte les requêtes sur le port 2049 (UDP et TCP).

1
rpcinfo -p | grep nfs 
1
2
3
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100003    3   udp   2049  nfs

Vérifier que le système supporte effectivement NFS:

1
cat /proc/filesystems | grep nfs
1
nodev	nfs

Si la commande précédente ne renvoie rien, il se peut que le module NFS ne soit pas chargé, auquel cas, il faut le charger modprobe nfs
Enfin, vérifions que portmap attend les instructions sur le port 111

1
rpcinfo -p | grep portmap
1
2
3
4
5
6
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper

Configuration du partage

indiquer au serveur les répertoires qui seront partagés, les machines qui y auront accès et les conditions de ce partage.

1
nano /etc/exports

Ajouter en fin de fichier /etc/exports

1
/dossier                                   192.168.0.0/24(rw,sync,no_subtree_check,no_root_squash)

Exporter

1
exportfs -ar

Pour vérifier que l’export a bien eu lieu, taper sur le serveur NFS la commande :

1
showmount -e

Sécuriser NFS

Le protocole RPC n’a pas la réputation d’être bien sécurisé, mais la version 4 de NFS entend corriger ce problème, elle est donc à privilégier. Il est déconseillé d’effectuer un partage NFS via internet, ou bien dans ce cas, opter pour un tunnel crypté.

  • S’assurer que les partages sont réservés à certaines IP dans /etc/exports
  • S’appuyer sur rpcbind (/etc/hosts.deny et /etc/hosts.allow) pour sécuriser l’accès au serveur NFS
  • Configurer convenablement iptables

hosts.deny , hosts.allow
Tout le monde est interdit, puis le LAN est autorisé:

1
2
echo "rpcbind mountd nfsd statd lockd rquotad : ALL" | sudo tee -a /etc/hosts.deny
echo "rpcbind mountd nfsd statd lockd rquotad: 192.168.0." | sudo tee -a /etc/hosts.allow

iptables (NFS)
Par défaut, les différents services NFS (lockd, statd, mountd, etc.) demandent des assignations de ports aléatoires à partir du portmapper (portmap/rpcbind), ce qui signifie que la plupart des administrateurs doivent ouvrir une gamme de ports dans leur base de règles de pare-feu pour que NFS fonctionne.

Il va donc falloir fixer les ports de ces services afin de créer les règles iptables.

1
2
3
echo 'STATDOPTS="--port 32765 --outgoing-port 32766"' | sudo tee -a /etc/default/nfs-common
echo 'RPCMOUNTDOPTS="-p 32767"' | sudo tee -a /etc/default/nfs-kernel-server
echo 'RPCRQUOTADOPTS="-p 32769"' | sudo tee -a /etc/default/quota

Relance sysctl

1
sudo sysctl --system
1
2
3
4
5
6
7
8
* Applying /etc/sysctl.d/90-transmission.conf ...
net.core.rmem_max = 4194304
net.core.wmem_max = 1048576
* Applying /etc/sysctl.d/99-sysctl.conf ...
* Applying /etc/sysctl.d/protect-links.conf ...
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
* Applying /etc/sysctl.conf ...

Relancer le service

1
sudo systemctl restart nfs-kernel-server

Vérifier

1
systemctl status nfs-kernel-server
1
2
3
4
5
6
● nfs-server.service - NFS server and services
   Loaded: loaded (/lib/systemd/system/nfs-server.service; enabled; vendor preset: enabled)
   Active: active (exited) since Fri 2020-09-04 08:51:34 CEST; 35s ago
  Process: 3471 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
  Process: 3472 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)
 Main PID: 3472 (code=exited, status=0/SUCCESS)

NFS - iptables

Ajout des règles firewall au fichier /sbin/iptables-firewall.sh

1
2
3
# NFS
iptables -t filter -A INPUT -s 192.168.0.0/24 -p tcp -m multiport --ports 111,2049,32764:32769 -j ACCEPT -m comment --comment "NFS Server"
iptables -t filter -A INPUT -s 192.168.0.0/24 -p udp -m multiport --ports 111,2049,32764:32769 -j ACCEPT -m comment --comment "NFS Server"

Relancer le service iptables

1
sudo systemctl restart iptables-firewall

Vérifier la prise en charge

1
iptables -L
1
2
3
4
[...]
ACCEPT     tcp  --  192.168.0.0/24       anywhere             multiport ports sunrpc,nfs,32764:32769 /* NFS Server */
ACCEPT     udp  --  192.168.0.0/24       anywhere             multiport ports sunrpc,nfs,32764:32769 /* NFS Server */
[...]

Domaine rnmkcy.eu

DNS OVH

Dns ovh domaine rnmkcy.eu

1
2
3
4
5
$TTL 3600
@	IN SOA dns110.ovh.net. tech.ovh.net. (2020081505 86400 3600 3600000 300)
        IN NS     dns110.ovh.net.
        IN NS     ns110.ovh.net.
        IN AAAA   2a01:e34:eebf:df2::1

Certificats Let’s Encrypt

Installer acme: Serveur , installer et renouveler les certificats SSL Let’s encrypt via Acme

1
2
3
4
5
6
cd ~
sudo apt install socat -y # prérequis
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
./acme.sh --install # se déconnecter pour prise en compte
# export des clé API OVH

Générer les certificats pour le domaine rnmkcy.eu

1
2
# s'identifier avec le lien fourni au premier lancement, puis relancer la même commande
acme.sh --dns dns_ovh --ocsp --issue --keylength ec-384 -d 'rnmkcy.eu' 
1
2
3
4
[vendredi 4 septembre 2020, 08:56:34 (UTC+0200)] Your cert is in  /home/cub/.acme.sh/rnmkcy.eu_ecc/rnmkcy.eu.cer 
[vendredi 4 septembre 2020, 08:56:34 (UTC+0200)] Your cert key is in  /home/cub/.acme.sh/rnmkcy.eu_ecc/rnmkcy.eu.key 
[vendredi 4 septembre 2020, 08:56:34 (UTC+0200)] The intermediate CA cert is in  /home/cub/.acme.sh/rnmkcy.eu_ecc/ca.cer 
[vendredi 4 septembre 2020, 08:56:34 (UTC+0200)] And the full chain certs is there:  /home/cub/.acme.sh/rnmkcy.eu_ecc/fullchain.cer 

Les liens avec /etc/ssl/private

1
2
3
4
sudo ln -s /home/cub/.acme.sh/rnmkcy.eu_ecc/rnmkcy.eu.cer /etc/ssl/private/rnmkcy.eu-chain.pem # cert
sudo ln -s /home/cub/.acme.sh/rnmkcy.eu_ecc/rnmkcy.eu.key /etc/ssl/private/rnmkcy.eu-key.pem # cert key 
sudo ln -s /home/cub/.acme.sh/rnmkcy.eu_ecc/ca.cer /etc/ssl/private/rnmkcy.eu-ca.pem # intermediate CA cert
sudo ln -s /home/cub/.acme.sh/rnmkcy.eu_ecc/fullchain.cer /etc/ssl/private/rnmkcy.eu-fullchain.pem #full chain certs

Nginx

En mode su

Installer nginx nginx-extras

Installation nginx sur debian buster (nginx-extras pour fancyindex)

1
apt update && apt -y install nginx nginx-extras

Version nginx et modules installés

1
nginx -V
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
nginx version: nginx/1.14.2
built with OpenSSL 1.1.1d  10 Sep 2019
TLS SNI support enabled
configure arguments:
 --with-cc-opt='-g -O2 -fdebug-prefix-map=/build/nginx-5qcV7v/nginx-1.14.2=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wdate-time -D_FORTIFY_SOURCE=2'
 --with-ld-opt='-Wl,-z,relro -Wl,-z,now -fPIC'
 --prefix=/usr/share/nginx
 --conf-path=/etc/nginx/nginx.conf
 --http-log-path=/var/log/nginx/access.log
 --error-log-path=/var/log/nginx/error.log
 --lock-path=/var/lock/nginx.lock
 --pid-path=/run/nginx.pid
 --modules-path=/usr/lib/nginx/modules
 --http-client-body-temp-path=/var/lib/nginx/body
 --http-fastcgi-temp-path=/var/lib/nginx/fastcgi
 --http-proxy-temp-path=/var/lib/nginx/proxy
 --http-scgi-temp-path=/var/lib/nginx/scgi
 --http-uwsgi-temp-path=/var/lib/nginx/uwsgi
 --with-debug
 --with-pcre-jit
 --with-http_ssl_module
 --with-http_stub_status_module
 --with-http_realip_module
 --with-http_auth_request_module
 --with-http_v2_module
 --with-http_dav_module
 --with-http_slice_module
 --with-threads
 --with-http_addition_module
 --with-http_flv_module
 --with-http_geoip_module=dynamic
 --with-http_gunzip_module
 --with-http_gzip_static_module
 --with-http_image_filter_module=dynamic
 --with-http_mp4_module
 --with-http_perl_module=dynamic
 --with-http_random_index_module
 --with-http_secure_link_module
 --with-http_sub_module
 --with-http_xslt_module=dynamic
 --with-mail=dynamic
 --with-mail_ssl_module
 --with-stream=dynamic
 --with-stream_ssl_module
 --with-stream_ssl_preread_module
 --add-dynamic-module=/build/nginx-5qcV7v/nginx-1.14.2/debian/modules/http-headers-more-filter
 --add-dynamic-module=/build/nginx-5qcV7v/nginx-1.14.2/debian/modules/http-auth-pam
 --add-dynamic-module=/build/nginx-5qcV7v/nginx-1.14.2/debian/modules/http-cache-purge
 --add-dynamic-module=/build/nginx-5qcV7v/nginx-1.14.2/debian/modules/http-dav-ext
 --add-dynamic-module=/build/nginx-5qcV7v/nginx-1.14.2/debian/modules/http-ndk
 --add-dynamic-module=/build/nginx-5qcV7v/nginx-1.14.2/debian/modules/http-echo
 --add-dynamic-module=/build/nginx-5qcV7v/nginx-1.14.2/debian/modules/http-fancyindex
 --add-dynamic-module=/build/nginx-5qcV7v/nginx-1.14.2/debian/modules/nchan
 --add-dynamic-module=/build/nginx-5qcV7v/nginx-1.14.2/debian/modules/http-lua
 --add-dynamic-module=/build/nginx-5qcV7v/nginx-1.14.2/debian/modules/rtmp
 --add-dynamic-module=/build/nginx-5qcV7v/nginx-1.14.2/debian/modules/http-uploadprogress
 --add-dynamic-module=/build/nginx-5qcV7v/nginx-1.14.2/debian/modules/http-upstream-fair
 --add-dynamic-module=/build/nginx-5qcV7v/nginx-1.14.2/debian/modules/http-subs-filter

Dossier web

Création dossier web et fichier index/

1
2
mkdir -p /var/www/default-www
echo "/>Site rnmkcy.eu</>" >  /var/www/default-www/index/

Modifier /etc/nginx/nginx.conf
Mettre un commentaire à la ligne comme suit : #include /etc/nginx/sites-enabled/*;

SSL Headers et OCSP

ssl headers
Configuration nginx , ssl (tls1.2 tls1.3) , Diffie Hellman ,Headers et OCSP
Diffie-Hellman , générer le fichier dh2048.pem (plus ou moins long suivant les ressources):

1
2
openssl dhparam -out /etc/ssl/private/dh2048.pem -outform PEM -2 2048 
chmod 600 /etc/ssl/private/dh2048.pem

Si DNS ubound n’est pas installé , relever le résolveur utilisé cat /etc/resolv.conf

1
2
3
4
nameserver 1.1.1.1
nameserver 1.0.0.1
nameserver 80.67.169.12
nameserver 80.67.169.40

Regroupement dans un fichier /etc/nginx/ssl_dh_headers_ocsp

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
# /etc/nginx/ssl_dh_headers_ocsp

    ssl_certificate /etc/ssl/private/rnmkcy.eu-fullchain.pem;
    ssl_certificate_key /etc/ssl/private/rnmkcy.eu-key.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions
    ssl_session_tickets off;

    ssl_dhparam /etc/ssl/private/dh2048.pem;

    # intermediate configuration
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;

    # Add headers to serve security related headers
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header X-Download-Options noopen;
    add_header X-Permitted-Cross-Domain-Policies none;
    add_header X-Frame-Options "SAMEORIGIN"; 
    add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains;';
    add_header Referrer-Policy "no-referrer" always;

    # OCSP settings
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/ssl/private/rnmkcy.eu-fullchain.pem; 
    #resolver 127.0.0.1; # DNS Unbound installé
    resolver 80.67.169.12; # DNS Unbound NON installé

Configurer virtual host

Configuration de base /etc/nginx/conf.d/rnmkcy.eu.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
28
29
30
31
32
33
34
35
36
# /etc/nginx/conf.d/rnmkcy.eu.conf
	##
	# Virtual Host rnmkcy.eu
	##

	server {
	    listen 80;
	    listen [::]:80;
	
	    ## redirect http to https ##
	    server_name rnmkcy.eu;
	    return  301 https://$server_name$request_uri;
	}
	
	server {
	    listen 443 ssl http2;
	    listen [::]:443 ssl http2;
	    server_name rnmkcy.eu;
	
	    ####    Locations
	    # On cache les fichiers statiques
	    location ~* \./|css|js|png|jpg|jpeg|gif|ico|svg|eot|woff|ttf)$ { expires max; }

		location = /favicon.ico {
		  log_not_found off;
		}

	    # On interdit les dotfiles
	    location ~ /\. { deny all; }
	
	    include ssl_dh_headers_ocsp;

	    root /var/www/default-www/ ;
	    index index/;

	}

Vérifications et rechargement nginx

1
nginx -t
1
2
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
1
systemctl reload nginx

Bash OCSP

Au premier accès sur le lien on une erreur

ocsp
Ce problème est lié à la mise en cache ocsp qui ne se fait qu’au premier accès après un rechargement du serveur nginx, on exécuter un script après rechargement pour la mise en cache OCSP

1
nano /usr/local/bin/ocsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#! /bin/sh

# ocsp

# 
echo "Premier passage"
for fichier in /etc/nginx/conf.d/*.conf
do
    echo $(basename $fichier .${fichier##*.})
    openssl s_client -connect $(basename $fichier .${fichier##*.}):443 -status < /dev/null |grep -i ocsp
done
# pause de 1 seconde
sleep 1
echo "Second passage"
for fichier in /etc/nginx/conf.d/*.conf
do
    echo $(basename $fichier .${fichier##*.})
    openssl s_client -connect $(basename $fichier .${fichier##*.}):443 -status < /dev/null |grep -i ocsp
done
echo "Fin mise en cache nginx OCSP..."

Le rendre exécutable

1
chmod +x /usr/local/bin/ocsp

Exécution en mode sans affichage

1
ocsp > /dev/null 2>&1

Lien https://rnmkcy.eu

PHP Composer

PHP 7.3

Télécharger la clé GPG.

1
2
sudo apt -y install lsb-release apt-transport-https ca-certificates 
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg

Ensuite ajoutez le dépôt PPA

1
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list

Puis passez à l’installation de PHP 7.3 pour Debian

1
sudo apt update

Si problème de clé publique W: Erreur de GPG : https://packages.sury.org/php buster InRelease : Les signatures suivantes n'ont pas pu être vérifiées car la clé publique n'est pas disponible : NO_PUBKEY B188E2B695BD4743
Télécharger la clé manuellement et l’ajouter

1
2
3
wget https://packages.sury.org/php/apt.gpg
sudo apt-key add  apt.gpg
sudo apt update

Installation PHP 7.3

1
sudo apt install php7.3 php7.3-{common,bcmath,bz2,intl,gd,mbstring,mysql,zip,cli,fpm,json,pdo,mbstring,curl,xml,imagick,tidy,xmlrpc,dev,imap,opcache,soap}

Vous pouvez maintenant vérifier que la version est bien installée

1
php -v
1
2
3
4
PHP 7.3.21-1+0~20200807.66+debian10~1.gbp18a1c2 (cli) (built: Aug  7 2020 14:56:47) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.21, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.21-1+0~20200807.66+debian10~1.gbp18a1c2, Copyright (c) 1999-2018, by Zend Technologies

Composer

Installation

1
2
3
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
sudo chmod +x /usr/local/bin/composer

Version

1
composer
1
2
3
4
5
6
7
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 1.10.10 2020-08-03 11:35:19

MariaDB

En mode su

Les prérequis

1
2
apt-get install software-properties-common dirmngr
apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'

Installer mariadb

1
apt update && apt install mariadb-server

Générer un mot de passe pour mysql

1
echo $(head -c 12 /dev/urandom | openssl enc -base64) > /etc/mysql/mdp

fichier sql

1
2
3
4
cat > /tmp/mysql_secure.sql << EOF
GRANT ALL ON *.* TO 'admin'@'localhost' IDENTIFIED BY '$(cat /etc/mysql/mdp)' WITH GRANT OPTION;
FLUSH PRIVILEGES; /* Applique les changements effectués précédemment concernant la gestion des droits */
EOF

Exécuter la requête sql

1
mysql -uroot < /tmp/mysql_secure.sql

Vesion

1
mysql --version

mysql Ver 15.1 Distrib 10.3.23-MariaDB, for debian-linux-gnueabihf (armv8l) using readline 5.2


DNS Unbound

DNS Unbound

Installer unbound et resolvconf

1
sudo apt install unbound resolvconf

On garde la configuration par défaut de unbound, ajouter simplement le chargement manuel et auto des serveurs de nom racine

Vérification de la résolution de nom à partir du serveur

1
dig @127.0.0.1 afnic.fr +short +dnssec
1
2
192.134.5.37
A 13 2 600 20200914125119 20200815040845 1528 afnic.fr. JC+2vA69riieHDGpXLmaeGH02dbJteDaoCRGm7h4a5M6gIgfR6Hq6i9k UjAuuWuYGuNIn/gLCnnW0QfFasDM0g==

La résolution fonctionne
Maintenant, vous disposez de votre propre résolveur DNS.

Cet article est sous licence CC BY 4.0 par l'auteur.