Archives de catégorie : OS

Swap Usage par Processus

#!/bin/bash

# @DESCRIPTION: Get relevent processes swap usage by scanning all running processes
# @DATE: 26/08/2015

cat << EOF
============================================================
===== > Showing all *relevant* processes swap usage < ======
============================================================
EOF

for DIR in `find /proc/ -maxdepth 1 -type d | grep -E "^/proc/[0-9]"`
do
    [ "$OVERALL" == "" ] && OVERALL=0
    SUM=0
    PID=`echo $DIR | grep -Eo "[0-9]+$"`
    PROGNAME=`cat $DIR/comm 2>/dev/null || echo 'vanished process'`

    for SWAP in `grep Swap $DIR/smaps 2>/dev/null| awk '{ print $2 }'`
    do
        SUM=$(($SUM+$SWAP))
    done

    OVERALL=$(($OVERALL+$SUM))

    printf "%-20s : %-40s\n" "$(($SUM/1024)) MB" "$PROGNAME (PID $PID)"
    echo $OVERALL > /tmp/OVERALL
done | grep -vE "^0" | sort -n

cat << EOF

NOTICE : processes consuming less than 1MB are not shown
Total running processes swap usage: $((`cat /tmp/OVERALL`/1024)) MB
EOF

rm -f /tmp/OVERALL

mstsc.exe

RDS VDI MSTSC 😀

• Lancez GPEDIT.MSC

• Rendez-Vous dans : Stratégie Ordinateur Local/ Configuration Ordinateur / Modèles d’administration / Composants Windows / Services Bureau à distance / Hote de la session Bureau à distance •

Dans Connexions, activer . Reconnexion Automatique

• . Autoriser les utilisateurs à se connecter à distance à l’aide des services Bureau à distance • . Limiter le nombre de connexions 25

Dans Délais d’expiration des sessions

• Définir le délai des sessions déconnectées à 1 heure

Dans Gestionnaire de licences j’active : • • . Utiliser les serveurs de licences Bureau à distance indiqués ( 10.4.0.17) • • . Définir le mode de concession de licences ( par utilisateur )

Connexion mstsc shadow

query session

permet de récupérer l’ID de la session mstsc

mtsc shadow

mstsc /shadow:ID /control /noConsentPrompt

la policy qui contrôle ce comportement est dans config ordi / modèle d’admin / composant windows / service de bureau à distance hôte de la session bureau à distance / connexions / définir les règles pour le contrôle à distance utilisant des services.

cmd.exe

Vidage du cache DNS

ipconfig /flushdns

Utilisateurs et groupes locaux

Exécuter ( touche Windows  +R ) LUSRMGR.MSC

Proprité système

Exécuter ( touche Windows  +R ) SYSDM.CPL

Sauvegarde des sessions Putty

 regedit /e "%USERPROFILE%\Desktop\putty-sessions.reg" HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions

Ajout de route statiques

route add 10.6.0.0 mask 255.255.0.0 10.5.255.254 if 26 -p
route add 10.4.0.0 mask 255.255.0.0 10.5.255.254 if 26 -p
route add 10.40.0.0 mask 255.255.0.0 10.5.255.254 if 26 -p
route add 10.5.0.0 mask 255.255.0.0 10.5.255.254 if 26 -p
Route -f 
Route print

delete backup copies of the patches

dism /online /cleanup-image /StartComponentCleanup /ResetBase

Inclusion d’une licence en ligne de commande

slmgr.vbs /ipk xxxx-xxxxx-xxxx-xxxxxx-xxxxxx

Installation du client telnet

pkgmgr /iu:TelnetClient 

powershell

Supprimer un programme windows2016 Core

Get-WmiObject -Class Win32_Product | Select-Object Name,IdentifyingNumber
Name                                                           IdentifyingNumber
----                                                           -----------------
VMware Tools                                                   {45147181-CF69-4C8C-81CB-0FC96F170758}
Microsoft Visual C++ 2008 Redistributable - x64 9.0.30729.6161 {5FCE6D76-F5DC-37AB-B2B8-22AB8CEDB1D4}
Microsoft Visual C++ 2008 Redistributable - x86 9.0.30729.6161 {9BE518E6-ECC6-35A9-88E4-87755C07200F}
Get-WmiObject -Class Win32_Product | Where-Object {$_.IdentifyingNumber -match '{45147181-CF69-4C8C-81CB-0FC96F170758}'} |  Invoke-WmiMethod -Name "Uninstall"

Sync de dossiers

powershell.exe -noexit "& 'D:\sync_local_drive.ps1'"
function Pause ($Message="Press any key to continue...")
{
Write-Host -NoNewLine $Message
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
Write-Host ""
}

Robocopy.exe   "D:\Source" "Z:\Destination"   /MIR /XD *Exclude_pattern* Folder_exclude /XF .file_pattern* file_pattern2*
 OR 
Robocopy.exe   "D:\local_save"  "G:\usb_key" /MIR  ( XD => eXclude Directory XF => eXclude File )
pause

