Merci pour ton aide Raleur.
raleur a écrit :
# Short-Description: Firewall deamon
# Description: Enable service provided by daemon.
Il n'y a aucun démon dans ce script. iptables n'est pas un démon.
En effet, j'ai repris mon ancien script, qui était lancé au démarrage du système auparavant, mais ce n'est plus le cas.
D’où le fait qu'il manque le stop à la fin.
J'ai nettoyé l'entête.
raleur a écrit :
# Bloquer la fragmentation TCP :
$IPT -t mangle -A PREROUTING -f -j PRE_LOG_N_DROP
1) Ce n'est pas de la fragmentation TCP (on dirait plutôt segmentation) mais de la fragmentation IP.
2) Cette règle ne sert à rien puisque le suivi de connexion (conntrack) est activé par les correspondances "state" et la table "nat" et réassemble les fragments avant l'entrée dans la chaîne mangle/PREROUTING. De toute façon bloquer aveuglément les fragments serait une mauvaise idée.
J'ai supprimer la ligne pour la fragmentation IP
raleur a écrit :
# Toutes les connexions qui sortent du LAN-Net sont acceptées
$IPT -t filter -A FORWARD -i $IFACE_BRDG -o $IFACE_INET -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A FORWARD -i $IFACE_INET -o $IFACE_BRDG -m state --state ESTABLISHED -j LOG_N_ACCEPT
Manque la gestion des types ICMP d'erreur qui doivent être acceptés dans l'état RELATED (destination-unreachable, time-exceeded, parameter-problem). Nécessaire pour le path MTU discovery et le retour de traceroute.
J'ai rajouté l'état RELATED sur les 2 lignes.
raleur a écrit :
# On permet toutes les liaisons firewall-LAN
$IPT -t filter -A OUTPUT -o $IFACE_BRDG -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A INPUT -i $IFACE_BRDG -m state --state ESTABLISHED -j LOG_N_ACCEPT
#on permet toutes les liaisons LAN-firewall
$IPT -t filter -A INPUT -i $IFACE_BRDG -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A OUTPUT -o $IFACE_BRDG -m state --state ESTABLISHED -j LOG_N_ACCEPT
Redondance de l'état ESTABLISHED.
Là je ne maîtrise pas assez (du tout) pour trouver la solution à la redondance...
Ici sur mon réseau local, je devrais sans doute ajouter l'état RELATED aussi? Pour l'ICMP et le FTP
raleur a écrit :
# connexions Firewall-Internet (ping)
$IPT -t filter -A OUTPUT -p icmp --icmp-type echo-request -o $IFACE_INET -j LOG_N_ACCEPT
$IPT -t filter -A INPUT -p icmp --icmp-type echo-reply -i $IFACE_INET -j LOG_N_ACCEPT
# connexions Firewall-Internet (dns)
$IPT -t filter -A OUTPUT -p udp --dport 53 -o $IFACE_INET -j LOG_N_ACCEPT
$IPT -t filter -A INPUT -p udp --sport 53 -i $IFACE_INET -j LOG_N_ACCEPT
$IPT -t filter -A OUTPUT -p tcp --dport 53 -o $IFACE_INET -j LOG_N_ACCEPT
$IPT -t filter -A INPUT -p tcp --sport 53 -i $IFACE_INET -j LOG_N_ACCEPT
# connexions Firewall-Internet (ntp)
$IPT -t filter -A OUTPUT -p udp --dport 123 -o $IFACE_INET -j LOG_N_ACCEPT
$IPT -t filter -A INPUT -p udp --sport 123 -i $IFACE_INET -j LOG_N_ACCEPT
$IPT -t filter -A OUTPUT -p tcp --dport 123 -o $IFACE_INET -j LOG_N_ACCEPT
$IPT -t filter -A INPUT -p tcp --sport 123 -i $IFACE_INET -j LOG_N_ACCEPT
Les paquets retour seraient mieux gérés avec l'état ESTABLISHED.
C'est normalement corrigé dans le nouveau script...
raleur a écrit :
fw_save ()
{
if [ ! -d "/etc/iptables/" ]; then
apt-get install iptables-persistent -y
#mkdir -p /etc/iptables/
echo "Le répertoire /etc/iptables/ à été créer!"
fi
if [ -e "/etc/iptables/iptables.rules.ipv4" ]; then
$IPT-save > /etc/iptables/rules.v4
else
touch /etc/iptables/rules.v4
$IPT-save > /etc/iptables/rules.v4
fi
}
1) Installer un paquet dans un script d'init, il faut oser ! Surtout avec des règles qui n'autorisent pas HTTP pour accéder aux miroirs, à moins d'avoir un miroir local sur le LAN.
2) iptables-persistent ne risque-t-il pas d'entrer en conflit avec ce script ?
3) Le message affiché est trompeur puisque l'action n'est pas la création du répertoire manquant mais l'installation du paquet iptables-persistent.
4) Si le répertoire n'existe pas, la fonction continue quand même et utilise ce répertoire inexistant -> erreur.
5) A quoi sert le test de présence du fichier iptables.rules.ipv4 puisque dans tous les cas on écrit dans le fichier rules.v4 ?
6) A quoi sert la commande touch puisque de toute façon le fichier va être créé par la redirection s'il n'existe pas ?
Ah oui, j'avoue que cela est de la grosse bidouille que j'avais oublié, que j'ai nettoyé.
Iptables-persistant est bien installé, donc j’exécute juste mon script avec l'action "test" et après un "start" puis "save" pour le rendre définitif et valide au prochain démarrage.
Ah oui je n'avais plus accès au HTTP(S) sur le serveur, c'est ajouter.
raleur a écrit :
echo " - ${yellow}Usage: $0 {start|blockAllInput|restart|clear|test|list|status|save|restore|help}${NC}"
Il n'y a pas d'action "stop" alors que c'est obligatoire pour un script avec Default-Stop non vide.
Oui car je ne lance plus en automatique, donc le stop est inutile, mais c'est sûr tu ne pouvais pas le deviné...
Autres questions:
- Je me suis rendu compte que je ne recevais pas les logs de mes DROP, j'ai donc ajouter les chaînes de ma table FILTRE en DROP après tout mes ACCEPT pour pouvoir récupérer mes DROP dans les fichiers de logs.
- Ma politique de DROP au début ne devrait-elle pas être située après toutes mes règles en ACCEPT, cela me paraît plus logique!?
- Lorsque l'on à une politique en DROP, je suppose que faire un DROP sur les packets INVALID est inutile, que cela est fait automatiquement?
- J'ai trouvé cela sur le net, est-ce correcte au niveau de l'INPUT en udp qui serait inutile?
- Et si je compare avec mon code, son INPUT en tcp est en dport et moi en sport, qui à raison?
# Autoriser les connexions DNS.
-A INPUT -p tcp --dport 53 -j ACCEPT
-A OUTPUT -p tcp --dport 53 -j ACCEPT
# Cette règle est une faille de sécurité en plus d'être inutile.
# -A INPUT -p udp --sport 53 -j ACCEPT
-A OUTPUT -p udp --dport 53 -j ACCEPT
Mon fichier modifié:
#!/bin/sh
# Provides: Firewall Rules
# https://geekeries.org/2018/04/logs-iptables/
# https://geekeries.org/2017/12/configuration-avancee-du-firewall-iptables/
# http://www.canonne.net/linux/iptables/firewall.sh.php
###### https://wiki.visionduweb.fr/index.php/Configurer_le_pare-feu_Iptables#Sauvegarder_les_r.C3.A8gles_existantes
######################################################################
# D E F I N I T I O N D E V A R I A B L E S
######################################################################
# Variable de couleur shell
red='\033[0;31m'
green='\033[0;32m'
yellow='\033[0;33m'
blue='\033[0;34m'
yellowBold='\033[1;33m'
redBgWhiteBold='\033[1;41m'
greenBgWhiteBold='\033[1;42m'
NC='\033[0m'
OK="${yellowBold}[${NC}${green}OK${NC}${yellowBold}]${NC}"
PATH=/sbin:/bin:/usr/sbin:/usr/bin
if ! [ -x /sbin/iptables ]; then
exit 0
fi
# Commandes
IPT="/sbin/iptables"
# Interface modem 4G
IFACE_INET="wwan0"
# Interface du bridge
IFACE_BRDG="br0"
fw_start()
{
######################################################################
# I N I T I A L I S A T I O N D U P A R E F E U
######################################################################
#####################
# On vide les chaines
# On vide les chaines personnalisées
# On réinitialise les compteurs
# Table RAW
$IPT -t raw -F
$IPT -t raw -X
$IPT -t raw -Z
# Table MANGLE
$IPT -t mangle -F
$IPT -t mangle -X
$IPT -t mangle -Z
# Table NAT
$IPT -t nat -F
$IPT -t nat -X
$IPT -t nat -Z
# Table FILTER
$IPT -t filter -F
$IPT -t filter -X
$IPT -t filter -Z
#####################
# Création de nouvelles chaînes
# Pour rediriger les logs
# Dans des fichiers personalisées
# RAW
$IPT -t raw -N RAW_LOG_N_DROP
$IPT -t raw -A RAW_LOG_N_DROP -m limit --limit 60/min -j LOG --log-prefix "ACTION1=DROP-RAW"
$IPT -t raw -A RAW_LOG_N_DROP -j DROP
# MANGLE
$IPT -t mangle -N PRE_LOG_N_DROP
$IPT -t mangle -A PRE_LOG_N_DROP -m limit --limit 60/min -j LOG --log-prefix "ACTION2=DROP-PREROUTING"
$IPT -t mangle -A PRE_LOG_N_DROP -j DROP
# NAT
$IPT -t nat -N LOG_N_MASQ
$IPT -t nat -A LOG_N_MASQ -m limit --limit 60/min -j LOG --log-prefix "ACTION3=MASQ-NAT"
$IPT -t nat -A LOG_N_MASQ -j MASQUERADE
# FILTER
$IPT -t filter -N LOG_N_ACCEPT
$IPT -t filter -A LOG_N_ACCEPT -m limit --limit 60/min -j LOG --log-prefix "ACTION4=ACCEPT-INPUT"
$IPT -t filter -A LOG_N_ACCEPT -j ACCEPT
$IPT -t filter -N LOG_N_DROP
$IPT -t filter -A LOG_N_DROP -m limit --limit 60/min -j LOG --log-prefix "ACTION5=DROP-INPUT"
$IPT -t filter -A LOG_N_DROP -j DROP
$IPT -t filter -N LOG_N_REJECT
$IPT -t filter -A LOG_N_REJECT -m limit --limit 60/min -j LOG --log-prefix "ACTION6=REJECT-INPUT"
$IPT -t filter -A LOG_N_REJECT -j REJECT
# FAIL2BAN POLICY
$IPT -t filter -N Fail2Ban-SSH
#$IPT -t filter -A Fail2Ban-SSH -j RETURN
#$IPT -t filter -A INPUT -j LOG --log-prefix "ACTION7=DROP-POLICY"
echo ""
echo " - ${green} Initialisation du Parefeu : ${NC} ${OK}"
######################################################################
# * R A W
######################################################################
echo ""
echo " - ${green} Règles du parefeu ..:: Table RAW ::.. : ${NC} ${OK}"
######################################################################
# * M A N G L E
######################################################################
# Manque l'explication!
$IPT -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j PRE_LOG_N_DROP
# Paquet avec SYN et FIN à la fois
$IPT -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j PRE_LOG_N_DROP
# Paquet avec SYN et RST à la fois
$IPT -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j PRE_LOG_N_DROP
# Paquet avec FIN et RST à la fois
$IPT -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags FIN,RST FIN,RST -j PRE_LOG_N_DROP
# Paquet avec FIN mais sans ACK
$IPT -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags FIN,ACK FIN -j PRE_LOG_N_DROP
# Paquet avec URG mais sans ACK
$IPT -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags ACK,URG URG -j PRE_LOG_N_DROP
# Paquet avec PSH mais sans ACK
$IPT -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags PSH,ACK PSH -j PRE_LOG_N_DROP
# Paquet avec tous les flags à 1 <=> XMAS scan dans Nmap
$IPT -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j PRE_LOG_N_DROP
# Paquet avec tous les flags à 0 <=> Null scan dans Nma
$IPT -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j PRE_LOG_N_DROP
# Paquet avec FIN,PSH, et URG mais sans SYN, RST ou ACK
$IPT -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j PRE_LOG_N_DROP
# Paquet avec FIN,SYN,PSH,URG mais sans ACK ou RST
$IPT -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,PSH,URG -j PRE_LOG_N_DROP
# Paquet avec FIN,SYN,RST,ACK,URG à 1 mais pas PSH
$IPT -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,ACK,URG -j PRE_LOG_N_DROP
echo ""
echo " - ${green} Règles du parefeu ..:: Table MANGLE ::.. : ${NC} ${OK}"
######################################################################
# G E S T I O N M A C H I N E L O C A L E
######################################################################
# Nous considérons que la machine elle même est sûre
# et que les processus locaux peuvent communiquer entre eux
# via l'interface locale :
$IPT -t filter -A OUTPUT -o lo -j LOG_N_ACCEPT
$IPT -t filter -A INPUT -i lo -j LOG_N_ACCEPT
echo ""
echo " - ${green} Règles du parefeu ..:: Serveur Locale ::.. : ${NC} ${OK}"
######################################################################
# G E S T I O N D E L A P A S S E R E L L E
######################################################################
# Translation d'adresses pour tout ce qui traverse la passerelle
$IPT -t nat -A POSTROUTING -o $IFACE_INET -j LOG_N_MASQ
# Toutes les connexions qui sortent du LAN-Net sont acceptées
$IPT -t filter -A FORWARD -i $IFACE_BRDG -o $IFACE_INET -m state --state NEW,ESTABLISHED,RELATED -j LOG_N_ACCEPT
$IPT -t filter -A FORWARD -i $IFACE_INET -o $IFACE_BRDG -m state --state ESTABLISHED,RELATED -j LOG_N_ACCEPT
echo ""
echo " - ${green} Règles du parefeu ..:: LAN/WLAN -> INTERNET ::.. : ${NC} ${OK}"
######################################################################
# G E S T I O N S E R V E U R -> L A N / W L A N
######################################################################
# On permet toutes les liaisons firewall-LAN
$IPT -t filter -A OUTPUT -o $IFACE_BRDG -m state --state NEW,ESTABLISHED,RELATED -j LOG_N_ACCEPT
$IPT -t filter -A INPUT -i $IFACE_BRDG -m state --state ESTABLISHED,RELATED -j LOG_N_ACCEPT
echo ""
echo " - ${green} Règles du parefeu ..:: FIREWWAL -> LAN/WLAN ::.. : ${NC} ${OK}"
######################################################################
# G E S T I O N L A N / W L A N -> S E R V E U R
######################################################################
#on permet toutes les liaisons LAN-firewall
$IPT -t filter -A INPUT -i $IFACE_BRDG -m state --state NEW,ESTABLISHED,RELATED -j LOG_N_ACCEPT
$IPT -t filter -A OUTPUT -o $IFACE_BRDG -m state --state ESTABLISHED,RELATED -j LOG_N_ACCEPT
echo ""
echo " - ${green} Règles du parefeu ..:: LAN/WLAN -> FIREWALL ::.. : ${NC} ${OK}"
######################################################################
# G E S T I O N I N T E R N E T -> S E R V E U R
######################################################################
# Ne pas casser les connexions déjà établies
echo ""
echo " - ${green} Règles du parefeu ..:: INTERNET -> SERVEUR ::.. : ${NC} ${OK}"
######################################################################
# G E S T I O N S E R V E U R -> I N T E R N E T
######################################################################
# connexions Firewall-Internet (ping) [echo-request=type8] et [echo-reply=type0]
$IPT -t filter -A OUTPUT -p icmp --icmp-type echo-request -o $IFACE_INET -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A INPUT -p icmp --icmp-type echo-reply -i $IFACE_INET -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT
# connexions Firewall-Internet (smtp)
$IPT -t filter -A OUTPUT -p tcp --dport 25 -o $IFACE_INET -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A INPUT -p tcp --sport 25 -i $IFACE_INET -m state --state ESTABLISHED -j LOG_N_ACCEPT
# connexions Firewall-Internet (dns)
$IPT -t filter -A OUTPUT -p udp --dport 53 -o $IFACE_INET -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT
# Cette règle est une faille de sécurité en plus d'être inutile.
#$IPT -t filter -A INPUT -p udp --sport 53 -i $IFACE_INET -m state --state ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A OUTPUT -p tcp --dport 53 -o $IFACE_INET -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT
# Le tcp en dport?
$IPT -t filter -A INPUT -p tcp --sport 53 -i $IFACE_INET -m state --state ESTABLISHED -j LOG_N_ACCEPT
# connexions Firewall-Internet (http/https)
$IPT -t filter -A OUTPUT -p tcp --dport 80 -o $IFACE_INET -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -t filter -A INPUT -p tcp --sport 80 -i $IFACE_INET -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -t filter -A OUTPUT -p tcp --dport 443 -o $IFACE_INET -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -t filter -A INPUT -p tcp --sport 443 -i $IFACE_INET -m state --state ESTABLISHED,RELATED -j ACCEPT
# connexions Firewall-Internet (ntp)
$IPT -t filter -A OUTPUT -p udp --dport 123 -o $IFACE_INET -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A INPUT -p udp --sport 123 -i $IFACE_INET -m state --state ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A OUTPUT -p tcp --dport 123 -o $IFACE_INET -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A INPUT -p tcp --sport 123 -i $IFACE_INET -m state --state ESTABLISHED -j LOG_N_ACCEPT
echo ""
echo " - ${green} Règles du parefeu ..:: FIREWALL -> INTERNET ::.. : ${NC} ${OK}"
# Rejeter tout le reste
$IPT -t filter -A INPUT -j LOG_N_DROP
$IPT -t filter -A FORWARD -j LOG_N_DROP
$IPT -t filter -A OUTPUT -j LOG_N_DROP
# Politique de la table du Filtre sur DROP
$IPT -t filter -P INPUT DROP
$IPT -t filter -P OUTPUT DROP
$IPT -t filter -P FORWARD DROP
echo ""
echo " - ${blue}Liste des règles de la tables RAW: ${NC}"
$IPT -t raw -vnL --line-numbers
echo ""
echo " - ${blue}Liste des règles de la tables MANGLE: ${NC}"
$IPT -t mangle -vnL --line-numbers
echo ""
echo " - ${blue}Liste des règles de la tables NAT: ${NC}"
$IPT -t nat -vnL --line-numbers
echo ""
echo " - ${blue}Liste des règles de la tables FILTER: ${NC}"
$IPT -t filter -vnL --line-numbers
echo "${greenBgWhiteBold}Fait!${NC} ${OK}"
echo ""
}
sw_help()
{
echo " - ${yellow}Usage: $0 {start|blockAllInput|restart|clear|test|list|status|save|restore|help}${NC}"
echo " - ${red}Attention blockAllInput bloque tous trafic entrant/sortant!!!${NC}"
echo " - ${red}Attention clear autorise tous trafic entrant/sortant!!!${NC}"
echo " - ${red}Utiliser la commande test pour chaque modification, car elle sera active seulement 60 secondes!!!${NC}"
echo ""
echo " - ${green}Un paquet à destination de notre serveur va donc passer dans l’ordre par les tables suivantes :${NC}"
echo " - ${yellow}PREROUTING – raw${NC}"
echo " - ${yellow}PREROUTING – mangle${NC}"
echo " - ${yellow}PREROUTING – nat${NC}"
echo " - ${yellow}INPUT – mangle${NC}"
echo " - ${yellow}INPUT – filter${NC}"
echo " - ${green}Et si ce paquet ne se fait pas droper par une de ces table, ${NC}"
echo " - ${green}et atteint une règle finissant en ACCEPT (puisqu’on a mis une policy DROP sur INPUT),${NC}"
echo " - ${green}il sera transféré vers le service réseau demandé.${NC}"
echo " - ${green}Pour résumer, voici un récapitulatif de certaines attributs définis dans nos règles : ${NC}"
echo " - ${green}Dans la ligne de votre nouvelle règle, il faut préciser les paquets sont traités en entrée, en sortie ou bien s’ils sont routés: ${NC}"
echo " - ${yellow}FORWARD ${NC}${blue}: Traite les paquets routés. ${NC}"
echo " - ${yellow}INPUT ${NC}${blue}: Traite les paquets entrants. ${NC}"
echo " - ${yellow}OUTPUT ${NC}${blue}: Traite les paquets sortants. ${NC}"
echo ""
echo " - ${green}Ceci définit l’action à faire sur les paquets d’une règle inscrite dans la table des règles : ${NC}"
echo " - ${yellow}DROP ${NC}${blue}: Le paquet est rejeté, aucune notification n’est envoyée à la source. ${NC}"
echo " - ${yellow}REJECT ${NC}${blue}: Le paquet est rejeté, une notification est envoyée à la source ${NC}"
echo " - ${yellow}ACCEPT ${NC}${blue}: Le paquet est accepté. ${NC}"
echo ""
echo " - ${green}La définition des attributs pour les règles: ${NC}"
echo " - ${yellow}-A ${NC}${blue}: ajoute une règle ${NC}"
echo " - ${yellow}-D ${NC}${blue}: supprime un règle ${NC}"
echo " - ${yellow}-F ${NC}${blue}: vide les tables ${NC}"
echo " - ${yellow}-X ${NC}${blue}: vide les règles ${NC}"
echo " - ${yellow}-L ${NC}${blue}: liste les règles ${NC}"
echo " - ${yellow}-i ${NC}${blue}: interface entrante ${NC}"
echo " - ${yellow}-o ${NC}${blue}: interface sortante ${NC}"
echo " - ${yellow}-p ${NC}${blue}: protocole ${NC}"
echo " - ${yellow}-s ${NC}${blue}: nom d’hôte ou adresse ip ${NC}"
echo " - ${yellow}-j ${NC}${blue}: jump, action de la règle (ACCEPT, DROP, REJECT ) ${NC}"
echo " - ${yellow}-m ${NC}${blue}: options de concordance ${NC}"
echo " - ${yellow}–dport ${NC}${blue}: numéro port de destination ${NC}"
echo " - ${yellow}–sport ${NC}${blue}: numéro du port source ${NC}"
echo ""
}
######################################################################
# Bloque tout les packets routé et entrant
######################################################################
fw_blockAllInput ()
{
$IPT -t filter -F
$IPT -t nat -F
$IPT -t mangle -F
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT
}
######################################################################
# Suppression des règles du firewal et on accepte tout
######################################################################
fw_clear ()
{
$IPT -t filter -F
$IPT -t filter -X
$IPT -t filter -Z
$IPT -t nat -F
$IPT -t nat -X
$IPT -t nat -Z
$IPT -t mangle -F
$IPT -t mangle -X
$IPT -t mangle -Z
$IPT -t raw -F
$IPT -t raw -X
$IPT -t raw -Z
$IPT -P INPUT ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD ACCEPT
echo " - ${blue}FILTER [ALL RULES .... [FLUSH] ..... POLICY ......> [ACCEPT]${NC} ${OK}"
$IPT -t nat -P PREROUTING ACCEPT
$IPT -t nat -P POSTROUTING ACCEPT
$IPT -t nat -P OUTPUT ACCEPT
$IPT -t mangle -P PREROUTING ACCEPT
$IPT -t mangle -P OUTPUT ACCEPT
$IPT -t mangle -P POSTROUTING ACCEPT
$IPT -t mangle -P FORWARD ACCEPT
$IPT -t mangle -P INPUT ACCEPT
$IPT -t raw -P OUTPUT ACCEPT
$IPT -t raw -P PREROUTING ACCEPT
echo " - ${blue}ALL TABLES ....[FLUSH] ..... ALL POLICY .......> [ACCEPT]${NC} ${OK}"
}
fw_save ()
{
$IPT-save > /etc/iptables/rules.v4
}
fw_restore ()
{
$IPT-restore < /etc/iptables/rules.v4
}
######################################################################
# Test the Firewall rules
######################################################################
fw_test ()
{
fw_save
fw_clear
fw_start
sleep 30
echo " - ${green}Restauration des anciennes règles du parefeu...${NC} ${OK}"
fw_restore
}
case "$1" in
start|restart)
echo ""
echo " - ${green}Démarrage du parfeu...${NC} ${OK}"
fw_blockAllInput
fw_start
echo " - ${green}Redémarrage de Fail2ban pour la restauration des règles${NC} ${OK}"
# relance fail2ban si installe
if [ -x /usr/bin/fail2ban-server ]; then
systemctl restart fail2ban
fi
echo "\n${greenBgWhiteBold}Fait!${NC} ${OK}"
echo ""
;;
blockAllInput)
echo ""
echo " - ${green}Verrouillage du traffic entrant...${NC} ${OK}"
fw_blockAllInput
echo "\n${greenBgWhiteBold}Fait!${NC} ${OK}"
echo ""
;;
clear)
echo ""
echo " - ${green}Vide les règles du parefeu${NC} ${OK}"
fw_clear
echo "\n${greenBgWhiteBold}Fait!${NC} ${OK}"
echo ""
;;
test)
echo ""
echo " - ${green}Test des nouvelles règles du parefeu...${NC} ${OK}"
echo " - ${green}L'ancienne configuration sera restauré dans 60 secondes...${NC} ${OK}"
fw_test
echo "\n${greenBgWhiteBold}Fait!${NC} ${OK}"
echo ""
;;
save)
echo ""
echo " - ${green}Sauvegarde les règles actuelles: ${NC}"
fw_save
echo "\n${greenBgWhiteBold}Fait!${NC} ${OK}"
echo ""
;;
restore)
echo ""
echo " - ${green}Restaure les règles sauvegardées: ${NC}"
fw_restore
echo "\n${greenBgWhiteBold}Fait!${NC} ${OK}"
echo ""
;;
list)
echo ""
echo " - ${blue}Liste des règles de la tables RAW: ${NC}"
$IPT -t raw -vnL --line-numbers
echo ""
echo " - ${blue}Liste des règles de la tables MANGLE: ${NC}"
$IPT -t mangle -vnL --line-numbers
echo ""
echo " - ${blue}Liste des règles de la tables NAT: ${NC}"
$IPT -t nat -vnL --line-numbers
echo ""
echo " - ${blue}Liste des règles de la tables FILTER: ${NC}"
$IPT -t filter -vnL --line-numbers
echo "${greenBgWhiteBold}Fait!${NC} ${OK}"
echo ""
;;
status)
echo ""
echo " - ${green}Liste les ports actuellements ouverts: ${NC}"
ss -ant
echo ""
;;
help)
echo ""
echo " - ${green}Rappel : ${NC}"
sw_help
echo "\n${greenBgWhiteBold}Fait!${NC} ${OK}"
echo ""
;;
*)
echo " - ${yellow}Usage: $0 {start|blockAllInput|restart|clear|test|list|status|save|restore|help}${NC}"
echo " - ${red}Attention blockAllInput bloque tous trafic entrant/sortant!!!${NC}"
echo " - ${red}Attention clear autorise tous trafic entrant/sortant!!!${NC}"
exit 1
;;
esac
exit 0