Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 06-04-2020 20:43:51

dudux2
Membre
Distrib. : Rasbian
Noyau : Buster 4.19
(G)UI : Pas de gestionnaire de fenêtre
Inscription : 21-01-2017

Paramétrage sysctl.con/d'iptables pour une Box 4G avec un Raspberry

Bonjour,

Je suis train de me bricolé une petite Box internet en 4G avec un Raspberry 3b+, car mon débit est vraiment décevant en ADSL.
Pour avoir fait des essais, on est chez Bouygues pour 2€ par/mois on peut demandé le duplicata d'une carte SIM et  les forfaits en données sont suffisant pour notre utilisation. (Contrairement à Free, ou l'on est obligé de passé par un autre abonnement et en général les débits se voient diminué fortement au bout de 2 ou 3 semaines (je suppose qu'il détecte qu'il n'y a pas de déplacement entre antenne et ils brident,ce n'est que ma supposition)

J'ai été confronté à plusieurs problème, dont (le wifi HS, instable  du Raspberry, je vais installer un dongle pour le coup, cela sera dans un autre sujet)

j'ai donc 3 interfaces:
wwan0 => en DHCP | une clef 4G huawei e3372h-153 (Opérationnel)
eth0 => en static 192.168.2.253 | pour le partage du réseau local filaire de la maison (Opérationnel)
wlan0 => en static 192.168.2.254 | pour le partage du réseau Wifi de la maison (Carte défectueuse à l'heure actuel)

Voici ma configuration dans /etc/network/interfaces


# interfaces(5) file used by ifup(8) and ifdown(8)

# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'

# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

# Interface loopback
auto lo
iface lo inet loopback

 
## Interface réseau Wifi HotSpot
#auto wlan0
allow-hotplug wlan0
iface wlan0 inet static
  address 192.168.2.254
  netmask 255.255.255.0
  broadcast 192.168.2.255

## Interface réseau câblé HotSpot
#auto eth0
allow-hotplug eth0
iface eth0 inet static
  address 192.168.2.252
  netmask 255.255.255.0
  broadcast 192.168.2.255


## Clef 4G
allow-hotplug wwan0
iface wwan0 inet dhcp
  pre-up sleep 5 && /bin/echo -ne 'AT^NDISDUP=1,1,"mmsbouygtel.com"\r\n' > /dev/ttyUSB0
  post-down /bin/echo -ne 'AT^NDISDUP=1,0\r\n' > /dev/ttyUSB0
 




et la configuration que j'ai ajouter enfin du fichier de /etc/dnsmasq.conf


# Serveur DHCP - Internet
interface=wlan0,eth0
bind-dynamic
domain-needed
bogus-priv
dhcp-range=192.168.2.1,192.168.2.254,255.255.255.0,12h
 



et j'ai activer l'ipv4 forwarding dans le fichier /etc/sysctl.conf


# /etc/sysctl.conf - Configuration file for setting system variables
# See /etc/sysctl.d/ for additional system variables.
# See sysctl.conf (5) for information.
#

#kernel.domainname = example.com

# Uncomment the following to stop low-level messages on console
#kernel.printk = 3 4 1 3

##############################################################3
# Functions previously found in netbase
#

# Uncomment the next two lines to enable Spoof protection (reverse-path filter)
# Turn on Source Address Verification in all interfaces to
# prevent some spoofing attacks
#net.ipv4.conf.default.rp_filter=1
#net.ipv4.conf.all.rp_filter=1

# Uncomment the next line to enable TCP/IP SYN cookies
# See http://lwn.net/Articles/277146/
# Note: This may impact IPv6 TCP sessions too
#net.ipv4.tcp_syncookies=1

# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

# Uncomment the next line to enable packet forwarding for IPv6
#  Enabling this option disables Stateless Address Autoconfiguration
#  based on Router Advertisements for this host
#net.ipv6.conf.all.forwarding=1


###################################################################
# Additional settings - these settings can improve the network
# security of the host and prevent against some network attacks
# including spoofing attacks and man in the middle attacks through
# redirection. Some network environments, however, require that these
# settings are disabled so review and enable them as needed.
#
# Do not accept ICMP redirects (prevent MITM attacks)
#net.ipv4.conf.all.accept_redirects = 0
#net.ipv6.conf.all.accept_redirects = 0
# _or_
# Accept ICMP redirects only for gateways listed in our default
# gateway list (enabled by default)
# net.ipv4.conf.all.secure_redirects = 1
#
# Do not send ICMP redirects (we are not a router)
#net.ipv4.conf.all.send_redirects = 0
#
# Do not accept IP source route packets (we are not a router)
#net.ipv4.conf.all.accept_source_route = 0
#net.ipv6.conf.all.accept_source_route = 0
#
# Log Martian Packets
#net.ipv4.conf.all.log_martians = 1
#

###################################################################
# Magic system request Key
# 0=disable, 1=enable all, >1 bitmask of sysrq functions
# See https://www.kernel.org/doc/html/latest/admin-guide/sysrq.html
# for what other values do
#kernel.sysrq=438
 




Voici toute ma liste de questions:

1) Comment sont gérées les interfaces réseau et les cartes wifi, car que l'on soit connecté en wifi ou en ethernet, la passerelle apparait toujours avec la même IP.
Ma passerelle est 192.168.2.254 pour mon wifi et 192.168.2.253 lorsque je suis connecté en ethernet.
Je suppose qu'ils ont créer un "Broadcast"? Si c'est bien cela chercher à avoir la même passerelle en wifi et en câblé va me coûté quelques heures de scripts supplémentaires, pour réussir à gérér l'ajout des nouvelles adresses mac qui voudront se connecté en wifi. voir ce lien très bien expliqué: https://wiki.debian.org/fr/BridgeNetworkConnections
Vu que je suis en dhcp pour la gestion du sous réseau, peut importe que les adresses des 2 passerelles soient différentes, ce qu'il compte, c'est que tout mon matériel soient visible sur le même réseau (et surtout aussi simple qu'une box normal pour ma chérie et les invités)
Pourriez vous me confirmer ce que je dis dans tout ce pavé?


2) Pourriez vous me valider tout les éléments que je peux activer/désactiver pour ma configuration de sysctl.conf, pour ajouter un peut de sécurité, désactiver totalement l'ICMP et ne pas activer l'IPV6.


# Uncomment the following to stop low-level messages on console
kernel.printk = 3 4 1 3

# Uncomment the next two lines to enable Spoof protection (reverse-path filter)
net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.all.rp_filter=1

# Uncomment the next line to enable TCP/IP SYN cookies

net.ipv4.tcp_syncookies=1

# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

# Uncomment the next line to enable packet forwarding for IPv6
#  Enabling this option disables Stateless Address Autoconfiguration
#  based on Router Advertisements for this host
net.ipv6.conf.all.forwarding=0

# Do not accept ICMP redirects (prevent MITM attacks)
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
# _or_
# Accept ICMP redirects only for gateways listed in our default
# gateway list (enabled by default)
net.ipv4.conf.all.secure_redirects = 1

# Do not send ICMP redirects (we are not a router)
net.ipv4.conf.all.send_redirects = 0

# Do not accept IP source route packets (we are not a router)
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0

# Log Martian Packets
net.ipv4.conf.all.log_martians = 1

# Magic system request Key (je n'utilise pas donc je désactive)
kernel.sysrq=0
 




La configuration de mon pare-feu actuellement, que j’essaie d'améliorer avec 2 exemples que j'estime sérieux:
https://geekeries.org/2018/04/logs-iptables/
http://www.canonne.net/linux/iptables/firewall.sh.php


#!/bin/sh
### BEGIN INIT INFO
# Provides:          Firewall Rules
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Firewall deamon
# Description:       Enable service provided by daemon.
### END INIT INFO

# 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


######################################################################
# 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"
MOD="/sbin/modprobe"
SYS="/sbin/sysctl -w"
SERVICE="/sbin/service"


# Interface modem 4G
IFACE_INET="wwan0"

# IP modem 4G
IP_IFACE_INET=`ip -f inet -o addr show $IFACE_INET | cut -d\  -f 7 | cut -d/ -f 1`

# Interface Réseau Filaire HotSpot
IFACE_LAN="eth0"

# Interface Reseau Wifi HotSpot
IFACE_WLAN="wlan0"

# Réseau local
SUB_NET_IP_RANGE="192.168.2.0/24"

# IP Administrateur local
#IP_ADMIN_LOCAL="192.168.2.187"

# IP Administrateur externe
##IP_ADMIN_EXTERN="0.0.0.0"


PORT_SSH="22222"
PORT_MONIT="3333"


# Port non utiliser ouvert pour pièger les scans de port
PORT_FAKE="22,445,1433,3389"
 
 


# https://geekeries.org/2018/04/logs-iptables/?cn-reloaded=1