Execution policy

Get-ExecutionPolicy -list

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine    RemoteSigned


Get-ExecutionPolicy

Set-ExecutionPolicy RemoteSigned

Netoyage des logs

  (Get-WinEvent -ListLog *).logname | ForEach-Object   {[System.Diagnostics.Eventing.Reader.EventLogSession]::GlobalSession.ClearLog(“$psitem”)}
  

Varnish

On ira voir l'excellent site : https://sysadmin.infragate.fr qui possède un article très complet sur le sujet. :

https://sysadmin.infragate.fr/varnish/

Commandes Varnish

VarnishTop

statistiques façon top Linux, qui présentent les événements de trace les plus récurrents par ordre d’importance.

VarnishStat

ensemble de compteurs comme le nombre de requêtes, le nombre de requêtes envoyées depuis le cache, le nombre de requêtes envoyées au backend, etc.

VarnishLog

l’accès au log détaillé de Varnish se trouve être une file mémoire qui se purge au fur et à mesure qu’elle se remplit. Il est possible de la diriger vers un fichier et de filtrer son contenu.

VarnishHist

histogramme permettant de suivre en secondes le temps mis par Varnish pour desservir le contenu, qu’il provienne du cache ou non.

config test varnish :

varnishd -C -f /etc/varnish/default.vcl

S’il le retour de la commande ne crash pas d’erreur, on peut reload le service varnish. N.B : la configuration sera dégueulée dans shell si tout est OK.

Définition du backend

Dans le fichier de configuration /etc/varnish/default.vcl

En mode LoadBalancing : https://www.varnish-cache.org/trac/wiki/LoadBalancing

backend server1 {
  .host = "x.x.x.x";
  .port = "80";
  .probe = {
     .url = "/";
     .interval = 5s;
     .timeout = 1 s;
     .window = 5;
     .threshold = 3;
  }
}
backend server2 {
  .host = "y.y.y.y";
  .port = "80";
  .probe = {
     .url = "/";
     .interval = 5s;
     .timeout = 1 s;
     .window = 5;
     .threshold = 3;
  }
}

director server_group round-robin {
        {
                .backend = server1;
        }
        {
                .backend = server2;
        }
}

Purge cash

le restart du service varnish vide le cache. Il est possible de purge le cache avec une URL, il faut vérifier les acl au niveau de la configuration de varnish

Redirect

Dans le fichier de configuration /etc/varnish/default/vcl

if (req.http.Host ~ "^(www\.)?consosmart-novalgicfort\.com$") {
     error 801 "Moved Permanently";
     }

if (obj.status == 801) {
    set obj.http.Location = "https://www.consosmart.com/odr/214/novalgic";
    set obj.status = 301;
    return (deliver);
    }

ACL sur un vhost

Dans le fichier de configuration /etc/varnish/default/vcl

acl ip_name {
	"x.x.x.x/26"
	"y.y.y.y/25"
}

if (server.ip == "z.z.z.z" && req.http.host == "www.yourdomain.fr" && client.ip !~ ip_name ) {
        error 401 "Unauthorized.";
      }

ACL sur un User Agent

Dans le fichier de configuration /etc/varnish/default/vcl

 if (req.http.User-Agent ~ "(YaBrowser|YandexBot)") {
        error 401 "Unauthorized.";
      }
 

/

Fail2Ban

Fail2ban anti-DOS HTTP

Voici un exemple de mise en place d’un fail2ban scannant les logs.

dans /etc/fail2ban/jail.conf

#anti-DOS HTTP

[apache-abuse]

enabled = true port = http filter = apache-http-dos action = iptables[name=HTTP, port=http, protocol=tcp] logpath = /var/log/apache2/your-log_access.log maxretry = 150 findtime = 30 bantime = 3600 ignoreip = x.x.x.x/yy

Le maxretry est le nombre d’occurrence de la regex.

La seule condition pour que l’ip soit bannie est d’excéder au niveau du fichier de log /var/log/apache2/your-log_access.log les 150 requêtes en moins de 30 secondes

dans /etc/fail2ban/filter.d/apache-http-dos.conf

# Fail2Ban configuration file
#
# Author: http://www.go2linux.org
[Definition]
# Option: failregex
# Note: This regex will match any GET entry in your logs, so basically all valid and not valid entries are a match.
# You should set up in the jail.conf file, the maxretry and findtime carefully in order to avoid false positives.
failregex = ^<HOST> -.*"$
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =

Les IP bannies sont présentes dans le netfilter-rules avec la commande suivante : iptables -L -n -v

Il est possible d’affiner la configuration de fail2ban (exemples) :

– pour qu’uniquement les requêtes GET soient prises en compte.

– le port 443 soit aussi pris en compte.

– action lors d’un BAN, comme l’envoie d’un mail.

OpenBSD & FW

Installation

Fait avec la version 5.7

