Iptables ultime

Bonjour
En farfouillant sur le net , j’ai récupérer un bon paquet de regles iptable , que je me suis “amusé” à résumer en un seul script pour obtenir le graal du script de firewalling .
Voila le contexte :
Un serveur debian avec une ip Fixe contenant un depot svn ( port 3690 ) et git ( basé sur ssh ) .
Avec en plus un portsentry et fail2ban .

J’ai testé une majorité de régles , mais je ne suis pas sur de la pertinence de chacune .

#!/bin/bash
# 

# Création de différentes variables.
IPT="/sbin/iptables"
SPAMLIST="blockedip"
SPAMDROPMSG="BLOCKED IP DROP"

# Interface connectée à Internet.
PUB_IF="eth0"
# IP fixe.
IPNET="X.X.X.X"

# Variables des classes privées.
LOOPBACK="127.0.0.0/8"
CLASS_A="10.0.0.0/8"
CLASS_B="172.16.0.0/12"
CLASS_C="192.168.0.0/16"
CLASS_D_MULTICAST="224.0.0.0/4"
CLASS_E_RESERVED_NET="240.0.0.0/5"
BROADCAST="192.168.1.255"



#creation fichier d'ip à bannir .
cd /var/scriptdepot/
route -n | grep "\!H" | awk '{print $1}' > portsentry.txt

$IPT -L | grep DROP > fail2banTmp

grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' fail2banTmp > fail2ban.txt

cat  fail2ban.txt portsentry.txt | sort | uniq > blocked.ips.txt
rm -f /var/scriptdepot/fail2banTmp
rm -f /var/scriptdepot/portsentry.txt
rm -f /var/scriptdepot/fail2ban.txt

[ -f /var/scriptdepot/blocked.ips.txt ] && BADIPS=$(egrep -v -E "^#|^$" /var/scriptdepot/blocked.ips.txt)



# flush tout
$IPT -F
$IPT -X
$IPT -Z
$IPT -t filter -F
$IPT -t filter -X
$IPT -t nat -F
$IPT -t nat -X
$IPT -t mangle -F
$IPT -t mangle -X



# On remet la police par défaut à ACCEPT
$IPT -P INPUT ACCEPT
$IPT -P FORWARD ACCEPT
$IPT -P OUTPUT ACCEPT


# On remet les polices par défaut pour la table NAT
$IPT -t nat -P PREROUTING ACCEPT
$IPT -t nat -P POSTROUTING ACCEPT
$IPT -t nat -P OUTPUT ACCEPT

# Politiques par défaut, on DROP tout.
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP

if [ -f /var/scriptdepot/blocked.ips.txt ];
then
# -N, --new-chain chaîne Crée une nouvelle chaîne définie par l'utilisateur avec le nom indiqué. Il ne doit pas déjà exister de cible de même nom.
$IPT -N $SPAMLIST


for ipblock in $BADIPS
do
$IPT -A $SPAMLIST -s $ipblock -j LOG --log-prefix "$SPAMDROPMSG"
$IPT -A $SPAMLIST -s $ipblock -j DROP
done

$IPT -I INPUT -j $SPAMLIST
$IPT -I OUTPUT -j $SPAMLIST
$IPT -I FORWARD -j $SPAMLIST

fi




# Les états de connexions :
# --state NEW
# Une nouvelle connexion est établie. (elle contient le flag SYN)
#
# --state ESTABLISHED
# La connexion analysée a déjà été établie, elle ne devrait pas contenir de SYN ni de FIN.
#
# --state RELATED
# La connexion est en relation avec une autre connexion déjà établie.
#
# --state INVALID
# la connexion n'est pas conforme, elle contient un jeu de flags anormal.

# SYN-FLOODING PROTECTION
$IPT -N syn-flood
$IPT -A INPUT -i $PUB_IF -p tcp --syn -j syn-flood
$IPT -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
$IPT -A syn-flood -j DROP


# Pour être sur que les nouvelles connexions TCP sont des paquets SYN.
$IPT -A INPUT -i $PUB_IF -p tcp ! --syn -m state --state NEW -j DROP

