Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
systemes:bsd:freebsd:dedie [08/12/2014 16:28] 127.0.0.1 modification externe |
systemes:bsd:freebsd:dedie [13/11/2015 15:13] (Version actuelle) julp |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== Pré-requis ====== | + | Déplacé |
- | + | ||
- | Avant de ne serait-ce toucher à la machine, il serait bon d' | + | |
- | * les utilisateurs système : il faut absolument cloisonner les services/ | + | |
- | * penser le partitionnement du disque : il serait judicieux de séparer les partitions pour les raisons suivantes : | + | |
- | * user des options nosuid (/var + /home) et noexec (/var) où elles ont un sens | + | |
- | * affecter une taille adaptée à chacune, /var étant sans doute la plus gourmande (à cause des logs notamment mais pas seulement) | + | |
- | + | ||
- | ====== SSH ====== | + | |
- | + | ||
- | La première chose à faire est de générer des paires de clés SSH pour chacun des utilisateurs système qui doit accéder à la machine (à commencer par root). | + | |
- | < | + | |
- | + | ||
- | Copier la clé pour l' | + | |
- | < | + | |
- | + | ||
- | Répéter ces étapes pour chacun des utilisateurs système du serveur dédié après avoir créé leurs comptes : | + | |
- | < | + | |
- | ssh root@< | + | |
- | # Créer vos différents utilisateurs | + | |
- | adduser</ | + | |
- | + | ||
- | A présent, il est urgent de limiter l' | + | |
- | + | ||
- | Note, dans le cas où l' | + | |
- | * désactiver tout login pour un compte donné :< | + | |
- | * pour désactiver l' | + | |
- | + | ||
- | ====== Mettre un premier pare-feu en place (Packet Filter) ====== | + | |
- | + | ||
- | Avec PF, on peut maintenant mettre en place quelques règles préliminaires : | + | |
- | * autoriser les requêtes DNS sortantes, avec leurs réponses | + | |
- | * autoriser le trafic SSH entrant et leurs réponses | + | |
- | * autoriser les requêtes FTP + HTTP sortantes, avec leurs réponses | + | |
- | * bloquer tout le reste | + | |
- | * spécificité OVH : au moins autoriser le ping depuis la machine du même réseau dont l'IP se termine par 250 sinon votre serveur va être rebooté toutes les 5 minutes ? | + | |
- | * facultatif : NTP sortant, avec ses réponses ? | + | |
- | + | ||
- | Créer ou éditer / | + | |
- | < | + | |
- | ext_if = " | + | |
- | + | ||
- | # les adresses des serveurs DNS consultés pour la résolution | + | |
- | table <dns> const { 1.2.3.4 5.6.7.8 } | + | |
- | # réservation d'une table pour y ajouter les indésirables | + | |
- | # pour ajouter une adresse : pfctl -t blacklist -T add <liste d' | + | |
- | table < | + | |
- | + | ||
- | # les paquets sont bloqués sans notification à l' | + | |
- | set block-policy drop | + | |
- | # ce qui circule | + | |
- | set skip on lo0 | + | |
- | + | ||
- | # politique par défaut : tout bloquer en le consignant | + | |
- | block log all | + | |
- | + | ||
- | # blocage des indésirables | + | |
- | block quick from < | + | |
- | + | ||
- | # autoriser le SSH entrant (restreindre les adresses si possible) | + | |
- | pass in log on $ext_if proto tcp from any to $ext_if port ssh | + | |
- | # spécificité OVH : accepter les requêtes de ping (remplacer les X par le réseau de votre serveur) (et ses réponses - "keep state" est implicite) | + | |
- | pass in on $ext_if proto icmp from X.X.X.250 to $ext_if icmp-type echoreq code 0 | + | |
- | # autoriser le DNS sortant (et ses réponses) | + | |
- | pass out on $ext_if proto { tcp udp } from $ext_if to <dns> port domain | + | |
- | # autoriser les requêtes HTTP sortantes et leurs retours | + | |
- | pass out proto tcp to any port { http https } # user root | + | |
- | # TODO : FTP | + | |
- | </ | + | |
- | + | ||
- | Pour rendre PF opérationnel, | + | |
- | < | + | |
- | kldload pf | + | |
- | kldload pflog | + | |
- | # Pour ne pas avoir à le faire quand la machine (re)démarre | + | |
- | echo '# Packet Filter' | + | |
- | echo ' | + | |
- | echo ' | + | |
- | </ | + | |
- | + | ||
- | Avant de charger ses règles, toujours les vérifier par la commande : | + | |
- | < | + | |
- | + | ||
- | Enfin, charger ses règles car jusqu' | + | |
- | < | + | |
- | service pf start | + | |
- | # Pour que ce soit automatiques aux prochains démarrages | + | |
- | echo '# Packet Filter' | + | |
- | echo ' | + | |
- | echo ' | + | |
- | + | ||
- | ====== Ménage et mise à jour des programmes tiers ====== | + | |
- | + | ||
- | Si des paquets sont déjà installés, les supprimer. Certains sont carrément inutiles et d' | + | |
- | < | + | |
- | Puis tous les supprimer : | + | |
- | < | + | |
- | + | ||
- | Installer ensuite les ports : | + | |
- | < | + | |
- | + | ||
- | Puis, tant qu'à faire, commencer par basculer sur pkgng, le futur remplaçant des utilitaires pkg_* : | + | |
- | < | + | |
- | make config | + | |
- | make config-recursive | + | |
- | make install clean | + | |
- | pkg2ng | + | |
- | echo " | + | |
- | + | ||
- | Dans le même temps, (ré)installer screen, ça peut toujours être utile, pour ne pas perdre ce qui est en cours : | + | |
- | < | + | |
- | make config-recursive | + | |
- | make install clean</ | + | |
- | + | ||
- | ====== Que faire à présent ? ====== | + | |
- | + | ||
- | * mettre à jour votre système (méthode | + | |
- | * tuner votre système (/ | + | |
- | * installer les différents logiciels pour mettre à disposition les services désirés via les ports. Prendre le temps de les tester et configurer correctement **avant** de les rendre accessible | + | |
- | * configurer la rotation des journaux (/ | + | |
- | * mettre en place différents moyens de sauvegarde | + | |
- | * etc | + | |
- | + | ||
- | ====== Mail (opensmtpd) ====== | + | |
- | + | ||
- | ===== Installation ===== | + | |
- | + | ||
- | Par les logiciels portés : | + | |
- | < | + | |
- | make install clean</ | + | |
- | + | ||
- | ===== Envoi de mails ===== | + | |
- | + | ||
- | Créer le fichier de configuration d' | + | |
- | < | + | |
- | + | ||
- | table aliases db:/ | + | |
- | + | ||
- | accept from local for local alias < | + | |
- | accept from local for any relay</ | + | |
- | + | ||
- | Faire reconnaître les alias à opensmtpd sinon cron, notamment, va vainement tenter d' | + | |
- | < | + | |
- | newaliases</ | + | |
- | + | ||
- | A présent, désactiver sendmail, si ce n'est pas déjà fait au profit d' | + | |
- | < | + | |
- | # et | + | |
- | echo ' | + | |
- | # ou | + | |
- | echo ' | + | |
- | echo ' | + | |
- | echo ' | + | |
- | echo ' | + | |
- | + | ||
- | Démarrer manuellement opensmtpd pour cette fois : | + | |
- | < | + | |
- | + | ||
- | Ajouter une règle au pare-feu (/ | + | |
- | < | + | |
- | pass out on $ext_if proto tcp from $ext_if to any port { smtp smtps }</ | + | |
- | + | ||
- | Puis charger votre nouvelle configuration : | + | |
- | < | + | |
- | + | ||
- | Enfin, tester le bon fonctionnement de l' | + | |
- | < | + | |
- | + | ||
- | Si tout se passe bien, vous devriez recevoir un mail qui sera certainement reconnu comme un spam (pour le moment) | + | |
- | + | ||
- | ==== Rendre ses mails envoyés légitimes ==== | + | |
- | + | ||
- | === SPF === | + | |
- | + | ||
- | Il s'agit là d' | + | |
- | + | ||
- | Par exemple, avec la valeur '' | + | |
- | + | ||
- | Note : le prestataire qui a en charge la gestion de votre domaine vous propose éventuellement une interface pour facilement réaliser cette tâche (OVH, par exemple, vous propose directement d' | + | |
- | + | ||
- | === DKIM === | + | |
- | + | ||
- | Installons tout d' | + | |
- | < | + | |
- | make install clean</ | + | |
- | + | ||
- | Puis configurons-le pour chiffrer les mails sortants (uniquement) au travers du fichier / | + | |
- | < | + | |
- | relay | + | |
- | + | ||
- | domain | + | |
- | signature dkim(c=relaxed) | + | |
- | signature domainkeys(c=nofws) | + | |
- | keyfile | + | |
- | selector | + | |
- | min_servers 1 | + | |
- | min_spare_servers 1</ | + | |
- | + | ||
- | Générer les clés publique & privée par ses commandes : | + | |
- | < | + | |
- | openssl genrsa -out dkimproxy.private.key 1024 | + | |
- | openssl rsa -in dkimproxy.private.key -out dkimproxy.public.key -pubout -outform PEM | + | |
- | chmod 0600 *.key | + | |
- | chown dkimproxy *.key</ | + | |
- | + | ||
- | Démarrer le service dkimproxy_out : | + | |
- | < | + | |
- | service dkimproxy_out start | + | |
- | # Pour qu'il soit démarré tout seul aux (re)démarrages | + | |
- | echo ' | + | |
- | + | ||
- | Ajouter un nouveau champ TXT nommé " | + | |
- | < | + | |
- | + | ||
- | Enfin, il est nécessaire d' | + | |
- | * après la ligne '' | + | |
- | * remplacer la ligne '' | + | |
- | accept from local for any relay via smtp:// | + | |
- | La première envoie réellement les mails après chiffrage quand la seconde les fait d' | + | |
- | + | ||
- | Recharger sa configuration pour qu' | + | |
- | + | ||
- | A présent (et après avoir attendu un certain laps de temps par rapport à la propagation des DNS), si l'on retente d' | + | |
- | + | ||
- | ===== Réception de mails ===== | + | |
- | + | ||
- | TODO | + | |
- | + | ||
- | ===== Manipuler la queue ===== | + | |
- | + | ||
- | * Lire un message en queue : < | + | |
- | * Vider la queue : < | + | |
- | + | ||
- | ====== Perte de l' | + | |
- | + | ||
- | Pas de panique, chez OVH, tant que le problème n'est pas physique, il est normalement possible de récupérer un système. Via l' | + | |
- | * prochain démarrage sur le réseau : services > netboot > sélectionner rescue-pro | + | |
- | * redémarrage hardware : services > rebooter | + | |
- | * accéder à la machine via les paramètres qui vous sont envoyés par mail et tenter de corriger le problème :< | + | |
- | mount -t ufs / | + | |
- | chroot /mnt /bin/tcsh | + | |
- | + | ||
- | # rectifier l' | + | |
- | + | ||
- | exit # quitter le chroot | + | |
- | umount / | + | |
- | * prochain démarrage sur disque dur et non plus réseau (dans votre interface client) : services > netboot > sélectionner hd | + | |
- | * redémarrage software (reboot ou shutdown -r now) en ssh | + | |
- | + | ||
- | ====== Sauvegarde chiffrée de fichiers sur FTP ====== | + | |
- | + | ||
- | Avant toute chose, nous devons générer nos certificat/ | + | |
- | < | + | |
- | chmod 0600 *.key</ | + | |
- | A réaliser sur votre propre machine (ici, nous supposerons que les deux clés sont situées dans nos répertoires personnels). | + | |
- | + | ||
- | La commande pour chiffrer est : | + | |
- | < | + | |
- | + | ||
- | La commande pour déchiffrer, | + | |
- | < | + | |
- | Ajouter une option '' | + | |
- | + | ||
- | Sur votre serveur : | + | |
- | * uploader la clé publique (fichier dump.public.key) sur votre serveur | + | |
- | * créer ou modifier le fichier ~/.netrc de votre utilisateur système pour les sauvegardes tel que : | + | |
- | < | + | |
- | login votre_login | + | |
- | password votre_mot_de_passe | + | |
- | + | ||
- | macdef uploaddump | + | |
- | cd / | + | |
- | bin | + | |
- | put $1 | + | |
- | quit | + | |
- | # laissez impérativement une ligne vide en fin de ce fichier | + | |
- | </ | + | |
- | Assurez-vous que ce fichier ne soit lisible que de vous seul (chmod 0600 ~/.netrc). La partie machine permet d' | + | |
- | + | ||
- | Regroupons à présent tous les éléments pour en faire un script (qui peut être exécuté via cron) : | + | |
- | < | + | |
- | + | ||
- | FILENAME=" | + | |
- | SAFE_FILENAME=" | + | |
- | + | ||
- | # Sauvegarde de notre base de données | + | |
- | mysqldump ... > $FILENAME | + | |
- | + | ||
- | # Chiffre le fichier | + | |
- | openssl smime -encrypt -binary -aes256 -in $FILENAME -out $SAFE_FILENAME -outform DER ~/ | + | |
- | + | ||
- | # Upload du fichier chiffré | + | |
- | echo "\$ uploaddump ${SAFE_FILENAME}" | + | |
- | </ | + | |
- | + | ||
- | Attention : je donne cette solution pour des circonstances précises, ceux qui n'ont pas véritablement le choix parce qu'il y a bien plus simple et sûr en passant par des protocoles comme scp par exemple. | + | |
- | + | ||
- | ====== IPv6 ====== | + | |
- | + | ||
- | IPv6 est parfaitement fonctionnel. Pour en garder une trace, voici mes propres " | + | |
- | + | ||
- | * la passerelle par défaut, bien que mise en place pour être statique via / | + | |
- | * par rapport au pare-feu, il faut au moins laisser passer les packets ICMP de type neighbor solicitation ('' | + | |
- | * PF a quelques " | + | |
- | * modulate state est incompatible avec IPv6 | + | |
- | * scrub, comme mentionné dans man 5 pf.conf, a pour effet de bloquer les paquets IPv6 | + | |
- | + | ||
- | Dans la mesure où la passerelle par défaut est connue, il n'est pas nécessaire de compter sur une autoconfiguration de celle-ci via les router advertisement/ | + | |