Et en avant pour l’aventure avec le poisson globe.

  • Appuyer sur la touche I
  • L’installeur demande le keyboard layout. Tapez fr si vous avez un clavier français. Pour la liste de tous les claviers dispo tapez L
  • Choisissez votre nom d’hôte.
  • Carte réseau disponible ⇒ em0
  • Adresse par DHCP, il sera de toute manière possible de revenir là-dessus après.
  • IPV6 pour em0 [none]
  • voulez vous configurez d’autre interfaces réseau [done]
  • Choisissez votre mot de passe root. Attention au pavé numérique !
  • Activer SSH par défault [yes]
  • Activer NTPD par défault [no]
  • Utiliser le X window system [no]
  • Démarrer le X Window System avec XDM [no]
  • Créer un utilisateur [no] Nous sommes ici en lab, en théorie on doit créer un autre utilisateur que root et empêcher root de se connecter via SSH.
  • Timezone [Europe/Paris]
  • Quel disque pour la racine [wd0]
  • Utilisez les UUIDs plutôt que les noms dans /etc/fstab [yes]
  • Utiliser tout le disque [W] par défaut
  • En utilisant l’auto layout [A]par défaut
  • Localisation des ensembles de paquets [http]
  • proxy [none]
  • http server [ftp.fr.openbsd.org] par défaut
  • répertoire sur serveur [par défaut] pub/OpenBSD/5.7/amd64
  • Sélection des paquets ( ensembles sous OB )

Sélectionner les paquets à installer. Les paquets game57.tgz, xbase57.tgz, xetc57.tgz, xshare57.tgz, xfont57.tgz et xserv57.tgz seront supprimés en tapant leurs noms précédés du signe –

-game57.tgz
-xbase57.tgz
-xshare57.tgz
-xfont57.tgz
-xserv57.tgz

Cela décoche les ensembles non désirés, Attention au pavé numérique !

  • Continuez sans vérification [yes]

Après le DL et l’install

  • Ajouter d’autres paquets [done]

tapez reboot pour redémarrer.

Configuration de base

Ajout dans ~/.profile

export PS1="\u@\h:\$PWD>"

donne root@OpenBSD5:/root>

Ajout du paquet vim

pkg_add vim
Ajout d'un paquet : vim
pkg_add vim                                                
quirks-2.54 signed on 2015-03-08T12:33:05Z
quirks-2.54: ok
Ambiguous: choose package for vim
a       0: <None>
        1: vim-7.4.475-gtk2
        2: vim-7.4.475-gtk2-lua
        3: vim-7.4.475-gtk2-perl-python-ruby
        4: vim-7.4.475-gtk2-perl-python3-ruby
        5: vim-7.4.475-no_x11
        6: vim-7.4.475-no_x11-lua
        7: vim-7.4.475-no_x11-perl-python-ruby
        8: vim-7.4.475-no_x11-perl-python3-ruby
        9: vim-7.4.475-no_x11-ruby
Your choice: 5
vim-7.4.475-no_x11:libiconv-1.14p1: ok
vim-7.4.475-no_x11:gettext-0.19.4: ok
vim-7.4.475-no_x11: ok

Désactivation des services lancés au boot

Le daemon ntpd par exemple.

rcctl disable ntpd
rcctl get ntpd flags

ou

rcctl get ntpd

Modification du nom d’hôte

vim /etc/myname

firewalling avec PF

voir : packet_filter

Mettre en place la haute-dispo pour les firewalls

CARP

Toujours sous OPenBSD, la haute disponibilité est effectuée avec CARP.

Clonage de la première VM

modification du nom d’hôte et modification de la ligne

localip=192.168.1.38

dans /etc/pf.conf

A partir de maintenant les commandes décrites ci-après sont effectué sur les deux OPenBSD.

Dans un premier temps il faut autorisé le système à s’en servir :

sysctl -w net.inet.carp.allow=1
sysctl -w net.inet.carp.preempt=1

Création de l’interface :

ifconfig carp1 create

Configuration

ifconfig carp1 vhid 1 pass mot_de_passe carpdev em0 advskew 100 192.168.1.36 netmask 255.255.255.0

Explications :

le carp est un protocole qui permet à un groupe d’hôte d’être redondant sur le niveau 3 de la couche OSI.

vhid 1 = virtual host id 1 id du groupe pass = permet de protégé les paquets du protocole carp avec un mot de passe pour le HMAC SHA1 afin d’éviter le spoof d’une ip du groupe. carpdev = permet à l’interface visée de faire parti du groupe carp advskew = attribut un poids à l’hôte, exemple ici nous prenons 100. Si pour le deuxième FW on prends moins de 100 il sera considéré comme MASTER et un nombre supérieur comme le BACKUP.

Pour pf, il nous faut ceci où carp_dev = em0 dans notre exemple.

pass out on $carp_dev proto carp keep state

Pour le FW 1 ( master )

nous aurons donc

ifconfig carp1 vhid 1 pass mot_de_passe carpdev em0 advskew 50 192.168.1.36 netmask 255.255.255.0