fw_start()
{
######################################################################
# I N I T I A L I S A T I O N   D E S   C H A I N E S
######################################################################

# Nous faisons pointer par défaut sur DROP
$IPT -t filter -F
$IPT -t filter -X
$IPT -t filter -Z
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT DROP

# Nous faisons de même avec toutes les autres tables,
# à savoir "nat", "mangle" et "raw", mais en les faisant pointer
# Par défaut sur ACCEPT. Ca ne pose pas de problèmes
# Puisque tout est bloqué au niveau "filter"

$IPT -t nat -F
$IPT -t nat -X
$IPT -t nat -Z
$IPT -t nat -P PREROUTING ACCEPT
$IPT -t nat -P POSTROUTING ACCEPT
$IPT -t nat -P OUTPUT ACCEPT

$IPT -t mangle -F
$IPT -t mangle -X
$IPT -t mangle -Z
$IPT -t mangle -P PREROUTING ACCEPT
$IPT -t mangle -P OUTPUT ACCEPT

$IPT -t raw -F
$IPT -t raw -X
$IPT -t raw -Z
$IPT -t raw -P PREROUTING ACCEPT
$IPT -t raw -P OUTPUT ACCEPT





$IPT -t raw -N RAW_LOG_N_DROP
$IPT -t mangle -N PRE_LOG_N_DROP
$IPT -t nat -N LOG_N_MASQ
$IPT -t filter -N LOG_N_DROP
$IPT -t filter -N LOG_N_ACCEPT
$IPT -t filter -N Fail2Ban-SSH


echo ""
echo "  - ${green} Initialisation du Parefeu : ${NC} ${OK}"





######################################################################
# *RAW
######################################################################

# Les paquets TCP avec le flag SYN à destination du port ssh (ajouter $PORT_SSH,80,443 au besoin) ne seront pas suivi par le connexion tracker (et donc traités plus rapidement)
$IPT -t raw -A PREROUTING -i $IFACE_INET -p tcp -m multiport --dports $PORT_SSH -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j CT --notrack

# Bon on s’est protégé des DDOS simples à base de SYN et de ACK TCP, mais on ne fait rien pour gérer un surnombre de connexions normales qui atteignent l’état ESTABLISHED.
# Potentiellement toutes ces connexions sont légitimes, du coup soit on laisse tout passer, soit on essaye de limiter la casse.
# Pour cela, une technique consiste à regrouper les IP sources par bloc de 256 (i.e par subnet source en /24)
# et de n’autoriser qu’un nombre maximum de demandes de connexions SYN par seconde pour
# chaque subnet. On peut faire ça avec le module hashlimit. Cela aura le mérite mettre un
# plafond de connexion par seconde vers votre serveur par groupe de 256 IP. (ajouter $PORT_SSH,80,443 au besoin)
$IPT -t raw -A PREROUTING -i $IFACE_INET -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m multiport --dports $PORT_SSH -m hashlimit --hashlimit-above 100/sec --hashlimit-burst 1000 --hashlimit-mode srcip --hashlimit-name syn --hashlimit-htable-size 2097152 --hashlimit-srcmask 24 -j RAW_LOG_N_DROP

echo ""
echo "  - ${green} Règles du parefeu ..:: Table RAW ::.. : ${NC} ${OK}"



######################################################################
# *MANGLE
######################################################################

# 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

# Spoofing d’IP source
# Filtrage triviales basées sur les IP sources en dropant tout ce qui arrive d’un réseau privé/réservé
# C’est très peu probable pour un serveur avec uniquement une IP publique sur Internet.
#$IPT -t mangle -A PREROUTING -s 224.0.0.0/8 -j PRE_LOG_N_DROP
#$IPT -t mangle -A PREROUTING -s 169.254.0.0/16 -j PRE_LOG_N_DROP
#$IPT -t mangle -A PREROUTING -s 172.16.0.0/12 -j PRE_LOG_N_DROP
#$IPT -t mangle -A PREROUTING -s 192.0.2.0/24 -j PRE_LOG_N_DROP
#$IPT -t mangle -A PREROUTING -s 192.168.0.0/16 -j PRE_LOG_N_DROP
#$IPT -t mangle -A PREROUTING -s 10.0.0.0/8 -j PRE_LOG_N_DROP
#$IPT -t mangle -A PREROUTING -s 0.0.0.0/8 -j PRE_LOG_N_DROP
#$IPT -t mangle -A PREROUTING -s 240.0.0.0/5 -j PRE_LOG_N_DROP
#$IPT -t mangle -A PREROUTING -s 127.0.0.0/8 ! -i lo -j PRE_LOG_N_DROP

# On dégage le ping :
$IPT -t mangle -A PREROUTING -p icmp -j PRE_LOG_N_DROP

#Bloquer la fragmentation TCP
$IPT -t mangle -A PREROUTING -f -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 INPUT  -i lo -j LOG_N_ACCEPT
$IPT -t filter -A OUTPUT -o lo -j LOG_N_ACCEPT

echo ""
echo "  - ${green} Règles du parefeu ..:: Serveur Locale ::.. : ${NC} ${OK}"





######################################################################
# G E S T I O N   L A N / W L A N -> I N T E R N E T (PASSERELLE)
######################################################################

# 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_LAN -o $IFACE_INET -m state --state NEW,ESTABLISHED,RELATED -j LOG_N_ACCEPT
$IPT -t filter -A FORWARD -i $IFACE_INET -o $IFACE_LAN -m state --state ESTABLISHED,RELATED -j LOG_N_ACCEPT
 
# Toutes les connexions qui sortent du WIFI-Net sont acceptées
$IPT -t filter -A FORWARD -i $IFACE_WLAN -o $IFACE_INET -m state --state NEW,ESTABLISHED,RELATED -j LOG_N_ACCEPT
$IPT -t filter -A FORWARD -i $IFACE_INET -o $IFACE_WLAN -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 INPUT  -i $IFACE_LAN -m state --state ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A OUTPUT -o $IFACE_LAN -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT

# On permet toutes les liaisons firewall-WLAN
$IPT -t filter -A INPUT  -i $IFACE_WLAN -m state --state ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A OUTPUT -o $IFACE_WLAN -m state --state NEW,ESTABLISHED -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_LAN -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A OUTPUT -o $IFACE_LAN -m state --state ESTABLISHED -j LOG_N_ACCEPT

#on permet toutes les liaisons WLAN-firewall
$IPT -t filter -A INPUT  -i $IFACE_WLAN -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A OUTPUT -o $IFACE_WLAN -m state --state ESTABLISHED -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
######################################################################

#!!!!!!! Limite le nombre de connexions maximum autorisées en simultané par une seule IP source à l’aide du module connlimit
$IPT -t filter -A INPUT -i $IP_IFACE_INET -p tcp -m connlimit --connlimit-above 100 -j REJECT

###### Définir des ports libre ############################
#!!!!! Règle que je trouve plus rigolote, qui consiste à « piéger des ports » qui ne sont pas utilisés
# sur la machine, et blacklister pour un certains temps les machines qui essayer de s’y connecter.
# Notez aussi que vous pouvez voir quelles sont les IP blacklistées dans le fichier : /proc/net/xt_recent/portscan
$IPT -t filter -A INPUT -m recent --rcheck --seconds 86400 --name portscan --mask 255.255.255.255 --rsource -j DROP
$IPT -t filter -A INPUT -m recent --remove --name portscan --mask 255.255.255.255 --rsource
$IPT -t filter -A INPUT ! -s $IP_ADMIN_EXTERN,$IP_IFACE_INET -p tcp -m multiport --dports $PORTS_FAKE -m recent --set --name portscan --mask 255.255.255.255 --rsource -j DROP
# Enfin, il est bon de noter que la table du module « recent » est limitée a 100 entrées (par défaut).
# C’est (très) rapidement plein pour l’usage que je vous présente ici (et pour un serveur exposé sur Internet) ce qui limite son intérêt.
# Aussi je vous conseille d’augmenter la taille de cette table en créant un fichier « modprod.conf » (pour régler une option de ce module kernel)
# pour augmenter cette limite et que cela s’applique au démarage de la machine :
# Ajuster la valeur selon la capacité de votre serveur. Il faut un reboot pour qu'elle soit appliquée.

echo "options xt_recent ip_list_tot=5000" > /etc/modprobe.d/xt_recent.conf

if [ ! -d "/sys/module/xt_recent" ]; then
  echo ""
  echo "  - ${green} Activation du module 'xt_recent' dans 'modprobe' : ${NC} ${OK}"
  modprobe xt_recent
fi

#Reinitialize xt_recent
#Remove the module with sudo modprobe -r xt_recent. Add it back with sudo modprobe xt_recent.
#Check to make sure your parameters were applied with sudo cat /sys/module/xt_recent/parameters/ip_pkt_list_tot.
#Add the rules that you couldn't
#If you stopped iptables sudo service iptables start to bring it back.
#Add your rules back in with the higher values you wanted.
#Bonus:
#sudo watch 'iptables -nvL' will allow you to watch stuff hit the xt_recent rules.


# Pour le serveur ssh
#$IPT -t filter -A OUTPUT -o $IFACE_INET -p tcp --sport $PORT_SSH –s $IP_ADMIN_EXTERN -m state --state NEW -m recent --set --name SSH
#$IPT -t filter -A OUTPUT -o $IFACE_INET -p tcp --sport $PORT_SSH –s $IP_ADMIN_EXTERN -m state --state NEW -m recent --update --seconds 300 --hitcount 2 --rttl --name SSH -j LOG_N_DROP
#$IPT -t filter -A OUTPUT -o $IFACE_INET -p tcp --sport $PORT_SSH –s $IP_ADMIN_EXTERN -j LOG_N_ACCEPT


#$IPT -t filter -A OUTPUT -o $IFACE_INET -p tcp --sport $PORT_SSH -j ACCEPT
#$IPT -t filter -A INPUT  -i $IFACE_INET -p tcp --dport $PORT_SSH -j ACCEPT

# Pour le serveur smtp
#$IPT -t filter -A OUTPUT -o $IFACE_INET -p tcp --sport 25 -j LOG_N_ACCEPT
#$IPT -t filter -A INPUT  -i $IFACE_INET -p tcp --dport 25 -j LOG_N_ACCEPT

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
######################################################################

# Toutes les connexions Firewall-Internet
#$IPT -t filter -A OUTPUT -o $IFACE_INET -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#$IPT -t filter -A  INPUT -i $IFACE_INET -m state --state ESTABLISHED,RELATED -j ACCEPT

# connexions Firewall-Internet (dns)
$IPT -t filter -A INPUT  -p udp --sport 53 -i $IFACE_INET -j LOG_N_ACCEPT
$IPT -t filter -A OUTPUT -p udp --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
$IPT -t filter -A OUTPUT -p tcp --dport 53 -o $IFACE_INET -j LOG_N_ACCEPT

# connexions Firewall-Internet (ntp)
$IPT -t filter -A INPUT  -p udp --sport 123 -i $IFACE_INET -j LOG_N_ACCEPT
$IPT -t filter -A OUTPUT -p udp --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
$IPT -t filter -A OUTPUT -p tcp --dport 123 -o $IFACE_INET -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,RELATED -j LOG_N_ACCEPT
$IPT -t filter -A INPUT  -p tcp --sport 25  -i $IFACE_INET -m state --state ESTABLISHED,RELATED -j LOG_N_ACCEPT


# connexions Firewall-Internet (nntp)
#$IPT -t filter -A OUTPUT -p tcp --dport 119  -o $IFACE_INET -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#$IPT -t filter -A INPUT  -p tcp --sport 119  -i $IFACE_INET -m state --state ESTABLISHED,RELATED -j ACCEPT


echo ""
echo "  - ${green} Règles du parefeu ..:: FIREWALL -> INTERNET ::.. : ${NC} ${OK}"






# RAW
$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 -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 -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 -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 -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 -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 -A Fail2Ban-SSH -j RETURN
$IPT -t filter -A INPUT -j LOG --log-prefix "ACTION7=DROP-POLICY"



  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 ()
{
  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


}
 
fw_restore ()
{
if [ -e /etc/iptables/rules.v4 ]; then
    $IPT-restore < /etc/iptables/rules.v4
fi
}

######################################################################
# 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
 




3) Auparavant j'avais activé cette section dans mon parefeu, mais je nepense pas que cela soit à l'ordre du jour?


# Spoofing d’IP source
# Filtrage triviales basées sur les IP sources en dropant tout ce qui arrive d’un réseau privé/réservé
# C’est très peu probable pour un serveur avec uniquement une IP publique sur Internet.
#$IPT -t mangle -A PREROUTING -s 224.0.0.0/8 -j PRE_LOG_N_DROP
#$IPT -t mangle -A PREROUTING -s 169.254.0.0/16 -j PRE_LOG_N_DROP
#$IPT -t mangle -A PREROUTING -s 172.16.0.0/12 -j PRE_LOG_N_DROP
#$IPT -t mangle -A PREROUTING -s 192.0.2.0/24 -j PRE_LOG_N_DROP
#$IPT -t mangle -A PREROUTING -s 192.168.0.0/16 -j PRE_LOG_N_DROP
#$IPT -t mangle -A PREROUTING -s 10.0.0.0/8 -j PRE_LOG_N_DROP
#$IPT -t mangle -A PREROUTING -s 0.0.0.0/8 -j PRE_LOG_N_DROP
#$IPT -t mangle -A PREROUTING -s 240.0.0.0/5 -j PRE_LOG_N_DROP
#$IPT -t mangle -A PREROUTING -s 127.0.0.0/8 ! -i lo -j PRE_LOG_N_DROP
 



Merci d'avance merci.gif

Dernière modification par dudux2 (06-04-2020 20:46:45)


Petit projet d’une box internet 4G avec un rpi3b+

Hors ligne

#2 06-04-2020 22:26:04

raleur
Membre
Inscription : 03-10-2014

Re : Paramétrage sysctl.con/d'iptables pour une Box 4G avec un Raspberry

dudux2 a écrit :

iface wlan0 inet static
  address 192.168.2.254
  netmask 255.255.255.0
(...)
iface eth0 inet static
  address 192.168.2.252
  netmask 255.255.255.0


Configurer le même réseau IP sur deux interfaces indépendantes est une très mauvaise idée.

dudux2 a écrit :

Comment sont gérées les interfaces réseau et les cartes wifi


Question trop vague.

dudux2 a écrit :

Je suppose qu'ils ont créer un "Broadcast"?


Cette phrase ne veut rien dire.

dudux2 a écrit :

ce qu'il compte, c'est que tout mon matériel soient visible sur le même réseau


