cURL ignore les paramètres proxy du système

En utilisant cURL pour vérifier le bon fonctionnement d'une application web exécutée en locale, je prenais systématiquement un retour du serveur proxy demandant une authentification.

Pourtant, sur cette machine fonctionnant sous Ubuntu (16.04), dans /etc/environment était bien configuré le paramètre no_proxy avec sa liste d'exclusions.

http_proxy="http://proxy.local/"
https_proxy="https://proxy.local/"
no_proxy="127.0.0.1, localhost"

cURL outrepasse donc les paramètres renseignés dans ce fichier. Afin de lui indiquer les paramètres à utiliser, il faut créer un fichier .curlrc et y ajouter les paramètres nécessaires.

enguerrand@ubutest01:~$ nano .curlrc

Pour ignorer le proxy sur la boucle locale, il suffit d'ajouter ce paramètre :

noproxy = localhost,127.0.0.1

Il est également possible d'utiliser l'argument --noproxy "*" lors de l'utilisation de cURL pour le bypasser pour cette exécution.

curl --noproxy "*" -0 http://localhost:8080/

Powershell : clôture d'une sélection de processus

Certaines applications appelées par un ordonnanceur ou des scripts peuvent laisser un processus ouvert sur le système lorsqu'elles ne sont plus utilisées. Ayant été confronté à ce cas d'une application gardant son driver ODBC en processus zombie lorsque la transaction est terminée, j'ai développé un script Powershell qui est appelé en tâche planifiée qui récupère la liste des processus ayant le nom correspondant et qui les tue automatiquement.

$process = Get-Process | Where-Object { $_.ProcessName -like "iexplore" }
foreach($proc in $process){
Stop-Process $proc.Id
}

Il suffit simplement de mettre le nom du processus récalcitrant ou bien de retravailler le script pour éventuellement faire passer un nom en paramètre pour une exécution interactive.

Powershell : automatisation de la création d'un répertoire partagé DFS

J'ai développé un script Powershell permettant d'automatiser tout le process de création d'un répertoire partagé et son ajout à un namespace DFS.

Ce script, prenant en paramètre le nom du partage, va réaliser les opérations suivantes :

  • Création d'un répertoire sur le disque et création d'un partage SMB sur ce même répertoire ;
  • Création et peuplement de groupes AD qui permettront de définir les droits en lecture et écriture ;
  • Ajout des ACL sur le partage ;
  • Ajout du répertoire dans le namespace DFS.

Il sera nécessaire, avant exécution du script, d'éventuellement modifier les variables déclarées en début de code afin de les adapter à l'environnement d'exécution ou au process habituellement suivi.

param([Parameter(Mandatory=$true)][string]$ShareName)
$path = "D:\DFS"
$dfspath = "\\dundermifflin.com\DFS"
$srvname = "PWFILE01"
$ou = "OU=DFS,OU=Access_Groups,DC=dundermifflin,DC=com"
$readarray = @()
$writearray = @()
$readgroup = "DFS-$ShareName-RX"
$writegroup = "DFS-$ShareName-W"
New-Item -path $path -name $ShareName -ItemType "Directory" -ErrorAction Stop | Out-Null
New-ADGroup -Name $readgroup -GroupCategory Security -GroupScope DomainLocal -Path $ou -Description "\\dundermifflin.com\DFS\$ShareName - Read Only" -ErrorAction Stop
New-ADGroup -Name $writegroup -GroupCategory Security -GroupScope DomainLocal -Path $ou -Description "\\dundermifflin.com\DFS\$ShareName - Write" -ErrorAction Stop
New-SmbShare -Name $ShareName -Path "$path\$ShareName" -FullAccess "BUILTIN\Administrators" -ReadAccess $readgroup -ChangeAccess $writegroup -ErrorAction Stop
Write-Host "You will be prompted the usernames to add to the read-only access group. Please input only one user at a time. When you are done, leave the field empty and press enter."
do {
$readacc = Read-Host "Account name to add to the READ group"
if($readacc -ne "") {$readarray+=$readacc}
}
while($readacc -ne "")
Write-Host "Now you will be prompted the usernames to add to the modification group. Please input only one user at a time. When you are done, leave the field empty and press enter."
do {
$writeacc = Read-Host "Account name to add to the WRITE group"
if($writeacc -ne "") {$writearray+=$writeacc}
}
while($writeacc -ne "")
if($readarray -ne $null) { Add-ADGroupMember -Identity $readgroup -Members $readarray }
if($writearray -ne $null) { Add-ADGroupMember -Identity $writegroup -Members $writearray }
$acl = Get-Acl "$path\$ShareName"
$acl.SetAccessRuleProtection($true,$false)
$readacl = New-Object Security.AccessControl.FileSystemAccessRule("DUNDERMIFFLIN\$readgroup","ReadAndExecute, Synchronize",3,0,"Allow")
$acl.SetAccessRule($readacl)
$writeacl = New-Object Security.AccessControl.FileSystemAccessRule("DUNDERMIFFLIN\$writegroup","Modify, Synchronize",3,0,"Allow")
$acl.SetAccessRule($writeacl)
$sysacl = New-Object Security.AccessControl.FileSystemAccessRule("NT AUTHORITY\System","FullControl",3,0,"Allow")
$acl.SetAccessRule($sysacl)
$admacl = New-Object Security.AccessControl.FileSystemAccessRule("BUILTIN\Administrators","FullControl",3,0,"Allow")
$acl.SetAccessRule($admacl)
$acl | Set-Acl
New-DfsnFolder -path "$dfspath\$ShareName" -Target "\\$srvname\$ShareName"