# Refuse les paquets venant des réseaux privés de classe A,B et C.
$IPT -A INPUT -i $PUB_IF -s $CLASS_A -j DROP
$IPT -A INPUT -i $PUB_IF -s $CLASS_B -j DROP
#$IPT -A INPUT -i $PUB_IF -s $CLASS_C -j DROP
# Refuse les paquets d'adresses multicast (classe D).
$IPT -A INPUT -i $PUB_IF -s $CLASS_D_MULTICAST -j DROP
# Refuse les paquets d'adresses réservées de classe E.
$IPT -A INPUT -i $PUB_IF -s $CLASS_E_RESERVED_NET -j DROP

#hashlimit limite à 3 connections sur le port ssh par ip  
$IPT -I INPUT -m hashlimit -m tcp -p tcp --dport 22 --hashlimit 3/min --hashlimit-mode srcip --hashlimit-name ssh -m state --state NEW -j ACCEPT 

# Block Fragments
$IPT -A INPUT -i PUB_IF -f -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "Fragments Packets"
$IPT -A INPUT -i PUB_IF -f -j DROP
 
# Block bad stuff
$IPT -A INPUT -i PUB_IF -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP

# NULL packets
$IPT -A INPUT -i PUB_IF -p tcp --tcp-flags ALL NONE -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "NULL Packets"
$IPT -A INPUT -i PUB_IF -p tcp --tcp-flags ALL NONE -j DROP 
$IPT -A INPUT -i PUB_IF -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

#XMAS
$IPT -A INPUT -i PUB_IF -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "XMAS Packets"
$IPT -A INPUT -i PUB_IF -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP 

# FIN packet scans 
$IPT -A INPUT -i PUB_IF -p tcp --tcp-flags FIN,ACK FIN -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "Fin Packets Scan"
$IPT -A INPUT -i PUB_IF -p tcp --tcp-flags FIN,ACK FIN -j DROP