Alors il faut regrouper les deux interfaces dans un pont au lieu de les configurer indépendamment.
Note que pour ponter l'interface wifi, il faudra d'abord la configurer en mode master (point d'accès). Dans cet ordre.

dudux2 a écrit :

pour ajouter un peu de sécurité, désactiver totalement l'ICMP et ne pas activer l'IPV6.


Ridicule. Désactiver totalement ICMP n'ajoute pas de sécurité et casse le fonctionnement normal de TCP/IP.


Il vaut mieux montrer que raconter.

Hors ligne

#3 07-04-2020 04:33:41

dudux2
Membre
Distrib. : Rasbian
Noyau : Buster 4.19
(G)UI : Pas de gestionnaire de fenêtre
Inscription : 21-01-2017

Re : Paramétrage sysctl.con/d'iptables pour une Box 4G avec un Raspberry

raleur a écrit :

dudux2 a écrit :


iface wlan0 inet static
  address 192.168.2.254
  netmask 255.255.255.0
(...)
iface eth0 inet static
  address 192.168.2.252
  netmask 255.255.255.0


Configurer le même réseau IP sur deux interfaces indépendantes est une très mauvaise idée.


Quel est le risque? Conflit d'IP?

raleur a écrit :


dudux2 a écrit :


ce qu'il compte, c'est que tout mon matériel soient visible sur le même réseau


Alors il faut regrouper les deux interfaces dans un pont au lieu de les configurer indépendamment.
Note que pour ponter l'interface wifi, il faudra d'abord la configurer en mode master (point d'accès). Dans cet ordre.


J'en prends bonne note, j'ai déjà vu le principe sur divers tuto.
Créer un pont réseau entre ma carte wifi et ma carte ethernet implique forcément l'utilisation d'Ebtable? A priori les trames qui ont une adresse source non identifié par le point d'accès vont être rejeter comme l'explique ce lien: https://wiki.debian.org/fr/BridgeNetworkConnections


Petit projet d’une box internet 4G avec un rpi3b+

Hors ligne

#4 07-04-2020 12:28:56

raleur
Membre
Inscription : 03-10-2014

Re : Paramétrage sysctl.con/d'iptables pour une Box 4G avec un Raspberry

dudux2 a écrit :

Quel est le risque? Conflit d'IP?


Routes conflictuelles. Ce n'est pas un risque, c'est un certitude. S'il y a plusieurs routes via des interfaces différentes pour la même destination, le noyau va en choisir une et ignorer les autres. La communication avec les machines connectées à l'interface d'une route ignorée sera donc impossible.

dudux2 a écrit :

Créer un pont réseau entre ma carte wifi et ma carte ethernet implique forcément l'utilisation d'Ebtable


Non. Ebtables n'est utile que s'il faut faire du filtrage des trames ethernet pontées. Iptables peut filtrer les paquets IP pontés, si nécessaire.

dudux2 a écrit :

A priori les trames qui ont une adresse source non identifié par le point d'accès vont être rejeter comme l'explique ce lien: https://wiki.debian.org/fr/BridgeNetworkConnections


Où exactement est-ce expliqué ?
Tu ne confondrais pas avec le pontage d'une interface wifi en mode managed (infrastructure), ce qui NE MARCHE PAS ?


Il vaut mieux montrer que raconter.

Hors ligne

#5 07-04-2020 13:43:58

dudux2
Membre
Distrib. : Rasbian
Noyau : Buster 4.19
(G)UI : Pas de gestionnaire de fenêtre
Inscription : 21-01-2017

Re : Paramétrage sysctl.con/d'iptables pour une Box 4G avec un Raspberry

Bonjour DF,

Ah! j'ai été matinal,du coup j'ai réinstallé mon Rasberry, compiler les drivers de mon dongle wifi,  j'en ai profité pour désactiver le wifi HS et le Bluetooth.

J'ai testé la configuration du partage réseau telle que je l'avais présenté au début
- Résultat comme l'avais prédit @Raleur, cela ne fonctionne pas avec 2 interfaces sur le même réseau. Soit les paquets circule via le LAN soit via WLAN, mais jamais en même temps.

J'ai monté mon bridge sur les 2 interfaces réseau et hop cela fonctionne!

Voici mes fichiers de configuration:

/etc/interfaces


# interfaces(5) file used by ifup(8) and ifdown(8) Please note that this
# file is written to be used with dhcpcd For static IP, consult
# /etc/dhcpcd.conf and 'man dhcpcd.conf' Include files from
# /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d



# Interface loopback
auto lo
iface lo inet loopback


## Interface réseau wlan0
allow-hotplug wlan0
iface wlan0 inet manual
  pre-up ifconfig wlan0 up
  pre-up iwconfig wlan0 mode master


## Interface réseau eth0
allow-hotplug eth0
iface eth0 inet manual


#Configuration du pont(bridge)
auto br0
iface br0 inet static
  address 192.168.2.254
  netmask 255.255.255.0
  broadcast 192.168.2.255
  bridge_ports eth0 wlan0
  bridge_hw 00:e0:4c:25:0e:3c
 
 
## Clef 4G
allow-hotplug wwan0
  iface wwan0 inet dhcp
  pre-up sleep 5 && /bin/echo -ne 'AT^NDISDUP=1,1,"mmsbouygtel.com"\r\n' > /dev/ttyUSB0
  post-down /bin/echo -ne 'AT^NDISDUP=1,0\r\n' > /dev/ttyUSB0

 



/etc/dnsmasq.conf


#RPiHotspot config - Internet
interface=lo,eth0,wwan0,wlan0,br0
no-dhcp-interface=lo,wwan0,eth0,wlan0
bind-dynamic
domain-needed
bogus-priv
dhcp-range=192.168.2.1,192.168.2.254,255.255.255.0,24h
 



/etc/dhcpcd.conf


interface wlan0
  nohook wpa_supplicant

denyinterfaces wlan0
denyinterfaces eth0
 



/etc/hostapd/hostapd.conf


# the interface used by the AP
interface=wlan0
# bridge interface
bridge=br0
# "g" simply means 2.4GHz band
hw_mode=g
# the channel to use
channel=10
# limit the frequencies used to those allowed in the country
ieee80211d=1
# the country code
country_code=FR
# 802.11n support
ieee80211n=1
# QoS support, also required for full speed on 802.11n/ac/ax
wmm_enabled=1
# the name of the AP
ssid=..::test::AP::..
# 1=wpa, 2=wep, 3=both
auth_algs=1
# WPA2 only
wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
#wpa_psk=
wpa_passphrase=0123456789
 


Petit projet d’une box internet 4G avec un rpi3b+

Hors ligne

#6 07-04-2020 22:07:36

dudux2
Membre
Distrib. : Rasbian
Noyau : Buster 4.19
(G)UI : Pas de gestionnaire de fenêtre
Inscription : 21-01-2017

Re : Paramétrage sysctl.con/d'iptables pour une Box 4G avec un Raspberry

Je suis en train de remettre au propre mon script de firewall.
Vous en pensez quoi de se démarrage, pour être honnête j'ai essayé de mettre en place les bonnes manières.
Si j'ai bien compris, il faut au maximum évité d'utilisé RELATED, sauf pour l'icmp
Donc dans la première partie j'autorise le loopback et ensuite les connexions établies
Pour finir je Drop tout

Mon soucis c'est que tout les packets reste bloqué dans le "! --state INVALID"

Vous en pensez quoi?

# 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

# Permettre à une connexion ouverte de recevoir du trafic en entrée.
$IPT -t filter -A INPUT -m state --state ESTABLISHED -j LOG_N_ACCEPT

# Il est préférable de laisser RELATED autorisé pour l'ICMP.
$IPT -t filter -A INPUT -p icmp -m state --state RELATED -j LOG_N_ACCEPT

# Permettre à une connexion ouverte d'emettre du trafic en sortie.
# -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A OUTPUT -m state ! --state INVALID -j LOG_N_ACCEPT

# Nous faisons pointer table FILTRE par défaut sur DROP
$IPT -t filter -P INPUT DROP
$IPT -t filter -P OUTPUT DROP
$IPT -t filter -P FORWARD DROP



Merci d'avance!



Dans les 3/4 des tutos que l'on trouve, il est dit d'autoriser les connexions établies avant de tout mettre en DROP
Et au final, il propose un script comme celui-ci:


#!/bin/bash
 
# Vide la table actuelle (pour avoir des règles propres)
iptables -t filter -F
 
# Vider les règles personnelles (crées par mon fail2ban)
iptables -t filter -X
 
# Interdire toutes connexions entrantes et sortantes
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP
 
# Ne pas casser les connexions établies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
 
# Autoriser le loopback
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT
 
# Mes règles perso
iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT
 



Du coup entre le manuel et les scripts, je suis un peut perdu...
Iptables refait le tri avant de rangés les règles dans ces tiroirs?

Dernière modification par dudux2 (07-04-2020 22:25:43)


Petit projet d’une box internet 4G avec un rpi3b+

Hors ligne

#7 08-04-2020 08:36:14

raleur
Membre
Inscription : 03-10-2014

Re : Paramétrage sysctl.con/d'iptables pour une Box 4G avec un Raspberry

dudux2 a écrit :

Si j'ai bien compris, il faut au maximum évité d'utilisé RELATED, sauf pour l'icmp


Tu as mal compris. RELATED doit s'utiliser là où il est approprié.

dudux2 a écrit :

Mon soucis c'est que tout les packets reste bloqué dans le "! --state INVALID"
Vous en pensez quoi?


Si tu ne montres pas le jeu de règles complet avec toutes les chaînes, ça va être difficile d'émettre un avis.


Il vaut mieux montrer que raconter.

Hors ligne

#8 08-04-2020 09:45:35

dudux2
Membre
Distrib. : Rasbian
Noyau : Buster 4.19
(G)UI : Pas de gestionnaire de fenêtre
Inscription : 21-01-2017

Re : Paramétrage sysctl.con/d'iptables pour une Box 4G avec un Raspberry

En effet je n'ai pas dû tout comprendre...

Je poste le travail que j'avais fais avant ces modifications, si vous pouviez me guidé pour me dire si j'ai quelque chose de cohérent.

Mon script:


#!/bin/sh
### BEGIN INIT INFO
# Provides:          Firewall Rules
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Firewall deamon
# Description:       Enable service provided by daemon.
### END INIT INFO

# 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

# La table FILTRE par défaut sur DROP
$IPT -t filter -P INPUT DROP
$IPT -t filter -P OUTPUT DROP
$IPT -t filter -P FORWARD DROP






#####################
# Création de nouvelles chaînes
# Pour rediriger les logs
# Dans des fichiers personalisées

$IPT -t raw -N RAW_LOG_N_DROP
$IPT -t mangle -N PRE_LOG_N_DROP
$IPT -t nat -N LOG_N_MASQ
$IPT -t filter -N LOG_N_DROP
$IPT -t filter -N LOG_N_ACCEPT
$IPT -t filter -N LOG_N_REJECT
$IPT -t filter -N Fail2Ban-SSH



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
######################################################################


# Bloquer la fragmentation TCP :
$IPT -t mangle -A PREROUTING -f -j PRE_LOG_N_DROP

# 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

# Spoofing d’IP source
# Filtrage triviales basées sur les IP sources en dropant tout ce qui arrive d’un réseau privé/réservé
# C’est très peu probable pour un serveur avec uniquement une IP publique sur Internet.
#$IPT -t mangle -A PREROUTING -s 224.0.0.0/8 -j PRE_LOG_N_DROP
#$IPT -t mangle -A PREROUTING -s 169.254.0.0/16 -j PRE_LOG_N_DROP
#$IPT -t mangle -A PREROUTING -s 172.16.0.0/12 -j PRE_LOG_N_DROP
#$IPT -t mangle -A PREROUTING -s 192.0.2.0/24 -j PRE_LOG_N_DROP
#$IPT -t mangle -A PREROUTING -s 192.168.0.0/16 -j PRE_LOG_N_DROP
#$IPT -t mangle -A PREROUTING -s 10.0.0.0/8 -j PRE_LOG_N_DROP
#$IPT -t mangle -A PREROUTING -s 0.0.0.0/8 -j PRE_LOG_N_DROP
#$IPT -t mangle -A PREROUTING -s 240.0.0.0/5 -j PRE_LOG_N_DROP
#$IPT -t mangle -A PREROUTING -s #127.0.0.0/8 ! -i lo -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 -j LOG_N_ACCEPT
$IPT -t filter -A FORWARD -i $IFACE_INET -o $IFACE_BRDG -m state --state ESTABLISHED -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 -j LOG_N_ACCEPT
$IPT -t filter -A INPUT  -i $IFACE_BRDG -m state --state ESTABLISHED -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 -j LOG_N_ACCEPT
$IPT -t filter -A OUTPUT -o $IFACE_BRDG -m state --state ESTABLISHED -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
######################################################################



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)
$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

# 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 (nntp)
$IPT -t filter -A OUTPUT -p tcp --dport 119 -o $IFACE_INET -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A INPUT  -p tcp --sport 119 -i $IFACE_INET -m state --state ESTABLISHED -j LOG_N_ACCEPT

echo ""
echo "  - ${green} Règles du parefeu ..:: FIREWALL -> INTERNET ::.. : ${NC} ${OK}"








# RAW
$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 -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 -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 -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 -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 -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 -A Fail2Ban-SSH -j RETURN
#$IPT -t filter -A INPUT -j LOG --log-prefix "ACTION7=DROP-POLICY"



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 ()
{
  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
}
 
fw_restore ()
{
if [ -e /etc/iptables/rules.v4 ]; then
    $IPT-restore < /etc/iptables/rules.v4
fi
}

######################################################################
# 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


 



/etc/iptables/rules.v4


# Generated by xtables-save v1.8.2 on Wed Apr  8 10:28:18 2020
*mangle
:PREROUTING ACCEPT [35:2642]
:INPUT ACCEPT [32:2444]
:FORWARD ACCEPT [3:198]
:OUTPUT ACCEPT [21:2360]
:POSTROUTING ACCEPT [24:2558]
:PRE_LOG_N_DROP - [0:0]
-A PREROUTING -f -j PRE_LOG_N_DROP
-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j PRE_LOG_N_DROP
-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j PRE_LOG_N_DROP
-A PREROUTING -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j PRE_LOG_N_DROP
-A PREROUTING -p tcp -m tcp --tcp-flags FIN,RST FIN,RST -j PRE_LOG_N_DROP
-A PREROUTING -p tcp -m tcp --tcp-flags FIN,ACK FIN -j PRE_LOG_N_DROP
-A PREROUTING -p tcp -m tcp --tcp-flags ACK,URG URG -j PRE_LOG_N_DROP
-A PREROUTING -p tcp -m tcp --tcp-flags PSH,ACK PSH -j PRE_LOG_N_DROP
-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
-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j PRE_LOG_N_DROP
-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j PRE_LOG_N_DROP
-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,PSH,URG -j PRE_LOG_N_DROP
-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,ACK,URG -j PRE_LOG_N_DROP
-A PRE_LOG_N_DROP -m limit --limit 1/sec -j LOG --log-prefix "ACTION2=DROP-PREROUTING"
-A PRE_LOG_N_DROP -j DROP
COMMIT
# Completed on Wed Apr  8 10:28:18 2020
# Generated by xtables-save v1.8.2 on Wed Apr  8 10:28:18 2020
*raw
:PREROUTING ACCEPT [35:2642]
:OUTPUT ACCEPT [21:2360]
:RAW_LOG_N_DROP - [0:0]
-A RAW_LOG_N_DROP -m limit --limit 1/sec -j LOG --log-prefix "ACTION1=DROP-RAW"
-A RAW_LOG_N_DROP -j DROP
COMMIT
# Completed on Wed Apr  8 10:28:18 2020
# Generated by xtables-save v1.8.2 on Wed Apr  8 10:28:18 2020
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:LOG_N_MASQ - [0:0]
-A POSTROUTING -o wwan0 -j LOG_N_MASQ
-A LOG_N_MASQ -m limit --limit 1/sec -j LOG --log-prefix "ACTION3=MASQ-NAT"
-A LOG_N_MASQ -j MASQUERADE
COMMIT
# Completed on Wed Apr  8 10:28:18 2020
# Generated by xtables-save v1.8.2 on Wed Apr  8 10:28:18 2020
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
:LOG_N_DROP - [0:0]
:LOG_N_ACCEPT - [0:0]
:LOG_N_REJECT - [0:0]
:Fail2Ban-SSH - [0:0]
-A INPUT -i lo -j LOG_N_ACCEPT
-A INPUT -i br0 -m state --state ESTABLISHED -j LOG_N_ACCEPT
-A INPUT -i br0 -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT
-A INPUT -i wwan0 -p icmp -m icmp --icmp-type 0 -j LOG_N_ACCEPT
-A INPUT -i wwan0 -p udp -m udp --sport 53 -j LOG_N_ACCEPT
-A INPUT -i wwan0 -p tcp -m tcp --sport 53 -j LOG_N_ACCEPT
-A INPUT -i wwan0 -p udp -m udp --sport 123 -j LOG_N_ACCEPT
-A INPUT -i wwan0 -p tcp -m tcp --sport 123 -j LOG_N_ACCEPT
-A INPUT -i wwan0 -p tcp -m tcp --sport 25 -m state --state ESTABLISHED -j LOG_N_ACCEPT
-A INPUT -i wwan0 -p tcp -m tcp --sport 119 -m state --state ESTABLISHED -j LOG_N_ACCEPT
-A FORWARD -i br0 -o wwan0 -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT
-A FORWARD -i wwan0 -o br0 -m state --state ESTABLISHED -j LOG_N_ACCEPT
-A OUTPUT -o lo -j LOG_N_ACCEPT
-A OUTPUT -o br0 -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT
-A OUTPUT -o br0 -m state --state ESTABLISHED -j LOG_N_ACCEPT
-A OUTPUT -o wwan0 -p icmp -m icmp --icmp-type 8 -j LOG_N_ACCEPT
-A OUTPUT -o wwan0 -p udp -m udp --dport 53 -j LOG_N_ACCEPT
-A OUTPUT -o wwan0 -p tcp -m tcp --dport 53 -j LOG_N_ACCEPT
-A OUTPUT -o wwan0 -p udp -m udp --dport 123 -j LOG_N_ACCEPT
-A OUTPUT -o wwan0 -p tcp -m tcp --dport 123 -j LOG_N_ACCEPT
-A OUTPUT -o wwan0 -p tcp -m tcp --dport 25 -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT
-A OUTPUT -o wwan0 -p tcp -m tcp --dport 119 -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT
-A LOG_N_DROP -m limit --limit 1/sec -j LOG --log-prefix "ACTION5=DROP-INPUT"
-A LOG_N_DROP -j DROP
-A LOG_N_ACCEPT -m limit --limit 1/sec -j LOG --log-prefix "ACTION4=ACCEPT-INPUT"
-A LOG_N_ACCEPT -j ACCEPT
-A LOG_N_REJECT -m limit --limit 1/sec -j LOG --log-prefix "ACTION6=REJECT-INPUT"
-A LOG_N_REJECT -j REJECT --reject-with icmp-port-unreachable
COMMIT
# Completed on Wed Apr  8 10:28:18 2020

 





J'ai quelque chose qui me chiffonne, je n'ai pas encore installer fail2ban et lorsque j'active cette règle, j'ai des choses dans mes logs.
Sans Fai2Ban installé, je devrais rien avoir?
Vous avez une explication?

# FAIL2BAN POLICY
#$IPT -t filter -A Fail2Ban-SSH -j RETURN
#$IPT -t filter -A INPUT -j LOG --log-prefix "ACTION7=DROP-POLICY"




Pourquoi dans le fichier rules.v4, ma tabble RAW est positionné après la table MANGLE?
Une déclaration dans le mauvais ordre quelque part?


Petit projet d’une box internet 4G avec un rpi3b+

Hors ligne

#9 08-04-2020 11:12:19

raleur
Membre
Inscription : 03-10-2014

Re : Paramétrage sysctl.con/d'iptables pour une Box 4G avec un Raspberry

Ce script n'a strictement rien à voir avec celui que tu as posté plus haut, comment veux-tu qu'on trouve la moindre cohérence ?
Si tu rencontres des problèmes avec un script, tu poste le script complet en question et pas un autre et tu décris les problèmes en détail.
Si tu veux un avis sur un autre script, tu poste le script complet et pas un autre.

Dernière modification par raleur (08-04-2020 11:14:15)


Il vaut mieux montrer que raconter.

Hors ligne

#10 08-04-2020 11:40:08

dudux2
Membre
Distrib. : Rasbian
Noyau : Buster 4.19
(G)UI : Pas de gestionnaire de fenêtre
Inscription : 21-01-2017

Re : Paramétrage sysctl.con/d'iptables pour une Box 4G avec un Raspberry

Oui je préfère travaillé sur le dernier que j'ai posté.
Je voudrais savoir si ce que j'ai fais paraît logique?
Si vous voyez des incohérences, afin d'apprendre et de l'améliorer.
iptables est loin d'être simple.

Dernière modification par dudux2 (08-04-2020 11:43:19)


Petit projet d’une box internet 4G avec un rpi3b+

Hors ligne

#11 08-04-2020 12:00:46

raleur
Membre
Inscription : 03-10-2014

Re : Paramétrage sysctl.con/d'iptables pour une Box 4G avec un Raspberry

dudux2 a écrit :

Oui je préfère travaillé sur le dernier que j'ai posté.


L'usine à gaz du message #8 ?


Il vaut mieux montrer que raconter.

Hors ligne

#12 08-04-2020 12:10:39

dudux2
Membre
Distrib. : Rasbian
Noyau : Buster 4.19
(G)UI : Pas de gestionnaire de fenêtre
Inscription : 21-01-2017

Re : Paramétrage sysctl.con/d'iptables pour une Box 4G avec un Raspberry

Ah... oui celle du message #8

Petit projet d’une box internet 4G avec un rpi3b+

Hors ligne

#13 08-04-2020 13:09:39

raleur
Membre
Inscription : 03-10-2014

Re : Paramétrage sysctl.con/d'iptables pour une Box 4G avec un Raspberry

# 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.

# 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.

# 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.

# 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.

# 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.

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 ?

    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.

Dernière modification par raleur (08-04-2020 13:11:19)


Il vaut mieux montrer que raconter.

Hors ligne

#14 08-04-2020 16:03:16

dudux2
Membre
Distrib. : Rasbian
Noyau : Buster 4.19
(G)UI : Pas de gestionnaire de fenêtre
Inscription : 21-01-2017

Re : Paramétrage sysctl.con/d'iptables pour une Box 4G avec un Raspberry

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


 

Dernière modification par dudux2 (09-04-2020 07:26:20)


Petit projet d’une box internet 4G avec un rpi3b+

Hors ligne

#15 09-04-2020 09:32:35

raleur
Membre
Inscription : 03-10-2014

Re : Paramétrage sysctl.con/d'iptables pour une Box 4G avec un Raspberry

dudux2 a écrit :

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.


Je ne parlais que de trois types ICMP, et du coup tu autorises TOUS les paquets dans l'état RELATED à travers le routeur !

dudux2 a écrit :

Là je ne maîtrise pas assez (du tout) pour trouver la solution à la redondance...


Tu vois bien que par exemple dans ces deux règles

$IPT -t filter -A INPUT  -i $IFACE_BRDG -m state --state ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A INPUT  -i $IFACE_BRDG -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT


La première règle n'apporte rien par rapport à la seconde, donc elle est redondante et peut être supprimée.
Ou bien l'état ESTABLISHED est redondant dans la seconde règle est peut en être retiré puisque déjà accepté dans la première.

dudux2 a écrit :

Ici sur mon réseau local, je devrais sans doute ajouter l'état RELATED aussi? Pour l'ICMP et le FTP


Pour les trois types ICMP mentionnés plus haut, oui.
Pour FTP, la gestion de l'état RELATED est utile seulement si tu gères le protocole FTP avec le module nf-conntrack-ftp et les règles CT --helper qui vont avec. Sinon les connexions de données FTP seront vues comme des connexions indépendantes commençant par l'état NEW.

# 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


Si tu vois des paquets ICMP echo-reply dans l'état NEW, tu me fais signe.

# 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


L'ajout de la condition sur l'état ESTABLISHED bouche la faille. Cette règle n'est pas inutile : sans elle, tu bloques les paquets UDP de réponse DNS.

dudux2 a écrit :

- 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!?


Non. La politique par défaut d'une chaîne n'est pas une règle, sa place dans la chaîne ne dépend pas de l'ordre des commandes. Elle s'applique toujours aux paquets qui atteignent la fin de la chaîne sans avoir été acceptés ou bloqués par aucune règle.

dudux2 a écrit :

- Lorsque l'on à une politique en DROP, je suppose que faire un DROP sur les packets INVALID est inutile, que cela est fait automatiquement?


C'est à ça que sert la politique par défaut : définir le sort des paquets arrivés en fin de chaîne. Mais si tu veux des logs, il faut des règles.

dudux2 a écrit :

- 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?


Toi, pour les règles  TCP. TCP ne fonctionne pas différemment avec le protocole DNS qu'avec les autres protocoles.
--dport en INPUT serait utile si la machine faisait office de serveur DNS public, ce qui ne semble pas être le cas.
En tout cas ça n'accepte pas les réponses reçues (qui ont le port source 53) aux requêtes DNS émises.


Il vaut mieux montrer que raconter.

Hors ligne

#16 09-04-2020 14:50:49

LaFouine
Membre
Distrib. : Debian testing
Noyau : 4.19.0-4-amd64
(G)UI : Xfce
Inscription : 10-04-2017

Re : Paramétrage sysctl.con/d'iptables pour une Box 4G avec un Raspberry

Pour mes pauvre connaissance j'ajouterai:

Des regles qui autorise que les adresse mac qui son sur une liste pour le wifi c'est une petite securiter en plus. c est pas inviolable  mai sa complique quand meme la tache.
La liste des dns autoriser wifi et lan , certaine application ce gène pas pour aller ou elle veule.  vu que tu n'utilise pas de serveur dns c'est pas forcément possible.

Bloquer l'ipv6 contrairment a ce qui ce dit, toute les application a ce jour ou celle que j'utilise 1 seul peux l'utiliser. donc bon .... l'icmp est utile mai pas indispensable pour l'ipv4 mai obligatoir pour l'ipv6.

j'aurai ajouter des limites de tentative par heure, de meme, pour tout ce que tu log j'ai pas vu de limitation (j'ai aussi lu en traver le gros pavé...) le risque c'est le fichier de log qui devien enorme... etc.

J'ai aussi monter ma box mai sous debian. et fait une page dans wiki que tu peux peut etre ,et surment,  ameliorer. c'est pas parfait mai ça peut inspirer smile

Attention utilise iptable-save, et pas ton script pour le lancer car le temp de la lecture les paquet peuve passer si la machine a peux de puissance. (sa ma fait le gag et valu un post)
pour le reste je laisse a ceux qui connaisse mieux que moi le reseaux.

Fait toi plez. tongue

Debian testing, nvidia 980 gtx sli, cm asurock 16 gb ram cpu i7 4,2 ghz

Hors ligne

#17 09-04-2020 16:02:31

dudux2
Membre
Distrib. : Rasbian
Noyau : Buster 4.19
(G)UI : Pas de gestionnaire de fenêtre
Inscription : 21-01-2017

Re : Paramétrage sysctl.con/d'iptables pour une Box 4G avec un Raspberry

Super! Merci beaucoup raleur,

- Je pense que ce coup ci, on est bon!
- Les premiers logs sont concluant jusqu'à présent, je vais continué d'analiser tout cela...
- Il me restera plus que du SNAT à faire au besoin sur mon réseau local.
- J'ai décidé de gardé mon routeur fermé de l'extérieur (enfin pas pour les réponses) vis à vis du serveur ssh et http, donc je pense que je minimise les risques.
- C'est suffisement sécurisé du côté iptables pour toi, pour s'en servir d'une box 4G?

- J’ai désactivé l’ipv6 sur mes interfaces et dans les logiciels. (plus simple lorsque l’on maîtrise pas), est-ce que je doits créer des règles pour tout bloqué en IPV6.  Dans le cas d’un oubli ?

- Pour Fail2Ban, je ne vois plus trop l'intérêt dans la configuration actuelle? Au cas où l'on passerait à travers le parefeu... pour surveiller les accès aux services nginx et ssh et qui bloquerait les Ips qui ne proviendrait pas du réseau local?


- Rhunter peut-être intéresssant à mettre en place lorsque je finaliserais l'installation.


Voici le code final (si je suis un bon élève!)


#!/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


# 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







#####################
# Création de nouvelles chaînes
# Pour rediriger les logs
# Dans des fichiers personalisées

# RAW
$IPT -t raw -N RAW_LOG_N_DROP

# MANGLE
$IPT -t mangle -N PRE_LOG_N_DROP

# NAT
$IPT -t nat -N LOG_N_MASQ

# FILTER
$IPT -t filter -N LOG_N_ACCEPT
$IPT -t filter -N LOG_N_DROP
$IPT -t filter -N LOG_N_REJECT

# FAIL2BAN POLICY
$IPT -t filter -N Fail2Ban-SSH





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

# Gestion de la passerelle (On autorise tout le traffic)
$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


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 INPUT  -i $IFACE_BRDG -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT

# Gestion de la passerelle (ICMP) [destination-unreachable=type3]
$IPT -t filter -A INPUT  -p icmp --icmp-type destination-unreachable -i $IFACE_INET -m state --state ESTABLISHED -j LOG_N_ACCEPT

# Gestion de la passerelle (ICMP) [time-exceeded=type11]
$IPT -t filter -A INPUT  -p icmp --icmp-type time-exceeded       -i $IFACE_INET -m state --state ESTABLISHED -j LOG_N_ACCEPT

# Gestion de la passerelle (ICMP) [parameter-problem=type12]
$IPT -t filter -A INPUT  -p icmp --icmp-type parameter-problem       -i $IFACE_INET -m state --state ESTABLISHED -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 OUTPUT -o $IFACE_BRDG -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT

# Gestion de la passerelle (ICMP) [destination-unreachable=type3]
$IPT -t filter -A OUTPUT -p icmp --icmp-type destination-unreachable -o $IFACE_INET -m state --state ESTABLISHED -j LOG_N_ACCEPT

# Gestion de la passerelle (ICMP) [time-exceeded=type11]
$IPT -t filter -A OUTPUT -p icmp --icmp-type time-exceeded           -o $IFACE_INET -m state --state ESTABLISHED -j LOG_N_ACCEPT

# Gestion de la passerelle (ICMP) [parameter-problem=type12]
$IPT -t filter -A OUTPUT -p icmp --icmp-type parameter-problem       -o $IFACE_INET -m state --state ESTABLISHED -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 ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A INPUT  -p icmp --icmp-type echo-reply   -i $IFACE_INET -m state --state ESTABLISHED -j LOG_N_ACCEPT

# connexions Firewall-Internet (smtp)
$IPT -t filter -A OUTPUT -p tcp  --dport 587  -o $IFACE_INET -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A INPUT  -p tcp  --sport 587  -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
$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
$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 -j LOG_N_ACCEPT
$IPT -t filter -A INPUT  -p tcp --sport 80  -i $IFACE_INET -m state --state ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A OUTPUT -p tcp --dport 443 -o $IFACE_INET -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A INPUT  -p tcp --sport 443 -i $IFACE_INET -m state --state ESTABLISHED -j LOG_N_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}"







######################################################################
# R E J E T T E  T O U S  L E S  A U T R E S  P A C Q U E T S
######################################################################
$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






# RAW
$IPT -t raw -A RAW_LOG_N_DROP     -m limit --limit 5/min -j LOG --log-prefix "ACTION1=DROP-RAW"
$IPT -t raw -A RAW_LOG_N_DROP -j DROP

# MANGLE
$IPT -t mangle -A PRE_LOG_N_DROP  -m limit --limit 5/min -j LOG --log-prefix "ACTION2=DROP-PREROUTING"
$IPT -t mangle -A PRE_LOG_N_DROP -j DROP

# NAT
$IPT -t nat -A LOG_N_MASQ       -m limit --limit 5/min -j LOG --log-prefix "ACTION3=MASQ-NAT"
$IPT -t nat -A LOG_N_MASQ -j MASQUERADE

# FILTER
$IPT -t filter -A LOG_N_ACCEPT    -m limit --limit 5/min -j LOG --log-prefix "ACTION4=ACCEPT-INPUT"
$IPT -t filter -A LOG_N_ACCEPT -j ACCEPT

$IPT -t filter -A LOG_N_DROP    -m limit --limit 5/min -j LOG --log-prefix "ACTION5=DROP-INPUT"
$IPT -t filter -A LOG_N_DROP -j DROP

$IPT -t filter -A LOG_N_REJECT    -m limit --limit 5/min -j LOG --log-prefix "ACTION6=REJECT-INPUT"
$IPT -t filter -A LOG_N_REJECT -j REJECT

# FAIL2BAN POLICY
$IPT -t filter -A Fail2Ban-SSH -j RETURN
$IPT -t filter -A INPUT -j LOG --log-prefix "ACTION7=DROP-POLICY"



sleep 5

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


 


Petit projet d’une box internet 4G avec un rpi3b+

Hors ligne

#18 10-04-2020 12:38:33

dudux2
Membre
Distrib. : Rasbian
Noyau : Buster 4.19
(G)UI : Pas de gestionnaire de fenêtre
Inscription : 21-01-2017

Re : Paramétrage sysctl.con/d'iptables pour une Box 4G avec un Raspberry

Non mon script n'était pas encore bon au niveau de l'ICMP

Ce coup ci, je pense que c'est mieux!


#!/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


# 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







#####################
# Création de nouvelles chaînes
# Pour rediriger les logs
# Dans des fichiers personalisées

# RAW
$IPT -t raw -N RAW_LOG_N_DROP

# MANGLE
$IPT -t mangle -N PRE_LOG_N_DROP

# NAT
$IPT -t nat -N LOG_N_MASQ

# FILTER
$IPT -t filter -N LOG_N_ACCEPT
$IPT -t filter -N LOG_N_DROP
$IPT -t filter -N LOG_N_REJECT

# FAIL2BAN POLICY
$IPT -t filter -N Fail2Ban-SSH





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
######################################################################

# Gestion de la passerelle (Translation d'adresses pour tout ce qui traverse la passerelle)
$IPT -t nat -A POSTROUTING -o $IFACE_INET -j LOG_N_MASQ

# Gestion de la passerelle (On autorise tout le traffic)
$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


# Gestion de la passerelle [destination-unreachable=type3] & [time-exceeded=type11] & [parameter-problem=type12]
$IPT -t filter -A FORWARD  -p icmp --icmp-type destination-unreachable  -i $IFACE_BRDG -o $IFACE_INET -m state --state ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A FORWARD  -p icmp --icmp-type time-exceeded      -i $IFACE_BRDG -o $IFACE_INET -m state --state ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A FORWARD  -p icmp --icmp-type parameter-problem        -i $IFACE_BRDG -o $IFACE_INET -m state --state ESTABLISHED -j LOG_N_ACCEPT

# Gestion de la passerelle [destination-unreachable=type3] & [time-exceeded=type11] & [parameter-problem=type12]
$IPT -t filter -A FORWARD  -p icmp --icmp-type destination-unreachable  -i $IFACE_INET -o $IFACE_BRDG -m state --state ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A FORWARD  -p icmp --icmp-type time-exceeded      -i $IFACE_INET -o $IFACE_BRDG -m state --state ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A FORWARD  -p icmp --icmp-type parameter-problem        -i $IFACE_INET -o $IFACE_BRDG -m state --state ESTABLISHED -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 INPUT  -i $IFACE_BRDG -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT

# Gestion de la passerelle (ICMP) [destination-unreachable=type3] & [time-exceeded=type11] & [parameter-problem=type12]
$IPT -t filter -A INPUT  -p icmp --icmp-type destination-unreachable -i $IFACE_BRDG -m state --state ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A INPUT  -p icmp --icmp-type time-exceeded       -i $IFACE_BRDG -m state --state ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A INPUT  -p icmp --icmp-type parameter-problem       -i $IFACE_BRDG -m state --state ESTABLISHED -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 OUTPUT -o $IFACE_BRDG -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT

# Gestion de la passerelle (ICMP) [destination-unreachable=type3] & [time-exceeded=type11] & [parameter-problem=type12]
$IPT -t filter -A OUTPUT -p icmp --icmp-type destination-unreachable -o $IFACE_BRDG -m state --state ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A OUTPUT -p icmp --icmp-type time-exceeded           -o $IFACE_BRDG -m state --state ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A OUTPUT -p icmp --icmp-type parameter-problem       -o $IFACE_BRDG -m state --state ESTABLISHED -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
######################################################################

# Gestion Internet-Serveur (ICMP) [destination-unreachable=type3] & [time-exceeded=type11] & [parameter-problem=type12]
$IPT -t filter -A INPUT  -p icmp --icmp-type destination-unreachable -i $IFACE_INET -m state --state ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A INPUT  -p icmp --icmp-type time-exceeded       -i $IFACE_INET -m state --state ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A INPUT  -p icmp --icmp-type parameter-problem       -i $IFACE_INET -m state --state ESTABLISHED -j LOG_N_ACCEPT

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
######################################################################

# Gestion Serveur-Internet (ICMP) [destination-unreachable=type3] & [time-exceeded=type11] & [parameter-problem=type12]
$IPT -t filter -A OUTPUT -p icmp --icmp-type destination-unreachable -o $IFACE_INET -m state --state ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A OUTPUT -p icmp --icmp-type time-exceeded           -o $IFACE_INET -m state --state ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A OUTPUT -p icmp --icmp-type parameter-problem       -o $IFACE_INET -m state --state ESTABLISHED -j LOG_N_ACCEPT

# connexions Serveur-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 ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A INPUT  -p icmp --icmp-type echo-reply   -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
$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
$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 -j LOG_N_ACCEPT
$IPT -t filter -A INPUT  -p tcp --sport 80  -i $IFACE_INET -m state --state ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A OUTPUT -p tcp --dport 443 -o $IFACE_INET -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A INPUT  -p tcp --sport 443 -i $IFACE_INET -m state --state ESTABLISHED -j LOG_N_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

# connexions Firewall-Internet (smtp)
$IPT -t filter -A OUTPUT -p tcp  --dport 587  -o $IFACE_INET -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A INPUT  -p tcp  --sport 587  -i $IFACE_INET -m state --state ESTABLISHED -j LOG_N_ACCEPT

echo ""
echo "  - ${green} Règles du parefeu ..:: FIREWALL -> INTERNET ::.. : ${NC} ${OK}"







######################################################################
# R E J E T T E  T O U S  L E S  A U T R E S  P A C Q U E T S
######################################################################
$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






# RAW
$IPT -t raw -A RAW_LOG_N_DROP     -m limit --limit 5/min -j LOG --log-prefix "ACTION1=DROP-RAW"
$IPT -t raw -A RAW_LOG_N_DROP -j DROP

# MANGLE
$IPT -t mangle -A PRE_LOG_N_DROP  -m limit --limit 5/min -j LOG --log-prefix "ACTION2=DROP-PREROUTING"
$IPT -t mangle -A PRE_LOG_N_DROP -j DROP

# NAT
$IPT -t nat -A LOG_N_MASQ       -m limit --limit 5/min -j LOG --log-prefix "ACTION3=MASQ-NAT"
$IPT -t nat -A LOG_N_MASQ -j MASQUERADE

# FILTER
$IPT -t filter -A LOG_N_ACCEPT    -m limit --limit 5/min -j LOG --log-prefix "ACTION4=ACCEPT-INPUT"
$IPT -t filter -A LOG_N_ACCEPT -j ACCEPT

$IPT -t filter -A LOG_N_DROP    -m limit --limit 5/min -j LOG --log-prefix "ACTION5=DROP-INPUT"
$IPT -t filter -A LOG_N_DROP -j DROP

$IPT -t filter -A LOG_N_REJECT    -m limit --limit 5/min -j LOG --log-prefix "ACTION6=REJECT-INPUT"
$IPT -t filter -A LOG_N_REJECT -j REJECT

# FAIL2BAN POLICY
$IPT -t filter -A Fail2Ban-SSH -j RETURN
$IPT -t filter -A INPUT -j LOG --log-prefix "ACTION7=DROP-POLICY"



sleep 5

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


 

Dernière modification par dudux2 (10-04-2020 12:51:17)


Petit projet d’une box internet 4G avec un rpi3b+

Hors ligne

#19 10-04-2020 23:20:41

raleur
Membre
Inscription : 03-10-2014

Re : Paramétrage sysctl.con/d'iptables pour une Box 4G avec un Raspberry

C'est mieux, mais toujours pas bon.
Les messages d'erreur ICMP doivent avoir l'état RELATED, pas ESTABLISHED.
Et tu pourrais factoriser les 3 règles des types d'erreur ICMP dans une chaîne utilisateur plutôt que dupliquer les règles pour chaque direction de flux.
Le premier paquet ICMP echo-request a l'état NEW.

Il vaut mieux montrer que raconter.

Hors ligne

#20 11-04-2020 17:51:20

dudux2
Membre
Distrib. : Rasbian
Noyau : Buster 4.19
(G)UI : Pas de gestionnaire de fenêtre
Inscription : 21-01-2017

Re : Paramétrage sysctl.con/d'iptables pour une Box 4G avec un Raspberry

@raleur Ah oui, c'est mieux au niveau de mes logs comme cela. (pour le moment je vois des ICMP Type 3 en accept)
Je savais pas que l'on pouvait factoriser les 3 règles dans une chaine comme cela, je n'ai pas d'erreur, donc je dois être dans le juste...

J'ai vu cela sur le net, c'est mieux de rajouté la source et la destination? Plus on est restrictif, je suppose, plus l'on est sécurisé en cas d'attaque...


iptables -t filter -A OUTPUT -o lo -s 127.0.0.0/8 -d 127.0.0.0/8 -j ACCEPT
iptables -t filter -A INPUT  -i lo -s 127.0.0.0/8 -d 127.0.0.0/8 -j ACCEPT
 



J'aurais pu simplifier encore plus en autorisant les 3 types d'ICMP pour toute les interfaces, mais pour les même raisons ci-dessus, autant restreindre au interface utiliser?

Mon script:


#!/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


# 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







#####################
# Création de nouvelles chaînes
# Pour rediriger les logs
# Dans des fichiers personalisées

# RAW
$IPT -t raw -N RAW_LOG_N_DROP

# MANGLE
$IPT -t mangle -N MANGLE_LOG_N_DROP

# NAT
$IPT -t nat -N LOG_N_MASQ

# FILTER
$IPT -t filter -N LOG_N_ACCEPT
$IPT -t filter -N LOG_N_DROP
$IPT -t filter -N LOG_N_REJECT
$IPT -t filter -N LOG_ICMP_N_ACCEPT


# FAIL2BAN POLICY
$IPT -t filter -N Fail2Ban-SSH





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 MANGLE_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 MANGLE_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 MANGLE_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 MANGLE_LOG_N_DROP
# Paquet avec FIN mais sans ACK
$IPT -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags FIN,ACK FIN -j MANGLE_LOG_N_DROP
# Paquet avec URG mais sans ACK
$IPT -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags ACK,URG URG -j MANGLE_LOG_N_DROP
# Paquet avec PSH mais sans ACK
$IPT -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags PSH,ACK PSH -j MANGLE_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 MANGLE_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 MANGLE_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 MANGLE_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 MANGLE_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 MANGLE_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
######################################################################

# Gestion de la passerelle (Translation d'adresses pour tout ce qui traverse la passerelle)
$IPT -t nat -A POSTROUTING -o $IFACE_INET -j LOG_N_MASQ

# Gestion de la passerelle (On autorise tout le traffic)
$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

# Gestion de la passerelle (ICMP) [destination-unreachable=type3] & [time-exceeded=type11] & [parameter-problem=type12]
$IPT -t filter -A FORWARD -i $IFACE_BRDG -o $IFACE_INET -m state --state RELATED -j LOG_N_ACCEPT
$IPT -t filter -A FORWARD -i $IFACE_INET -o $IFACE_BRDG -m state --state 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 INPUT  -i $IFACE_BRDG -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT

# Gestion de la passerelle (ICMP) [destination-unreachable=type3] & [time-exceeded=type11] & [parameter-problem=type12]
$IPT -t filter -A INPUT -i $IFACE_BRDG -m state --state RELATED -j LOG_ICMP_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 OUTPUT -o $IFACE_BRDG -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT

# Gestion de la passerelle (ICMP) [destination-unreachable=type3] & [time-exceeded=type11] & [parameter-problem=type12]
$IPT -t filter -A OUTPUT -o $IFACE_BRDG -m state --state RELATED -j LOG_ICMP_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
######################################################################

# Gestion Internet-Serveur (ICMP) [destination-unreachable=type3] & [time-exceeded=type11] & [parameter-problem=type12]
$IPT -t filter -A INPUT -i $IFACE_INET -m state --state RELATED -j LOG_ICMP_N_ACCEPT

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
######################################################################

# Gestion Serveur-Internet (ICMP) [destination-unreachable=type3] & [time-exceeded=type11] & [parameter-problem=type12]
$IPT -t filter -A OUTPUT -o $IFACE_INET -m state --state RELATED -j LOG_ICMP_N_ACCEPT


# connexions Serveur-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 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
$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
$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 -j LOG_N_ACCEPT
$IPT -t filter -A INPUT -p tcp --sport 80 -i $IFACE_INET -m state --state ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A OUTPUT -p tcp --dport 443 -o $IFACE_INET -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A INPUT -p tcp --sport 443 -i $IFACE_INET -m state --state ESTABLISHED -j LOG_N_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

# connexions Firewall-Internet (smtp)
$IPT -t filter -A OUTPUT -p tcp --dport 587  -o $IFACE_INET -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A INPUT -p tcp --sport 587  -i $IFACE_INET -m state --state ESTABLISHED -j LOG_N_ACCEPT

# connexions Firewall-Internet (serveur de clefs gpg)
$IPT -t filter -A OUTPUT -p tcp --dport 11371 -o $IFACE_INET -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -t filter -A INPUT  -p tcp --sport 11371 -i $IFACE_INET -m state --state ESTABLISHED -j ACCEPT

echo ""
echo "  - ${green} Règles du parefeu ..:: FIREWALL -> INTERNET ::.. : ${NC} ${OK}"







######################################################################
# R E J E T T E  T O U S  L E S  A U T R E S  P A C Q U E T S
######################################################################
$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






#### RAW
$IPT -t raw -A RAW_LOG_N_DROP -m limit --limit 5/min -j LOG --log-prefix "ACTION1=DROP-RAW"
$IPT -t raw -A RAW_LOG_N_DROP -j DROP

#### MANGLE
$IPT -t mangle -A MANGLE_LOG_N_DROP -m limit --limit 5/min -j LOG --log-prefix "ACTION2=DROP-MANGLE"
$IPT -t mangle -A MANGLE_LOG_N_DROP -j DROP

#### NAT
$IPT -t nat -A LOG_N_MASQ -m limit --limit 1/min -j LOG --log-prefix "ACTION3=MASQ-NAT"
$IPT -t nat -A LOG_N_MASQ -j MASQUERADE

#### FILTER
$IPT -t filter -A LOG_N_ACCEPT -m limit --limit 1/min -j LOG --log-prefix "ACTION4=ACCEPT-INPUT"
$IPT -t filter -A LOG_N_ACCEPT -j ACCEPT

$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 -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

# Gestion de la passerelle (ICMP) [destination-unreachable=type3] & [time-exceeded=type11] & [parameter-problem=type12]
$IPT -t filter -A LOG_ICMP_N_ACCEPT -p icmp --icmp-type destination-unreachable -m limit --limit 1/min -j LOG --log-prefix "ACTION7=ACCEPT-ICMP"
$IPT -t filter -A LOG_ICMP_N_ACCEPT -p icmp --icmp-type time-exceeded -m limit --limit 1/min -j LOG --log-prefix "ACTION7=ACCEPT-ICMP"
$IPT -t filter -A LOG_ICMP_N_ACCEPT -p icmp --icmp-type parameter-problem -m limit --limit 1/min -j LOG --log-prefix "ACTION7=ACCEPT-ICMP"
$IPT -t filter -A LOG_ICMP_N_ACCEPT -j ACCEPT

# FAIL2BAN POLICY
$IPT -t filter -A Fail2Ban-SSH -j RETURN
$IPT -t filter -A INPUT -j LOG --log-prefix "ACTION8=DROP-POLICY"



sleep 5

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

 


Petit projet d’une box internet 4G avec un rpi3b+

Hors ligne

#21 11-04-2020 18:12:56

dudux2
Membre
Distrib. : Rasbian
Noyau : Buster 4.19
(G)UI : Pas de gestionnaire de fenêtre
Inscription : 21-01-2017

Re : Paramétrage sysctl.con/d'iptables pour une Box 4G avec un Raspberry

Salut LaFouine,

LaFouine a écrit :


Pour mes pauvre connaissance j'ajouterai:

Des regles qui autorise que les adresse mac qui son sur une liste pour le wifi c'est une petite securiter en plus. c est pas inviolable  mai sa complique quand meme la tache.
La liste des dns autoriser wifi et lan , certaine application ce gène pas pour aller ou elle veule.  vu que tu n'utilise pas de serveur dns c'est pas forcément possible.


Oui je réfléchissais à un petit script qui activerais le WPS via un bouton poussoir sur une entrée du RPI.

LaFouine a écrit :


Bloquer l'ipv6 contrairment a ce qui ce dit, toute les application a ce jour ou celle que j'utilise 1 seul peux l'utiliser. donc bon .... l'icmp est utile mai pas indispensable pour l'ipv4 mai obligatoir pour l'ipv6.

j'aurai ajouter des limites de tentative par heure, de meme, pour tout ce que tu log j'ai pas vu de limitation (j'ai aussi lu en traver le gros pavé...) le risque c'est le fichier de log qui devien enorme... etc.


Je gère les logs avec des limites en bas de ma fonction start et j'ai activé la compression dans logrotate.d, pour le moment je les laisse causé beaucoup pour contrôler le fonctionnement.

LaFouine a écrit :


J'ai aussi monter ma box mai sous debian. et fait une page dans wiki que tu peux peut etre ,et surment,  ameliorer. c'est pas parfait mai ça peut inspirer smile


Je vais regardé cela, c'est toujours intéressant!

LaFouine a écrit :


Attention utilise iptable-save, et pas ton script pour le lancer car le temp de la lecture les paquet peuve passer si la machine a peux de puissance. (sa ma fait le gag et valu un post)
pour le reste je laisse a ceux qui connaisse mieux que moi le reseaux.


Mon script sert seulement à testé mes règles pendant x temps et "iptables-restore" mes anciennes règles au bout de x temps.
Mais j'utilise bien iptables-save pour sauvegarder mes règles et iptables permanent pour qu'elles se lancent au démarrage.

LaFouine a écrit :


Fait toi plez. tongue


Oh oui je m'éclate!


Petit projet d’une box internet 4G avec un rpi3b+

Hors ligne

#22 11-04-2020 19:10:42

raleur
Membre
Inscription : 03-10-2014

Re : Paramétrage sysctl.con/d'iptables pour une Box 4G avec un Raspberry

dudux2 a écrit :

Je savais pas que l'on pouvait factoriser les 3 règles dans une chaine comme cela


Il y a deux gros soucis dans ta factorisation.
1) Dans la section "Gestion de la passerelle", les règles envoient les paquets RELATED dans la chaîne LOG_N_ACCEPT au lieu de la chaîne LOG_ICMP_N_ACCEPT.
2) La chaîne LOG_ICMP_N_ACCEPT ne journalise que les trois types ICMP mais accepte tous les paquets qu'elle reçoit.