Une version commentée du script est disponible en téléchargement.

Cloud Providers : comparatif des VPS à petit budget

Après quelques années à louer des VPS chez différents hébergeurs, par curiosité ou par relative nécessité, je commence à connaître le marché et les progrès effectués par les uns et les autres au fil du temps. Sur ce blog, j'avais déjà évoqué Scaleway (filiale d'Iliad) ainsi que Hetzner. Si Scaleway ne m'avait pas laissé un souvenir impérissable, j'ai été très satisfait d'Hetzner durant les 8 mois où j'ai été client pour 4 serveurs, sans compter que peu après la rédaction de l'article, il était possible de louer du stockage supplémentaire (comme le font presque tous les fournisseurs actuellement).

Utilisant également OVH et DigitalOcean et ayant utilisé de nouveau Scaleway, j'ai pensé à réaliser un comparatif sur les offres de ces 4 prestataires concernant leurs VPS d'entrée de gamme (1 processeur virtuel et 2 Go de RAM) qui peuvent être suffisants pour débuter l'administration GNU/Linux, le développement en Python, ou encore faire fonctionner un petit serveur web ou multimédia. N'ayant pas été client à titre professionnel, je me base uniquement sur mon expérience personnelle sur ces diverses plateformes que j'ai pu arpenter pour certaines, en long, en large, et en travers.

Présentation

OVH est probablement le plus connu des 4 puisqu'il est français et principalement basé à Roubaix. Scaleway est une filiale d'Iliad et auparavant de Online.net ; désormais Online et Scaleway ont fusionné. Hetzner est un hébergeur allemand, proposant diverses solutions un peu plus rares, comme la location de Storage Boxes (partages SFTP / Samba accessibles en ligne) ou du Nextcloud en SaaS. Enfin, DigitalOcean est une société américaine qui a connu (et connaît toujours) un développement relativement rapide de son activité et de sa présence physique sur les différents continents.

Tarification

OVHHetznerScalewayDigitalOcean
DénominationVPS Cloud 2016CX11DEV1-SStandard
Prix par mois8,99 €2,99 € TVA incl.2,99 €8,90 € (10 $)
vCPU1121
RAM2 Go2 Go2 Go2 Go
Stockage25 Go20 Go20 Go50 Go
Bande passante100 Mbps1 Gbps max.100 Mbps1 Gbps max.
TraficIllimité20 To sortantsIllimité2 To sortants
Snapshot4,99 € / mois0,01 € / Go / mois0,02 € / 50 Go / mois0,05 € / Go / mois
Sauvegarde7,99 € / mois20% prix mens. / moisn/a20% prix mens. / mois

Sur le papier, Hetzner est le moins cher puisque pour moins de 3€ par mois TVA incluse, il est possible d'avoir un VPS. Cependant, en incluant la TVA, Scaleway offre un deuxième cœur sur un processeur récent, ce qui n'est pas négligeable.

Ces prix peuvent s'expliquer par le positionnement commercial : Hetzner cherche à se développer et acquérir de nouveaux clients, avec une branche cloud qui a ouvert il n'y a pas si longtemps ; Scaleway se présente avant tout comme un partenaire des développeurs, où l'on créé ses laboratoires et environnements de développement, plutôt qu'où l'on bâtit son infrastructure de production. DigitalOcean et OVH sont à l'opposé des deux autres : une approche bien plus professionnelle qui se ressent au niveau des tarifs.

