Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[iptables] votre avis -> securité + améliorations

13 réponses
Avatar
omnikron
Bonjour/soir à tous :o)

J'aimerai vous soumettre un script netfilter de firewalling + nat que j'aimis en place sur ma passerelle. Je me suis pour cela inspiré de divers doc trouvés sur le net et en particulier de l'article de lealinux. J'aimerai avoir l'avis des personne maitrisant le sujet... surtout en ce qui concerne les états de connections RELATED et ESTABLISHED, car j'ai peur d'avoir fait l'erreur de toujours les mettre dans le meme panier. En fait, c'est surtout au niveau du serveur ftp que je m'interroge.

Mon lan est sur le reseaux 192.168.1.0/24 et mon acces internet se trouve sur 192.168.1.1 par eth1. J'ai un serveur ftp sur la gateway qui est ouvert au public et j'ai un serveur ssh sur ma machine 192.168.1.11 que j'atteint en forwardant le port 6022 vers le 22 (de ma machine perso donc - cad 192.168.1.11).

Pourriez vous me conseiller en particulier en ce qui conserne les state of connection de mes differentes regles ? De plus, j'aimerai utiliser d'autres ports pour mon ftp (qui est je rappel sur le firewall/passerelle), or, je m'attends a pas mal de problemes... je voudrai utiliser les ports 6020 et 6021, en fesant en sorte que l'actif et le passif soient ok tous les deux. Je precise que ce n'est pas mon principal objectif (pour le ftp) mais pour info j'aimerai avoir vos commentaires la dessus.

D'avance merci,
Julien.


// begin of the script
#!/bin/sh


#
# Begin of variables definitions
#

IPTABLES=/sbin/iptables
EXTERNAL_IF="eth1"
INTERNAL_IF="eth0"

#
# End of variables definitions
#




#
# Begin of functions definitions
#