Il y a aussi des soucis plus mineurs mais que je veux quand même mentionner.
3) Le nom de la chaîne LOG_ICMP_N_ACCEPT contient "ICMP" alors qu'en fait tu y envoies tous les paquets qui ont l'état RELATED. Ce n'est pas très cohérent.
4) Le nom de la chaîne LOG_ICMP_N_ACCEPT contient "ACCEPT" alors que tous les paquets qui y vont (même si tu n'y envoies que les paquets ICMP RELATED) n'ont pas vocation à être acceptés.
5) Tu n'es pas obligé de faire le LOG directement dans cette chaîne, tu peux très bien y utiliser les chaînes LOG_N_ACCEPT et LOG_N_DROP.

dudux2 a écrit :

J'ai vu cela sur le net, c'est mieux de rajouté la source et la destination? Plus on est restrictif, je suppose, plus l'on est sécurisé en cas d'attaque...


En l'occurrence il s'agit de trafic émis par et à destination de la machine elle-même.
Plus on est restrictif, plus on court le risque de blocages abusifs pouvant causer des dysfonctionnements.
Déjà, c'est bien d'avoir autorisé tout le préfixe 127.0.0.0/8 et pas seulement l'adresse 127.0.0.1. Mais ce ne sont pas les seules adresses pouvant être utilisées sur l'interface de loopback : toutes les adresses de toutes les interfaces de la machines le peuvent aussi.