Performances

J'ai appliqué le même protocole de tests de performances pour ces 4 serveurs virtuels : deux tests d'écriture sur disque (un pour des petits fichiers, un pour des gros fichiers), plusieurs tests de performances réseau (speedtest-cli) et un dernier concernant le processeur (sysbench). Tous les VPS ont été installés sous Ubuntu 18.04 LTS.

Processeurs

Les CPU utilisés ne sont pas les mêmes en fonction des VPS. En utilisant cat /proc/cpuinfo, j'ai pu obtenir quelques informations :

  • OVH utilise des Intel Core ;
  • Hetzner utilise des Intel Xeon Skylake ;
  • Scaleway utilise des AMD EPYC 7281 ;
  • DigitalOcean utilise des Intel Xeon E5-2650L (Haswell).
Un sysbench a été exécuté en utilisant tous les threads disponibles sur le VPS.

Scaleway obtient le plus gros score sur ce bench grâce à son processeur récent et ses 2 cœurs ; DigitalOcean termine bon dernier à cause de son processeur ancien. Si la différence est marquante sur un test simple, les performances réelles dépendront de l'application exécutée.

Réseau
De multiples speedtest ont été réalisés sur des emplacements différents et une moyenne a été calculée.

Les résultats surprenants d'OVH s'expliquent par la limitation volontaire à 100 Mbps du VPS. Pour les autres, les débits étaient nettement plus fluctuants mais la moyenne s'établit naturellement au-dessus. Si Hetzner et DigitalOcean offrent des débits élevés, cela se paye au prix d'un trafic limité à 20 To pour le premier et 2 To pour le second. Les VPS chez DigitalOcean et OVH ont été loués au Royaume-Uni, Scaleway sur le datacenter parisien, le VPS Hetzner étant localisé en Allemagne.

Disque
Un test d'écriture de plusieurs fichiers de plus d'1 Go ainsi qu'un test d'écriture d'une dizaine de milliers de petits fichiers de quelques Ko ont été menés.

DigitalOcean rattrape ses performances CPU plus faibles sur le papier par un temps d'écriture sur disque très faible par rapport à la concurrence. Je soupçonne également OVH de faire du throttling afin de conserver un niveau de performance égal entre "locataires" d'une même unité de stockage, d'où le score plus élevé que la moyenne.

En pratique

OVH

L'interface entièrement en français d'OVH n'est pas des plus modernes ni des plus légères. Pour cause : elle n'est pas dédiée au cloud et n'en adopte pas la philosophie de fonctionnement. Sur les petits modèles, pas de tarification à l'heure, peu de flexibilité concernant les fonctionnalités de sauvegarde, tout se paye au mois. De multiples localisations sont possibles, en Europe comme sur le continent Américain ou en Asie. Il est possible de recourir à un firewall sur IP afin de sécuriser son serveur ; plus pratique qu'iptables pour les néophytes. Malgré son prix relativement élevé pour les caractéristiques, rien ne semble vraiment différencier OVH de la concurrence sur cette gamme, cependant la fiabilité sans faille ainsi que la réactivité du support et les nombreux tutoriels disponibles sur le site sont de sérieux arguments. Le côté simple de la location du serveur, sans véritable approche d'une vision flexible comme chez Scaleway par exemple et la tarification au mois sans surprise sont également rassurants. L'évolutivité n'est pas oubliée puisque l'on peut upgrader et downgrader son serveur depuis l'interface. Si OVH se concentre beaucoup sur des produits et offres généralement plus chères, le "petit" VPS bénéficie du même sérieux... ce qui se ressent sur le prix. Un choix avant tout à faire pour la sérénité de fonctionnement et la simplicité d'usage.

Scaleway

