Configuration Firewall avec serveur en frontend

Dans mon cas, la dedibox est directement relié au net avec une IP publique.
On est dans le cas le plus “simple” ou IPTables joue uniquement un rôle de Firewall

Voici donc mon fichier /etc/sysconfig/iptables (n’oubliez pas de remplacer VOTRE_IP_PUBLIQUE, par … votre IP publique! Je n’ai pas trouvé comment créer des aliases avec cette version d’IPTables)


# On ne tient pas compte de mangle et nat, nous nous concentrons ici sur le filter uniquement
*mangle
:FORWARD ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed
*nat
:OUTPUT ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed

#Defaut policies
*filter
:FORWARD DROP [0:0]
:INPUT DROP [0:0]

# Create separate chains for ICMP, TCP and UDP to traverse
:allowed - [0:0]
:tcp_packets - [0:0]
:OUTPUT DROP [0:0]
:udp_packets - [0:0]
:icmp_packets - [0:0]
:bad_tcp_packets - [0:0]
:SPOOFED - [0:0]
:test_manu - [0:0]

# on rejette les packets considérés comme mal formés (possibilité d'attaque ou de scan port)
-A bad_tcp_packets -p tcp -m state --tcp-flags SYN,ACK SYN,ACK --state NEW -j REJECT --reject-with tcp-reset
-A bad_tcp_packets -p tcp -m state --state NEW -j LOG  ! --syn --log-prefix "New not syn:"
-A bad_tcp_packets -p tcp -m state --state NEW -j DROP  ! --syn

# allowed chain
-A allowed -p TCP -j ACCEPT  --syn
-A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
-A allowed -p TCP -j DROP

#TCP Rules:
#On Ouvre certains ports (web, ftp/passive, auth)
#Attention, le port SSH n'est pas ouvert ici, ne vous coupez pas la main!
-A tcp_packets -p TCP -s 0/0 --dport auth -j allowed
-A tcp_packets -p TCP -s 0/0 --dport 80 -j allowed
-A tcp_packets -p TCP -s 0/0 --dport 21 -j allowed
-A tcp_packets -p TCP -s 0/0 --dport 25 -j allowed
-A tcp_packets -p TCP -s 0/0 --dport 60000:60200 -j allowed

#On demande a ce que des qu une session est etablit, celle ci reste ouverte et ne soit pas coupe
#Ceci est particulierement utile dans le cas du portknocking par exemple ou l on referme le port 
#SSH apres X secondes.
-A tcp_packets -p TCP -s 0/0 --dport 9912 -j allowed -m state --state ESTABLISHED --comment "Pour Webmin"
-A tcp_packets -p TCP -s 0/0 --dport 14213 -j allowed -m state --state ESTABLISHED --comment "Pour ssh"

#On autorise les requetes ICMP (ping...)
-A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT
-A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT

#On rejette les Bad TCP packets .
-A INPUT -p tcp -j bad_tcp_packets

#On autorise les requetes venant de localhost (tiens d ailleurs cette regle ne peut elle pas poser de pb 
#en cas de tentative d intrusion par spoof?)
-A INPUT -p ALL -s 127.0.0.1 -i lo -j ACCEPT
-A INPUT -p ALL -s VOTRE_IP_PUBLIQUE -i lo -j ACCEPT

#Regles pour les packets venant d'internet
-A INPUT -p ALL -m state -d VOTRE_IP_PUBLIQUE --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p TCP -i eth0 -j tcp_packets
-A INPUT -p UDP -i eth0 -j udp_packets
-A INPUT -p ICMP -i eth0 -j icmp_packets

#On log les packets qui ne matchent avec aucune regles
-A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG  --log-level DEBUG --log-prefix "IPT INPUT packet died: "
-A FORWARD -p tcp -j bad_tcp_packets
-A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG  --log-level DEBUG --log-prefix "IPT FORWARD packet died: "

# Flood  protection
-A FORWARD -p tcp --syn -m limit --limit 1/second -j ACCEPT
-A FORWARD -p udp -m limit --limit 1/second -j ACCEPT

#Rules pour determiner les ip autorisees a sortir
-A OUTPUT -p tcp -j bad_tcp_packets
-A OUTPUT -p ALL -s 127.0.0.1 -j ACCEPT
-A OUTPUT -p ALL -s VOTRE_IP_PUBLIQUE -j ACCEPT

#On log si ca matche pas
-A OUTPUT -m limit --limit 3/minute --limit-burst 3 -j LOG  --log-level DEBUG --log-prefix "IPT OUTPUT packet died: "

# Protection contre le spoofing
#-A SPOOFED -s 127.0.0.0/8 -j DROP
-A SPOOFED -s 169.254.0.0/12 -j DROP
-A SPOOFED -s 172.16.0.0/12 -j DROP
-A SPOOFED -s 192.168.0.0/16 -j DROP
-A SPOOFED -s 10.0.0.0/8 -j DROP
-A INPUT -j SPOOFED

COMMIT

Leave a Reply




Powered by WP Hashcash