start() {
echo "Starting Netfilter/Iptables"

echo 0 > /proc/sys/net/ipv4/ip_forward

$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP

# chain log and drop for dropped packets
$IPTABLES -N LOG_DROP
$IPTABLES -A LOG_DROP -j LOG --log-prefix "[IPT DROP] : "
$IPTABLES -A LOG_DROP -j DROP

# chain log and accept for accepted packets (in)
$IPTABLES -N LOG_ACCEPT
$IPTABLES -A LOG_ACCEPT -j LOG --log-prefix "[IPT ACCEPT] : "
$IPTABLES -A LOG_ACCEPT -j ACCEPT

# chain log and accept for accepted packets (out)
#$IPTABLES -N LOG_ACCEPT_OUT
#$IPTABLES -A LOG_ACCEPT_OUT -j LOG --log-prefix "[IPT ACCEPT OUT] : "
#$IPTABLES -A LOG_ACCEPT_OUT -j ACCEPT


# all accepted on lo
$IPTABLES -A INPUT -i lo -s 127.0.0.0/8 -d 127.0.0.0/8 -j ACCEPT
$IPTABLES -A OUTPUT -o lo -s 127.0.0.0/8 -d 127.0.0.0/8 -j ACCEPT

# all accepted on eth0
$IPTABLES -A INPUT -i $INTERNAL_IF -s 192.168.1.0/24 -d 192.168.1.0/24 -j ACCEPT
$IPTABLES -A OUTPUT -o $INTERNAL_IF -s 192.168.1.0/24 -d 192.168.1.0/24 -j ACCEPT


# lan have access to all on internet
$IPTABLES -A FORWARD -i $INTERNAL_IF -o $EXTERNAL_IF -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -i $EXTERNAL_IF -o $INTERNAL_IF -m state --state ESTABLISHED,RELATED -j ACCEPT


# gateway have access to dns (port 53)
$IPTABLES -A INPUT -p udp --sport 53 -i $EXTERNAL_IF -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -p udp --dport 53 -o $EXTERNAL_IF -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p tcp --sport 53 -i $EXTERNAL_IF -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 53 -o $EXTERNAL_IF -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# gateway have access to dhcp (port 67)
$IPTABLES -A INPUT -p udp --sport 67 -i $EXTERNAL_IF -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -p udp --dport 67 -o $EXTERNAL_IF -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p tcp --sport 67 -i $EXTERNAL_IF -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 67 -o $EXTERNAL_IF -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# gateway have access to ntp (port 123)
$IPTABLES -A INPUT -p udp --sport 123 -i $EXTERNAL_IF -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -p udp --dport 123 -o $EXTERNAL_IF -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p tcp --sport 123 -i $EXTERNAL_IF -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 123 -o $EXTERNAL_IF -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# gateway have access to web
$IPTABLES -A INPUT -p tcp --sport 80 -i $EXTERNAL_IF -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 80 -o $EXTERNAL_IF -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p tcp --sport 443 -i $EXTERNAL_IF -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 443 -o $EXTERNAL_IF -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# gateway have access to ftp
$IPTABLES -A INPUT -p tcp --sport 21 -i $EXTERNAL_IF -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 21 -o $EXTERNAL_IF -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p tcp --sport 20 -i $EXTERNAL_IF -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 20 -o $EXTERNAL_IF -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT


# ftp the gateway from internet (server)
$IPTABLES -A INPUT -p tcp -i $EXTERNAL_IF --dport 21 -m state --state NEW -j LOG_ACCEPT
$IPTABLES -A INPUT -p tcp -i $EXTERNAL_IF --dport 21 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p tcp -i $EXTERNAL_IF --dport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -p tcp -o $EXTERNAL_IF --sport 21 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -p tcp -o $EXTERNAL_IF --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -i $EXTERNAL_IF -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -o $EXTERNAL_IF -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT

# ssh the gateway from internet (server)
#$IPTABLES -A INPUT -p tcp -i $EXTERNAL_IF --dport 22 -m state --state NEW -j LOG_ACCEPT
#$IPTABLES -A INPUT -p tcp -i $EXTERNAL_IF --dport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT
#$IPTABLES -A OUTPUT -p tcp -o $EXTERNAL_IF --sport 22 -j ACCEPT

# ssh atlantis (forwarding to server)
$IPTABLES -A FORWARD -i $EXTERNAL_IF -o $INTERNAL_IF -p tcp --dport 22 -m state --state NEW -j LOG_ACCEPT
$IPTABLES -t nat -A PREROUTING -i $EXTERNAL_IF -p tcp --dport 6022 -j DNAT --to-destination 192.168.1.11:22


# no spoofing
for i in /proc/sys/net/ipv4/conf/*/rp_filter
do
echo 1 > $i
done

# icmp / ping
$IPTABLES -A OUTPUT -p icmp -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -p icmp -m state --state RELATED,ESTABLISHED -m limit --limit 10/min -j ACCEPT
$IPTABLES -A INPUT -p icmp -m state --state NEW -m limit --limit 10/min -j ACCEPT


# log dropped packets
$IPTABLES -A INPUT -i $EXTERNAL_IF -p tcp -j LOG_DROP
$IPTABLES -A INPUT -i $EXTERNAL_IF -p udp -j LOG_DROP


# masquerade of the lan
$IPTABLES -A POSTROUTING -t nat -o $EXTERNAL_IF -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward

echo "."
}

stop() {
echo "Stopping Netfilter/Iptables"

$IPTABLES -P INPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT

$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT

$IPTABLES -F
$IPTABLES -t nat -F

$IPTABLES -X
$IPTABLES -t nat -X

echo 0 > /proc/sys/net/ipv4/ip_forward

echo "."
}

#
# End of functions definitions
#





case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
$IPTABLES -L
$IPTABLES -t nat -L
;;
*)
echo "Usage: firewall {start|stop|restart|status}"
esac

exit
//end of the script



PS : Le 123 est ouvert car mon modem (une freebox) balance l'ip par dhcp sur eth1. A ce sujet, pourriez vous m'indiquer si je suis obligé d'ouvrir a chaque fois le port en tcp+udp ? De meme, qu'en est il pour les requetes dns et les requetes ntp ?

3 réponses

1 2
Avatar
Julien Salgado
Bertrand Masius a écrit :
Nota sur les RELATED : ça ne sert qu'au connection ftp en mode actif et
aux icmp d'erreurs, en configuration de base.


Bonsoir,

Ça sert aussi pour le mode passif de FTP.... et puis avec les bons
modules à pas mal de service.

--
Julien

Avatar
omnikron
On 15 Sep 2003 18:25:57 GMT
Julien Salgado wrote:

[...]

Bonsoir,

Sincerement merci pour toutes ces explications... J'ai du boulot !!
Je reposte des que le truc me semble a peu pres potable.

Julien
Avatar
omnikron
On Mon, 15 Sep 2003 19:19:15 +0200
Bertrand Masius wrote:

Il faut charger le module ip_conntrack_ftp et ip_nat_ftp


Re-salut,

Pas de pbl de ce coté là, j'ai tout ca dans mon noyau... C'est une vielle machine dont l'usage est seulement de faire ca, donc j'ai mis en dur dans le noyau tout ce qui concerne le reseau, le qos et netfilter ? A ce propos est ce légitime ou vaut il mieux avoir en regle egnerale plutot des modules ? Ce qui est plus souple, j'en conviens !

Julien

1 2