#antispoofing
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]
then
for filtre in /proc/sys/net/ipv4/conf/*/rp_filter
do
echo 1 > $filtre
done
fi


#autorise les requetes locales (interface loopback)
$IPT  -A INPUT -i lo -j ACCEPT
$IPT  -A OUTPUT -o lo -j ACCEPT

# Accepter les packets  relatifs à des connexions déjà  établies 
$IPT -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -o eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT


# allow incomming ICMP ping pong stuff
$IPT -A INPUT -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -p icmp --icmp-type 0 -m state --state ESTABLISHED,RELATED -j ACCEPT
 
 
##### DEBUT OUVERTURE DE PORT

iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT

iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

iptables -A INPUT -i eth0 -p tcp --dport 3690 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 3690 -m state --state ESTABLISHED -j ACCEPT


##### FIN  
 
 
exit 0

Une discussion sur certaines régles serait le bienvenue . Particulierement les régles syn , XMAS , antispoofing, Block Fragments ,hashlimit ,null packet … , sur lesquelles j’ai un gros doute .
Tout avis sera le bienvenu (si autre que "Pourquoi t as mis le port 22 pour le ssh " :smiley: )

En remerciant par avance

C’est mauvais. Je serai impitoyable.

  1. Les classes A, B et C sont abandonnées depuis 15 ans.
  2. Ce commentaire ne correspond pas à la liste qui suit : loopback, multicast et réservées ne sont pas des plages privées.
  3. Que vient faire une soi-disant adresse de broadcast (certes privée mais déjà comprise dans une des plages, et non utilisée dans le reste du script) dans cette liste ?

# flush tout $IPT -F $IPT -X $IPT -Z $IPT -t filter -F $IPT -t filter -X
Redondant. “filter” est déjà la table par défaut si on ne spécifie pas d’option -t.

  1. La “politique” (policy), pas la “police”.
    Quel intérêt à part ouvrir une fenêtre de vulnérabilité puisque le script remet les politiques à DROP un peu plus loin ?

for ipblock in $BADIPS do $IPT -A $SPAMLIST -s $ipblock -j LOG --log-prefix "$SPAMDROPMSG" $IPT -A $SPAMLIST -s $ipblock -j DROP done
Il serait plus économe de créer une chaîne logdrop contenant ces deux règles, cela diviserait le nombre de règles quasiment par deux.

[code]# Les états de connexions :

–state NEW

Une nouvelle connexion est établie. (elle contient le flag SYN)

–state ESTABLISHED

La connexion analysée a déjà été établie, elle ne devrait pas contenir de SYN ni de FIN.

–state RELATED

La connexion est en relation avec une autre connexion déjà établie.

–state INVALID

la connexion n’est pas conforme, elle contient un jeu de flags anormal.[/code]

Tout est faux.
Ne pas confondre paquet et connexion. Les règles traitent des paquets, pas des connexions. L’état d’un paquet est défini par rapport à l’état de la connexion à laquelle il appartient, mais ce sont deux choses différentes. A noter que l’état de la connexion est mis à jour avant que l’état du paquet soit défini, donc l’état du paquet tient compte du fait qu’il a été vu.

  • NEW : paquet qui crée une nouvelle connexion ou appartient à une connexion existante qui n’a eu du trafic que dans un sens (pas de réponse). Il n’a pas forcément de flag SYN, qui est spécifique au protocole TCP. Un état de connexion est géré pour tous les protocoles, pas seulement TCP.

  • ESTABLISHED : paquet appartenant à une connexion existante qui a vu du trafic dans les deux sens (y compris ce paquet). Il peut contenir le flag SYN ou FIN.

  • RELATED : paquet lié à une connexion existante. C’est typiquement un paquet d’erreur ICMP ou un paquet qui crée une connexion liée dans les protocoles dits “complexes” : FTP, TFTP, SIP, RTP… Le second cas est géré par des modules spécialisés qu’il faut charger : nf_conntrack_ftp, nf_conntrack_sip…

  • INVALID : tous les autres cas. Typiquement, ce sont les paquets d’erreur ICMP faisant référence à une connexion existante, ou les paquets TCP dont les flags ou le numéro de séquence ne correspondent pas à l’état de la connexion. Il ne faut pas confondre l’état INVALID, qui est défini par rapport à l’état de la connexion, avec une combinaison invalide des flags, qui est propre au paquet indépendamment de l’état de la connexion.

[code]

SYN-FLOODING PROTECTION

$IPT -N syn-flood
$IPT -A INPUT -i $PUB_IF -p tcp --syn -j syn-flood
$IPT -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
$IPT -A syn-flood -j DROP[/code]
Une demande de connexion par seconde, je n’appelle pas ça un flood. Avec un seuil aussi bas, j’appelle ce genre de règles un auto-déni de service. Ce type de limitation doit servir à protéger les ressources du serveur, or je pense qu’il doit être capable d’avaler plus d’une connexion par seconde.

# Refuse les paquets venant des réseaux privés de classe A,B et C. $IPT -A INPUT -i $PUB_IF -s $CLASS_A -j DROP $IPT -A INPUT -i $PUB_IF -s $CLASS_B -j DROP #$IPT -A INPUT -i $PUB_IF -s $CLASS_C -j DROP
Pourquoi avoir commenté la plage des classes C privées ? Laisse-moi deviner : le sous-réseau de de la machine est dans cette plage ? Mais le sous-réseau ne couvre pas toute la plage /16, c’est généralement un /24, donc tu devrais bloquer toute la plage /16 sauf le /24. J’admets que c’est plus compliqué à réaliser, il faut créer une chaîne utilisateur avec un RETURN au début pour la plage à ne pas bloquer.

  1. Bloquer tous les fragments est une erreur. La fragmentation est une fonction utile du protocole IP. Certes il vaut mieux s’en passer mais parfois on n’a pas le choix, c’est ça ou rien.
  2. De toute façon, l’utilisation du suivi de connexion (chargé par la correspondance “state” et la table “nat”) force la défragmentation à l’arrivée avant que les paquets traversent les chaînes iptables qui ne voient que des paquets complets. Donc en pratique cette règle est sans effet.

# Accepter les packets relatifs à des connexions déjà établies $IPT -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A OUTPUT -o eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
“NEW”, tu considères que c’est des connexions déjà établies ?

# allow incomming ICMP ping pong stuff $IPT -A INPUT -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT $IPT -A OUTPUT -p icmp --icmp-type 0 -m state --state ESTABLISHED,RELATED -j ACCEPT

  1. echo-request ou echo et echo-reply, c’est plus parlant que 8 et 0.
  2. Les paquets echo-request sont normalement dans l’état NEW, rarement ESTABLISHED (je ne me souviens plus dans quelle condition) et jamais RELATED.
  3. Les paquets echo-reply sont dans l’état ESTABLISHED, donc déjà acceptés par une règle du bloc “Accepter les packets relatifs à des connexions déjà établies” si l’interface est eth0. Attends-tu du ping sur une autre interface ?

[code]##### DEBUT OUVERTURE DE PORT

iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT

iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

iptables -A INPUT -i eth0 -p tcp --dport 3690 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 3690 -m state --state ESTABLISHED -j ACCEPT[/code]
La règle en entrée avec --sport constitue une brèche de sécurité car l’émetteur du paquet contrôle le port source ; cette règle lui permet d’accéder à n’importe quel port UDP de ta machine. Les règles en sortie avec --sport n’apportent rien. Dans les deux cas, les paquets de réponse sont déjà acceptés par les règles du bloc “Accepter les packets relatifs à des connexions déjà établies”.

J’ai fait comme toi avec mon iptables pour mon serveur. Je suis sur qu’il ne doit pas être parfait, mais ça te donnera une petite comparaison avec le tien :

[code]#!/bin/sh

BEGIN INIT INFO

Provides: PareFeux

Required-Start: $local_fs $network

Required-Stop: $local_fs $remote_fs

Default-Start: S

Default-Stop: 0 1 6

Short-Description: Wireless & LAN Access Point Controller

Description: Script met en place un firewall avec partage la connexion internet

END INIT INFO

Script de démarrage qui lance l’interface réseau internet,

met en place un firewall et un partage de connexion

#Déclaration des interfaces :
interface_WAN=eth0
interface_LAN=eth1
interface_WLAN=wlan0
WAN_Adress=192.168.168.250

start() {

init du la périphérique internet (ici derriere une freebox)

/sbin/ifup $interface_WAN
echo “activation de l’interface WAN”

#vidage des chaines
iptables -F
echo “vidage des chaines”
#destruction des chaines personnelles
iptables -X
echo “destruction des chaines personnelles”

#stratégies par défaut
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

echo “mise en place de la stratégie par défault (INPUT et FORWARD = DROP et OUTPUT = DROP)”

#init des tables NAT et MANGLE
iptables -t nat -F
iptables -t nat -X
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
echo “initialisation des tables NAT et MANGLE”

Acceptation de toutes les connexions en local (un process avec l’autre)

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

echo “Acceptation de toutes les connexions en local”

#########################################################################################################
########################################## INPUT ##################################################
#########################################################################################################

=== anti scan ===

iptables -A INPUT -p tcp --tcp-flags FIN,URG,PSH FIN,URG,PSH -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
echo “mise en route de l’anti-scan”
#pas de spoofing
if [ -e /proc/sys/net/ipv4/conf/all/ip_filter ] ;
then
for filtre in /proc/sys/net/ipv4/conf/*/rp_filter
do
echo > 1 $filtre
done
fi
echo “[mise en route de l’anti-spoofing]”
#pas de synflood tcp
if [ -e /proc/sys/net/ipv4/tcp_syncookies ] ;
then
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
fi
echo “[mise en route de l’anti-synflood]”