et pour le 2

ifconfig carp1 vhid 1 pass mot_de_passe carpdev em0 advskew 100 192.168.1.36 netmask 255.255.255.0

Résultat :

carp1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        lladdr 00:00:5e:00:01:01
        priority: 0
        carp: MASTER carpdev em0 vhid 1 advbase 1 advskew 100
        groups: carp
        status: master
        inet 192.168.1.36 netmask 0xffffff00 broadcast 192.168.21.255
carp1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        lladdr 00:00:5e:00:01:02
        priority: 0
        carp: MASTER carpdev em0 vhid 1 advbase 1 advskew 150
        groups: carp
        status: master
        inet 192.168.1.36 netmask 0xffffff00 broadcast 192.168.21.255

Il y a deux master voir section problème rencontré.

Une fois le problème corrigé on arrive bien à la configuration désirée :

carp1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        lladdr 00:00:5e:00:01:01
        priority: 0
        carp: MASTER carpdev em0 vhid 1 advbase 1 advskew 50
        groups: carp
        status: master
        inet 192.168.1.36 netmask 0xffffff00 broadcast 192.168.21.255
carp1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        lladdr 00:00:5e:00:01:01
        priority: 0
        carp: BACKUP carpdev em0 vhid 1 advbase 1 advskew 100
        groups: carp
        status: backup
        inet 192.168.1.36 netmask 0xffffff00 broadcast 192.168.21.255

Afin de tester la configuration, l’interface du master est éteinte avec la commande

ifconfig carp1 down

L’autre interface devient immédiatement master, dans les log nous voyons ce changement par

dmesg
carp1: state transition: BACKUP -> MASTER

pfsync

Création de l’interface pour pfsync, cette techno permet la synchronisation des tables d’état des connexions. Afin de ne pas « couper » la liaison établi lors d’une bascule.

ifconfig pfsync0 create

Configuration de l’interface

FW1 & 2 le trafic sera multicast , Attention note que pour un trafic de 500Mo sec , celui de pfsync est de 150Mo/sec

ifconfig pfsync0 syncdev em0

trafic unicast , on force un peer

ifconfig pfsync0 syncdev em0 [syncpeer 192.168.21.145] [defer|-defer]
ifconfig pfsync0 syncdev em0 [syncpeer 192.168.21.136] [defer|-defer]

Règle PF à ajouter

pass on $sync_if proto pfsync
pass on if_loc proto pfsync

Voir : http://www.openbsd.org/faq/pf/carp.html

Sauvegarde filesystem en vue d’upgrade

Dump à travers le réseau

/sbin/dump -0f- /home | gzip -2 | ssh  root@192.168.1.38 dd of=/root/disk_openbsd57_home.gz

Restauration

scp  disk_openbsd57_home.gz  root@192.168.1.38:/root
cd /rep_to_restore 
cat /root/disk_openbsd57_user.gz | gunzip | restore -rf-  

Problèmes rencontrés

cela ne fonctionne pas, impossible en dehors des deux vm de pinger la 192.168.1.36

dans les logs nous avons :

duplicate IP address 192.168.1.36 sent from ethernet address 00:00:5e:00:01:02
arp: attempt to overwrite permanent entry for 192.168.1.36 by 00:00:5e:00:01:02 on em0

duplicate IP address 192.168.1.36 sent from ethernet address 00:00:5e:00:01:01
arp: attempt to overwrite permanent entry for 192.168.1.36 by 00:00:5e:00:01:01 on em0

ceci était dû à la mauvaise compréhension du vhid qui signifie virtual host ID mais qui représente en réalité l’ID du groupe de redondance. Il doit être identique sur TOUS les membres du même groupe.

VPN IPsec

Howto VPN IPsec sous OpenBSD

Il existe deux méthodes pour mettre en place un VPN IPsec sous OpenBSD. La première est de créer un fichier de configuration /etc/isakmpd/isakmpd.conf. La seconde est d’utiliser /etc/ipsec.conf et sa syntaxe « pf-like » et de laisser ipsecctl s’occuper des politiques de flux et de l’établissement de la SA (Security association).

Méthode isakmpd via isakmpd.conf

Recharger isakmpd

Pour recharger la configuration d’ISAKMPD, il suffit de lui envoyer un SIGHUP. Ceci ne provoque pas coupure VPN pour les phases 1 (IPSEC) mais un rechargement de toutes les phases 2 !

pkill -HUP isakmpd

Note : attention, on a déjà constaté un plantage peu après un rechargement. Il conviendra de surveiller attentivement qu’ISAKMPD tourne bien.

Redémarrer isakmpd

Attention cela interrompt tous les VPN pendant quelques instants.

pkill isakmpd
isakmpd -v

Consulter les logs

tail -f /var/log/messages | grep isakmpd

Voir les routes

route -n show

Si isakmpd est bien lancé, une section Encap: doit apparaître.

Voir les associations VPN

ipsecctl -s a

