Post

Shuttle XS35V2 (Debian 9 32B), subsonic , point d'accès Wifi VPN

Shuttle XS35V2, un barebone ultra-fin et totalement silencieux

Shuttle XS35V2 (Debian 9 32B), subsonic , point d'accès Wifi VPN

XS35V2

xs35v2

Shuttle XS35V2, un barebone ultra-fin et totalement silencieux. Sa plate-forme est basée sur le chipset Intel NM10 Express avec un processeur Intel Atom Dual-Core D525.

  • Processeur Intel Atom Dual-Core D525 double cœur cadencé à 1,8 GHz basse consommation d’énergie
  • Chipset graphique intégré
  • 4Go Mémoire DDR3 667/800 MHz (1 slot SO-DIMM)
  • port réseau 1 Gigabit
  • ethernet HWaddr 80:ee:73:33:28:50 Caractéristiques
  • disque primaire Crucial BX100 SSD SATA 120 Go (format 2.5”)
  • Second disque Crucial SSD 480Go (format 2.5")
  • Connexion sans fil Wi-Fi N Non Activée
  • Alimentation externe sans ventilateur 40 Watts
  • Châssis ajouré pour un meilleur refroidissement des composants
  • Fonctionnement silencieux grâce au refroidissement sans ventilateur (fanless)
  • Contrôleur audio haute définition
  • Lecteur de cartes mémoire intégré
  • consommation moyenne 20W

  • Wireless Network (WLAN)
    • Supports IEEE 802.11b/g/n, max. 150Mbps up-/downstream
    • Security: WPA/WPA2(-PSK), WEP 64/128bit, IEEE 802.11x/i
    • Single-chipset: Realtek RTL8188CE
    • Half size Mini-PCIe-Card
  • Shuttle Europe XS35V2 spécifications

Mise à jour BIOS

La mise à jour BIOS se fait en DOS à partir d’un périphérique bootable.
Créer la clé bootable FreeDOS

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
# Get the bootable USB image and flash the USB.

# Step 1. Figure out the USB device.
#    Plug in the USB, it will usually auto-mount. Here are some
#    commands you can use to find it.
#       Command                      Notes
#       ===========================  =============================
#       dmesg                        The device will be in the log
#       ls -l /dev/disk/by-id/usb*   List all of theUSB devices
#       mount                        Oftentimes it is in /media
#       grep -Ff \                   Only Ubuntu/Debian.
#         <(hwinfo --disk --short) \
#         <(hwinfo --usb --short)
USB=/dev/sdd

# Step 2. Make sure that the device isn't mounted
sudo umount ${USB}1

# Step 3. Get the archived image.
wget http://downloads.joelinoff.com/fdos11.tar.bz2

# Step 4. Extract the image.
tar jxf fdos11.tar.bz2

# Step 5. Flash the USB
dd if=fdos11.img of=$USB bs=1M

Télécharger le BIOS sur le site Shuttle XS35V2
Extraire et copier les éléments contenu dans DOS sur la racine de la clé USB
Booter sur la clé USB et lancer flash.bat
Patienter…

Disque SATA LVM

Boot sur clé “partition magic”

Partionnement gdisk

1
gdisk /dev/sda
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
Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): y

Command (? for help): n
Partition number (1-128, default 1):
First sector (34-7814037134, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-7814037134, default = 7814037134) or {+-}size{KMGTP}: +50M
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): ef02
Changed type of partition to 'BIOS boot partition'

Command (? for help): n
Partition number (2-128, default 2):
First sector (34-7814037134, default = 104448) or {+-}size{KMGTP}:
Last sector (104448-7814037134, default = 7814037134) or {+-}size{KMGTP}: +512M
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'

Command (? for help): n
Partition number (3-128, default 3):
First sector (34-7814037134, default = 628736) or {+-}size{KMGTP}:
Last sector (628736-7814037134, default = 7814037134) or {+-}size{KMGTP}:
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 8e00
Changed type of partition to 'Linux LVM'

Command (? for help): w

LVM

Création volume physique
pvcreate /dev/sda3
Création groupe
vgcreate vg-120g-crucial /dev/sda3
Création des volumes logiques