=== Netoyage des Paquets particuliers ===

Make sure NEW incoming tcp connections are SYN packets

iptables -A INPUT -p tcp ! --syn -m conntrack --ctstate NEW -j DROP

Packets with incoming fragments

iptables -A INPUT -f -j DROP
echo “Netoyage des Paquets particuliers”

iptables -A INPUT -i $interface_WAN -p tcp --syn -m limit --limit 3/s -j ACCEPT
iptables -A INPUT -i $interface_WAN -p udp -m limit --limit 10/s -j ACCEPT

#iptables -A INPUT -i $interface_WAN -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
#iptables -A INPUT -i $interface_WAN -p icmp --icmp-type echo-reply -m limit --limit 1/s -j ACCEPT

echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 1 > /proc/sys/net/ipv4/conf/all/secure_redirects
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 1280 > /proc/sys/net/ipv4/tcp_max_syn_backlog # Ceci active la resistance au Flood SYN

#Blocage de l’icmp sur le WAN du serveur
iptables -A INPUT -i $interface_WAN -p icmp -m conntrack --ctstate NEW,UNTRACKED,INVALID -j DROP
echo “blocage du ping (ICMP) sur l’interface WAN”
#drop des broadcast
iptables -A INPUT -i $interface_WAN -m pkttype --pkt-type broadcast -j DROP

Connection serveur SSH

iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix ‘[SSH_INPUT]:’
iptables -A INPUT -p tcp -i $interface_WAN --dport 22 -j ACCEPT
echo “connection SSH sur le serveur ok & log”

On bloque toute tentative de connection non solicitée

iptables -A INPUT -i $interface_WAN -s 0.0.0.0/0 -d $WAN_Adress -m conntrack --ctstate NEW,UNTRACKED,INVALID -j DROP

