Quand Trinity hacke, elle utilise nmap
Je découvre de plus en plus la puissance de ce petit outil... Même Trinity l'utilise, c'est dire !

Je découvre de plus en plus la puissance de ce petit outil... Même Trinity l'utilise, c'est dire !

[Edit] : une grossière erreur empêchait ce script de fonctionner (INPUT bloqué même pour les connexions déjà établies, et OUTPUT trop peu permissif).
Je vous ait expliqué dans mon post précédent comment installer un serveur web sécurisé sous Debian. Voici maintenant comment le sécuriser un minimum : un script de firewall. Il n'a absolument rien de transcendant : il permet juste de fermer tous les ports, sauf les ports HTTP (80) et SSH (22), plus une mention spéciale pour le NTP.
Vérifiez tout d'abord qu'iptables est bien installé : apt-get install iptables.
Voici le script /etc/firewall.sh commenté pas-à-pas :
#!/bin/sh
Indique avec quel programme le script doit être interprété.
# Règles par défaut iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT
On rejette par défaut ce qui arrive (INPUT) et ce qui ne fait que traverser (FORWARD), mais on accepte ce qui sort (OUTPUT).
# On accepte les connexions boucle locale (sur lo) iptables -A INPUT -i lo -j ACCEPT iptables -A FORWARD -i lo -j ACCEPT iptables -A FORWARD -o lo -j ACCEPT
Cela permet des tests sur les adresses localhost (127.0.0.1 et ::1).
# On accepte les connexions depuis le LAN iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT iptables -A FORWARD -d 192.168.0.0/24 -j ACCEPT
On accepte tout sur le LAN (les machines du réseau local, qui sont sûres dans mon cas).
# On accepte les connexions HTTP et SSH dans les deux sens iptables -A INPUT -i eth0 -p tcp --sport www -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -i eth0 -p tcp --sport ssh -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
On veut pouvoir se connecter à notre serveur web de l'extérieur, et naviguer depuis notre serveur (en fait, certains scripts en ont besoin) ! On autorise donc les connexions entrantes nouvelles (NEW), déjà établies (ESTABLISHED) ou en relation (RELATED). Comme HTTP possède un port bien défini (80), il est présent dans la liste des ports de /etc/services : on peut donc l'indiquer comme --sport (port source) ou -dport (port de destination) en indiquant son nom dans le fichier /etc/services : www.
Il en va de même pour SSH. SSH est aussi présent dans /etc/services.
# On autorise le ping iptables -A OUTPUT -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -p icmp -m limit --limit 2/s -j ACCEPT
On autorise enfin le ping, mais avec modération : pas plus de 2 pings par seconde (-- limit 2/s).
# On autorise les connexions TCP et UDP déjà établies à entrer iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -p udp -m state --state ESTABLISHED,RELATED -j ACCEPT
Et on n'oublie pas qu'une connexion est dans les deux sens !
Voilà donc un script de lancement de firewall ! On peut également créer un script d'init pour notre firewall :
#!/bin/sh
stop() {
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
}
case $1 in
"start")
/etc/firewall.sh
;;
"stop")
stop
;;
"restart")
stop
/etc/firewall.sh
;;
esac
La fonction stop() arrête le firewall en flushant (vidant) les règles d'INPUT, OUTPUT et FORWARD. On redéfinit les stratégies par défaut à ACCEPT (on accepte tout). L'instruction case permet ensuite de savoir si l'utilisateur veut qu'on lance (start), arrête (stop) ou redémarre (restart) le firewall. Dans le premier cas, on appelle notre script de lancement de firewall que l'on a précédemment créé. Dans le second, on appelle la fonction stop(), et dans le troisième, on combine les deux et dans le bon ordre ! $1 désigne le premier argument passé au script, on lance donc notre firewall en tapant /etc/init.d/firewall start... Vous en déduisez comment on l'arrête ou le redémarre. N'oubliez pas d'ajouter ce script à ceux qui démarrent au lancement de la machine : update-rc.d firewall defaults.
Et voilà ! Pour plus d'informations sur les iptables, outil décidément très puissant, consultez l'article de Léa Linux "Mur de feu pas-à-pas" ou "iptables par l'exemple", beaucoup plus complet.
On va installer Debian de la manière la plus simple : en un seul CD-Rom d'une centaine de Mo, et bootable. Il nous faut donc les ISO de la Net Install (version officielle, c'est plus pratique). Il nous faudra, puisqu'on choisit l'installation par Internet, un lecteur de CD-Rom bootable et une carte réseau en état de marche reliée à un réseau (lui-même relié à Internet sans contrôle d'accès type Novell ou Netware ou équivalent) comportant un serveur DHCP (les modems/routeurs remplissent souvent ce rôle).
Côté logiciels, ils nous faudra un serveur web et un serveur SSH.
Les dernières versions de la Net Install prennent en charge elles-mêmes le matériel pour peu que la configuration ne soit pas trop exotique, elle est détectée automatiquement, et les pilotes appropriés sont installés.
Les écrans successifs qui apparaissent après le (re)boot de la machine sur le CD-Rom (pour commencer l'installation) vous informent de l'avancée de l'installation, et vous demandent des renseignements basiques, comme la disposition du clavier. La partie la plus importante est le formatage. Allez au plus simple : une partition pour tout (à la rigueur une pour / et une pour /var). Si vous vous contentez de l'installation minimale décrite ici, 500 Mo suffiront bien pour /. Voyez en fonction de la place disponible, et n'oubliez pas la SWAP. Il est conseillé, pour un serveur (pour une station de travail aussi, d'ailleurs), d'utiliser un système de fichiers "journalisé", de type ext3.
Arrive enfin le reboot. Après celui-ci, l'installation se termine en vous demandant un mot de passe root, un nom d'utilisateur (et son mot de passe), le fuseau horaire, etc. C'est fait ! Vous avez un système Debian qui marche ! Fuyez après cette installation les programmes du style aptitude ou je-sais-plus-quoi, qui vous amènent plus de logiciels que vous n'en voulez.
On va utiliser ici la puissance de apt-get. Vous pouvez auparavant modifier les sources utilisées en modifiant /etc/apt/sources.list. Utilisez stable ou unstable (ou bien laissez testing).
On va donc commencer par installer un serveur SSH. Tapez en tant que root apt-get update. Une fois les téléchargements terminés, tapez apt-get install ssh. Lors de l'installation, le programme va vous poser des questions : répondez oui à SSH2, et gardez généralement les options par défaut. Testez la connexion à partir d'un autre poste en utilisant SSH (sous Linux) ou Putty (sous Windows).
Vous pouvez réaliser la suite des opérations sans écran, directement par SSH.
Vient ensuite le serveur web. Vu la faiblesse de ma configuration (48 Mo de RAM, 2 Go de disque dur), et mes besoins réduits - et, je l'avoue, ma fainéantise d'avoir à configurer quelque chose de la taille d'Apache - j'ai choisi de ne pas utiliser ce dernier, mais thttpd, qui sert très bien les pages (X)HTML et le reste (images, etc), et peut utiliser l'architecture CGI 1.1. Faites apt-get install thttpd. Une fois le téléchargement terminé ("oui" au chroot()), créez un nouvel utilisateur "thttpd" (useradd thttpd). Créez-lui un répertoire : mkdir /home/thttpd && chown thttpd /home/thttpd. Créez-y un fichier de config qui contiendra quelque chose come (man thttpd pour plus de détails) :
dir=/www chroot user=thttpd logfile=/home/thttpd/log pidfile=/home/thttpd/pid charset=utf-8
Créez ensuite un fichier vide de pid dans ce même dossier (/home/thttpd). Modifiez le script d'init /etc/init.d/thttpd pour qu'il puisse démarrer sur cette configuration. Repérez la ligne qui commence par CONFFILE, et modifiez-la en :
CONFFILE=/home/thttpd/config
Pareil pour la ligne commençant par PIDFILE :
PIDFILE=/home/thttpd/pid
Ajoutez ensuite ce script aux scripts exécutés au boot : update-rc.d thttpd defaults.
Et voilà ! un serveur web (HTTP) et un serveur SSH (pour l'admin) en état de marche !
Le plus simple pour transférer des fichiers sur le serveur est d'utiliser sftp (FTP over SSH). Sous Linux, en mode console (pratique pour automatiser !), vous pouvez utiliser sftp pour accéder à votre serveur pour peu que vous ayez installé SSH sur la machine cliente ; ou bien lftp (en tapant lftp fish://utilisateur@ip). Sous Windows, utilisez le client FTP libre FileZilla, qui possède un mode SFTP.
[Suite] : le firewall
Merci aux geeks de #tavernedulibre (quelles idioties je n'aurais pas écrites s'ils n'avaient été là
)