1
2
3
lvcreate -L 15G -n root vg-120g-crucial
lvcreate -L 20G -n home vg-120g-crucial
lvcreate -L 4G -n swap vg-120g-crucial

Type de fichier

1
2
3
4
mkfs.ext4 /dev/vg-120g-crucial/root
mkfs.ext4 /dev/vg-120g-crucial/home
mkswap /dev/vg-120g-crucial/swap
mkfs.ext2 /dev/sda2                  # boot

Debian Stretch

Installation à partir d’une clé USB bootable netinst debian 9 32bits

ATTENTION !!! le réseau filaire doit être connecté directement sur la box car pas de réseau à travers le switch.

Nom de la machine : xs35v2
Utilisateur : xsuser
Installation serveur SSH et système uniquement
IP V4 : 192.168.0.47 (fixer le bail statique pour cette IP sur la box)

Première connexion SSH

Via SSH
ssh xsuser@192.168.0.47
Passage en su
su
Installer les outils
apt install rsync curl tmux jq figlet git -y

Locales/TimeZone

Configurés lors de l’installation debian 9

sudo

Installer sudo
apt install sudo
Droits d’accès sudo à l’utilisateur xsuser
echo "xsuser ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

SSH avec clé

sur l'ordinateur de bureau Générer une paire de clé curve25519-sha256 (ECDH avec Curve25519 et SHA2) nommé xs35v2 pour une liaison SSH avec le serveur KVM.
ssh-keygen -t ed25519 -o -a 100 -f ~/.ssh/xs35v2
Envoyer la clé publique sur le serveur KVM
scp ~/.ssh/xs35v2.pub xsuser@192.168.0.47:/home/xsuser/

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

1
2
mkdir .ssh
cat /home/$USER/xs35v2.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/xs35v2.pub
Modifier la configuration serveur SSH
sudo nano /etc/ssh/sshd_config
Modifier

1
2
Port = 55029
PasswordAuthentication no

Relancer openSSH
sudo systemctl restart sshd
Accès depuis le poste distant avec la clé privée
$ ssh -p 55029 -i ~/.ssh/xs35v2 xsuser@192.168.0.47

Exécution script sur connexion
Exécuter un fichier utilisateur nommé $HOME/.ssh/rc si présent
Pour tous les utilisateurs exécuter un fichier nommé /etc/ssh/sshrc si présent
Installer les utilitaires curl jq figlet

Le batch
nano ~/.ssh/rc

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
#!/bin/bash

#clear
PROCCOUNT=`ps -Afl | wc -l`  		# nombre de lignes
PROCCOUNT=`expr $PROCCOUNT - 5`		# on ote les non concernées
GROUPZ=`users`
ipinfo=$(curl -s ipinfo.io) 		# info localisation format json
publicip=$(echo $ipinfo | jq -r '.ip')  # extraction des données , installer préalablement "jq"
ville=$(echo $ipinfo | jq -r '.city')
pays=$(echo $ipinfo | jq -r '.country')
cpuname=`cat /proc/cpuinfo |grep 'model name' | cut -d: -f2 | sed -n 1p`