On fait confiance au réseau local et wifi et VPN

iptables -A INPUT -i $interface_LAN -j ACCEPT
iptables -A OUTPUT -o $interface_LAN -j ACCEPT
iptables -A INPUT -i $interface_WLAN -j ACCEPT
iptables -A OUTPUT -o $interface_WLAN -j ACCEPT
#########################################################################################################

##############################################################################################################
###############################################FORWARD########################################################
##############################################################################################################
#redirection requetes vers dansguardian ( port 8080 )
iptables -t nat -A POSTROUTING -o $interface_WAN -j MASQUERADE
iptables -t nat -A PREROUTING -i $interface_LAN -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -t nat -A PREROUTING -i $interface_WLAN -p tcp --dport 80 -j REDIRECT --to-port 8080
#permet de rediriger les requetes vers 3128 (proxy squid) inutile si redirection danguardian faite!
#iptables -t nat -A POSTROUTING -o $interface_WAN -j MASQUERADE
#iptables -t nat -A PREROUTING -i $interface_LAN -p tcp --dport 80 -j REDIRECT --to-port 3128

#############################################################################################################

#########################################################################################################
################################################## OUTPUT #########################################
#########################################################################################################

=====================================================

=== TENTATIVE pour SORTIE (OUTPUT)Pour le SERVEUR ===

=====================================================

==== On accepte la sortie de certains protocoles ====

iptables -A OUTPUT -o $interface_WAN -p UDP --dport 123 -j ACCEPT # Port 123 (Time ntp udp)
iptables -A OUTPUT -o $interface_WAN -p TCP --dport 123 -j ACCEPT # Port 123 (Time ntp tcp)
iptables -A OUTPUT -o $interface_WAN -p UDP --dport domain -j ACCEPT # Port 53 (DNS)
iptables -A OUTPUT -o $interface_WAN -p TCP --dport domain -j ACCEPT # Port 53 (DNS)
iptables -A OUTPUT -o $interface_WAN -p TCP --dport http -j ACCEPT # Port 80 (Http)
iptables -A OUTPUT -o $interface_WAN -p TCP --dport https -j ACCEPT # Port 443 (Https)
#iptables -A OUTPUT -o $interface_WAN -p TCP --dport 143 -j ACCEPT # Port 143 (imap)
iptables -A OUTPUT -o $interface_WAN -p TCP --dport pop3 -j ACCEPT # Port 110 (Pop3)
iptables -A OUTPUT -o $interface_WAN -p TCP --dport 993 -j ACCEPT # Port 993 (auth.SSL)
iptables -A OUTPUT -o $interface_WAN -p TCP --dport 995 -j ACCEPT # Port 995 (auth.SSL)
#iptables -A OUTPUT -o $interface_WAN -p TCP --dport smtp -j ACCEPT # Port 25 (Smtp)
iptables -A OUTPUT -o $interface_WAN -p TCP --dport 587 -j ACCEPT # Port 587 (Smtp)
iptables -A OUTPUT -o $interface_WAN -p TCP --dport ftp-data -j ACCEPT # Port 20 (Ftp Data)
iptables -A OUTPUT -o $interface_WAN -p TCP --dport ftp -j ACCEPT # Port 21 (Ftp)
iptables -A OUTPUT -o $interface_WAN -p TCP --dport 5055 -j ACCEPT # Port #5055 (Ssh)
iptables -A OUTPUT -o $interface_WAN -p TCP --dport 22 -j ACCEPT # Port 22 (SSH)
iptables -A OUTPUT -o $interface_WAN -p TCP --dport 1863 -j ACCEPT # Port 1863 (Msn messenger)
iptables -A OUTPUT -o $interface_WAN -p TCP --dport 5222 -j ACCEPT # Port 1863 (Msn Pidgin)
iptables -A OUTPUT -o $interface_WAN -p TCP --dport 5900 -j ACCEPT #port bureau distant

=== OUTPUT générique ? ===

On autorise les connexions deja etablies ou relatives à une autre connexion a sortir

iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
echo “Aceptation de certain protocole en sortie pour le serveur”

#Autoriser le ping sur des IP externes
iptables -A OUTPUT -p icmp -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT

#########################################################################################################

#########################################################################################################
################################### Partage de la connexion internet ##############################
#########################################################################################################
#création d’une nouvelle règle pour partage internet
iptables -N MAregle