Il vaut mieux montrer que raconter.

Hors ligne

#23 12-04-2020 11:04:06

dudux2
Membre
Distrib. : Rasbian
Noyau : Buster 4.19
(G)UI : Pas de gestionnaire de fenêtre
Inscription : 21-01-2017

Re : Paramétrage sysctl.con/d'iptables pour une Box 4G avec un Raspberry

Bon je ne sais pas si cela va te plaire au niveau des appellations, mais d'après le fichier rules.v4, ce coup-ci, j'accepte bien que les 3 types d'ICMP. yes.gif
- Je garde mes logs séparer dans des fichiers pour le moments car je n'ai pas encore les bonnes commandes "tail" pour faire des bonnes recherches dans les fichiers de log, il faut que je creuse encore de se côté là...

Encore quelques point qui me chagrine:

- Pourquoi ne pas contrôler l'état (avec -m state --state NEW,ESTABLISHED) sur la machine locale et autoriser aussi les 3 types d' ICMP?

- Pour les interfaces ponté, elles sont transparentes au niveau des règles? Elles héritent des autorisations du pont?

- Il y a possibilité de donner des règles directement à ces interfaces (Juste au cas ou je voudrais des règles différentes pour le wifi et le réseau câblé (comme par exemple interdire l’accès ssh et le http en wifi)

- Et ajouter une couche avec ebtables serait intéressant pour ajouter des filtres sur mon pont réseau? (Car ebtables est là pour cela non?)
Tout juste sortie de gadoue avec iptables qu'il en rajoute une couche... tongue Mais parce que j'ai trouvé un bon prof, donc j'en profite wink


Mon script


#!/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


# 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







#####################
# Création de nouvelles chaînes
# Pour rediriger les logs
# Dans des fichiers personalisées

# RAW
$IPT -t raw -N RAW_LOG_N_DROP

# MANGLE
$IPT -t mangle -N MANGLE_LOG_N_DROP

# NAT
$IPT -t nat -N LOG_N_MASQ

# FILTER
$IPT -t filter -N LOG_N_ACCEPT
$IPT -t filter -N LOG_N_DROP
$IPT -t filter -N LOG_N_REJECT
$IPT -t filter -N FILTRE_ICMP_TYPE_N_ACCEPT


# FAIL2BAN POLICY
$IPT -t filter -N Fail2Ban-SSH





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 MANGLE_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 MANGLE_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 MANGLE_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 MANGLE_LOG_N_DROP
# Paquet avec FIN mais sans ACK
$IPT -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags FIN,ACK FIN -j MANGLE_LOG_N_DROP
# Paquet avec URG mais sans ACK
$IPT -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags ACK,URG URG -j MANGLE_LOG_N_DROP
# Paquet avec PSH mais sans ACK
$IPT -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags PSH,ACK PSH -j MANGLE_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 MANGLE_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 MANGLE_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 MANGLE_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 MANGLE_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 MANGLE_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 INPUT -i lo -j LOG_N_ACCEPT
$IPT -t filter -A OUTPUT -o 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
######################################################################

# Gestion de la passerelle (Translation d'adresses pour tout ce qui traverse la passerelle)
$IPT -t nat -A POSTROUTING -o $IFACE_INET -j LOG_N_MASQ

# Gestion de la passerelle (On autorise tout le traffic)
$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

# Gestion de la passerelle (ICMP) [destination-unreachable=type3] & [time-exceeded=type11] & [parameter-problem=type12]
$IPT -t filter -A FORWARD -i $IFACE_BRDG -o $IFACE_INET -m state --state RELATED -j FILTRE_ICMP_TYPE_N_ACCEPT
$IPT -t filter -A FORWARD -i $IFACE_INET -o $IFACE_BRDG -m state --state RELATED -j FILTRE_ICMP_TYPE_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 SERVEUR-LAN/WLAN
$IPT -t filter -A INPUT -i $IFACE_BRDG -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT

# Gestion SERVEUR-LAN/WLAN (ICMP) [destination-unreachable=type3] & [time-exceeded=type11] & [parameter-problem=type12]
$IPT -t filter -A INPUT -i $IFACE_BRDG -m state --state RELATED -j FILTRE_ICMP_TYPE_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/WLAN-SERVEUR
$IPT -t filter -A OUTPUT -o $IFACE_BRDG -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT

# Gestion LAN/WLAN-SERVEUR (ICMP) [destination-unreachable=type3] & [time-exceeded=type11] & [parameter-problem=type12]
$IPT -t filter -A OUTPUT -o $IFACE_BRDG -m state --state RELATED -j FILTRE_ICMP_TYPE_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
######################################################################

# Gestion INTERNET->SERVEUR (ICMP) [destination-unreachable=type3] & [time-exceeded=type11] & [parameter-problem=type12]
$IPT -t filter -A INPUT -i $IFACE_INET -m state --state RELATED -j FILTRE_ICMP_TYPE_N_ACCEPT

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
######################################################################

# Gestion SERVEUR->INTERNET (ICMP) [destination-unreachable=type3] & [time-exceeded=type11] & [parameter-problem=type12]
$IPT -t filter -A OUTPUT -o $IFACE_INET -m state --state RELATED -j FILTRE_ICMP_TYPE_N_ACCEPT


# Gestion SERVEUR->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 ESTABLISHED -j LOG_N_ACCEPT

# Gestion SERVEUR->INTERNET (dns)
$IPT -t filter -A OUTPUT -p udp --dport 53 -o $IFACE_INET -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT
$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
$IPT -t filter -A INPUT -p tcp --sport 53 -i $IFACE_INET -m state --state ESTABLISHED -j LOG_N_ACCEPT

# Gestion SERVEUR->INTERNET (http/https)
$IPT -t filter -A OUTPUT -p tcp --dport 80 -o $IFACE_INET -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A INPUT -p tcp --sport 80 -i $IFACE_INET -m state --state ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A OUTPUT -p tcp --dport 443 -o $IFACE_INET -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A INPUT -p tcp --sport 443 -i $IFACE_INET -m state --state ESTABLISHED -j LOG_N_ACCEPT

# Gestion SERVEUR->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

# Gestion SERVEUR->INTERNET (smtp)
$IPT -t filter -A OUTPUT -p tcp --dport 587  -o $IFACE_INET -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A INPUT -p tcp --sport 587  -i $IFACE_INET -m state --state ESTABLISHED -j LOG_N_ACCEPT

# Gestion SERVEUR->INTERNET (serveur de clefs gpg)
$IPT -t filter -A OUTPUT -p tcp --dport 11371 -o $IFACE_INET -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -t filter -A INPUT  -p tcp --sport 11371 -i $IFACE_INET -m state --state ESTABLISHED -j ACCEPT

echo ""
echo "  - ${green} Règles du parefeu ..:: FIREWALL -> INTERNET ::.. : ${NC} ${OK}"







######################################################################
# R E J E T T E  T O U S  L E S  A U T R E S  P A Q U E T S
######################################################################
$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






#### RAW
$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 -A MANGLE_LOG_N_DROP -m limit --limit 60/min -j LOG --log-prefix "ACTION2=DROP-MANGLE"
$IPT -t mangle -A MANGLE_LOG_N_DROP -j DROP

#### NAT
$IPT -t nat -A LOG_N_MASQ -m limit --limit 5/min -j LOG --log-prefix "ACTION3=MASQ-NAT"
$IPT -t nat -A LOG_N_MASQ -j MASQUERADE

#### FILTER
$IPT -t filter -A LOG_N_ACCEPT -m limit --limit 5/min -j LOG --log-prefix "ACTION4=ACCEPT-INPUT"
$IPT -t filter -A LOG_N_ACCEPT -j ACCEPT

$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 -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

# Gestion de la passerelle (ICMP) [destination-unreachable=type3] & [time-exceeded=type11] & [parameter-problem=type12]
$IPT -t filter -A FILTRE_ICMP_TYPE_N_ACCEPT -p icmp --icmp-type destination-unreachable -m limit --limit 60/min -j LOG --log-prefix "ACTION7=ACCEPT-ICMP"
$IPT -t filter -A FILTRE_ICMP_TYPE_N_ACCEPT -p icmp --icmp-type destination-unreachable -j ACCEPT

$IPT -t filter -A FILTRE_ICMP_TYPE_N_ACCEPT -p icmp --icmp-type time-exceeded -m limit --limit 60/min -j LOG --log-prefix "ACTION7=ACCEPT-ICMP"
$IPT -t filter -A FILTRE_ICMP_TYPE_N_ACCEPT -p icmp --icmp-type time-exceeded -j ACCEPT

$IPT -t filter -A FILTRE_ICMP_TYPE_N_ACCEPT -p icmp --icmp-type parameter-problem -m limit --limit 60/min -j LOG --log-prefix "ACTION7=ACCEPT-ICMP"
$IPT -t filter -A FILTRE_ICMP_TYPE_N_ACCEPT -p icmp --icmp-type parameter-problem -j ACCEPT

# FAIL2BAN POLICY
$IPT -t filter -A Fail2Ban-SSH -j RETURN
$IPT -t filter -A INPUT -j LOG --log-prefix "ACTION8=DROP-POLICY"



sleep 5

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

 

Dernière modification par dudux2 (12-04-2020 11:17:43)


Petit projet d’une box internet 4G avec un rpi3b+

Hors ligne

#24 12-04-2020 12:13:47

raleur
Membre
Inscription : 03-10-2014

Re : Paramétrage sysctl.con/d'iptables pour une Box 4G avec un Raspberry

dudux2 a écrit :

Je garde mes logs séparer dans des fichiers pour le moment


D'accord mais ça n'empêche pas de factoriser ACCEPT et LOG avec le préfixe "ACTION7=ACCEPT-ICMP" dans une nouvelle chaîne LOG_ACCEPT_ICMP.

Je n'aurais pas mis "ACCEPT" dans le nom de la chaîne FILTRE_ICMP_TYPE_N_ACCEPT, car tout ce qui y entre n'est pas forcément accepté.
Dans une des règles qui appellent la chaîne FILTRE_ICMP_TYPE_N_ACCEPT, tu as ajouté le critère du protocole ICMP

$IPT -t filter -A OUTPUT -o $IFACE_BRDG -p icmp  -m state --state RELATED -j FILTRE_ICMP_TYPE_N_ACCEPT


mais pas dans les autres :

$IPT -t filter -A FORWARD -i $IFACE_BRDG -o $IFACE_INET -m state --state RELATED -j FILTRE_ICMP_TYPE_N_ACCEPT
$IPT -t filter -A FORWARD -i $IFACE_INET -o $IFACE_BRDG -m state --state RELATED -j FILTRE_ICMP_TYPE_N_ACCEPT
$IPT -t filter -A INPUT -i $IFACE_BRDG -m state --state RELATED -j FILTRE_ICMP_TYPE_N_ACCEPT
$IPT -t filter -A INPUT -i $IFACE_INET -m state --state RELATED -j FILTRE_ICMP_TYPE_N_ACCEPT
$IPT -t filter -A OUTPUT -o $IFACE_INET -m state --state RELATED -j FILTRE_ICMP_TYPE_N_ACCEPT


Pourquoi cette incohérence ?
Certes pour le moment ça ne fait aucune différence puisque la chaîne ne contient que des règles pour les paquets ICMP, mais ça pourrait changer à l'avenir.
A mon avis il faut que tu choisisses : est-ce que la chaîne a pour but de filtrer tous les paquets dans l'état RELATED ou seulement les paquets ICMP ? Dans un cas comme dans l'autre, il faudrait mettre les règles appelantes et le nom de la chaîne en conformité avec ce but.

dudux2 a écrit :

Pourquoi ne pas contrôler l'état (avec -m state --state NEW,ESTABLISHED) sur la machine locale et autoriser aussi les 3 types d' ICMP?


Tu veux dire sur l'interface de loopback ? Parce que les paquets ICMP dans l'état RELATED et les paquets arbitraires dans l'état INVALID ne peuvent être émis que par le noyau ou un processus privilégié de la machine. Si tu ne leur fais pas confiance, tout ceci ne sert pas à grand chose. Et aussi parce que le filtrage sur l'interface de loopback est un peu particulier puisque chaque paquet passe successivement dans OUTPUT et INPUT.

dudux2 a écrit :

Pour les interfaces ponté, elles sont transparentes au niveau des règles? Elles héritent des autorisations du pont?


Normalement oui, et il n'y a aucun filtrage du trafic ponté qui passe directement entre les deux interfaces du pont.

dudux2 a écrit :

Il y a possibilité de donner des règles directement à ces interfaces (Juste au cas ou je voudrais des règles différentes pour le wifi et le réseau câblé (comme par exemple interdire l’accès ssh et le hhtp en wifi)


Avec le module br-netfilter (ou le module bridge avant Stretch), il y avait la possibilité d'appliquer les règles arptables, iptables et ip6tables aux paquets pontés. Il y avait aussi la possibilité d'utiliser des règles ebtables (mais ça ne gère pas l'état NEW,ESTABLISHED...). Mais avec nftables qui est censé remplacer tout ça, je ne sais pas si ça marche encore.


Il vaut mieux montrer que raconter.

Hors ligne

#25 12-04-2020 15:35:09

dudux2
Membre
Distrib. : Rasbian
Noyau : Buster 4.19
(G)UI : Pas de gestionnaire de fenêtre
Inscription : 21-01-2017

Re : Paramétrage sysctl.con/d'iptables pour une Box 4G avec un Raspberry

Merci beaucoup pour ces approffondissements!
Ah oui, j'ai supprimé l'incohérence d'un copier coller (entre 2 tests) à 12h17, mais tu as été plus rapide que moi sad

Eh oui, une petite gymnastique supplémentaire et on gagne quelque ligne de code et de la lisibilité! yes.gif

Mon script


#!/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


# 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







#####################
# Création de nouvelles chaînes
# Pour rediriger les logs
# Dans des fichiers personalisées

# RAW
$IPT -t raw -N RAW_LOG_N_DROP

# MANGLE
$IPT -t mangle -N MANGLE_LOG_N_DROP

# NAT
$IPT -t nat -N LOG_N_MASQ

# FILTER
$IPT -t filter -N LOG_N_ACCEPT
$IPT -t filter -N LOG_N_DROP
$IPT -t filter -N LOG_N_REJECT
$IPT -t filter -N STATUS_RELATED
$IPT -t filter -N LOG_ACCEPT_ICMP

# FAIL2BAN POLICY
$IPT -t filter -N Fail2Ban-SSH





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 MANGLE_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 MANGLE_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 MANGLE_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 MANGLE_LOG_N_DROP
# Paquet avec FIN mais sans ACK
$IPT -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags FIN,ACK FIN -j MANGLE_LOG_N_DROP
# Paquet avec URG mais sans ACK
$IPT -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags ACK,URG URG -j MANGLE_LOG_N_DROP
# Paquet avec PSH mais sans ACK
$IPT -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags PSH,ACK PSH -j MANGLE_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 MANGLE_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 MANGLE_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 MANGLE_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 MANGLE_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 MANGLE_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 INPUT -i lo -j LOG_N_ACCEPT
$IPT -t filter -A OUTPUT -o 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
######################################################################

# Gestion de la passerelle (Translation d'adresses pour tout ce qui traverse la passerelle)
$IPT -t nat -A POSTROUTING -o $IFACE_INET -j LOG_N_MASQ

# Gestion de la passerelle (On autorise tout le traffic)
$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

# Gestion de la passerelle (ICMP) [destination-unreachable=type3] & [time-exceeded=type11] & [parameter-problem=type12]
$IPT -t filter -A FORWARD -i $IFACE_BRDG -o $IFACE_INET -m state --state RELATED -j STATUS_RELATED
$IPT -t filter -A FORWARD -i $IFACE_INET -o $IFACE_BRDG -m state --state RELATED -j STATUS_RELATED


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 SERVEUR-LAN/WLAN
$IPT -t filter -A INPUT -i $IFACE_BRDG -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT

# Gestion SERVEUR-LAN/WLAN (ICMP) [destination-unreachable=type3] & [time-exceeded=type11] & [parameter-problem=type12]
$IPT -t filter -A INPUT -i $IFACE_BRDG -m state --state RELATED -j STATUS_RELATED


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/WLAN-SERVEUR
$IPT -t filter -A OUTPUT -o $IFACE_BRDG -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT

# Gestion LAN/WLAN-SERVEUR (ICMP) [destination-unreachable=type3] & [time-exceeded=type11] & [parameter-problem=type12]
$IPT -t filter -A OUTPUT -o $IFACE_BRDG -m state --state RELATED -j STATUS_RELATED


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
######################################################################

# Gestion INTERNET->SERVEUR (ICMP) [destination-unreachable=type3] & [time-exceeded=type11] & [parameter-problem=type12]
$IPT -t filter -A INPUT -i $IFACE_INET -m state --state RELATED -j STATUS_RELATED

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
######################################################################

# Gestion SERVEUR->INTERNET (ICMP) [destination-unreachable=type3] & [time-exceeded=type11] & [parameter-problem=type12]
$IPT -t filter -A OUTPUT -o $IFACE_INET -m state --state RELATED -j STATUS_RELATED


# Gestion SERVEUR->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 ESTABLISHED -j LOG_N_ACCEPT

# Gestion SERVEUR->INTERNET (dns)
$IPT -t filter -A OUTPUT -p udp --dport 53 -o $IFACE_INET -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT
$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
$IPT -t filter -A INPUT -p tcp --sport 53 -i $IFACE_INET -m state --state ESTABLISHED -j LOG_N_ACCEPT

# Gestion SERVEUR->INTERNET (http/https)
$IPT -t filter -A OUTPUT -p tcp --dport 80 -o $IFACE_INET -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A INPUT -p tcp --sport 80 -i $IFACE_INET -m state --state ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A OUTPUT -p tcp --dport 443 -o $IFACE_INET -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A INPUT -p tcp --sport 443 -i $IFACE_INET -m state --state ESTABLISHED -j LOG_N_ACCEPT

# Gestion SERVEUR->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

# Gestion SERVEUR->INTERNET (smtp)
$IPT -t filter -A OUTPUT -p tcp --dport 587  -o $IFACE_INET -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A INPUT -p tcp --sport 587  -i $IFACE_INET -m state --state ESTABLISHED -j LOG_N_ACCEPT

# Gestion SERVEUR->INTERNET (serveur de clefs gpg)
$IPT -t filter -A OUTPUT -p tcp --dport 11371 -o $IFACE_INET -m state --state NEW,ESTABLISHED -j LOG_N_ACCEPT
$IPT -t filter -A INPUT  -p tcp --sport 11371 -i $IFACE_INET -m state --state ESTABLISHED -j LOG_N_ACCEPT

echo ""
echo "  - ${green} Règles du parefeu ..:: FIREWALL -> INTERNET ::.. : ${NC} ${OK}"







######################################################################
# R E J E T T E  T O U S  L E S  A U T R E S  P A Q U E T S
######################################################################
$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






#### RAW
$IPT -t raw -A RAW_LOG_N_DROP -m limit --limit 60/min --limit-burst 5 -j LOG --log-prefix "ACTION1=DROP-RAW"
$IPT -t raw -A RAW_LOG_N_DROP -j DROP

#### MANGLE
$IPT -t mangle -A MANGLE_LOG_N_DROP -m limit --limit 60/min --limit-burst 5 -j LOG --log-prefix "ACTION2=DROP-MANGLE"
$IPT -t mangle -A MANGLE_LOG_N_DROP -j DROP

#### NAT
$IPT -t nat -A LOG_N_MASQ -m limit --limit 3/min --limit-burst 3 -j LOG --log-prefix "ACTION3=MASQ-NAT"
$IPT -t nat -A LOG_N_MASQ -j MASQUERADE

#### FILTER
$IPT -t filter -A LOG_N_ACCEPT -m limit --limit 5/min --limit-burst 3 -j LOG --log-prefix "ACTION4=ACCEPT-INPUT"
$IPT -t filter -A LOG_N_ACCEPT -j ACCEPT

$IPT -t filter -A LOG_N_DROP -m limit --limit 60/min --limit-burst 5 -j LOG --log-prefix "ACTION5=DROP-INPUT"
$IPT -t filter -A LOG_N_DROP -j DROP

$IPT -t filter -A LOG_N_REJECT -m limit --limit 60/min --limit-burst 5 -j LOG --log-prefix "ACTION6=REJECT-INPUT"
$IPT -t filter -A LOG_N_REJECT -j REJECT

# Gestion de la passerelle (ICMP) [destination-unreachable=type3] & [time-exceeded=type11] & [parameter-problem=type12]
$IPT -t filter -A STATUS_RELATED -p icmp --icmp-type destination-unreachable -j LOG_ACCEPT_ICMP
$IPT -t filter -A STATUS_RELATED -p icmp --icmp-type time-exceeded -j LOG_ACCEPT_ICMP
$IPT -t filter -A STATUS_RELATED -p icmp --icmp-type parameter-problem -j LOG_ACCEPT_ICMP
$IPT -t filter -A LOG_ACCEPT_ICMP -m limit --limit 60/min --limit-burst 5 -j LOG --log-prefix "ACTION7=ACCEPT-ICMP"
$IPT -t filter -A LOG_ACCEPT_ICMP -j ACCEPT


# FAIL2BAN POLICY
$IPT -t filter -A Fail2Ban-SSH -j RETURN
$IPT -t filter -A INPUT -j LOG --log-prefix "ACTION8=DROP-POLICY"


sleep 5

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


 

Dernière modification par dudux2 (12-04-2020 18:34:34)


Petit projet d’une box internet 4G avec un rpi3b+

Hors ligne

Pied de page des forums