Archive for the ‘Linux/Unix’ Category
Configuration cliente SSH avancée
Voir cet article concernant le « multiplexage » des connections.
Cet exemple de configuration ne vérifie pas le hash et ne le stock pas
Host 192.168.1.1
HashKnownHosts no
StrictHostKeyChecking no
ControlMaster auto
ControlPath ~/.ssh/sockets/%r-%h-%p
Compression yes
KeepAlive yes
CheckHostIP no
Cet exemple de configuration s’applique a tous les autre host, stock le hash
Host *
HashKnownHosts yes
StrictHostKeyChecking ask
ControlMaster auto
StrictHostKeyChecking yes
ControlPath ~/.ssh/sockets/%r-%h-%p
Compression yes
KeepAlive yes
CheckHostIP yes
Dans les deux exemple, une socket de connexion sera créé dans le dossier ~/.ssh/sockets
Celui ci doit etre accessible uniquement pour votre utilisateur, toutes les utilisateurs pouvant accéder a ces sockets pourront utiliser vos connections SSH sans authentification !
Générer une ISO Debian avec Jigdo
Prerequis :
- Avoir une distribution Debian récente
Procédure :
- Installation du client
- trouver le fichier de ressource jigdo :
- Lancer sur le serveur le client jidgo
Se connecter en root sur la machine sous débian et installé le client
apt-get install jidgo-file
ou
aptitude install jigdo-file
http://cdimage.debian.org/cdimage/archive/
Puis choisir la version / architecture / et jigdo-[cd|dvd]/fichier.jigdo
Exemple :
http://cdimage.debian.org/cdimage/archive/3.1_r8/i386/jigdo-dvd/debian-31r8-i386-binary-1.jigdo http://cdimage.debian.org/cdimage/archive/3.1_r8/i386/jigdo-dvd/debian-update-3.1r8-i386-DVD-1.jigdo
45 root@debian [/var/3.1] 0 # jigdo-lite http://cdimage.debian.org/cdimage/archive/3.1_r8/i386/jigdo-dvd/debian-31r8-i386-binary-1.jigdo Jigsaw Download "lite" Copyright (C) 2001-2005 | jigdo@ Richard Atterer | atterer.net Loading settings from `/root/.jigdo-lite' Downloading .jigdo file --2010-08-09 13:42:39-- http://cdimage.debian.org/cdimage/archive/3.1_r8/i386/jigdo-dvd/debian-31r8-i386-binary-1.jigdo Résolution de cdimage.debian.org... 130.239.18.163, 130.239.18.173, 2001:6b0:e:2018::173, ... Connexion vers cdimage.debian.org|130.239.18.163|:80...connecté. requête HTTP transmise, en attente de la réponse...200 OK Longueur: 211325 (206K) [text/plain] Saving to: `debian-31r8-i386-binary-1.jigdo' 100%[==========================>] 211 325 446K/s in 0,5s 2010-08-09 13:42:40 (446 KB/s) - « debian-31r8-i386-binary-1.jigdo » sauvegardé [211325/211325]
Images offered by `http://cdimage.debian.org/cdimage/archive/3.1_r8/i386/jigdo-dvd/debian-31r8-i386-binary-1.jigdo': 1: 'Debian GNU/Linux 3.1 r8 "Sarge" - Official i386 Binary-1' (debian-31r8-i386-binary-1.iso) Further information about `debian-31r8-i386-binary-1.iso': Generated on Sun, 13 Apr 2008 18:05:56 +0200
If you already have a previous version of the CD you are downloading, jigdo can re-use files on the old CD that are also present in the new image, and you do not need to download them again. Mount the old CD ROM and enter the path it is mounted under (e.g. `/mnt/cdrom'). Alternatively, just press enter if you want to start downloading the remaining files. Files to scan: [ TAPER ENTER ]
The jigdo file refers to files stored on Debian mirrors. Please choose a Debian mirror as follows: Either enter a complete URL pointing to a mirror (in the form `ftp://ftp.debian.org/debian/'), or enter any regular expression for searching through the list of mirrors: Try a two-letter country code such as `de', or a country name like `United States', or a server name like `sunsite'. Debian mirror [http://archive.debian.org/debian-archive/debian/]: http://archive.debian.org/debian-archive/debian/
Si ce n’est pas le cas bien spécifier l’url :
http://archive.debian.org/debian-archive/debian/
Downloading .template file --2010-08-09 13:43:57-- http://cdimage.debian.org/cdimage/archive/3.1_r8/i386/jigdo-dvd/debian-31r8-i386-binary-1.template Résolution de cdimage.debian.org... 130.239.18.173, 130.239.18.163, 2001:6b0:e:2018::173, ... Connexion vers cdimage.debian.org|130.239.18.173|:80...connecté. requête HTTP transmise, en attente de la réponse...200 OK Longueur: 17926304 (17M) [text/plain] Saving to: `debian-31r8-i386-binary-1.template' 100%[==========================>] 17 926 304 2,44M/s in 6,3s 2010-08-09 13:44:03 (2,73 MB/s) - « debian-31r8-i386-binary-1.template » sauvegardé [17926304/17926304]
Merci SZU
Les best practices OpenSSH
Utilisez le protocole SSH 2
La version 1 du protocole 1 est obsolète et doit être évitée à tout prix. Ouvrir le fichier sshd_config et vérifiez que la ligne suivante existe:
Protocole 2
Controlez les utilisateurs qui peuvent se connecter en SSH
Par défaut, tous les utilisateurs des systèmes peuvent se connecter via SSH en utilisant leur mot de passe ou une clé publique. Parfois, vous créez UNIX / Linux pour compte d’utilisateur FTP ou le but de messagerie. Toutefois, les utilisateurs peuvent se connecter au système en utilisant ssh. Ils auront un accès complet aux outils système, y compris les compilateurs et les langages de script tels que Perl, Python qui peuvent ouvrir des ports réseau et de nombreux autres choses fantaisistes.
Autoriser seulement les administrateurs, par exemple pascal. pour cela dans le fichier de configuration sshd_config:
AllowUsers pascal
Alternativement, vous pouvez permettre à tous les utilisateurs de se connecter via SSH, mais nie que quelques utilisateurs, avec la ligne suivante:
DenyUsers root postfix www-data
Configurer la déconnection des session inactive
Utilisateur peut se connecter au serveur via ssh et vous pouvez définir un délai d’inactivité après lequel ils seront déconnectez. Dans le fichier sshd_config assurez-vous les valeurs suivantes sont configurées:
ClientAliveInterval 300 ClientAliveCountMax 0
Vous définissez un intervalle de délai d’inactivité en secondes (300 secondes = 5 minutes). Passé ce délai est passé, l’utilisateur sera automatiquement déconnectés.
Désactiver. Rhosts
Ne pas lire utilisateur ~/.Rhosts et ~/.Shosts fichiers. Modifiez dans sshd_config les paramètres suivants:
IgnoreRhosts yes
SSH peut émuler le comportement de rsh, il suffit de désactiver l’accès via rsh.
Désactiver l’authentification basé sur l’hôte
Pour l’authentification basée sur l’hôte désactiver, mettez à jour sshd_config avec l’option suivante:
HostbasedAuthentication no
Désactiver la connexion root via SSH
Il n’est pas nécessaire de se connecter en tant que root. Les utilisateurs normaux peuvent utiliser su ou sudo pour avoir accès root. Cela permet aussi de tracer/log ce qui est fait avec les droit root. Pour désactiver la connexion de root via SSH, éditez sshd_config et vérifier le paramètre suivant :
PermitRootLogin no
Utilisez une authentification par clef
Il est preferable de se connecter via une authentification par clef plutôt qu’avec un mot de passe.
Votre clef privée doit être protégé par mot de passe.
Interdire les connection via mot de passe vide
Vous devez explicitement interdire la connexion à distance à partir de comptes avec des mots de passe vide, dans sshd_config :
PermitEmptyPasswords no
Protection contre le brute-force
Voici la liste des outils permetant de bloquer les tentative de brute-force :
- DenyHosts
- Fail2ban
- security/sshguard-pf
- security/sshguard-ipfw
- security/sshguard-ipfilter
- security/sshblock
- security/sshit
- BlockHosts
- Blacklist
- Brute Force detection
- IPQ BDB filtre
Derniers paramètres a vérifier
UsePrivilegeSeparation yes StrictModes yes # Verifier le reverse DNS VerifyReverseMapping yes # Spécifie si l'authentification par mot de passe est autorisée. PasswordAuthentication no
Les fonctions Crontab & at
1. Pour quoi faire
Crontab est un utilitaire bien utile et plutôt simple à mettre en oeuvre. Il permet de programmer des actions régulières sur votre machine. Par exemple est ce que tel process tourne toujours, est ce que ma ligne ADSL est toujours active, éventuellement faire des sauvegardes.
at permet quant à lui de lancer des actions à une heure donnée, un jour donné, mais sans répétition.
2. L’installation
Pas grand chose à dire sur l’installation de crontab sur votre machine, ni même de la commande at. Par défaut cela tourne déjà. Si ce n’est pas le cas installer les paquetages suivants :at-3.1.7-….rpm et crontabs-1.7-8mdk….rpm.
Vous devez voir le démon crond et atd tourner sur votre machine, si vous souhaitez les utiliser.
3. crontab
Un demon nommé cron lit le fichier (qui se trouve dans le répertoire /var/spool/cron) et exécute les commandes qui s’y trouvent. Pour créer ce fichier taper
crontab -e
(crontab est une commande). Vous ouvrez alors vi et il vous reste à entrer votre ligne en respectant la syntaxe. Une fois sorti de vi (Escape puis :wq !), votre commande est mémorisée (vous obtenez le message crontab : installing new crontab). Pour visualiser toutes les crontab tapez
crontab -l
Lorsque vous créez une crontab, elle est créée pour l’utilisateur que vous êtes. Si vous souhaitez voir, créer, modifier ou détruire une crontab d’un autre utilisateur indiquer
>crontab -u toto -l
(-l pour voir, -e pour créer ou modifier, -r pour détruire.
La syntaxe des entrées est la suivante (avec un espace entre chacun) :
minute : de 0 à 59
heure : de 0 à 23
jour du mois de : 1 à 31
mois de : 1 à 12
jour de la semaine : de 0 à 6, 0 étant le dimanche et ainsi de suite.
commande : peut comporter plusieurs commandes.
les mois et les jours peuvent aussi être donnés avec les abréviations anglaises :jan,feb,… et mon,tue,…
On sépare les jours, les mois par des , (virgules), par exemple pour lancer une action tous les 15 et 30 du mois tapez 15,30 à la place de jour du mois.
Le – signifie jusqu’à, ainsi 15-30 signifie du 15 au 30.
Le / permet de spécifier une répétition, */3 indique toutes les 3 minutes.
* peut être utilisée et indique tous les jours de semaine, tous les mois, toutes les heures.
4. Exemples
0 1 1 * * commande veut dire que vous n'exécutez que le premier jour du mois à 1 heure. 0 1 * * mon commande veut dire une fois par semaine le lundi à 1 heure. 0 1 1,15 * * commande veut dire tous les 1 et 15 du mois à 1 heure. 0 1 1-15 * * commande veut dire tous les 15 premiers jours du mois à 1 heure. 0 1 */5 * * commande veut dire tous les 5 jours à 1 heure. */3 * * * * commande veut dire toutes les trois minutes.
La commande suivante efface tous les jours, les fichiers présents dans le répertoire /var/log depuis plus de 7 jours.
0 1 * * * find /var/log -atime 7 -exec rm -f {} \;
atime permet de trouver les fichiers non utilisés depuis 7 jours.
5. at
La commande at permet de lancer une commande un jour donné, à une heure donnée. Une fois que cette commande a été exécutée, elle n’existe plus. Pour utiliser la commande at taper at puis l’heure. ainsi at 12:30 déclenchera la commande à 12 heures 30.
La syntaxe des entrées est la suivante :
at 12:30 11/30/00 déclenchera la commande le 30 novembre 2000 (le jour étant indiqué sous la forme mm/jj/aa.
at now + 1 hour déclenchera la commande dans 1 heure à partir de maintenant.
at 00:00 + 2 days
pour exécuter la commande dans 2 jours à minuit.
Jusque là nous n’avons entré aucune commande à exécuter. Lorsque vous tapez la commande at 12:30, vous obtenez l’invite de la commande
at at 12:30 $ at 12:30 >ping -c 1 192.168.0.1 > ^D $
vous avez alors le message suivant, qui vous indique que votre demande a été prise en compte, avec numéro d’ordre le 1.
job 1 at 2000-11-10 12:30
La commande va envoyer un ping sur la machine 192.168.0.1 à 12 heures 30 (j’avais pas d’autres idées sur le moment… !). On peut bien sur faire exécuter un script. Puis at envoi par mail le résultat de cette commande.
Si vous souhaitez voir ce qui va se passer taper at -c 1 (1 étant le numéro d’ordre). Si vous ne connaissez plus toutes les commandes en attente tapez at -l (ou atq).
Pour supprimer une commande en attente atrm 1 (pour supprimer le job 1).
Attention un des grands risques lorsque l’on utilise at est de ne pas vérifier l’heure et le jour de l’exécution de la commande.
6. Contrôle
Dans le cas de at ou de crontab, il est possible de définir qui a le droit d’utiliser ces commandes. Pour cela il existe les fichiers /etc/cron.allow /etc/cron.deny et pour at /etc/at.allow et /etc/at.deny. Pour interdire par exemple l’utilisation de la commande at saisissez le nom des utilisateurs dans le fichiers at.deny (un par ligne).
7. Remarques
Il existe des interfaces graphiques pour créer, modifier, enlever des crontab, mais est-ce bien nécessaire ?
Si votre machine n’est pas allumée en permanence, il est alors possible que votre commande crontab ne puisse s’exécuter. Vous pouvez alors utiliser anacron (qui va vérifier les crontab non exécutées et les exécuter dès la remise en route de la machine).
Compresser / Decompresser
Compression
tar
.tar est une archive non compressé
tar -cvf nouvelle_archive.tar /dossier/fichier /dossier/dossier
tar.gz
.tar.gz est une archive compressé
tar -czvf archive.tar.gz /dossier/fichier /dossier/dossier
tar.gz2
tar -cjvf archive.tar.gz2 /dossier/fichier /dossier/dossier
Decompression
tar
tar -xvf /dossier/archive.tar
tar.gz
tar -xzvf /dossier/archive.tar.gz
tar.gz2
tar -xjvf /dossier/archive.tar.bz2
Utilisation d’iptable
Voici un exemple commenté, cela est plus simple que de longue explications
#!/bin/bash # Vider les tables actuelles iptables -t filter -F iptables -t filter -X # Autoriser SSH iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT # Ne pas casser les connexions etablies iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # Monitoring Dedibox iptables -A INPUT -i eth0 -s 88.191.254.0/24 -p tcp --dport 161 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -i eth0 -s 88.191.254.0/24 -p udp --dport 161 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -d 88.191.254.0/24 -p tcp --sport 161 -m state --state ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -d 88.191.254.0/24 -p udp --sport 161 -m state --state ESTABLISHED -j ACCEPT # Interdire toute connexion entrante iptables -t filter -P INPUT DROP iptables -t filter -P FORWARD DROP # Interdire toute connexion sortante iptables -t filter -P OUTPUT DROP # Autoriser les requetes DNS, FTP, HTTP, NTP (pour les mises a jour) iptables -t filter -A OUTPUT -p tcp --dport 21 -j ACCEPT iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT # Autoriser loopback iptables -t filter -A INPUT -i lo -j ACCEPT iptables -t filter -A OUTPUT -o lo -j ACCEPT # Autoriser ping iptables -t filter -A INPUT -p icmp -j ACCEPT iptables -t filter -A OUTPUT -p icmp -j ACCEPT # HTTP iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT # FTP modprobe ip_conntrack_ftp iptables -t filter -A INPUT -p tcp --dport 20 -j ACCEPT iptables -t filter -A INPUT -p tcp --dport 21 -j ACCEPT iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # DNS iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT # Mail iptables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT iptables -t filter -A INPUT -p tcp --dport 110 -j ACCEPT iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT # Steamcast iptables -t filter -A INPUT -p tcp --dport 8000 -j ACCEPT iptables -t filter -A INPUT -p tcp --dport 8001 -j ACCEPT # Syn-Flood iptables -A FORWARD -p tcp --syn -m limit --limit 1/second -j ACCEPT iptables -A FORWARD -p udp -m limit --limit 1/second -j ACCEPT # Spoofing iptables -N SPOOFED iptables -A SPOOFED -s 127.0.0.0/8 -j DROP iptables -A SPOOFED -s 169.254.0.0/12 -j DROP iptables -A SPOOFED -s 172.16.0.0/12 -j DROP iptables -A SPOOFED -s 192.168.0.0/16 -j DROP iptables -A SPOOFED -s 10.0.0.0/8 -j DROP
Transfère de linux à linux avec SCP
Cette commande permet de recopier un fichier ou répertoire de manière sécurisée (encryptage) de ou vers une machine distante.
Pour copier un fichier local ‘le_fichier’ vers le compte de l’utilisateur « username » sur la machine distante « nom_de_machine.nom_de_domaine », tapez la commande suivante :
scp le_fichier username@nom_de_machine.nom_de_domaine:
Pour copier le fichier distant ‘le_fichier’ situé dans le sous répertoire ‘directory’ d’un compte de l’utilisateur « username » de la machine « nom_de_machine.nom_de_domaine ».
scp username@nom_de_machine.nom_de_domaine:directory/le_fichier
Pour copier le répertoire local ‘directory’ vers le compte de l’utilisateur « username » sur la machine « nom_de_machine.nom_de_domaine » :
scp -r directory username@nom_de_machine.nom_de_domaine:
Pour copier le répertoire distant ‘directory’ (et tous ses sous-répertoire) d’un compte de l’utilisateur « username » de la machine « nom_de_machine.nom_de_domaine ».
scp -r username@nom_de_machine.nom_de_domaine:directory
Remonter une partition en lecture/ecriture
Dans le cas ou votre /tmp est passé en lecture seul (probleme d’acces disque par exemple)
Vous pouvez remonter la partition le lecture/ecriture sans la demonter. Cela est plus utile pour le /
mount /tmp -o remount,rw
Changer le domaine ou l’adresse mail a l’envoie
Ajoutez dans le fichier de configuration main.cf :
smtp_generic_maps = hash:/etc/postfix/generic
Dans ce fichier, vous y indiquerez ce qui doit être réécrit
@domaine.local @domaine.net root@domaine.local noreply@domaine.net
- Le premier exemple remplace domaine.local par domaine.net
- Le deuxième exemple remplace l’adresse root@domaine.local par noreply@domaine.net
Postfix utilisera le hash de ce fichier, générez le avec postmap
postmap /etc/postfix/generic