############# SORTIE LAN ###############
iptables -A MAregle -i $interface_LAN -o $interface_WAN -p UDP --dport 123 -j ACCEPT # Time ntp udp
iptables -A MAregle -i $interface_LAN -o $interface_WAN -p TCP --dport 123 -j ACCEPT # Time ntp tcp
iptables -A MAregle -i $interface_LAN -o $interface_WAN -p UDP --dport domain -j ACCEPT # Port 53 (DNS)
iptables -A MAregle -i $interface_LAN -o $interface_WAN -p TCP --dport domain -j ACCEPT # Port 53 (DNS)
iptables -A MAregle -i $interface_LAN -o $interface_WAN -p TCP --dport http -j ACCEPT # Port 80 (Http)
iptables -A MAregle -i $interface_LAN -o $interface_WAN -p TCP --dport https -j ACCEPT # Port 443 (Https)
#iptables -A MAregle -i $interface_LAN -o $interface_WAN -p TCP --dport 143 -j ACCEPT # Port 143 (imap)
iptables -A MAregle -i $interface_LAN -o $interface_WAN -p TCP --dport pop3 -j ACCEPT # Port 110 (Pop3)
iptables -A MAregle -i $interface_LAN -o $interface_WAN -p TCP --dport 993 -j ACCEPT # Port 993 (auth.SSL)
iptables -A MAregle -i $interface_LAN -o $interface_WAN -p TCP --dport 995 -j ACCEPT # Port 995 (auth.SSL)
#iptables -A MAregle -i $interface_LAN -o $interface_WAN -p TCP --dport smtp -j ACCEPT # Port 25 (Smtp)
iptables -A MAregle -i $interface_LAN -o $interface_WAN -p TCP --dport 587 -j ACCEPT # Port 587 (Smtp)
iptables -A MAregle -i $interface_LAN -o $interface_WAN -p TCP --dport ftp-data -j ACCEPT # Port 20 (Ftp Data)
iptables -A MAregle -i $interface_LAN -o $interface_WAN -p TCP --dport ftp -j ACCEPT # Port 21 (Ftp)
iptables -A MAregle -i $interface_LAN -o $interface_WAN -p TCP --dport 5055 -j ACCEPT # Port #5055 (Ssh)
iptables -A MAregle -i $interface_LAN -o $interface_WAN -p TCP --dport 22 -j ACCEPT # Port 22 (SSH)
iptables -A MAregle -i $interface_LAN -o $interface_WAN -p TCP --dport 1863 -j ACCEPT # Port 1863 (Msn msg)
iptables -A MAregle -i $interface_LAN -o $interface_WAN -p TCP --dport 5222 -j ACCEPT # Port 1863 (Msn Pidgin)
#iptables -A MAregle -i $interface_LAN -o $interface_WAN -p TCP --dport 11443 -j ACCEPT # connection routeur
iptables -A MAregle -i $interface_LAN -o $interface_WAN -p TCP --dport 554 -j ACCEPT # port vlc
iptables -A MAregle -i $interface_LAN -o $interface_WAN -p TCP --dport 9200 -j ACCEPT #port play-the.net
iptables -A MAregle -i $interface_LAN -o $interface_WAN -p TCP --dport 5900 -j ACCEPT #port bureau distant
iptables -A MAregle -i $interface_LAN -o $interface_WAN -p UDP --dport 1194 -j ACCEPT # OpenVPN
###############################################