Bien qu'intégralement en anglais, l'interface de Scaleway est simple et rapide. Tout est compréhensible et la flexibilité semble être le maître mot pour déployer de multiples VM, soit à partir d'ISO standards d'OS GNU/Linux, ou à partir de snapshots réalisés, ou encore depuis le marketplace. Pour l'instant, deux sites sont proposés : Paris et Amsterdam. Attention car certains serveurs ne sont disponibles que sur un seul site et certains types de serveurs sont fréquemment en rupture de stock. Scaleway propose également des serveurs fonctionnant avec des processeurs ARM. Le gros bémol de Scaleway est son approche "en perpétuelle évolution". Ce qui peut être une qualité peut s'avérer être un défaut : serveurs qui s'installent mal, règles de pare-feu sur IP qui bloquent complètement le serveur au point d'avoir à le redémarrer pour retrouver la main et disponibilités parfois aléatoires... rien n'a spécialement changé depuis l'année dernière où j'essayais Scaleway pour la première fois avant de jeter l'éponge après 2 semaines. Cependant, pour un usage ponctuel mais avancé Scaleway est un excellent choix pour son rapport prix/performances !

Hetzner

Jusqu'à il y a peu un outsider, Hetzner affiche un rapport prix/performances excellent. L'interface en anglais est très proche de celle de DigitalOcean et en reprend les mêmes qualités : simplicité et rapidité. La qualité de service ne souffre d'aucun reproche : la création des serveurs est rapide, la fiabilité est réelle. Sans être aussi orienté "technologie" que Scaleway, Hetzner propose de nombreuses ISO et applications à installer sur le VPS. Sans supplément de coût et moyennant une clef de licence à configurer post-installation, il est même possible de déployer en quelques clics un serveur Windows ! Seul le trafic sortant limité à 20 To et l'absence de firewall sur IP peuvent jouer en la défaveur d'Hetzner. Si cela n'est pas rédhibitoire, Hetzner est un choix tout à fait recommandable grâce à ses multiples datacenters situés en Allemagne et en Finlande.

DigitalOcean

DigitalOcean est probablement le meilleur compromis entre OVH et Hetzner. En reprenant la simplicité d'Hetzner et le professionnalisme d'OVH, DigitalOcean offre énormément de possibilités ; qu'il s'agisse de VPS (appelés droplets), mais aussi d'instances de bases de données ou d'espaces de stockage d'objets. Tout comme OVH, DO met à disposition une belle base de connaissances pour se faire la main sur les divers environnements proposés. Firewall sur IP, stockage supplémentaire, load balancing, déploiements Kubernetes, création d'images... tout ou presque est possible peu importe son niveau de compétences. Il est dommage que la tarification soit dans le haut du panier au regard des performances processeur des petites instances mais elle se justifie aisément par la qualité de service et l'intégration complète des divers outils proposés ; le succès de DigitalOcean se comprend aisément !

Et au final ?

Il n'est pas vraiment possible pour moi de départager ces plateformes, tant elles ont chacune leur qualités et leurs défauts, qu'elles évoluent rapidement, et surtout, que leur appréciation est avant tout une question de besoins. Pour un usage purement personnel de tests / apprentissage / curiosité, Hetzner est parfait : sa simplicité et la clarté de sa tarification - douce de surcroît - permettent de faire un premier pas dans le monde des serveurs. Pour un peu plus de possibilités en restant dans le même scope mais avec un côté "laboratoire à expériences" assumé, Scaleway est tout indiqué. Pour un usage plus pérenne et avancé, DigitalOcean ainsi qu'OVH répondent présents. La flexibilité et les possibilités pour l'un, la tarification au mois, l'interface en français et la qualité globale de service (tutoriels, support, infrastructures) pour l'autre. Le meilleur choix à faire est celui qui correspond à vos besoins ! Pour l'instant, mon cloud personnel est basé chez DigitalOcean... que j'ai rejoint après quelques mois chez OVH... après 8 mois chez Hetzner, pleinement satisfait, mais la curiosité l'emportant, j'ai fini par migrer vers un autre service. Combien de temps avant la prochaine migration ?

Powershell : suppression d'enregistrements DNS depuis un import CSV

Ce snippet permet de supprimer les enregistrements DNS à partir d'une liste au format CSV passée en paramètre.

Le script sera appelé de cette manière :

.\win_dns-deletion.ps1 -zone superdomaine.local -csv exportdns.csv

Seuls les enregistrements de type A sont supprimés par ce code ; le paramètre peut se modifier pour cibler un autre type. Par défaut, la commande demande confirmation avant suppression ; le paramètre -Force permet de passer outre cette confirmation. Attention au moment d'exécuter le script.

param([string]$zone, [string]$csv)
$records = Import-CSV $csv
foreach($record in $records){
Remove-DnsServerResourceRecord -ZoneName $zone -RRType "A" -Name $record.Name -Force
}