Envoyer des commandes au daemon

Cela se fait en écrivant dans le fichier fifo /var/run/isakmpd.fifo. La liste des commandes est disponible dans la page de man.

Exemple pour obtenir un rapport de l’état interne du daemon :

echo r >/var/run/isakmpd.fifo
cat /var/run/isakmpd.result

Pour avoir l’état de tous les VPNs :

echo S >/var/run/isakmpd.fifo
grep isakmpd /var/log/daemon

Pour recharger les VPNs (équivalent au pkill -HUP) :

echo R >/var/run/isakmpd.fifo

Pour stopper proprement le démon :

echo Q >/var/run/isakmpd.fifo

Pour stopper un VPN (phase 1 ou 2) :

echo "t main peer-XXXX" >/var/run/isakmpd.fifo
echo "t quick XXXX" >/var/run/isakmpd.fifo

Pour relance un VPN (phase 1 ou 2… ce n’est pas clair. cela semble fonctionner pour la phase 1… à voir pour la phase 2).

echo "c XXXX" >/var/run/isakmpd.fifo

Note générale : attention, il peut un avoir un délai dans l’exécution des commandes

FAQ

Que veulent dire les messages suivants ?

isakmpd[7864]: dpd_handle_notify: bad R_U_THERE seqno 551411465 <= 2374875689

C’est un message relatif au DPD (Dead peer detection) qui est un mécanisme pour détecter des éventuels soucis avec VPN. Voir http://www.juniper.net/techpubs/software/erx/junose61/swconfig-routing-vol1/html/ipsec-config4.html#1329479

isakmpd[7864]: attribute_unacceptable: AUTHENTICATION_METHOD: got PRE_SHARED, expected RSA_SIG
isakmpd[7864]: message_negotiate_sa: no compatible proposal found
isakmpd[7864]: dropped message from 192.0.2.1 port 500 due to notification type NO_PROPOSAL_CHOSEN

Il s’agit d’un routeur VPN distant qui essaye de se connecter, mais n’a pas de configuration correspondante. Cela peut se produire typiquement si son adresse IP change, et qu’elle n’est plus présente dans la configuration d’ISAKMPD.

isakmpd[10418]: isakmpd: phase 1 done (as responder): initiator id 192.0.2.1, responder id 1.2.3.4, src: 1.2.3.4 dst: 192.0.2.1
isakmpd[10418]: dropped message from 192.0.2.1 port 500 due to notification type INVALID_ID_INFORMATION
isakmpd[10418]: message_validate_notify: protocol not supported

Cela signifie a priori que la configuration en face à un réseau « remote » incorrect (soit complètement faux, soit pas sous la forme ADRESSE RÉSEAU / MASQUE)

Voir http://www.thegreenbow.com/support_flow.html?page=12105C&lang=fr

Méthode isakmpd via ipsec.conf

Mise en place d’un VPN « simple » entre 2 machines OpenBSD

On dispose de :

  • 2 passerelles VPN OpenBSD gw1 et gw2 (192.0.2.254 et 198.51.100.254)
  • 2 LAN net1 et net2 correspondants (192.0.2.0/24 et 198.51.100.0/24)

Sur gw1 :

Vérifier que les sysctl suivants sont actifs :

# sysctl net.inet.esp.enable
net.inet.esp.enable=1
# sysctl net.inet.ah.enable
net.inet.ah.enable=1
# sysctl net.inet.ip.forwarding
net.inet.ip.forwarding: 1 -> 1

Activer l’interface enc0 :

ifconfig enc0 up
echo up >/etc/hostname.enc0

Dans /etc/pf.conf, positionner :

set skip on {lo0 enc0}
pass in on $ext_if proto esp from $addr_gw2 to ($ext_if)
pass in on $ext_if proto udp from $addr_gw2 to ($ext_if) port {isakmp, ipsec-nat-t}

Dans /etc/ipsec.conf, positionner :

local_ip="192.0.2.254"
local_network="192.0.2.0/24"
remote_ip="198.51.100.254"
remote_network="198.51.100.0/24"

ike passive esp from $local_network to $remote_network peer $remote_ip
ike passive esp from $local_ip to $remote_network peer $remote_ip
ike passive esp from $local_ip to $remote_ip

Récupérer la clé pré-générée de l’autre passerelle :

scp gw2:/etc/isakmpd/local.pub /etc/isakmpd/pubkeys/ipv4/198.51.100.254

Tester la configuration :

ipsecctl -n -f /etc/ipsec.conf

Démarrer le service :

isakmpd -K
ipsecctl -f /etc/ipsec.conf

Puis effectuer les mêmes actions sur l’autre passerelle.

On doit alors pouvoir pinger chaque réseau à partir de l’autre passerelle ou de l’autre réseau.

Pour relancer un VPN il suffit de récupérer le nom des variables isakmpd générées par ipsectl via la commande suivante puis d’utiliser la même méthode qu’avec isakmpd.

