matthias | bonjour,
je suis en train d'écrire un script iptable pour faire un firewall sur ma gentoo (une adaptation du script présenté dans la doc gentoo pour mon portable), ce script fonctionne mais il subsiste un détail ennuyeux, en effet quand j'ajoute le script au runlevel default et bien y a rien qui passe ... bizarrement il suffit de stopper le firewall, de lancer Firefox par exemple et de relancer le firewall et c'est bon ... par contre un arrêt relance du firewall ne suffit pas, il faut initialiser une connexion pour que cela passe ... en fait j'ai l'impression que mon script gère mal l'initialisation des connexions ci-joint mon script ...
si qq à une idée je suis preneur, merci
Code :
- #!/sbin/runscript
- IPTABLES=/sbin/iptables
- IPTABLESSAVE=/sbin/iptables-save
- IPTABLESRESTORE=/sbin/iptables-restore
- FIREWALL=/etc/firewall.rules
- #interfaces
- ETH_RJ45=eth0
- ETH_WIFI=eth1
- opts="${opts} showstatus panic save restore showoptions rules"
- depend() {
- need net
- }
- rules() {
- stop
- ebegin "Paramétrer les règles internes"
- einfo "On ignore tout par défaut"
- $IPTABLES -P FORWARD DROP
- $IPTABLES -P INPUT DROP
- $IPTABLES -P OUTPUT DROP
- # Règles par default
- einfo "Créer les chaînes d'état"
- $IPTABLES -N allowed-connection-eth
- $IPTABLES -F allowed-connection-eth
- $IPTABLES -A allowed-connection-eth -m state --state ESTABLISHED,RELATED -j ACCEPT
- $IPTABLES -A allowed-connection-eth -i $ETH_RJ45 -m limit -j LOG --log-prefix \
- "Bad packet from ${ETH_RJ45}:"
- $IPTABLES -A allowed-connection-eth -j DROP
-
- $IPTABLES -N allowed-connection-wifi
- $IPTABLES -F allowed-connection-wifi
- $IPTABLES -A allowed-connection-wifi -m state --state ESTABLISHED,RELATED -j ACCEPT
- $IPTABLES -A allowed-connection-wifi -i $ETH_WIFI -m limit -j LOG --log-prefix \
- "Bad packet from ${ETH_WIFI}:"
- $IPTABLES -A allowed-connection-wifi -j DROP
- # Trafic ICMP
- einfo "Créer la chaîne icmp"
- $IPTABLES -N icmp_allowed
- $IPTABLES -F icmp_allowed
- $IPTABLES -A icmp_allowed -m state --state NEW -p icmp --icmp-type \
- time-exceeded -j ACCEPT
- $IPTABLES -A icmp_allowed -m state --state NEW -p icmp --icmp-type \
- destination-unreachable -j ACCEPT
- $IPTABLES -A icmp_allowed -p icmp -j LOG --log-prefix "Bad ICMP traffic:"
- $IPTABLES -A icmp_allowed -p icmp -j DROP
- # Trafic entrant
- einfo "Créer la chaîne de trafic SSH entrant"
- $IPTABLES -N allow-ssh-traffic-in
- $IPTABLES -F allow-ssh-traffic-in
- # Protection anti Flood
- $IPTABLES -A allow-ssh-traffic-in -m limit --limit 1/second -p tcp --tcp-flags \
- ALL RST --dport ssh -j ACCEPT
- $IPTABLES -A allow-ssh-traffic-in -m limit --limit 1/second -p tcp --tcp-flags \
- ALL FIN --dport ssh -j ACCEPT
- $IPTABLES -A allow-ssh-traffic-in -m limit --limit 1/second -p tcp --tcp-flags \
- ALL SYN --dport ssh -j ACCEPT
- $IPTABLES -A allow-ssh-traffic-in -p tcp --dport ssh -j ACCEPT
- # Trafic sortant
-
- einfo "Créer la chaîne de trafic DNS/SSH/HTTP/HTTPS/FTP/MAIL sortant"
- $IPTABLES -N allow-www-traffic-out
- $IPTABLES -F allow-www-traffic-out
- $IPTABLES -A allow-www-traffic-out -p tcp --dport www -j ACCEPT
- $IPTABLES -A allow-www-traffic-out -p tcp --dport https -j ACCEPT
- $IPTABLES -A allow-www-traffic-out -p tcp --dport ftp -j ACCEPT
- $IPTABLES -A allow-www-traffic-out -p tcp --dport smtp -j ACCEPT
- $IPTABLES -A allow-www-traffic-out -p tcp --dport pop3 -j ACCEPT
- $IPTABLES -A allow-www-traffic-out -p tcp --dport ssh -j ACCEPT
- $IPTABLES -A allow-www-traffic-out -p tcp --dport 53 -j ACCEPT
- # Détecter les scanneurs de ports.
- einfo "Créer la chaîne de détection de portscan"
- $IPTABLES -N check-flags
- $IPTABLES -F check-flags
- $IPTABLES -A check-flags -p tcp --tcp-flags ALL FIN,URG,PSH -m limit \
- --limit 5/minute -j LOG --log-level alert --log-prefix "NMAP-XMAS:"
- $IPTABLES -A check-flags -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
- $IPTABLES -A check-flags -p tcp --tcp-flags ALL ALL -m limit --limit \
- 5/minute -j LOG --log-level 1 --log-prefix "XMAS:"
- $IPTABLES -A check-flags -p tcp --tcp-flags ALL ALL -j DROP
- $IPTABLES -A check-flags -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG \
- -m limit --limit 5/minute -j LOG --log-level 1 --log-prefix "XMAS-PSH:"
- $IPTABLES -A check-flags -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
- $IPTABLES -A check-flags -p tcp --tcp-flags ALL NONE -m limit \
- --limit 5/minute -j LOG --log-level 1 --log-prefix "NULL_SCAN:"
- $IPTABLES -A check-flags -p tcp --tcp-flags ALL NONE -j DROP
- $IPTABLES -A check-flags -p tcp --tcp-flags SYN,RST SYN,RST -m limit \
- --limit 5/minute -j LOG --log-level 5 --log-prefix "SYN/RST:"
- $IPTABLES -A check-flags -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
- $IPTABLES -A check-flags -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit \
- --limit 5/minute -j LOG --log-level 5 --log-prefix "SYN/FIN:"
- $IPTABLES -A check-flags -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
- # Applique et ajoute les chaînes invalides.
- einfo "Appliquer les chaînes a INPUT"
- $IPTABLES -A INPUT -m state --state INVALID -j DROP
- $IPTABLES -A INPUT -j icmp_allowed
- $IPTABLES -A INPUT -j check-flags
- $IPTABLES -A INPUT -i lo -j ACCEPT
- $IPTABLES -A INPUT -j allow-ssh-traffic-in
- $IPTABLES -A INPUT -j allowed-connection-eth
- $IPTABLES -A INPUT -j allowed-connection-wifi
- einfo "Appliquer les chaînes à l'OUTPUT"
- $IPTABLES -A OUTPUT -m state --state INVALID -j DROP
- $IPTABLES -A OUTPUT -j icmp_allowed
- $IPTABLES -A OUTPUT -j check-flags
- $IPTABLES -A OUTPUT -o lo -j ACCEPT
- $IPTABLES -A OUTPUT -j allow-www-traffic-out
- $IPTABLES -A OUTPUT -j allowed-connection-eth
- $IPTABLES -A OUTPUT -j allowed-connection-wifi
- eend $?
- }
- start() {
- ebegin "Démarrage du pare-feu"
- if [ -e "${FIREWALL}" ]; then
- restore
- else
- einfo "${FIREWALL} n'existe pas. Utilisation des règles par defaut."
- rules
- fi
- eend $?
- }
- stop() {
- ebegin "Arrêt du pare-feu"
- $IPTABLES -F
- $IPTABLES -t nat -F
- $IPTABLES -X
- $IPTABLES -P FORWARD ACCEPT
- $IPTABLES -P INPUT ACCEPT
- $IPTABLES -P OUTPUT ACCEPT
- eend $?
- }
- showstatus() {
- ebegin "Statut"
- $IPTABLES -L -n -v --line-numbers
- einfo "Statut NAT"
- $IPTABLES -L -n -v --line-numbers -t nat
- eend $?
- }
- panic() {
- ebegin "Mise en place des règles de panique"
- $IPTABLES -F
- $IPTABLES -X
- $IPTABLES -t nat -F
- $IPTABLES -P FORWARD DROP
- $IPTABLES -P INPUT DROP
- $IPTABLES -P OUTPUT DROP
- $IPTABLES -A INPUT -i lo -j ACCEPT
- $IPTABLES -A OUTPUT -o lo -j ACCEPT
- eend $?
- }
- save() {
- ebegin "Enregistrement des règles de pare-feu"
- $IPTABLESSAVE > $FIREWALL
- eend $?
- }
- restore() {
- ebegin "Rétablissement des règles précédentes"
- $IPTABLESRESTORE < $FIREWALL
- eend $?
- }
- restart() {
- svc_stop; svc_start
- }
- showoptions() {
- echo "Usage: $0 {start|save|restore|panic|stop|restart|showstatus}"
- echo "start) Restaure les paramètres s'ils existent, sinon force les règles."
- echo "stop) Efface toutes les règles et autorise tout accès."
- echo "rules) Force les paramètres des nouvelles règles."
- echo "save) Sauve les paramètres dans ${FIREWALL}."
- echo "restore) Récupère les paramètres depuis ${FIREWALL}."
- echo "showstatus) Affiche le statut."
- }
|
Message édité par matthias le 25-09-2004 à 21:02:13
|