Bonjour,
J’aurais besoin de vos expertise concernant les script IPTables que je compte mettre en place sur mon serveur perso. Il s’agit d’un Guruplug en stable avec quelques service (FTP, IMAP, POP, SMTP, HTTP, UPS & SSH)
Pour le script de lancement au démarrage je me suis inspiré par le poste qui se trouve das T&A
[code]#! /bin/sh
BEGIN INIT INFO
Provides: iptables
Required-Start: $remote_fs $syslog
Required-Stop: $remote_fs $syslog
X-Start-Before: $network
X-Stop-After: $network
Default-Start: 2 3 4 5
Default-Stop: 0 1 6
Short-Description: IPTables
Description: FireWall / PareFeu. Chargement/Déchargement des règles d’iptables
END INIT INFO
Do NOT “set -e”
PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC=“IPTables rules”
NAME=iptables
DAEMON=/sbin/$NAME
SCRIPTNAME=/etc/init.d/$NAME
SAVEFILE=/etc/save-$NAME
RULES_FILE=/etc/default/rules-$NAME
Exit if the package is not installed
[ -x “$DAEMON” ] || exit 0
Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh
Define LSB log_* functions.
Depend on lsb-base (>= 3.2-14) to ensure that this file is present
and status_of_proc is working.
. /lib/lsb/init-functions
Function that starts the daemon/service
do_start()
{
# Vérification de l’existance d’une sauvegarde
if [ -r $SAVEFILE ] ; then
$DAEMON-restore < $SAVEFILE
RETVAL=$?
else # Sinon lecture des règles par défaut
if [ -r $RULESFILE ] ; then
. /etc/default/$RULESFILE
RETVAL=$?
else # Sinon retour en erreur
RETVAL=1
fi
fi
return “$RETVAL”
}
Sauvegarde des règles en vue de l’extinction
do_stop()
{
$DAEMON-save > $SAVEFILE
RETVAL=$?
return “$RETVAL”
}
Nettoyage de toutes les règles
do_clean() {
# clean le parefeu pendant que la machine tourne
# ça peut être une faille de sécurite si on l’exécute lors de l’extinction avant l’arrêt des interfaces
# pensez à refaire un start après sinon la sauvegarde se fera automatiquement à l’extinction
$DAEMON -t filter -F
$DAEMON -t nat -F
$DAEMON -t mangle -F
$DAEMON -t raw -F
$DAEMON -t filter -P INPUT ACCEPT
$DAEMON -t filter -P OUTPUT ACCEPT
$DAEMON -t filter -P FORWARD ACCEPT
$DAEMON -t nat -P PREROUTING ACCEPT
$DAEMON -t nat -P POSTROUTING ACCEPT
$DAEMON -t nat -P OUTPUT ACCEPT
$DAEMON -t mangle -P PREROUTING ACCEPT
$DAEMON -t mangle -P OUTPUT ACCEPT
$DAEMON -t mangle -P POSTROUTING ACCEPT
$DAEMON -t mangle -P FORWARD ACCEPT
$DAEMON -t mangle -P INPUT ACCEPT
$DAEMON -t raw -P OUTPUT ACCEPT
$DAEMON -t raw -P PREROUTING ACCEPT
RETVAL=$?
return “$RETVAL”
}
case “$1” in
start)
[ “$VERBOSE” != no ] && log_daemon_msg “Starting $DESC” “$NAME”
do_start
case “$?” in
0|1) [ “$VERBOSE” != no ] && log_end_msg 0 ;;
2) [ “$VERBOSE” != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ “$VERBOSE” != no ] && log_daemon_msg “Stopping $DESC” “$NAME”
do_stop
case “$?” in
0|1) [ “$VERBOSE” != no ] && log_end_msg 0 ;;
2) [ “$VERBOSE” != no ] && log_end_msg 1 ;;
esac
;;
restart)
log_daemon_msg “Restarting $DESC” “$NAME”
do_stop
case “$?” in
0|1)
do_start
case “$?” in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
echo “Usage: $SCRIPTNAME {start|stop|restart}” >&2
exit 3
;;
esac
:[/code]
Ensuite pour les règles j’ai aussi récupérer celle de ce poste
[code]# Règles de base ##############################################################
Interdire tout
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
iptables -t filter -P FORWARD DROP
Authorisation global#########################################################
Conserver les connections
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
ping
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT
Authorisation au cas par cas
FTP
iptables -t filter -A OUTPUT -p tcp --dport 20 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 20 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 21 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 21 -j ACCEPT
SSH
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT
SMTP
#iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT
#iptables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
#DNS
iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
#iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
#iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT
HTTP
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
POP3
iptables -t filter -A OUTPUT -p tcp --dport 110 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 110 -j ACCEPT
NTP
iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT
IMAP
iptables -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 143 -j ACCEPT
HTTPS
iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
Samba
#iptables -t filter -A OUTPUT -p tcp --dport 445 -j ACCEPT
#iptables -t filter -A INPUT -p tcp --dport 445 -j ACCEPT
SMTP SSL (SMTPS)
iptables -t filter -A OUTPUT -p tcp --dport 465 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 465 -j ACCEPT
SMTP (avec authentification)
iptables -t filter -A OUTPUT -p tcp --dport 587 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 587 -j ACCEPT
FTP SSL implicite (FTPS)
#iptables -t filter -A OUTPUT -p tcp --dport 989 -j ACCEPT
#iptables -t filter -A INPUT -p tcp --dport 989 -j ACCEPT
#iptables -t filter -A OUTPUT -p udp --dport 989 -j ACCEPT
#iptables -t filter -A INPUT -p udp --dport 989 -j ACCEPT
#iptables -t filter -A OUTPUT -p tcp --dport 990 -j ACCEPT
#iptables -t filter -A INPUT -p tcp --dport 990 -j ACCEPT
#iptables -t filter -A OUTPUT -p udp --dport 990 -j ACCEPT
#iptables -t filter -A INPUT -p udp --dport 990 -j ACCEPT
IMAP SSL (IMAPS)
iptables -t filter -A OUTPUT -p tcp --dport 993 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 993 -j ACCEPT
POP3 SSL (PO3S)
iptables -t filter -A OUTPUT -p tcp --dport 995 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 995 -j ACCEPT
FTP passif
iptables -t filter -A OUTPUT -p tcp --sport 3000:3100 -j ACCEPT
UPS
iptables -t filter -A OUTPUT -p tcp --dport 3493 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 3493 -j ACCEPT
Bittorent
iptables -t filter -A OUTPUT -p tcp --sport 6880:6999 -j ACCEPT
Règles particulière avec OpenDPI
iptables -t nat -A PREROUTING -m opendpi -ssh -p tcp –dport 443 -j DNAT –to-dest :22 [/code]
La dernière règle utilise OpenDPI qui devrais me permettre de me passer de SSLH. Le but étant de rediriger les connections SSH en 443 vers le port 22.
Voilà, toutes les remarques sont les bienvenus ![]()