|
@@ -11,38 +11,36 @@ Je vais quand même laisser la doc de configuration de **ufw**, tout en préfér
|
|
|
|
|
|
**Iptables** est installé automatiquement. Nous allons rajouter le paquet **iptables-persistent** pour assurer le lancement automatique de nos règles à l'allumage de la machine.
|
|
|
|
|
|
-```shell
|
|
|
-root@atom:/home/ericadmin# apt install iptables-persistent
|
|
|
-Lecture des listes de paquets... Fait
|
|
|
-Construction de l'arbre des dépendances
|
|
|
-Lecture des informations d'état... Fait
|
|
|
-The following additional packages will be installed:
|
|
|
- netfilter-persistent
|
|
|
-Les NOUVEAUX paquets suivants seront installés :
|
|
|
- iptables-persistent netfilter-persistent
|
|
|
-0 mis à jour, 2 nouvellement installés, 0 à enlever et 0 non mis à jour.
|
|
|
-Il est nécessaire de prendre 19,5 ko dans les archives.
|
|
|
-Après cette opération, 79,9 ko d'espace disque supplémentaires seront utilisés.
|
|
|
-Souhaitez-vous continuer ? [O/n] o
|
|
|
-Réception de:1 http://deb.debian.org/debian stretch/main amd64 netfilter-persistent all 1.0.4+nmu2 [8 792 B]
|
|
|
-Réception de:2 http://deb.debian.org/debian stretch/main amd64 iptables-persistent all 1.0.4+nmu2 [10,7 kB]
|
|
|
-19,5 ko réceptionnés en 0s (198 ko/s)
|
|
|
-Préconfiguration des paquets...
|
|
|
-Sélection du paquet netfilter-persistent précédemment désélectionné.
|
|
|
-(Lecture de la base de données... 36713 fichiers et répertoires déjà installés.)
|
|
|
-Préparation du dépaquetage de .../netfilter-persistent_1.0.4+nmu2_all.deb ...
|
|
|
-Dépaquetage de netfilter-persistent (1.0.4+nmu2) ...
|
|
|
-Sélection du paquet iptables-persistent précédemment désélectionné.
|
|
|
-Préparation du dépaquetage de .../iptables-persistent_1.0.4+nmu2_all.deb ...
|
|
|
-Dépaquetage de iptables-persistent (1.0.4+nmu2) ...
|
|
|
-Paramétrage de netfilter-persistent (1.0.4+nmu2) ...
|
|
|
-Created symlink /etc/systemd/system/multi-user.target.wants/netfilter-persistent.service → /lib/systemd/system/netfilter-persistent.service.
|
|
|
-update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults
|
|
|
-Traitement des actions différées (« triggers ») pour systemd (232-25+deb9u1) ...
|
|
|
-Traitement des actions différées (« triggers ») pour man-db (2.7.6.1-2) ...
|
|
|
-Paramétrage de iptables-persistent (1.0.4+nmu2) ...
|
|
|
-root@atom:/home/ericadmin#
|
|
|
-```
|
|
|
+ root@atom:/home/ericadmin# apt install iptables-persistent
|
|
|
+ Lecture des listes de paquets... Fait
|
|
|
+ Construction de l'arbre des dépendances
|
|
|
+ Lecture des informations d'état... Fait
|
|
|
+ The following additional packages will be installed:
|
|
|
+ netfilter-persistent
|
|
|
+ Les NOUVEAUX paquets suivants seront installés :
|
|
|
+ iptables-persistent netfilter-persistent
|
|
|
+ 0 mis à jour, 2 nouvellement installés, 0 à enlever et 0 non mis à jour.
|
|
|
+ Il est nécessaire de prendre 19,5 ko dans les archives.
|
|
|
+ Après cette opération, 79,9 ko d'espace disque supplémentaires seront utilisés.
|
|
|
+ Souhaitez-vous continuer ? [O/n] o
|
|
|
+ Réception de:1 http://deb.debian.org/debian stretch/main amd64 netfilter-persistent all 1.0.4+nmu2 [8 792 B]
|
|
|
+ Réception de:2 http://deb.debian.org/debian stretch/main amd64 iptables-persistent all 1.0.4+nmu2 [10,7 kB]
|
|
|
+ 19,5 ko réceptionnés en 0s (198 ko/s)
|
|
|
+ Préconfiguration des paquets...
|
|
|
+ Sélection du paquet netfilter-persistent précédemment désélectionné.
|
|
|
+ (Lecture de la base de données... 36713 fichiers et répertoires déjà installés.)
|
|
|
+ Préparation du dépaquetage de .../netfilter-persistent_1.0.4+nmu2_all.deb ...
|
|
|
+ Dépaquetage de netfilter-persistent (1.0.4+nmu2) ...
|
|
|
+ Sélection du paquet iptables-persistent précédemment désélectionné.
|
|
|
+ Préparation du dépaquetage de .../iptables-persistent_1.0.4+nmu2_all.deb ...
|
|
|
+ Dépaquetage de iptables-persistent (1.0.4+nmu2) ...
|
|
|
+ Paramétrage de netfilter-persistent (1.0.4+nmu2) ...
|
|
|
+ Created symlink /etc/systemd/system/multi-user.target.wants/netfilter-persistent.service → /lib/systemd/system/netfilter-persistent.service.
|
|
|
+ update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults
|
|
|
+ Traitement des actions différées (« triggers ») pour systemd (232-25+deb9u1) ...
|
|
|
+ Traitement des actions différées (« triggers ») pour man-db (2.7.6.1-2) ...
|
|
|
+ Paramétrage de iptables-persistent (1.0.4+nmu2) ...
|
|
|
+ root@atom:/home/ericadmin#
|
|
|
|
|
|
Nous obtenons donc 2 fichiers de configuration, /etc/iptables/rules.v4 et /etc/iptables/rules.v6.
|
|
|
|
|
@@ -50,481 +48,468 @@ En listant ces fichiers, aucune règle n'est encore enregistrée: tout passe, en
|
|
|
|
|
|
Ces fichiers sont mis à jour grâce aux commandes suivantes.
|
|
|
|
|
|
-```shell
|
|
|
-iptables-save > /etc/iptables/rules.v4
|
|
|
-ip6tables-save > /etc/iptables/rules.v6
|
|
|
-```
|
|
|
+ iptables-save > /etc/iptables/rules.v4
|
|
|
+ ip6tables-save > /etc/iptables/rules.v6
|
|
|
|
|
|
Les commandes disponibles pour **netfilter-persistent** sont les suivantes:
|
|
|
|
|
|
-* systemctl start netfilter-persistent
|
|
|
-* systemctl stop netfilter-persistent
|
|
|
-* systemctl restart netfilter-persistent
|
|
|
-* systemctl stop netfilter-persistent
|
|
|
-* systemctl status netfilter-persistent
|
|
|
+* systemctl start netfilter-persistent
|
|
|
+* systemctl stop netfilter-persistent
|
|
|
+* systemctl restart netfilter-persistent
|
|
|
+* systemctl stop netfilter-persistent
|
|
|
+* systemctl status netfilter-persistent
|
|
|
|
|
|
Exemples d'utilisation suivant l'état de **netfilter-persistent**:
|
|
|
|
|
|
-```shell
|
|
|
-root@atom:/home/ericadmin# systemctl stop netfilter-persistent
|
|
|
-root@atom:/home/ericadmin# systemctl status netfilter-persistent
|
|
|
-● (**point en rouge**) netfilter-persistent.service - netfilter persistent configuration
|
|
|
- Loaded: loaded (/lib/systemd/system/netfilter-persistent.service; enabled; vendor preset: enabled)
|
|
|
- Active: failed (Result: exit-code) since Sun 2018-02-11 13:50:22 CET; 13s ago
|
|
|
- Process: 1629 ExecStop=/usr/sbin/netfilter-persistent stop (code=exited, status=1/FAILURE)
|
|
|
- Process: 1525 ExecStart=/usr/sbin/netfilter-persistent start (code=exited, status=0/SUCCESS)
|
|
|
- Main PID: 1525 (code=exited, status=0/SUCCESS)
|
|
|
-
|
|
|
-févr. 11 13:42:02 atom systemd[1]: Starting netfilter persistent configuration...
|
|
|
-févr. 11 13:42:02 atom netfilter-persistent[1525]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables start
|
|
|
-févr. 11 13:42:02 atom netfilter-persistent[1525]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables start
|
|
|
-févr. 11 13:42:02 atom systemd[1]: Started netfilter persistent configuration.
|
|
|
-févr. 11 13:50:22 atom systemd[1]: Stopping netfilter persistent configuration...
|
|
|
-févr. 11 13:50:22 atom netfilter-persistent[1629]: Automatic flush disabled; use '/usr/sbin/netfilter-persistent flush'
|
|
|
-févr. 11 13:50:22 atom systemd[1]: netfilter-persistent.service: Control process exited, code=exited status=1
|
|
|
-févr. 11 13:50:22 atom systemd[1]: Stopped netfilter persistent configuration.
|
|
|
-févr. 11 13:50:22 atom systemd[1]: netfilter-persistent.service: Unit entered failed state.
|
|
|
-févr. 11 13:50:22 atom systemd[1]: netfilter-persistent.service: Failed with result 'exit-code'.
|
|
|
-root@atom:/home/ericadmin#
|
|
|
-
|
|
|
-root@atom:/home/ericadmin# systemctl start netfilter-persistent
|
|
|
-root@atom:/home/ericadmin# systemctl status netfilter-persistent
|
|
|
-● (**point en vert**) netfilter-persistent.service - netfilter persistent configuration
|
|
|
- Loaded: loaded (/lib/systemd/system/netfilter-persistent.service; enabled; vendor preset: enabled)
|
|
|
- Active: active (exited) since Sun 2018-02-11 13:51:09 CET; 2s ago
|
|
|
- Process: 1629 ExecStop=/usr/sbin/netfilter-persistent stop (code=exited, status=1/FAILURE)
|
|
|
- Process: 1641 ExecStart=/usr/sbin/netfilter-persistent start (code=exited, status=0/SUCCESS)
|
|
|
- Main PID: 1641 (code=exited, status=0/SUCCESS)
|
|
|
-
|
|
|
-févr. 11 13:51:09 atom systemd[1]: Starting netfilter persistent configuration...
|
|
|
-févr. 11 13:51:09 atom netfilter-persistent[1641]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables start
|
|
|
-févr. 11 13:51:09 atom netfilter-persistent[1641]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables start
|
|
|
-févr. 11 13:51:09 atom systemd[1]: Started netfilter persistent configuration.
|
|
|
-root@atom:/home/ericadmin#
|
|
|
-```
|
|
|
+ root@atom:/home/ericadmin# systemctl stop netfilter-persistent
|
|
|
+ root@atom:/home/ericadmin# systemctl status netfilter-persistent
|
|
|
+ ● (**point en rouge**) netfilter-persistent.service - netfilter persistent configuration
|
|
|
+ Loaded: loaded (/lib/systemd/system/netfilter-persistent.service; enabled; vendor preset: enabled)
|
|
|
+ Active: failed (Result: exit-code) since Sun 2018-02-11 13:50:22 CET; 13s ago
|
|
|
+ Process: 1629 ExecStop=/usr/sbin/netfilter-persistent stop (code=exited, status=1/FAILURE)
|
|
|
+ Process: 1525 ExecStart=/usr/sbin/netfilter-persistent start (code=exited, status=0/SUCCESS)
|
|
|
+ Main PID: 1525 (code=exited, status=0/SUCCESS)
|
|
|
+
|
|
|
+ févr. 11 13:42:02 atom systemd[1]: Starting netfilter persistent configuration...
|
|
|
+ févr. 11 13:42:02 atom netfilter-persistent[1525]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables start
|
|
|
+ févr. 11 13:42:02 atom netfilter-persistent[1525]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables start
|
|
|
+ févr. 11 13:42:02 atom systemd[1]: Started netfilter persistent configuration.
|
|
|
+ févr. 11 13:50:22 atom systemd[1]: Stopping netfilter persistent configuration...
|
|
|
+ févr. 11 13:50:22 atom netfilter-persistent[1629]: Automatic flush disabled; use '/usr/sbin/netfilter-persistent flush'
|
|
|
+ févr. 11 13:50:22 atom systemd[1]: netfilter-persistent.service: Control process exited, code=exited status=1
|
|
|
+ févr. 11 13:50:22 atom systemd[1]: Stopped netfilter persistent configuration.
|
|
|
+ févr. 11 13:50:22 atom systemd[1]: netfilter-persistent.service: Unit entered failed state.
|
|
|
+ févr. 11 13:50:22 atom systemd[1]: netfilter-persistent.service: Failed with result 'exit-code'.
|
|
|
+ root@atom:/home/ericadmin#
|
|
|
+
|
|
|
+ root@atom:/home/ericadmin# systemctl start netfilter-persistent
|
|
|
+ root@atom:/home/ericadmin# systemctl status netfilter-persistent
|
|
|
+ ● (**point en vert**) netfilter-persistent.service - netfilter persistent configuration
|
|
|
+ Loaded: loaded (/lib/systemd/system/netfilter-persistent.service; enabled; vendor preset: enabled)
|
|
|
+ Active: active (exited) since Sun 2018-02-11 13:51:09 CET; 2s ago
|
|
|
+ Process: 1629 ExecStop=/usr/sbin/netfilter-persistent stop (code=exited, status=1/FAILURE)
|
|
|
+ Process: 1641 ExecStart=/usr/sbin/netfilter-persistent start (code=exited, status=0/SUCCESS)
|
|
|
+ Main PID: 1641 (code=exited, status=0/SUCCESS)
|
|
|
+
|
|
|
+ févr. 11 13:51:09 atom systemd[1]: Starting netfilter persistent configuration...
|
|
|
+ févr. 11 13:51:09 atom netfilter-persistent[1641]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables start
|
|
|
+ févr. 11 13:51:09 atom netfilter-persistent[1641]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables start
|
|
|
+ févr. 11 13:51:09 atom systemd[1]: Started netfilter persistent configuration.
|
|
|
+ root@atom:/home/ericadmin#
|
|
|
|
|
|
Pour sauver des règles “entrées à la main”, tapez:
|
|
|
|
|
|
-```shell
|
|
|
-root@atom:/home/ericadmin# service netfilter-persistent save
|
|
|
-[....] Saving netfilter rules...run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables save
|
|
|
-run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables save
|
|
|
-done.
|
|
|
-root@atom:/home/ericadmin#
|
|
|
-```
|
|
|
+ root@atom:/home/ericadmin# service netfilter-persistent save
|
|
|
+ [....] Saving netfilter rules...run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables save
|
|
|
+ run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables save
|
|
|
+ done.
|
|
|
+ root@atom:/home/ericadmin#
|
|
|
|
|
|
ou
|
|
|
|
|
|
-```shell
|
|
|
-root@atom:/home/ericadmin# iptables-save > /etc/iptables/rules.v4
|
|
|
-root@atom:/home/ericadmin# ip6tables-save > /etc/iptables/rules.v6
|
|
|
-```
|
|
|
+ root@atom:/home/ericadmin# iptables-save > /etc/iptables/rules.v4
|
|
|
+ root@atom:/home/ericadmin# ip6tables-save > /etc/iptables/rules.v6
|
|
|
|
|
|
### Configuration des règles iptables
|
|
|
|
|
|
Nous allons les configurer avec un script donné par Nicolargo: [Site de NicoLargo](https://blog.nicolargo.com/2013/06/ma-methode-pour-gerer-les-regles-iptables.html)
|
|
|
|
|
|
-```shell
|
|
|
-#! /bin/sh
|
|
|
-### BEGIN INIT INFO
|
|
|
-# Provides: PersonalFirewall
|
|
|
-# Required-Start: $remote_fs $syslog
|
|
|
-# Required-Stop: $remote_fs $syslog
|
|
|
-# Default-Start: 2 3 4 5
|
|
|
-# Default-Stop: 0 1 6
|
|
|
-# Short-Description: Personal Firewall
|
|
|
-# Description:
|
|
|
-### END INIT INFO
|
|
|
-
|
|
|
-# programme iptables IPV4 et IPV6
|
|
|
-IPT=/sbin/iptables
|
|
|
-IP6T=/sbin/ip6tables
|
|
|
-
|
|
|
-# Les IPs
|
|
|
-IPMAISON=192.168.111.150
|
|
|
-IP6MAISON=fe80::1e6f:65ff:fe92:dd1f
|
|
|
-
|
|
|
-# fonction qui démarre le firewall
|
|
|
-do_start() {
|
|
|
-
|
|
|
- # Efface toutes les règles en cours. -F toutes. -X utilisateurs
|
|
|
- $IPT -t filter -F
|
|
|
- $IPT -t filter -X
|
|
|
- $IPT -t nat -F
|
|
|
- $IPT -t nat -X
|
|
|
- $IPT -t mangle -F
|
|
|
- $IPT -t mangle -X
|
|
|
- #
|
|
|
- $IP6T -t filter -F
|
|
|
- $IP6T -t filter -X
|
|
|
- # Il n'y a pas de NAT en IPV6
|
|
|
- #$IP6T -t nat -F
|
|
|
- #$IP6T -t nat -X
|
|
|
- $IP6T -t mangle -F
|
|
|
- $IP6T -t mangle -X
|
|
|
-
|
|
|
- # stratégie (-P) par défaut : bloc tout l'entrant le forward et autorise le sortant
|
|
|
- $IPT -t filter -P INPUT DROP
|
|
|
- $IPT -t filter -P FORWARD DROP
|
|
|
- $IPT -t filter -P OUTPUT ACCEPT
|
|
|
- #
|
|
|
- $IP6T -F INPUT
|
|
|
- $IP6T -F FORWARD
|
|
|
- $IP6T -X
|
|
|
-
|
|
|
- # Loopback
|
|
|
- $IPT -t filter -A INPUT -i lo -j ACCEPT
|
|
|
- $IPT -t filter -A OUTPUT -o lo -j ACCEPT
|
|
|
- #
|
|
|
- $IP6T -t filter -A INPUT -i lo -j ACCEPT
|
|
|
- $IP6T -t filter -A OUTPUT -o lo -j ACCEPT
|
|
|
-
|
|
|
- # ICMP
|
|
|
- $IPT -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
|
|
|
- $IPT -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
|
|
|
-
|
|
|
- # Permettre à une connexion ouverte de recevoir du trafic en entrée
|
|
|
- $IPT -t filter -A INPUT -m state --state ESTABLISHED -j ACCEPT
|
|
|
- #
|
|
|
- $IP6T -t filter -A INPUT -m state --state ESTABLISHED -j ACCEPT
|
|
|
- $IP6T -A INPUT -p icmpv6 --icmpv6-type neighbor-solicitation -j ACCEPT
|
|
|
- $IP6T -A INPUT -p icmpv6 --icmpv6-type neighbor-advertisement -j ACCEPT
|
|
|
- $IP6T -A INPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT
|
|
|
- $IP6T -A INPUT -j ACCEPT
|
|
|
- $IP6T -A INPUT -p icmpv6 --icmpv6-type router-solicitation -j ACCEPT
|
|
|
- $IP6T -P INPUT DROP
|
|
|
- $IP6T -A FORWARD -m state --state ESTABLISHED -j ACCEPT
|
|
|
- $IP6T -A FORWARD -p icmpv6 --icmpv6-type echo-request -j ACCEPT
|
|
|
- $IP6T -A FORWARD -i br0 -j ACCEPT
|
|
|
- $IP6T -A FORWARD -i br1 -o sit_sixxs -j ACCEPT
|
|
|
- $IP6T -P FORWARD DROP
|
|
|
-
|
|
|
- # DNS:53
|
|
|
- # /!\ Il faut autoriser le DNS AVANT de déclarer des hosts sinon pas de résolution de nom possible
|
|
|
- $IPT -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
|
|
|
- $IPT -t filter -A INPUT -p udp --dport 53 -j ACCEPT
|
|
|
-
|
|
|
- # DNS:53
|
|
|
- $IP6T -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
|
|
|
- $IP6T -t filter -A INPUT -p udp --dport 53 -j ACCEPT
|
|
|
-
|
|
|
- # DNS:953
|
|
|
- # /!\ Il faut autoriser le DNS AVANT de déclarer des hosts sinon pas de résolution de nom possible
|
|
|
- $IPT -t filter -A INPUT -p tcp --dport 953 -j ACCEPT
|
|
|
- $IPT -t filter -A INPUT -p udp --dport 953 -j ACCEPT
|
|
|
- #
|
|
|
- $IP6T -t filter -A INPUT -p tcp --dport 953 -j ACCEPT
|
|
|
- $IP6T -t filter -A INPUT -p udp --dport 953 -j ACCEPT
|
|
|
-
|
|
|
-
|
|
|
- # accepte tout d'une ip en TCP (de la maison)
|
|
|
- $IPT -t filter -A INPUT -p tcp -s $IPMAISON -j ACCEPT
|
|
|
- $IP6T -t filter -A INPUT -p tcp -s $IP6MAISON -j ACCEPT
|
|
|
-
|
|
|
- # ssh
|
|
|
- $IPT -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
|
|
|
- $IPT -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT
|
|
|
- #
|
|
|
- $IP6T -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
|
|
|
- $IP6T -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT
|
|
|
-
|
|
|
-
|
|
|
- #NTP out
|
|
|
- $IPT -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT
|
|
|
- $IP6T -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT
|
|
|
-
|
|
|
-
|
|
|
-# # HTTP + HTTPS Out
|
|
|
-# $IPT -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
|
|
|
-# $IPT -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
|
|
|
-
|
|
|
-# $IP6T -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
|
|
|
-# $IP6T -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
|
|
|
-
|
|
|
-# # HTTP + HTTPS In
|
|
|
-# $IPT -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
|
|
|
-# $IPT -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
|
|
|
-
|
|
|
-# $IP6T -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
|
|
|
-# $IP6T -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
|
|
|
-
|
|
|
-
|
|
|
-# # Mail SMTP:25
|
|
|
-# $IPT -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
|
|
|
-# $IPT -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT
|
|
|
-
|
|
|
-# $IP6T -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
|
|
|
-# $IP6T -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT
|
|
|
-
|
|
|
-
|
|
|
-# # Mail SMTP:587
|
|
|
-# $IPT -t filter -A INPUT -p tcp --dport 587 -j ACCEPT
|
|
|
-# $IPT -t filter -A OUTPUT -p tcp --dport 587 -j ACCEPT
|
|
|
-
|
|
|
-# $IP6T -t filter -A INPUT -p tcp --dport 597 -j ACCEPT
|
|
|
-# $IP6T -t filter -A OUTPUT -p tcp --dport 587 -j ACCEPT
|
|
|
-
|
|
|
-# # Mail IMAP:143
|
|
|
-# $IPT -t filter -A INPUT -p tcp --dport 143 -j ACCEPT
|
|
|
-# $IPT -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT
|
|
|
-
|
|
|
-# $IP6T -t filter -A INPUT -p tcp --dport 143 -j ACCEPT
|
|
|
-# $IP6T -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT
|
|
|
-
|
|
|
-# # Mail IMAPS:993
|
|
|
-# $IPT -t filter -A INPUT -p tcp --dport 993 -j ACCEPT
|
|
|
-# $IPT -t filter -A OUTPUT -p tcp --dport 993 -j ACCEPT
|
|
|
-# $IP6T -t filter -A INPUT -p tcp --dport 993 -j ACCEPT
|
|
|
-# $IP6T -t filter -A OUTPUT -p tcp --dport 993 -j ACCEPT
|
|
|
-
|
|
|
-# # Mail 465
|
|
|
-# $IPT -t filter -A INPUT -p tcp --dport 465 -j ACCEPT
|
|
|
-# $IPT -t filter -A OUTPUT -p tcp --dport 465 -j ACCEPT
|
|
|
-
|
|
|
-# $IP6T -t filter -A INPUT -p tcp --dport 465 -j ACCEPT
|
|
|
-# $IP6T -t filter -A OUTPUT -p tcp --dport 465 -j ACCEPT
|
|
|
-
|
|
|
-
|
|
|
- #
|
|
|
- echo "firewall started [OK]"
|
|
|
-}
|
|
|
-
|
|
|
-# fonction qui arrête le firewall
|
|
|
-do_stop() {
|
|
|
-
|
|
|
- # Efface toutes les règles
|
|
|
- $IPT -t filter -F
|
|
|
- $IPT -t filter -X
|
|
|
- $IPT -t nat -F
|
|
|
- $IPT -t nat -X
|
|
|
- $IPT -t mangle -F
|
|
|
- $IPT -t mangle -X
|
|
|
- #
|
|
|
- $IP6T -t filter -F
|
|
|
- $IP6T -t filter -X
|
|
|
- #$IP6T -t nat -F
|
|
|
- #$IP6T -t nat -X
|
|
|
- $IP6T -t mangle -F
|
|
|
- $IP6T -t mangle -X
|
|
|
-
|
|
|
- # remet la stratégie
|
|
|
- $IPT -t filter -P INPUT ACCEPT
|
|
|
- $IPT -t filter -P OUTPUT ACCEPT
|
|
|
- $IPT -t filter -P FORWARD ACCEPT
|
|
|
- #
|
|
|
- $IP6T -t filter -P INPUT ACCEPT
|
|
|
- $IP6T -t filter -P OUTPUT ACCEPT
|
|
|
- $IP6T -t filter -P FORWARD ACCEPT
|
|
|
-
|
|
|
- #
|
|
|
- echo "firewall stopped [OK]"
|
|
|
-}
|
|
|
-
|
|
|
-# fonction status firewall
|
|
|
-do_status() {
|
|
|
-
|
|
|
- # affiche les règles en cours
|
|
|
- clear
|
|
|
- echo Status IPV4
|
|
|
- echo --
|
|
|
- $IPT -L -n -v
|
|
|
- echo
|
|
|
- echo --
|
|
|
- echo
|
|
|
- echo status IPV6
|
|
|
- echo --
|
|
|
- $IP6T -L -n -v
|
|
|
- echo
|
|
|
-}
|
|
|
-
|
|
|
-case "$1" in
|
|
|
- start)
|
|
|
- do_start
|
|
|
- # quitte sans erreur
|
|
|
- exit 0
|
|
|
- ;;
|
|
|
-
|
|
|
- stop)
|
|
|
- do_stop
|
|
|
- # quitte sans erreur
|
|
|
- exit 0
|
|
|
- ;;
|
|
|
-
|
|
|
- restart)
|
|
|
- do_stop
|
|
|
- do_start
|
|
|
- # quitte sans erreur
|
|
|
- exit 0
|
|
|
- ;;
|
|
|
-
|
|
|
- status)
|
|
|
- do_status
|
|
|
- # quitte sans erreurs
|
|
|
- exit 0
|
|
|
- ;;
|
|
|
-
|
|
|
- *)
|
|
|
- # Si on ne tape ni "start" ni "stop"... on affiche une erreur
|
|
|
- echo "Usage: /etc/init.d/firewall {start|stop|restart|status}"
|
|
|
- # quitte le script avec un etat "en erreur"
|
|
|
- exit 1
|
|
|
- ;;
|
|
|
-
|
|
|
-esac
|
|
|
-```
|
|
|
+ #! /bin/sh
|
|
|
+ ### BEGIN INIT INFO
|
|
|
+ # Provides: PersonalFirewall
|
|
|
+ # Required-Start: $remote_fs $syslog
|
|
|
+ # Required-Stop: $remote_fs $syslog
|
|
|
+ # Default-Start: 2 3 4 5
|
|
|
+ # Default-Stop: 0 1 6
|
|
|
+ # Short-Description: Personal Firewall
|
|
|
+ # Description:
|
|
|
+ ### END INIT INFO
|
|
|
+
|
|
|
+ # programme iptables IPV4 et IPV6
|
|
|
+ IPT=/sbin/iptables
|
|
|
+ IP6T=/sbin/ip6tables
|
|
|
+
|
|
|
+ # Les IPs
|
|
|
+ IPMAISON=192.168.111.150
|
|
|
+ IP6MAISON=fe80::1e6f:65ff:fe92:dd1f
|
|
|
+
|
|
|
+ # fonction qui démarre le firewall
|
|
|
+ do_start() {
|
|
|
+
|
|
|
+ # Efface toutes les règles en cours. -F toutes. -X utilisateurs
|
|
|
+ $IPT -t filter -F
|
|
|
+ $IPT -t filter -X
|
|
|
+ $IPT -t nat -F
|
|
|
+ $IPT -t nat -X
|
|
|
+ $IPT -t mangle -F
|
|
|
+ $IPT -t mangle -X
|
|
|
+ #
|
|
|
+ $IP6T -t filter -F
|
|
|
+ $IP6T -t filter -X
|
|
|
+ # Il n'y a pas de NAT en IPV6
|
|
|
+ #$IP6T -t nat -F
|
|
|
+ #$IP6T -t nat -X
|
|
|
+ $IP6T -t mangle -F
|
|
|
+ $IP6T -t mangle -X
|
|
|
+
|
|
|
+ # stratégie (-P) par défaut : bloc tout l'entrant le forward et autorise le sortant
|
|
|
+ $IPT -t filter -P INPUT DROP
|
|
|
+ $IPT -t filter -P FORWARD DROP
|
|
|
+ $IPT -t filter -P OUTPUT ACCEPT
|
|
|
+ #
|
|
|
+ $IP6T -F INPUT
|
|
|
+ $IP6T -F FORWARD
|
|
|
+ $IP6T -X
|
|
|
+
|
|
|
+ # Loopback
|
|
|
+ $IPT -t filter -A INPUT -i lo -j ACCEPT
|
|
|
+ $IPT -t filter -A OUTPUT -o lo -j ACCEPT
|
|
|
+ #
|
|
|
+ $IP6T -t filter -A INPUT -i lo -j ACCEPT
|
|
|
+ $IP6T -t filter -A OUTPUT -o lo -j ACCEPT
|
|
|
+
|
|
|
+ # ICMP
|
|
|
+ $IPT -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
|
|
|
+ $IPT -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
|
|
|
+
|
|
|
+ # Permettre à une connexion ouverte de recevoir du trafic en entrée
|
|
|
+ $IPT -t filter -A INPUT -m state --state ESTABLISHED -j ACCEPT
|
|
|
+ #
|
|
|
+ $IP6T -t filter -A INPUT -m state --state ESTABLISHED -j ACCEPT
|
|
|
+ $IP6T -A INPUT -p icmpv6 --icmpv6-type neighbor-solicitation -j ACCEPT
|
|
|
+ $IP6T -A INPUT -p icmpv6 --icmpv6-type neighbor-advertisement -j ACCEPT
|
|
|
+ $IP6T -A INPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT
|
|
|
+ $IP6T -A INPUT -j ACCEPT
|
|
|
+ $IP6T -A INPUT -p icmpv6 --icmpv6-type router-solicitation -j ACCEPT
|
|
|
+ $IP6T -P INPUT DROP
|
|
|
+ $IP6T -A FORWARD -m state --state ESTABLISHED -j ACCEPT
|
|
|
+ $IP6T -A FORWARD -p icmpv6 --icmpv6-type echo-request -j ACCEPT
|
|
|
+ $IP6T -A FORWARD -i br0 -j ACCEPT
|
|
|
+ $IP6T -A FORWARD -i br1 -o sit_sixxs -j ACCEPT
|
|
|
+ $IP6T -P FORWARD DROP
|
|
|
+
|
|
|
+ # DNS:53
|
|
|
+ # /!\ Il faut autoriser le DNS AVANT de déclarer des hosts sinon pas de résolution de nom possible
|
|
|
+ $IPT -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
|
|
|
+ $IPT -t filter -A INPUT -p udp --dport 53 -j ACCEPT
|
|
|
+
|
|
|
+ # DNS:53
|
|
|
+ $IP6T -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
|
|
|
+ $IP6T -t filter -A INPUT -p udp --dport 53 -j ACCEPT
|
|
|
+
|
|
|
+ # DNS:953
|
|
|
+ # /!\ Il faut autoriser le DNS AVANT de déclarer des hosts sinon pas de résolution de nom possible
|
|
|
+ $IPT -t filter -A INPUT -p tcp --dport 953 -j ACCEPT
|
|
|
+ $IPT -t filter -A INPUT -p udp --dport 953 -j ACCEPT
|
|
|
+ #
|
|
|
+ $IP6T -t filter -A INPUT -p tcp --dport 953 -j ACCEPT
|
|
|
+ $IP6T -t filter -A INPUT -p udp --dport 953 -j ACCEPT
|
|
|
+
|
|
|
+
|
|
|
+ # accepte tout d'une ip en TCP (de la maison)
|
|
|
+ $IPT -t filter -A INPUT -p tcp -s $IPMAISON -j ACCEPT
|
|
|
+ $IP6T -t filter -A INPUT -p tcp -s $IP6MAISON -j ACCEPT
|
|
|
+
|
|
|
+ # ssh
|
|
|
+ $IPT -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
|
|
|
+ $IPT -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT
|
|
|
+ #
|
|
|
+ $IP6T -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
|
|
|
+ $IP6T -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT
|
|
|
+
|
|
|
+
|
|
|
+ #NTP out
|
|
|
+ $IPT -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT
|
|
|
+ $IP6T -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT
|
|
|
+
|
|
|
+
|
|
|
+ # # HTTP + HTTPS Out
|
|
|
+ # $IPT -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
|
|
|
+ # $IPT -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
|
|
|
+
|
|
|
+ # $IP6T -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
|
|
|
+ # $IP6T -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
|
|
|
+
|
|
|
+ # # HTTP + HTTPS In
|
|
|
+ # $IPT -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
|
|
|
+ # $IPT -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
|
|
|
+
|
|
|
+ # $IP6T -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
|
|
|
+ # $IP6T -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
|
|
|
+
|
|
|
+
|
|
|
+ # # Mail SMTP:25
|
|
|
+ # $IPT -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
|
|
|
+ # $IPT -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT
|
|
|
+
|
|
|
+ # $IP6T -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
|
|
|
+ # $IP6T -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT
|
|
|
+
|
|
|
+
|
|
|
+ # # Mail SMTP:587
|
|
|
+ # $IPT -t filter -A INPUT -p tcp --dport 587 -j ACCEPT
|
|
|
+ # $IPT -t filter -A OUTPUT -p tcp --dport 587 -j ACCEPT
|
|
|
+
|
|
|
+ # $IP6T -t filter -A INPUT -p tcp --dport 597 -j ACCEPT
|
|
|
+ # $IP6T -t filter -A OUTPUT -p tcp --dport 587 -j ACCEPT
|
|
|
+
|
|
|
+ # # Mail IMAP:143
|
|
|
+ # $IPT -t filter -A INPUT -p tcp --dport 143 -j ACCEPT
|
|
|
+ # $IPT -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT
|
|
|
+
|
|
|
+ # $IP6T -t filter -A INPUT -p tcp --dport 143 -j ACCEPT
|
|
|
+ # $IP6T -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT
|
|
|
+
|
|
|
+ # # Mail IMAPS:993
|
|
|
+ # $IPT -t filter -A INPUT -p tcp --dport 993 -j ACCEPT
|
|
|
+ # $IPT -t filter -A OUTPUT -p tcp --dport 993 -j ACCEPT
|
|
|
+ # $IP6T -t filter -A INPUT -p tcp --dport 993 -j ACCEPT
|
|
|
+ # $IP6T -t filter -A OUTPUT -p tcp --dport 993 -j ACCEPT
|
|
|
+
|
|
|
+ # # Mail 465
|
|
|
+ # $IPT -t filter -A INPUT -p tcp --dport 465 -j ACCEPT
|
|
|
+ # $IPT -t filter -A OUTPUT -p tcp --dport 465 -j ACCEPT
|
|
|
+
|
|
|
+ # $IP6T -t filter -A INPUT -p tcp --dport 465 -j ACCEPT
|
|
|
+ # $IP6T -t filter -A OUTPUT -p tcp --dport 465 -j ACCEPT
|
|
|
+
|
|
|
+
|
|
|
+ #
|
|
|
+ echo "firewall started [OK]"
|
|
|
+ }
|
|
|
+
|
|
|
+ # fonction qui arrête le firewall
|
|
|
+ do_stop() {
|
|
|
+
|
|
|
+ # Efface toutes les règles
|
|
|
+ $IPT -t filter -F
|
|
|
+ $IPT -t filter -X
|
|
|
+ $IPT -t nat -F
|
|
|
+ $IPT -t nat -X
|
|
|
+ $IPT -t mangle -F
|
|
|
+ $IPT -t mangle -X
|
|
|
+ #
|
|
|
+ $IP6T -t filter -F
|
|
|
+ $IP6T -t filter -X
|
|
|
+ #$IP6T -t nat -F
|
|
|
+ #$IP6T -t nat -X
|
|
|
+ $IP6T -t mangle -F
|
|
|
+ $IP6T -t mangle -X
|
|
|
+
|
|
|
+ # remet la stratégie
|
|
|
+ $IPT -t filter -P INPUT ACCEPT
|
|
|
+ $IPT -t filter -P OUTPUT ACCEPT
|
|
|
+ $IPT -t filter -P FORWARD ACCEPT
|
|
|
+ #
|
|
|
+ $IP6T -t filter -P INPUT ACCEPT
|
|
|
+ $IP6T -t filter -P OUTPUT ACCEPT
|
|
|
+ $IP6T -t filter -P FORWARD ACCEPT
|
|
|
+
|
|
|
+ #
|
|
|
+ echo "firewall stopped [OK]"
|
|
|
+ }
|
|
|
+
|
|
|
+ # fonction status firewall
|
|
|
+ do_status() {
|
|
|
+
|
|
|
+ # affiche les règles en cours
|
|
|
+ clear
|
|
|
+ echo Status IPV4
|
|
|
+ echo --
|
|
|
+ $IPT -L -n -v
|
|
|
+ echo
|
|
|
+ echo --
|
|
|
+ echo
|
|
|
+ echo status IPV6
|
|
|
+ echo --
|
|
|
+ $IP6T -L -n -v
|
|
|
+ echo
|
|
|
+ }
|
|
|
+
|
|
|
+ case "$1" in
|
|
|
+ start)
|
|
|
+ do_start
|
|
|
+ # quitte sans erreur
|
|
|
+ exit 0
|
|
|
+ ;;
|
|
|
+
|
|
|
+ stop)
|
|
|
+ do_stop
|
|
|
+ # quitte sans erreur
|
|
|
+ exit 0
|
|
|
+ ;;
|
|
|
+
|
|
|
+ restart)
|
|
|
+ do_stop
|
|
|
+ do_start
|
|
|
+ # quitte sans erreur
|
|
|
+ exit 0
|
|
|
+ ;;
|
|
|
+
|
|
|
+ status)
|
|
|
+ do_status
|
|
|
+ # quitte sans erreurs
|
|
|
+ exit 0
|
|
|
+ ;;
|
|
|
+
|
|
|
+ *)
|
|
|
+ # Si on ne tape ni "start" ni "stop"... on affiche une erreur
|
|
|
+ echo "Usage: /etc/init.d/firewall {start|stop|restart|status}"
|
|
|
+ # quitte le script avec un etat "en erreur"
|
|
|
+ exit 1
|
|
|
+ ;;
|
|
|
+
|
|
|
+ esac
|
|
|
|
|
|
Explications:
|
|
|
|
|
|
-```shell
|
|
|
Création de 4 chaînes pour faciliter les opérations:
|
|
|
|
|
|
-# iptables -N TCP
|
|
|
-# iptables -N UDP
|
|
|
+ # iptables -N TCP
|
|
|
+ # iptables -N UDP
|
|
|
|
|
|
-# ip6tables -N TCP
|
|
|
-# ip6tables -N UDP
|
|
|
+ # ip6tables -N TCP
|
|
|
+ # ip6tables -N UDP
|
|
|
|
|
|
On est sur un serveur, pas un routeur, donc, on interdit la règle FORWARD:
|
|
|
|
|
|
-# iptables -P FORWARD DROP
|
|
|
+ # iptables -P FORWARD DROP
|
|
|
|
|
|
-# ip6tables -P FORWARD DROP
|
|
|
+ # ip6tables -P FORWARD DROP
|
|
|
|
|
|
On autorise tout en sortie:
|
|
|
|
|
|
-# iptables -P OUTPUT ACCEPT
|
|
|
+ # iptables -P OUTPUT ACCEPT
|
|
|
|
|
|
-# ip6tables -P OUTPUT ACCEPT
|
|
|
+ # ip6tables -P OUTPUT ACCEPT
|
|
|
|
|
|
|
|
|
Nous allons accepter les connexions déjà établies:
|
|
|
|
|
|
-# iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
|
|
|
+ # iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
|
|
|
|
|
|
-# ip6tables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
|
|
|
+ # ip6tables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
|
|
|
|
|
|
|
|
|
En entrée, on commence par interdire tout; on ouvrira les ports suivantles besoins:
|
|
|
|
|
|
-# iptables -P INPUT DROP
|
|
|
+ # iptables -P INPUT DROP
|
|
|
|
|
|
-# ip6tables -P INPUT DROP
|
|
|
+ # ip6tables -P INPUT DROP
|
|
|
|
|
|
|
|
|
-Aoristaion des connexions **loopback** (internes):
|
|
|
+Autorisation des connexions **loopback** (internes):
|
|
|
|
|
|
-# iptables -A INPUT -i lo -j ACCEPT
|
|
|
+ # iptables -A INPUT -i lo -j ACCEPT
|
|
|
|
|
|
-# ip6tables -A INPUT -i lo -j ACCEPT
|
|
|
+ # ip6tables -A INPUT -i lo -j ACCEPT
|
|
|
|
|
|
Nous allons interdire les paquets marqués **INVALID**; il faudra auparavant accepter les paquets **ICMPv6 Neighbor Discovery** qui apparaissent invalides:
|
|
|
|
|
|
-#iptables -A INPUT -p 41 -j ACCEPT
|
|
|
+ #iptables -A INPUT -p 41 -j ACCEPT
|
|
|
|
|
|
-#ip6tables -A INPUT -p 41 -j ACCEPT
|
|
|
+ #ip6tables -A INPUT -p 41 -j ACCEPT
|
|
|
|
|
|
-# iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
|
|
|
+ # iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
|
|
|
|
|
|
-# ip6tables -A INPUT -m conntrack --ctstate INVALID -j DROP
|
|
|
+ # ip6tables -A INPUT -m conntrack --ctstate INVALID -j DROP
|
|
|
|
|
|
Pour IPV6, il faut rajouter la règle suivante qui permet de faire passer le protocol de découverte des ordinateurs sur le même réseau:
|
|
|
|
|
|
-# ip6tables -A INPUT -s fe80::/10 -p ipv6-icmp -j ACCEPT
|
|
|
+ # ip6tables -A INPUT -s fe80::/10 -p ipv6-icmp -j ACCEPT
|
|
|
|
|
|
L'adresse fe80:: est l'adresse ipv6 valable uniquement sur le réseau local.
|
|
|
|
|
|
On accepte les paquets **ping**:
|
|
|
|
|
|
-# iptables -A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
|
|
|
+ # iptables -A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
|
|
|
|
|
|
-# ip6tables -A INPUT -p icmpv6 -m conntrack --ctstate NEW -j ACCEPT
|
|
|
+ # ip6tables -A INPUT -p icmpv6 -m conntrack --ctstate NEW -j ACCEPT
|
|
|
|
|
|
On peut maintenant accepter les nouveaux paquets entrants. Les connexions entrantes doivent commencer avec un paquet **SYNC**. Elles seront rejetées si ce n'est pas le cas:
|
|
|
|
|
|
-# iptables -A INPUT -p udp -m conntrack --ctstate NEW -j UDP
|
|
|
-# iptables -A INPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP
|
|
|
+ # iptables -A INPUT -p udp -m conntrack --ctstate NEW -j UDP
|
|
|
+ # iptables -A INPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP
|
|
|
|
|
|
-# ip6tables -A INPUT -p udp -m conntrack --ctstate NEW -j UDP
|
|
|
-# ip6tables -A INPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP
|
|
|
+ # ip6tables -A INPUT -p udp -m conntrack --ctstate NEW -j UDP
|
|
|
+ # ip6tables -A INPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP
|
|
|
|
|
|
On rejette les paquets du protocole **icmp unreachable**
|
|
|
|
|
|
-# iptables -A INPUT -j REJECT --reject-with icmp-proto-unreachable
|
|
|
+ # iptables -A INPUT -j REJECT --reject-with icmp-proto-unreachable
|
|
|
|
|
|
-# iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
|
|
|
+ # iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
|
|
|
|
|
|
-# ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 128 -m conntrack --ctstate NEW -j ACCEPT
|
|
|
+ # ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 128 -m conntrack --ctstate NEW -j ACCEPT
|
|
|
|
|
|
-# ip6tables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
|
|
|
+ # ip6tables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
|
|
|
|
|
|
|
|
|
Pour IPV6, nous pouvons rajouter un filtrage pour le "kernel reverse path filter":
|
|
|
|
|
|
-# ip6tables -t raw -A PREROUTING -m rpfilter -j ACCEPT
|
|
|
-# ip6tables -t raw -A PREROUTING -j DROP
|
|
|
+ # ip6tables -t raw -A PREROUTING -m rpfilter -j ACCEPT
|
|
|
+ # ip6tables -t raw -A PREROUTING -j DROP
|
|
|
|
|
|
On accepte les paquets **ssh** sur le port 22 (changez ce port si vous avez configuré vos ports différemment)
|
|
|
|
|
|
-# iptables -A TCP -p tcp --dport 22 -j ACCEPT
|
|
|
+ # iptables -A TCP -p tcp --dport 22 -j ACCEPT
|
|
|
|
|
|
-# ip6tables -A TCP -p tcp --dport 22 -j ACCEPT
|
|
|
+ # ip6tables -A TCP -p tcp --dport 22 -j ACCEPT
|
|
|
|
|
|
|
|
|
Règles pour le DNS et NTP (ports 53 et 41)
|
|
|
|
|
|
-# iptables -A INPUT -p udp -m state --state ESTABLISHED --sport 53 -j ACCEPT
|
|
|
-# iptables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT
|
|
|
-# iptables -A INPUT -p tcp -m state --state ESTABLISHED --sport 53 -j ACCEPT
|
|
|
-# iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT
|
|
|
+ # iptables -A INPUT -p udp -m state --state ESTABLISHED --sport 53 -j ACCEPT
|
|
|
+ # iptables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT
|
|
|
+ # iptables -A INPUT -p tcp -m state --state ESTABLISHED --sport 53 -j ACCEPT
|
|
|
+ # iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT
|
|
|
|
|
|
|
|
|
-# iptables -A INPUT -p udp -m state --state ESTABLISHED --sport 123 -j ACCEPT
|
|
|
-# iptables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED --dport 123 -j ACCEPT
|
|
|
+ # iptables -A INPUT -p udp -m state --state ESTABLISHED --sport 123 -j ACCEPT
|
|
|
+ # iptables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED --dport 123 -j ACCEPT
|
|
|
|
|
|
La même chose pour IPV6:
|
|
|
|
|
|
-# ip6tables -A INPUT -p udp -m state --state ESTABLISHED --sport 53 -j ACCEPT
|
|
|
-# ip6tables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT
|
|
|
-# ip6tables -A INPUT -p tcp -m state --state ESTABLISHED --sport 53 -j ACCEPT
|
|
|
-# ip6tables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT
|
|
|
+ # ip6tables -A INPUT -p udp -m state --state ESTABLISHED --sport 53 -j ACCEPT
|
|
|
+ # ip6tables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT
|
|
|
+ # ip6tables -A INPUT -p tcp -m state --state ESTABLISHED --sport 53 -j ACCEPT
|
|
|
+ # ip6tables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT
|
|
|
|
|
|
|
|
|
-# ip6tables -A INPUT -p udp -m state --state ESTABLISHED --sport 123 -j ACCEPT
|
|
|
-# ip6tables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED --dport 123 -j ACCEPT
|
|
|
+ # ip6tables -A INPUT -p udp -m state --state ESTABLISHED --sport 123 -j ACCEPT
|
|
|
+ # ip6tables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED --dport 123 -j ACCEPT
|
|
|
|
|
|
Nous pouvons maintenant lister nos règles. Nous allons commencer par IPV4:
|
|
|
|
|
|
Listons les règles actuelles, ensuite ajoutons 2 règles et sauvons celles-ci, puis listons le résultat. Vous pouvez faire de même pour toutes les règles.
|
|
|
|
|
|
-```shell
|
|
|
-root@atom:/etc/iptables# cat rules.v4
|
|
|
-# Generated by iptables-save v1.6.0 on Sun Feb 11 14:27:32 2018
|
|
|
-*filter
|
|
|
-:INPUT ACCEPT [491:50774]
|
|
|
-:FORWARD ACCEPT [0:0]
|
|
|
-:OUTPUT ACCEPT [267:23983]
|
|
|
-COMMIT
|
|
|
-# Completed on Sun Feb 11 14:27:32 2018
|
|
|
-
|
|
|
-root@atom:/etc/iptables# iptables -N TCP
|
|
|
-root@atom:/etc/iptables# iptables -N UDP
|
|
|
-
|
|
|
-root@atom:/etc/iptables# service netfilter-persistent save
|
|
|
-[....] Saving netfilter rules...run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables save
|
|
|
-run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables save
|
|
|
-done.
|
|
|
-
|
|
|
-root@atom:/etc/iptables# cat rules.v4
|
|
|
-# Generated by iptables-save v1.6.0 on Sun Feb 11 14:28:24 2018
|
|
|
-*filter
|
|
|
-:INPUT ACCEPT [13:888]
|
|
|
-:FORWARD ACCEPT [0:0]
|
|
|
-:OUTPUT ACCEPT [8:944]
|
|
|
-:TCP - [0:0]
|
|
|
-:UDP - [0:0]
|
|
|
-COMMIT
|
|
|
-# Completed on Sun Feb 11 14:28:24 2018
|
|
|
-```
|
|
|
+ root@atom:/etc/iptables# cat rules.v4
|
|
|
+ # Generated by iptables-save v1.6.0 on Sun Feb 11 14:27:32 2018
|
|
|
+ *filter
|
|
|
+ :INPUT ACCEPT [491:50774]
|
|
|
+ :FORWARD ACCEPT [0:0]
|
|
|
+ :OUTPUT ACCEPT [267:23983]
|
|
|
+ COMMIT
|
|
|
+ # Completed on Sun Feb 11 14:27:32 2018
|
|
|
+
|
|
|
+ root@atom:/etc/iptables# iptables -N TCP
|
|
|
+ root@atom:/etc/iptables# iptables -N UDP
|
|
|
+
|
|
|
+ root@atom:/etc/iptables# service netfilter-persistent save
|
|
|
+ [....] Saving netfilter rules...run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables save
|
|
|
+ run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables save
|
|
|
+ done.
|
|
|
+
|
|
|
+ root@atom:/etc/iptables# cat rules.v4
|
|
|
+ # Generated by iptables-save v1.6.0 on Sun Feb 11 14:28:24 2018
|
|
|
+ *filter
|
|
|
+ :INPUT ACCEPT [13:888]
|
|
|
+ :FORWARD ACCEPT [0:0]
|
|
|
+ :OUTPUT ACCEPT [8:944]
|
|
|
+ :TCP - [0:0]
|
|
|
+ :UDP - [0:0]
|
|
|
+ COMMIT
|
|
|
+ # Completed on Sun Feb 11 14:28:24 2018
|
|
|
|
|
|
Ne pas oublier de valider la règle d'acceptation des connexions existantes AVANT d'entrer la règle INPUT DROP sinon, vous perdez toute connexion avec votre serveur :)
|
|
|
|
|
@@ -534,92 +519,86 @@ Nous obtenons donc les règles suivantes:
|
|
|
|
|
|
Pour IPV4:
|
|
|
|
|
|
-```shell
|
|
|
-root@atom:/etc/iptables# cat rules.v4
|
|
|
-# Generated by iptables-save v1.6.0 on Sun Feb 11 15:33:41 2018
|
|
|
-*filter
|
|
|
-:INPUT DROP [0:0]
|
|
|
-:FORWARD DROP [0:0]
|
|
|
-:OUTPUT ACCEPT [105:27592]
|
|
|
-:TCP - [0:0]
|
|
|
-:UDP - [0:0]
|
|
|
--A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
|
|
|
--A INPUT -i lo -j ACCEPT
|
|
|
--A INPUT -m conntrack --ctstate INVALID -j DROP
|
|
|
--A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
|
|
|
--A INPUT -p udp -m conntrack --ctstate NEW -j UDP
|
|
|
--A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
|
|
|
--A INPUT -j REJECT --reject-with icmp-proto-unreachable
|
|
|
--A INPUT -p tcp -j REJECT --reject-with tcp-reset
|
|
|
--A TCP -p tcp -m tcp --dport 22 -j ACCEPT
|
|
|
-COMMIT
|
|
|
-# Completed on Sun Feb 11 15:33:41 2018
|
|
|
-root@atom:/etc/iptables#
|
|
|
-```
|
|
|
+ root@atom:/etc/iptables# cat rules.v4
|
|
|
+ # Generated by iptables-save v1.6.0 on Sun Feb 11 15:33:41 2018
|
|
|
+ *filter
|
|
|
+ :INPUT DROP [0:0]
|
|
|
+ :FORWARD DROP [0:0]
|
|
|
+ :OUTPUT ACCEPT [105:27592]
|
|
|
+ :TCP - [0:0]
|
|
|
+ :UDP - [0:0]
|
|
|
+ -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
|
|
|
+ -A INPUT -i lo -j ACCEPT
|
|
|
+ -A INPUT -m conntrack --ctstate INVALID -j DROP
|
|
|
+ -A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
|
|
|
+ -A INPUT -p udp -m conntrack --ctstate NEW -j UDP
|
|
|
+ -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
|
|
|
+ -A INPUT -j REJECT --reject-with icmp-proto-unreachable
|
|
|
+ -A INPUT -p tcp -j REJECT --reject-with tcp-reset
|
|
|
+ -A TCP -p tcp -m tcp --dport 22 -j ACCEPT
|
|
|
+ COMMIT
|
|
|
+ # Completed on Sun Feb 11 15:33:41 2018
|
|
|
+ root@atom:/etc/iptables#
|
|
|
|
|
|
Pour IPV6:
|
|
|
|
|
|
-```shell
|
|
|
-root@atom:/etc/iptables# cat rules.v6
|
|
|
-# Generated by ip6tables-save v1.6.0 on Sun Feb 11 15:33:41 2018
|
|
|
-*raw
|
|
|
-:PREROUTING ACCEPT [0:0]
|
|
|
-:OUTPUT ACCEPT [0:0]
|
|
|
--A PREROUTING -m rpfilter -j ACCEPT
|
|
|
--A PREROUTING -j DROP
|
|
|
-COMMIT
|
|
|
-# Completed on Sun Feb 11 15:33:41 2018
|
|
|
-# Generated by ip6tables-save v1.6.0 on Sun Feb 11 15:33:41 2018
|
|
|
-*filter
|
|
|
-:INPUT DROP [1:144]
|
|
|
-:FORWARD DROP [0:0]
|
|
|
-:OUTPUT ACCEPT [0:0]
|
|
|
-:TCP - [0:0]
|
|
|
-:UDP - [0:0]
|
|
|
--A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
|
|
|
--A INPUT -i lo -j ACCEPT
|
|
|
--A INPUT -p ipv6 -j ACCEPT
|
|
|
--A INPUT -m conntrack --ctstate INVALID -j DROP
|
|
|
--A INPUT -p udp -m conntrack --ctstate NEW -j UDP
|
|
|
--A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
|
|
|
--A INPUT -p tcp -j REJECT --reject-with tcp-reset
|
|
|
--A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 128 -m conntrack --ctstate NEW -j ACCEPT
|
|
|
--A OUTPUT -p ipv6-icmp -j ACCEPT
|
|
|
--A TCP -p tcp -m tcp --dport 22 -j ACCEPT
|
|
|
-COMMIT
|
|
|
-# Completed on Sun Feb 11 15:33:41 2018
|
|
|
-root@atom:/etc/iptables#
|
|
|
-```
|
|
|
+ root@atom:/etc/iptables# cat rules.v6
|
|
|
+ # Generated by ip6tables-save v1.6.0 on Sun Feb 11 15:33:41 2018
|
|
|
+ *raw
|
|
|
+ :PREROUTING ACCEPT [0:0]
|
|
|
+ :OUTPUT ACCEPT [0:0]
|
|
|
+ -A PREROUTING -m rpfilter -j ACCEPT
|
|
|
+ -A PREROUTING -j DROP
|
|
|
+ COMMIT
|
|
|
+ # Completed on Sun Feb 11 15:33:41 2018
|
|
|
+ # Generated by ip6tables-save v1.6.0 on Sun Feb 11 15:33:41 2018
|
|
|
+ *filter
|
|
|
+ :INPUT DROP [1:144]
|
|
|
+ :FORWARD DROP [0:0]
|
|
|
+ :OUTPUT ACCEPT [0:0]
|
|
|
+ :TCP - [0:0]
|
|
|
+ :UDP - [0:0]
|
|
|
+ -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
|
|
|
+ -A INPUT -i lo -j ACCEPT
|
|
|
+ -A INPUT -p ipv6 -j ACCEPT
|
|
|
+ -A INPUT -m conntrack --ctstate INVALID -j DROP
|
|
|
+ -A INPUT -p udp -m conntrack --ctstate NEW -j UDP
|
|
|
+ -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
|
|
|
+ -A INPUT -p tcp -j REJECT --reject-with tcp-reset
|
|
|
+ -A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 128 -m conntrack --ctstate NEW -j ACCEPT
|
|
|
+ -A OUTPUT -p ipv6-icmp -j ACCEPT
|
|
|
+ -A TCP -p tcp -m tcp --dport 22 -j ACCEPT
|
|
|
+ COMMIT
|
|
|
+ # Completed on Sun Feb 11 15:33:41 2018
|
|
|
+ root@atom:/etc/iptables#
|
|
|
|
|
|
### Test DNS et du serveur de temps (avec iptables actif)
|
|
|
|
|
|
-```shell
|
|
|
-root@atom:/home/ericadmin# nslookup www.gnome.org
|
|
|
-Server: 192.168.111.254
|
|
|
-Address: 192.168.111.254#53
|
|
|
-
|
|
|
-Non-authoritative answer:
|
|
|
-www.gnome.org canonical name = proxy.gnome.org.
|
|
|
-Name: proxy.gnome.org
|
|
|
-Address: 209.132.180.168
|
|
|
-Name: proxy.gnome.org
|
|
|
-Address: 209.132.180.180
|
|
|
-
|
|
|
-root@atom:/home/ericadmin# timedatectl status
|
|
|
- Local time: dim. 2018-04-01 12:26:57 CEST
|
|
|
- Universal time: dim. 2018-04-01 10:26:57 UTC
|
|
|
- RTC time: dim. 2018-04-01 10:26:58
|
|
|
- Time zone: Europe/Paris (CEST, +0200)
|
|
|
- Network time on: yes
|
|
|
-NTP synchronized: yes
|
|
|
- RTC in local TZ: no
|
|
|
-```
|
|
|
+ root@atom:/home/ericadmin# nslookup www.gnome.org
|
|
|
+ Server: 192.168.111.254
|
|
|
+ Address: 192.168.111.254#53
|
|
|
+
|
|
|
+ Non-authoritative answer:
|
|
|
+ www.gnome.org canonical name = proxy.gnome.org.
|
|
|
+ Name: proxy.gnome.org
|
|
|
+ Address: 209.132.180.168
|
|
|
+ Name: proxy.gnome.org
|
|
|
+ Address: 209.132.180.180
|
|
|
+
|
|
|
+ root@atom:/home/ericadmin# timedatectl status
|
|
|
+ Local time: dim. 2018-04-01 12:26:57 CEST
|
|
|
+ Universal time: dim. 2018-04-01 10:26:57 UTC
|
|
|
+ RTC time: dim. 2018-04-01 10:26:58
|
|
|
+ Time zone: Europe/Paris (CEST, +0200)
|
|
|
+ Network time on: yes
|
|
|
+ NTP synchronized: yes
|
|
|
+ RTC in local TZ: no
|
|
|
|
|
|
Ça fonctionne.
|
|
|
|
|
|
Il faut re-tester la connectivité en IPV4 et IPV6
|
|
|
|
|
|
-1. Serveur -> extérieur
|
|
|
-2. Extérieur -> serveur
|
|
|
+1. Serveur -> extérieur
|
|
|
+2. Extérieur -> serveur
|
|
|
|
|
|
On peut utiliser l'adresse **ipv6.google.com** pour vérifier la connexion IPV6 en dehors du réseau local.
|