echo "\033[0m\033[1;31m"  
figlet "XS35V2 192.168.0.47"
echo "\033[0m"
echo "\033[1;35m  \033[1;37mHostname \033[1;35m= \033[1;32m`hostname`
\033[1;35m  \033[1;37mWired Ip \033[1;35m= \033[1;32m`ip addr show eth0 | grep 'inet\b' | awk '{print $2}' | cut -d/ -f1`
\033[1;35m    \033[1;37mKernel \033[1;35m= \033[1;32m`uname -r`
\033[1;35m    \033[1;37mDebian \033[1;35m= \033[1;32m`cat /etc/debian_version`
\033[1;35m    \033[1;37mUptime \033[1;35m= \033[1;32m`uptime | sed 's/.*up ([^,]*), .*/1/' | sed -e 's/^[ \t]*//'`
\033[1;35m       \033[1;37mCPU \033[1;35m= \033[1;32m`echo $cpuname`
\033[1;35m\033[1;37mMemory Use \033[1;35m= \033[1;32m`free -m | awk 'NR==2{printf "%s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2 }'`
\033[1;35m  \033[1;37mUsername \033[1;35m= \033[1;32m`whoami`
\033[1;35m  \033[1;37mSessions \033[1;35m= \033[1;32m`who | grep $USER | wc -l`
\033[1;35m\033[1;37mLocal  Ip  \033[1;35m= \033[1;32m`echo "192.168.0.47"`
\033[1;35m\033[1;37mPublic Ip  \033[1;35m= \033[1;32m`echo $publicip $pays`
\033[0m"
#curl fr.wttr.in/Paris?0

Effacer motd
sudo rm /etc/motd
Déconnexion puis connexion

Configuration

Les disques sudo fdisk -l

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
Disque /dev/sda : 111,8 GiB, 120034123776 octets, 234441648 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 4096 octets
taille d'E/S (minimale / optimale) : 4096 octets / 4096 octets
Type d'étiquette de disque : gpt
Identifiant de disque : A217BA7B-6B3E-477C-88D6-26C876FF4004

Périphérique   Début       Fin  Secteurs Taille Type
/dev/sda1       2048    104447    102400    50M Amorçage BIOS
/dev/sda2     104448   1153023   1048576   512M Système de fichiers Linux
/dev/sda3    1153024 234441614 233288591 111,2G LVM Linux


Disque /dev/mapper/vg--120g--crucial-root : 15 GiB, 16106127360 octets, 31457280 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 4096 octets
taille d'E/S (minimale / optimale) : 4096 octets / 4096 octets


Disque /dev/mapper/vg--120g--crucial-home : 20 GiB, 21474836480 octets, 41943040 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 4096 octets
taille d'E/S (minimale / optimale) : 4096 octets / 4096 octets


Disque /dev/mapper/vg--120g--crucial-swap : 4 GiB, 4294967296 octets, 8388608 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 4096 octets
taille d'E/S (minimale / optimale) : 4096 octets / 4096 octets

Structure
df -h

1
2
3
4
5
6
7
8
9
10
Sys. de fichiers                   Taille Utilisé Dispo Uti% Monté sur
udev                                 2,0G       0  2,0G   0% /dev
tmpfs                                404M    5,7M  398M   2% /run
/dev/mapper/vg--120g--crucial-root    15G    921M   14G   7% /
tmpfs                                2,0G       0  2,0G   0% /dev/shm
tmpfs                                5,0M       0  5,0M   0% /run/lock
tmpfs                                2,0G       0  2,0G   0% /sys/fs/cgroup
/dev/sda2                            504M     33M  446M   7% /boot
/dev/mapper/vg--120g--crucial-home    20G     44M   19G   1% /home
tmpfs                                404M       0  404M   0% /run/user/1000

Volumes LVM

1
2
3
4
5
6
7
8
9
10
11
root@xs35v2:/home/xsuser# pvs
  PV         VG              Fmt  Attr PSize   PFree
  /dev/sda3  vg-120g-crucial lvm2 a--  111,24g 72,24g
root@xs35v2:/home/xsuser# vgs
  VG              #PV #LV #SN Attr   VSize   VFree
  vg-120g-crucial   1   3   0 wz--n- 111,24g 72,24g
root@xs35v2:/home/xsuser# lvs
  LV   VG              Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  home vg-120g-crucial -wi-ao---- 20,00g                                                    
  root vg-120g-crucial -wi-ao---- 15,00g                                                    
  swap vg-120g-crucial -wi-ao----  4,00g                                           

Il reste 72.24G de libre sur le volume LVM
sudo -s
On va utiliser 50G pour le partage NFS
lvcreate -L 50G -n part-xs35 vg-120g-crucial
Type de fichier ext4
mkfs.ext4 /dev/vg-120g-crucial/part-xs35
Créer un point de montage
mkdir /mnt/part-xs35
Ajouter en fin de fichier /etc/fstab
/dev/vg-120g-crucial/part-xs35 /mnt/part-xs35 ext4 defaults 0 2
Montage manuel
mount -a
Sortie sudo
exit
Donner les droits utilisateurs
sudo chown $USER.$USER -R /mnt/part-xs35
On dispose de 50G sur /mnt/part-xs35

Second volume LVM de 500G vg-500g-crucial
Créer un point de montage pour “music”
mkdir /mnt/music
Donner les droits utilisateurs
sudo chown $USER.$USER -R /mnt/music
Ajouter en fin de fichier /etc/fstab
/dev/vg-500g-crucial/music /mnt/music ext4 defaults 0 2

Parefeu (iptables)

Les règles de base

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/sh

# Règles de base
iptables -t filter -F -m comment --comment "Vider les règles table filter"
iptables -t nat -F -m comment --comment "Vider les règles table nat"
iptables -t filter -X -m comment --comment "Vider les règles personnelles table filter"
iptables -t nat -X -m comment --comment "Vider les règles personnelles table nat"
iptables -t filter -P INPUT ACCEPT -m comment --comment "Autoriser toute connexion entrante"
iptables -t filter -P FORWARD ACCEPT -m comment --comment "Autoriser toute redirection"
iptables -t filter -P OUTPUT ACCEPT -m comment --comment "Autoriser toute connexion sortante"
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -m comment --comment "Ne pas casser les connexions en cours"
iptables -t filter -A INPUT -i lo -j ACCEPT -m comment --comment "Autoriser loopback"
iptables -t filter -A INPUT -p icmp -j ACCEPT -m comment --comment "Autoriser ICMP (Ping)"
iptables -t filter -A INPUT -p tcp --dport 55029 -j ACCEPT -m comment --comment "Port SSH Input"
iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT -m comment --comment "DNS tcp Input"
iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT -m comment --comment "DNS udp Input"
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT -m comment --comment "HTTP Input"
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT -m comment --comment "HTTPS Input"

Création d’un parefeu iptables qui se lance au démarrage de la machine
apt install iptables-persistent
Faut-il enregistrer les règles IPv4 actuelles ? OUI
Faut-il enregistrer les règles IPv6 actuelles ? NON
Les tables sont enregistrés sous /etc/iptables/ , rules.v4 pour IPv4 et rules.v6 pour IPv6

Sauvegarde/Restauration manuelle des régles iptables
iptables-save > /etc/iptables/rules.v4
iptables-restore < /etc/iptables/rules.v4

NFS serveur

Installation

on passe en mode su
sudo -s
Installation
apt install nfs-kernel-server
Vérification serveur
rpcinfo -p | grep nfs

1
2
3
4
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs

Vérifier que le système supporte effectivement NFS
cat /proc/filesystems | grep nfs

1
nodev	nfsd

Si la commande 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
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

Passage en su
sudo -s
indiquer au serveur les répertoires qui seront partagés, les machines qui y auront accès et les conditions de ce partage.
nano /etc/exports
Ajouter en fin de fichier /etc/exports

1
2
/mnt/part-xs35 192.168.0.0/24(rw,sync,no_subtree_check,no_root_squash)
/mnt/music     192.168.0.0/24(rw,sync,no_subtree_check,no_root_squash)

Sécurisation

Passage en su
sudo -s
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é:
nano /etc/hosts.deny

1
 rpcbind mountd nfsd statd lockd rquotad : ALL

nano /etc/hosts.allow

1
rpcbind mountd nfsd statd lockd rquotad: 192.168.0.

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.
nano /etc/default/nfs-common

1
STATDOPTS="--port 32765 --outgoing-port 32766"

nano /etc/default/nfs-kernel-server

1
RPCMOUNTDOPTS="-p 32767"

nano /etc/default/quota

1
RPCRQUOTADOPTS="-p 32769"

sysctl --system

1
2
* Applying /etc/sysctl.d/99-sysctl.conf ...
* Applying /etc/sysctl.conf ...

Relancer le service
systemctl restart nfs-kernel-server

Nous pouvons maintenant fixer nos règles iptables:

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

Configurer un client NFS

Prérequis : NFS installé (https://wiki.archlinux.fr/NFS)

Créer un dossier pour le montage
sudo mkdir /mnt/part-xs35
Donner les droits utilisateurs
sudo chown $USER.users -R /mnt/part-xs35
Montage manuel
sudo mount -t nfs4 -o rw 192.168.0.47:/mnt/part-xs35 /mnt/part-xs35
Test lecture écriture
touch /mnt/part-xs35/test.txt Ne doit générer aucune erreur
Montage auto , ajouter en fin de fichier /etc/fstab
192.168.0.47:/mnt/part-xs35 /mnt/part-xs35 nfs4 noauto,x-systemd.automount 0 0

Subsonic

Application dédiée musique, serveur java

Installer java
sudo apt install openjdk-8-jre
Installer subsonic , télécharger la version en cours
wget -O subsonic-6.1.3.deb http://www.subsonic.org/pages/download2.jsp?target=subsonic-6.1.3.deb
Installer
sudo dpkg -i subsonic-6.1.3.deb
Modifier le paramètrage /etc/default/subsonic

1
2
SUBSONIC_ARGS="--port=8090 --max-memory=200"
SUBSONIC_USER=xsuser

Relancer subsonic
sudo systemctl restart subsonic

Ouvrir le port 8090
sudo iptables -t filter -A INPUT -p tcp --dport 8090 -j ACCEPT -m comment --comment "Subsonic port http"
Les sauvegarder
sudo -s
iptables-save > /etc/iptables/rules.v4

Serveur Nginx + Php + MariaDb

Nginx (compilation), PHP5 et PHP7 ,MariaDb

Point d’accès Wifi

Utilisation dongle wifi Ralink Technology, Corp. RT5370 Wireless Adapter

Multiple Point d’accès Wifi + OpenVPN

Point d’accès VPN : YanOpenVPN
Point d’accès NON connectable sur internet : YanHotSpot

Règles parefeu iptables

Les règles sauvegardées /etc/iptables/rules.v4 pour NFS,subsonic,Point d’accès Wifi VPN

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
# Generated by iptables-save v1.6.0 on Tue Jan  2 18:16:19 2018
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [1:40]
:POSTROUTING ACCEPT [1:40]
-A POSTROUTING -o tun0 -m comment --comment "Activer MASQUERADE sur tunnel vpn tun0" -j MASQUERADE
COMMIT
# Completed on Tue Jan  2 18:16:19 2018
# Generated by iptables-save v1.6.0 on Tue Jan  2 18:16:19 2018
*filter
:INPUT ACCEPT [18:1188]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [124:12427]
-A INPUT -i lo -m comment --comment "Autoriser loopback" -j ACCEPT
-A INPUT -p icmp -m comment --comment "Autoriser ICMP (Ping)" -j ACCEPT
-A INPUT -p tcp -m tcp --dport 55029 -m comment --comment "Port SSH Input" -j ACCEPT
-A INPUT -p tcp -m tcp --dport 53 -m comment --comment "DNS tcp Input" -j ACCEPT
-A INPUT -p udp -m udp --dport 53 -m comment --comment "DNS udp Input" -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -m comment --comment "HTTP Input" -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -m comment --comment "HTTPS Input" -j ACCEPT
-A INPUT -s 192.168.0.0/24 -p tcp -m multiport --ports 111,2049,32764:32769 -m comment --comment "NFS Server" -j ACCEPT
-A INPUT -s 192.168.0.0/24 -p udp -m multiport --ports 111,2049,32764:32769 -m comment --comment "NFS Server" -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8090 -m comment --comment "Subsonic port http" -j ACCEPT
-A FORWARD -s 10.10.11.0/24 -i wlan0 -o tun0 -m conntrack --ctstate NEW -m comment --comment "VPN : Autoriser trafic wlan0 vers tun0" -j ACCEPT
-A FORWARD -s 10.10.12.0/24 -i wlan0_0 -o tun0 -m conntrack --ctstate NEW -m comment --comment "VPN : Bloquer le trafic wlan0_0 vers tun0" -j REJECT --reject-with icmp-port-unreachable
COMMIT
# Completed on Tue Jan  2 18:16:19 2018
Cet article est sous licence CC BY 4.0 par l'auteur.