ipsecctl -nvf /etc/ipsec.conf

Debug IPsec

Eteindre isakmpd :

/etc/rc.d/isakmpd stop

Dans une console :

isakmpd -d -DA=90 -K

Dans une autre console :

ipsecctl -f /etc/ipsec.conf

VIM

Mode commande

Enregistre le fichier courant avec un .save

:!cp %{,.save}

Suppression de ligne dans un fichier ouvert avec vim ou view

View est le mode read-only de vim correspond à vim -R

view /var/log/message

:%! grep -v Shorewall

Enlève toutes les lignes contenant Shorewall

Sauver un fichier en lecture seul

:w!

Recherche de pattern

:/pattern

puis n pour passer à l’occurence suivante

Inclure grep

:%! grep REGEXP 

Remplace toute les occurences de test par domain dans le fichier édité

:%s/test/domaine/g   

Enregistre et quitte

:wq

Quitte sans sauver

:q!

Copier / Coller Debian 9

Sous vim le copier/coller ne fonctionne plus comme sous Debian 8. Afin de le remettre en mode édition normale, editer /usr/share/vim/vim80/defaults.vim et trouver :

"if has('mouse')
"  set mouse=a
"endif

pour le remplacer par :

"  set mouse=r

Cartes RAID

Dell Raid status

Check l’état du raid sur un serveur dell sans passer par la DRAC

/opt/dell/srvadmin/bin/omreport storage pdisk controller=0
/opt/dell/srvadmin/bin/omreport storage vdisk

MDadm

Ce message apparait lors du mise à jour du kernel sous ubuntu

W: mdadm: /etc/mdadm/mdadm.conf defines no arrays.

Pour le corriger se rendre dans /etc/mdadm/mdadm.conf

et y ajouter :

ARRAY <ignore> devices=/dev/sda

Gestion des cartes PERC

Problème grappe RAID Dégradée

Se placer dans /opt/MegaRAID/MegaCli

cd /opt/MegaRAID/MegaCli

Affichage des info sur les disques ( PD = Physical devices )

./MegaCli -AdpAllInfo -aALL

donne

Device Present
               
Virtual Drives    : 1 
  Degraded        : 1 
  Offline         : 0 
Physical Devices  : 4 
  Disks           : 3 
  Critical Disks  : 1 
  Failed Disks    : 1 

Affichage des infos de l’adaptateur ( carte RAID )

./MegaCli -PDList -aALL  
Adapter #0

Enclosure Device ID: 248
Slot Number: 0
Enclosure position: 0
Device Id: 0
Sequence Number: 3
Media Error Count: 0
Other Error Count: 7
Predictive Failure Count: 7
Last Predictive Failure Event Seq Number: 16032
PD Type: SAS
Raw Size: 136.732 GB [0x11177330 Sectors]
Non Coerced Size: 136.232 GB [0x11077330 Sectors]
Coerced Size: 136.218 GB [0x11070000 Sectors]
   Firmware state: Failed
SAS Address(0): 0x5000c50005ff2d99
SAS Address(1): 0x0

Il faut repérer cette ligne : Firmware state: Failed pour un disque qui n’est pas en erreur, on doit avoir :

Firmware state: Online, Spun Up

Sur le disque en erreur noter l’Enclosure Device ID et le slot Number afin de tenter de relancer la reconstruction de la grappe RAID.

ici on a

Enclosure Device ID: 248 Slot Number: 0

d’où la commande pour le rebuild

MegaCli -PDRbld -Start -PhysDrv[248:0] -a0

Vérification

MegaCli -PDRbld -ShowProg -PhysDrv[248:0] -a0

Résultat :

Rebuild Progress on Device at Enclosure 248, Slot 0 Completed 2% in 0 Minutes. Exit Code: 0x00

La lancer de temps en temps pour surveiller le process

Rebuild Progress on Device at Enclosure 248, Slot 0 Completed 33% in 7 Minutes. Rebuild Progress on Device at Enclosure 248, Slot 0 Completed 58% in 14 Minutes. Rebuild Progress on Device at Enclosure 248, Slot 0 Completed 75% in 19 Minutes. Rebuild Progress on Device at Enclosure 248, Slot 0 Completed 98% in 27 Minutes. Device(Encl-248 Slot-0) is not in rebuild process ⇒ fin du processus de reconstruction

fin

vérification

./MegaCli -AdpAllInfo -aALL

retourne maintenant :

...
Virtual Drives    : 1 
  Degraded        : 0 
  Offline         : 0 
Physical Devices  : 4 
  Disks           : 3 
  Critical Disks  : 1 
  Failed Disks    : 0 
...
Critical = Predictive Failure Count: 7 Last Predictive Failure Event Seq Number: 16032

Changement des états du disque

/opt/MegaCli -PDOnline -PhysDrv[32:2] -a0
  EnclId-32 SlotId-2 state changed to OnLine.
  
/opt/MegaCli -PDOffline -PhysDrv[32:2] -a0
  EnclId-32 SlotId-2 state changed to OnLine
  