################ SORTIE WLAN ##################
iptables -A MAregle -i $interface_WLAN -o $interface_WAN -p UDP --dport 123 -j ACCEPT # Time ntp udp
iptables -A MAregle -i $interface_WLAN -o $interface_WAN -p TCP --dport 123 -j ACCEPT # Time ntp tcp
iptables -A MAregle -i $interface_WLAN -o $interface_WAN -p UDP --dport domain -j ACCEPT # Port 53 (DNS)
iptables -A MAregle -i $interface_WLAN -o $interface_WAN -p TCP --dport domain -j ACCEPT # Port 53 (DNS)
iptables -A MAregle -i $interface_WLAN -o $interface_WAN -p TCP --dport http -j ACCEPT # Port 80 (Http)
iptables -A MAregle -i $interface_WLAN -o $interface_WAN -p TCP --dport https -j ACCEPT # Port 443 (Https)
#iptables -A MAregle -i $interface_WLAN -o $interface_WAN -p TCP --dport 143 -j ACCEPT # Port 143 (imap)
iptables -A MAregle -i $interface_WLAN -o $interface_WAN -p TCP --dport pop3 -j ACCEPT # Port 110 (Pop3)
iptables -A MAregle -i $interface_WLAN -o $interface_WAN -p TCP --dport 993 -j ACCEPT # Port 993 (auth.SSL)
iptables -A MAregle -i $interface_WLAN -o $interface_WAN -p TCP --dport 995 -j ACCEPT # Port 995 (auth.SSL)
#iptables -A MAregle -i $interface_WLAN -o $interface_WAN -p TCP --dport smtp -j ACCEPT # Port 25 (Smtp)
iptables -A MAregle -i $interface_WLAN -o $interface_WAN -p TCP --dport 587 -j ACCEPT # Port 587 (Smtp)
iptables -A MAregle -i $interface_WLAN -o $interface_WAN -p TCP --dport ftp-data -j ACCEPT # Port 20(Ftp Data)
iptables -A MAregle -i $interface_WLAN -o $interface_WAN -p TCP --dport ftp -j ACCEPT # Port 21(Ftp)
iptables -A MAregle -i $interface_WLAN -o $interface_WAN -p TCP --dport 5055 -j ACCEPT # Port #5055 (Ssh)
iptables -A MAregle -i $interface_WLAN -o $interface_WAN -p TCP --dport 22 -j ACCEPT # Port 22 (SSH)
iptables -A MAregle -i $interface_WLAN -o $interface_WAN -p TCP --dport 1863 -j ACCEPT # Port 1863 (Msn msg)
iptables -A MAregle -i $interface_WLAN -o $interface_WAN -p TCP --dport 5222 -j ACCEPT # Port 1863 (Msn Pidgin)
#iptables -A MAregle -i $interface_WLAN -o $interface_WAN -p TCP --dport 11443 -j ACCEPT # connection routeur
iptables -A MAregle -i $interface_WLAN -o $interface_WAN -p TCP --dport 554 -j ACCEPT #port vlc
iptables -A MAregle -i $interface_WLAN -o $interface_WAN -p TCP --dport 9200 -j ACCEPT #port play-the.net
iptables -A MAregle -i $interface_WLAN -o $interface_WAN -p TCP --dport 5900 -j ACCEPT #port bureau distant
iptables -A MAregle -i $interface_WLAN -o $interface_WAN -p UDP --dport 1194 -j ACCEPT # OpenVPN
######################################
iptables -A MAregle -p icmp -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A MAregle -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A MAregle -m conntrack --ctstate UNTRACKED,INVALID -j DROP
#application de la règle au partage de connexion
iptables -A INPUT -j MAregle
iptables -A FORWARD -j MAregle
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o $interface_WAN -j MASQUERADE
echo “Mise en place du partage de connextion internet”
########################################################################################################

#########################################################################################################
################################################## LOG ##################################################
#########################################################################################################
#Log tous ce qui qui n’est pas accepter par une règles précédente

prés requit : sudo apt-get install sysklogd

echo ‘kern.warning /var/log/iptables.log’ > /etc/syslog.conf

iptables -A OUTPUT -j LOG --log-level 4 --log-prefix '[OUTPUT DROP]:'				
iptables -A INPUT -j LOG  --log-level 4 --log-prefix '[INPUT DROP]:'				
iptables -A FORWARD -j LOG  --log-level 4 --log-prefix '[FORWARD DROP]:'				
echo "############ <START> ##############"								
iptables -L -n -v # commanter pour desactiver l'affichage des règles en cours			
echo "############ </START> ##############"								

########################################################################################################

}

stop() {
echo 0 >/proc/sys/net/ipv4/ip_forward
ifdown $interface_WAN
}

case “$1” in

start)
start
echo “firewall IPv4 démarré”
;;

stop)
stop
echo “firewall IPv4 stopé”
;;
restart)
stop && start
echo “firewall IPv4 redémarré”
;;
status)
status
/sbin/iptables -L -n -v
/sbin/iptables -t nat -L -n -v
RETVAL=?
;;
*)
echo "Usage $0 {start|stop|restart|status}"
exit 1
esac

exit 0[/code]

A savoir que j’ai 2 cartes réseaux et 1 wifi ( en point d’accès ).

En résumé, ma petite usine à gaz à moi :laughing: