Firewall IPTABLES pour sécuriser une LENNY

Bonjour à tous,

j’ai installé récemment un serveur sous Lenny, il est en IP publique, donc exposé aux attaques.
Seul quelques services tournent sur la machine : HTTPS, SSH, Munin, NRPE

Le serveur est accessible à distance via SSH et HTTPS uniquement, les ports NRPE et Munin sont attaqués sur un deuxième réseau (local) par un autre serveur.

Je me suis inspiré du site http://www.alsacreations.com/tuto/lire/622-Securite-firewall-iptables.html pour écrire faire un firewall iptables permettant de sécuriser un peu mieux la machine, voila mon résultat :

[code]#!/bin/sh

Vider les tables actuelles

iptables -t filter -F

Interdire toute connexion entrante et sortante

iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP

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

Autoriser loopback

iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT

ICMP (Ping)

iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT

SSH In/Out

iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT

DNS Out

iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT

NTP Out

iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT

HTTPS In/Out

iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT

Mail SMTP:25 Out

iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT

Munin

iptables -t filter -A INPUT -s 10.0.0.17 -p tcp --dport 4949 -j ACCEPT

Nagios/NRPE

iptables -t filter -A INPUT -s 10.0.0.17 -p tcp --dport 5666 -j ACCEPT

exit[/code]

Pouvez vous me donner quelques conseils : est-ce correct ? Des choses à optimiser ?

Merci d’avance,

Bonne journée,

salut,

c’est pas mal, je te mets ci dessous un exemple de script que j’utilise pour configurer mes serveurs. Ce script, tu peux le mettre dans init.d et l’ajouter avec update-rc.d aux process qui se lancent au demarrage. Il permet aussi d’arréter le script, de relancer une partie ou tout le script en passant des paramètres. Il n’est peut être pas tout à fait fonctionnel car j’ai dut retirer des données un peux sensibles. Aucune interface réseau n’y est définie car il n’y en a qu’une sur le serveur en question.

J’espère que ce script te donnera des idées. :slightly_smiling: Je précise, je ne suis pas un pro d’iptables, donc sivous avez des idées, des commentaires, n’hésitez pas et faites vous plaisir, j’adore les critiques constructives :slightly_smiling: on peut toujours s’améliorer :slightly_smiling:

[code]#!/bin/bash

############################## declaration des variables ######

#interface de $IFLOopback
IFLO=“lo”

fonctions a executer pour le parametre start

#DEFAULTRULES="FWD NatIt INPT OUPT"
DEFAULTRULES=“INPT OUPT”

############################## Debut Initialisation ######
function DefaultPolicy()
{
# Strategie par defaut ( c’est ce q’on fait pour stopper le firewall )
echo -n "Application de la strategie par defaut: … "

# Vider les tables actuelles
iptables -F
iptables -F -t nat
iptables -X

#definition des polices par defaut
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

# Autoriser loopback
iptables -A INPUT -i $IFLO -j ACCEPT

echo "Done !" 

}

############################## Autorisation entrante sur le relais ######
function INPT()
{
echo -n "Application des regles pour les connections entrantes: … "

#definition des polices par defaut
iptables -P INPUT DROP

# Autorise entree icmp
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT


# Autorise entree SSH
iptables -A INPUT -p tcp --dport ssh -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp --sport ssh -m state --state ESTABLISHED,RELATED -j ACCEPT

# Autorise entree ntp
iptables -A INPUT -p udp --dport ntp -j ACCEPT
iptables -A OUTPUT -p udp --sport ntp -j ACCEPT

# Autorise entree requete DNS
iptables -A INPUT -p tcp --dport 53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 53 -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -p udp --dport 53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 53 -m state --state ESTABLISHED,RELATED -j ACCEPT


echo "Done !" 

}

############################## Autorisation sortante du relais ######
function OUPT()
{
echo -n "Application des regles pour les connections sortantes : … "

#definition des polices par defaut
iptables -P OUTPUT DROP


#autorise la sortie pour les connexion deja etablies

iptables -A OUTPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

#autorise requetes DNS
iptables -A OUTPUT -p tcp --dport 53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --sport 53 -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A OUTPUT -p udp --dport 53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p udp --sport 53 -m state --state ESTABLISHED,RELATED -j ACCEPT

#autorise mise a jour de l'heure par internet
iptables -A OUTPUT -p tcp --dport ntp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --sport ntp -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A OUTPUT -p udp --dport ntp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p udp --sport ntp -m state --state ESTABLISHED,RELATED -j ACCEPT

#autorise http a sortir
iptables -A OUTPUT -p tcp --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --sport http -m state --state ESTABLISHED,RELATED -j ACCEPT

#autorise https a sortir
iptables -A OUTPUT -p tcp --dport https -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --sport https -m state --state ESTABLISHED,RELATED -j ACCEPT

#autorise ssh a sortir
iptables -A OUTPUT -p tcp --dport ssh -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --sport ssh -m state --state ESTABLISHED,RELATED -j ACCEPT

#autorise sortie SMTP
iptables -A OUTPUT -p tcp --dport 25 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT 
iptables -A INPUT -p tcp --sport 25 -m state --state ESTABLISHED,RELATED -j ACCEPT 

#autorise sortie ntp
iptables -A OUTPUT -p tcp --dport ntp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT 
iptables -A INPUT -p udp --sport ntp -m state --state ESTABLISHED,RELATED -j ACCEPT 

echo "Done !" 

}

############################## Autorisation traverser le relais ######
function FWD()
{
echo -n "Applications des regles pour les paquets a router: … "
#definition des polices par defaut
iptables -P FORWARD DROP

## Accepter les paquets entrant relatifs au connection deja etablies  
#iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
echo "Done !" 

}

function NatIt()
{
echo -n "Applications des regles de tranlation d’addresse: … "

#~ autorisation du forwarding
#~ echo "1" > /proc/sys/net/ipv4/ip_forward

#~ activation du natage
#~ iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 


# Regles entrantes 
# Emule prerouting
#~ $IPTABLES -t nat -A PREROUTING -p tcp -i ppp0 --dport 4662 -j DNAT --to 192.168.0.2:4662
#~ $IPTABLES -t nat -A PREROUTING -p tcp -i ppp0 --dport 6881:6999 -j DNAT --to 192.168.0.2

echo "Done !"

}

############################## log ######

############## Script options init
case $1 in
start|reload)
DefaultPolicy
for i in $DEFAULTRULES
do
$i
done
;;
stop)
DefaultPolicy
echo “Arret du Firewall”
;;
status)
$IPTABLES -L
;;
full-status)
$IPTABLES -L -v
;;
forward)
#rexecuter la strategie par defaut pour cette chaine
$IPTABLES -P FORWARD DROP
$IPTABLES -F FORWARD
# puis relancer la este
FWD
;;
nat)
#rexecuter la strategie par defaut pour cette chaine
$IPTABLES -t nat -F
NatIt
;;
output)
#rexecuter la strategie par defaut pour cette chaine
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -F OUTPUT
OUPT
;;
input)
#rexecuter la strategie par defaut pour cette chaine
$IPTABLES -P INPUT ACCEPT
$PTABLES -F INPUT
INPT
;;
*)
echo "usage $0 start | stop | reload | status | full-status | forward | output | input | nat "
;;
esac

Fin du script

echo “$0 : End of script”[/code]