/opt/MegaCli -PDMakeGood -PhysDrv[32:2] -a0
  Adapter: 0: EnclId-32 SlotId-2 state changed to Unconfigured-Good.
  
/opt/MegaCli -PdReplaceMissing -PhysDrv[32:2] -array0 -row2 -a0
  Adapter: 0: Missing PD at Array 0, Row 2 is replaced.

Etant du prédictive failure un test smart s’impose.

 
smartctl /dev/sda -d megaraid,2 -a

Démarrage d’un self-test court et suivi :

smartctl /dev/sda -d megaraid,2 -t short
smartctl /dev/sda -d megaraid,2 -t long
smartctl /dev/sda -d megaraid,2 -l selftest

ISCI et Multipath

Mise en place du iSCSI client

Install du paquet open-iscsi

apt-get install open-iscsi

Voici les interfaces réseaux réservées à l’iSCSI

enp12s0 ⇒ iscsi A 10.2.1.5

enp13s0 ⇒ iscsi B 10.3.1.5

fichier /etc/network/interfaces comme suit

auto enp12s0 
  iface enp12s0 inet static 
  address 10.2.1.4 
  netmask 255.255.0.0 
auto enp13s0 
  iface enp13s0 inet static 
  address 10.3.1.4 
  netmask 255.255.0.0 

le ping des interfaces des deux nodes de la baie doit réussir :

10.2.0.110.3.0.1
10.3.0.210.3.0.2

Si on doit mettre l’iqn du serveur dans la baise de stockage, il se trouve dans le fichier /etc/iscsi/initiatorname.iscsi

Exemple : iqn.1993-08.org.debian:01:3d6467f8657

Découverte des liaisons iscsi sur les deux nodes de la baie. on remarque qu’une seule connexion à la baie remonte les deux nodes.

scsiadm –mode discovery –type sendtargets –portal 10.2.0.1

10.2.0.1:3260,1 iqn.1986-03.com.ibm:2145.ada-bou-r6-s1.ada-bou-r6-s1-n1 
10.3.0.1:3260,1 iqn.1986-03.com.ibm:2145.ada-bou-r6-s1.ada-bou-r6-s1-n1 

iscsiadm –mode discovery –type sendtargets –portal 10.2.0.2

10.3.0.2:3260,1 iqn.1986-03.com.ibm:2145.ada-bou-r6-s1.ada-bou-r6-s1-n2 
10.2.0.2:3260,1 iqn.1986-03.com.ibm:2145.ada-bou-r6-s1.ada-bou-r6-s1-n2 

login à la baie. cette commande permet de se loguer sur tous les ports de la baie.

iscsiadm -m node –login

Logging in to [iface: default, target: iqn.1986-03.com.ibm:2145.ada-bou-r6-s1.ada-bou-r6-s1-n1, portal: 10.3.0.1,3260] (multiple) 
Logging in to [iface: default, target: iqn.1986-03.com.ibm:2145.ada-bou-r6-s1.ada-bou-r6-s1-n1, portal: 10.2.0.1,3260] (multiple) 
Logging in to [iface: default, target: iqn.1986-03.com.ibm:2145.ada-bou-r6-s1.ada-bou-r6-s1-n2, portal: 10.2.0.2,3260] (multiple) 
Logging in to [iface: default, target: iqn.1986-03.com.ibm:2145.ada-bou-r6-s1.ada-bou-r6-s1-n2, portal: 10.3.0.2,3260] (multiple) 
Login to [iface: default, target: iqn.1986-03.com.ibm:2145.ada-bou-r6-s1.ada-bou-r6-s1-n1, portal: 10.3.0.1,3260] successful. 
Login to [iface: default, target: iqn.1986-03.com.ibm:2145.ada-bou-r6-s1.ada-bou-r6-s1-n1, portal: 10.2.0.1,3260] successful. 
Login to [iface: default, target: iqn.1986-03.com.ibm:2145.ada-bou-r6-s1.ada-bou-r6-s1-n2, portal: 10.2.0.2,3260] successful. 
Login to [iface: default, target: iqn.1986-03.com.ibm:2145.ada-bou-r6-s1.ada-bou-r6-s1-n2, portal: 10.3.0.2,3260] successful. 

Vérification des sessions

iscsiadm -m session

tcp: [1] 10.3.0.1:3260,4 iqn.1986-03.com.ibm:2145.ada-bou-r6-s1.ada-bou-r6-s1-n1 (non-flash) 
tcp: [2] 10.2.0.1:3260,3 iqn.1986-03.com.ibm:2145.ada-bou-r6-s1.ada-bou-r6-s1-n1 (non-flash) 
tcp: [3] 10.2.0.2:3260,3 iqn.1986-03.com.ibm:2145.ada-bou-r6-s1.ada-bou-r6-s1-n2 (non-flash) 
tcp: [4] 10.3.0.2:3260,4 iqn.1986-03.com.ibm:2145.ada-bou-r6-s1.ada-bou-r6-s1-n2 (non-flash)

Mise en place du démarrage automatique du daemon iscsid

Dans le fichier : /etc/iscsi/iscsid.conf , ajouter :

node.startup = automatic 

et

service open-iscsi restart 

Si nous avons mappé un disque à ce serveur, la commande

 blkid 

Retourne 4 devices pour le même disque car il y a 4 paths pour l’atteindre.

/dev/sda1: UUID="958b3f01-7b8b-48aa-afbc-bf351b6b9380" TYPE="ext4" PARTUUID="357f5a83-01" 

/dev/sdc: UUID="e5b09141-96f1-4e03-b2cc-86ef6293b8f4" TYPE="ext4" 
/dev/sdd: UUID="e5b09141-96f1-4e03-b2cc-86ef6293b8f4" TYPE="ext4" 
/dev/sde: UUID="e5b09141-96f1-4e03-b2cc-86ef6293b8f4" TYPE="ext4" 
/dev/sdf: UUID="e5b09141-96f1-4e03-b2cc-86ef6293b8f4" TYPE="ext4" 

Si nous utilisons l’un de ces paths, la redondance de chemin ne marcherait pas , d’où l’utilisation de multipathd.

Mise en place du Multipath

apt-get install multipath 

Dans le fichier /etc/multipath.conf, y mettre : ( le créer si il n’existe pas )

defaults { 
        polling_interval        10 
        path_grouping_policy    multibus 
        prio                    alua 
        path_checker            readsector0 
        rr_min_io               100 
        max_fds                 8192 
        rr_weight               priorities 
        failback                immediate 
        no_path_retry           fail 
        user_friendly_names     yes 
} 
blacklist { 
       devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*" 
       devnode "^hd[a-z]" 
       devnode "sda" 
} 

Gestion du service

service multipathd restart

Commandes de vérification

multipath -v2 ( ne retourne rien si tout est OK )
multipath -v3

Affichage des chemins et du mapper

multipath -ll

Retourne :

multipath -ll

mpatha (3600507638081014a180000000000001f) dm-0 IBM,2145 
size=500G features='0' hwhandler='0' wp=rw 
|-+- policy='round-robin 0' prio=50 status=active 
| |- 4:0:0:0 sde 8:64 active ready running 
| `- 5:0:0:0 sdf 8:80 active ready running 
`-+- policy='round-robin 0' prio=10 status=enabled 
  |- 2:0:0:0 sdc 8:32 active ready running 
  `- 3:0:0:0 sdd 8:48 active ready running

Le device mapper représentant les 4 chemins est /dev/mapper/mpatha

Utilisation de LVM

Nous choisissons LVM afin de gérer cet lun iSCSI car nous avons plus de souplesse dans la gestion de son extension et/ou de sa réduction.

pvcreate /dev/mapper/mpatha 
vgcreate test_volume /dev/mapper/mpatha 
lvcreate -n name -l 100%FREE test_volume 
mkfs.ext4 /dev/mapper/test_volume-name

Voir Création d’un volume LVM si besoin.

Ajout dans la fstab

/dev/mapper/test_volume-name /volume_test ext4  _netdev 0 0 

ou avec l’UUID donnée la commande blkid

UUID=b9af6adf-6dbf-46b4-9adf-b54eb2fa8bc1 /volume_test ext4  _netdev 0 0

La directive importe est _netdev , elle indique que cette partition ne doit être montée uniquement après que le réseau soit up.

Test de redondance de chemins

On va se servir de la commande dd afin d’écrire sur le volume, et en même temps dans un autre shell nous couperons l’une des interfaces réseau dédiée au iSCSI. La commande dd ne doit PAS s’interrompre, sinon cela signifie qu’il y a un problème dans la configuration du multipath.

dd if=/dev/zero of=/docker_volume/test_dd2 bs=2048 count=10240000 
10240000+0 records in 
10240000+0 records out 
20971520000 bytes (21 GB, 20 GiB) copied, 22,3005 s, 940 MB/s 
dd if=/dev/zero of=/docker_volume/test_dd3 bs=4096 count=10240000 
10240000+0 records in 
10240000+0 records out 
41943040000 bytes (42 GB, 39 GiB) copied, 36,1769 s, 1,2 GB/s 

Avec pour chacun des tests la coupure des interfaces respectives :

ifconfig enps12s0 down  
ifconfig ensp13s0 down  

ou

ip link set down enps12s0 

Augmentation de la LUN

Rafraichir la taille des disques

iscsiadm -m node --rescan 

Vérifier avec fdisk -l que la taille du disque correspond à la taille sur le SAN, ensuite recharge le daemon multipah afin que cela soit visible auprès du LVM

/etc/init.d/multipathd reload 

Vérifier avec multipath -ll que la taille de la partition a bien augmentée et ensuite le redimensionner

pvresize /dev/mapper/mpath0 

Le nouvel espace disque devrait être disponible