|
@@ -11,10 +11,8 @@ 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.
|
|
|
|
|
|
----
|
|
|
-
|
|
|
-```
|
|
|
-root@aijan:/home/ericadmin# apt install iptables-persistent
|
|
|
+```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
|
|
@@ -43,28 +41,20 @@ update-rc.d: warning: start and stop actions are no longer supported; falling ba
|
|
|
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@aijan:/home/ericadmin#
|
|
|
+root@atom:/home/ericadmin#
|
|
|
```
|
|
|
|
|
|
----
|
|
|
-
|
|
|
-Vous noterez que le nom du serveur est différent. J'ai testé mon tutoriel sur un nouveau serveur (aijan.yojik.net.)
|
|
|
-
|
|
|
Nous obtenons donc 2 fichiers de configuration, /etc/iptables/rules.v4 et /etc/iptables/rules.v6.
|
|
|
|
|
|
En listant ces fichiers, aucune règle n'est encore enregistrée: tout passe, en entrée et en sortie.
|
|
|
|
|
|
Ces fichiers sont mis à jour grâce aux commandes suivantes.
|
|
|
|
|
|
----
|
|
|
-
|
|
|
-```
|
|
|
+```shell
|
|
|
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
|
|
@@ -75,11 +65,9 @@ Les commandes disponibles pour **netfilter-persistent** sont les suivantes:
|
|
|
|
|
|
Exemples d'utilisation suivant l'état de **netfilter-persistent**:
|
|
|
|
|
|
----
|
|
|
-
|
|
|
-```
|
|
|
-root@aijan:/home/ericadmin# systemctl stop netfilter-persistent
|
|
|
-root@aijan:/home/ericadmin# systemctl status 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
|
|
@@ -87,21 +75,20 @@ root@aijan:/home/ericadmin# systemctl status netfilter-persistent
|
|
|
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 aijan systemd[1]: Starting netfilter persistent configuration...
|
|
|
-févr. 11 13:42:02 aijan netfilter-persistent[1525]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables start
|
|
|
-févr. 11 13:42:02 aijan netfilter-persistent[1525]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables start
|
|
|
-févr. 11 13:42:02 aijan systemd[1]: Started netfilter persistent configuration.
|
|
|
-févr. 11 13:50:22 aijan systemd[1]: Stopping netfilter persistent configuration...
|
|
|
-févr. 11 13:50:22 aijan netfilter-persistent[1629]: Automatic flush disabled; use '/usr/sbin/netfilter-persistent flush'
|
|
|
-févr. 11 13:50:22 aijan systemd[1]: netfilter-persistent.service: Control process exited, code=exited status=1
|
|
|
-févr. 11 13:50:22 aijan systemd[1]: Stopped netfilter persistent configuration.
|
|
|
-févr. 11 13:50:22 aijan systemd[1]: netfilter-persistent.service: Unit entered failed state.
|
|
|
-févr. 11 13:50:22 aijan systemd[1]: netfilter-persistent.service: Failed with result 'exit-code'.
|
|
|
-root@aijan:/home/ericadmin#
|
|
|
-
|
|
|
-
|
|
|
-root@aijan:/home/ericadmin# systemctl start netfilter-persistent
|
|
|
-root@aijan:/home/ericadmin# systemctl status netfilter-persistent
|
|
|
+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
|
|
@@ -109,38 +96,35 @@ root@aijan:/home/ericadmin# systemctl status netfilter-persistent
|
|
|
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 aijan systemd[1]: Starting netfilter persistent configuration...
|
|
|
-févr. 11 13:51:09 aijan netfilter-persistent[1641]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables start
|
|
|
-févr. 11 13:51:09 aijan netfilter-persistent[1641]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables start
|
|
|
-févr. 11 13:51:09 aijan systemd[1]: Started netfilter persistent configuration.
|
|
|
-root@aijan:/home/ericadmin#
|
|
|
+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:
|
|
|
|
|
|
-> **service netfilter-persistent save**
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-```
|
|
|
-root@aijan:/home/ericadmin# service netfilter-persistent save
|
|
|
+```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@aijan:/home/ericadmin#
|
|
|
+root@atom:/home/ericadmin#
|
|
|
```
|
|
|
|
|
|
----
|
|
|
+ou
|
|
|
|
|
|
-### Configuration des règles iptables
|
|
|
+```shell
|
|
|
+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
|
|
@@ -219,7 +203,7 @@ do_start() {
|
|
|
# /!\ 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
|
|
@@ -342,13 +326,13 @@ do_status() {
|
|
|
# affiche les règles en cours
|
|
|
clear
|
|
|
echo Status IPV4
|
|
|
- echo -----------------------------------------------
|
|
|
+ echo --
|
|
|
$IPT -L -n -v
|
|
|
echo
|
|
|
- echo -----------------------------------------------
|
|
|
+ echo --
|
|
|
echo
|
|
|
echo status IPV6
|
|
|
- echo -----------------------------------------------
|
|
|
+ echo --
|
|
|
$IP6T -L -n -v
|
|
|
echo
|
|
|
}
|
|
@@ -387,17 +371,11 @@ case "$1" in
|
|
|
;;
|
|
|
|
|
|
esac
|
|
|
-
|
|
|
```
|
|
|
|
|
|
----
|
|
|
-
|
|
|
-
|
|
|
Explications:
|
|
|
|
|
|
----
|
|
|
-
|
|
|
-```
|
|
|
+```shell
|
|
|
Création de 4 chaînes pour faciliter les opérations:
|
|
|
|
|
|
# iptables -N TCP
|
|
@@ -514,13 +492,12 @@ La même chose pour IPV6:
|
|
|
# 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.
|
|
|
|
|
|
-root@aijan:/etc/iptables# cat rules.v4
|
|
|
+```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]
|
|
@@ -529,16 +506,15 @@ root@aijan:/etc/iptables# cat rules.v4
|
|
|
COMMIT
|
|
|
# Completed on Sun Feb 11 14:27:32 2018
|
|
|
|
|
|
-root@aijan:/etc/iptables# iptables -N TCP
|
|
|
-root@aijan:/etc/iptables# iptables -N UDP
|
|
|
+root@atom:/etc/iptables# iptables -N TCP
|
|
|
+root@atom:/etc/iptables# iptables -N UDP
|
|
|
|
|
|
-root@aijan:/etc/iptables# service netfilter-persistent save
|
|
|
+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.
|
|
|
|
|
|
-
|
|
|
-oot@aijan:/etc/iptables# cat rules.v4
|
|
|
+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]
|
|
@@ -548,22 +524,18 @@ oot@aijan:/etc/iptables# cat rules.v4
|
|
|
: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 :)
|
|
|
|
|
|
Il suffit de répéter pour les autres règles puis pour IPV6.
|
|
|
-```
|
|
|
-
|
|
|
----
|
|
|
|
|
|
Nous obtenons donc les règles suivantes:
|
|
|
|
|
|
Pour IPV4:
|
|
|
|
|
|
----
|
|
|
-
|
|
|
-```
|
|
|
-root@aijan:/etc/iptables# cat rules.v4
|
|
|
+```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]
|
|
@@ -582,18 +554,13 @@ root@aijan:/etc/iptables# cat rules.v4
|
|
|
-A TCP -p tcp -m tcp --dport 22 -j ACCEPT
|
|
|
COMMIT
|
|
|
# Completed on Sun Feb 11 15:33:41 2018
|
|
|
-root@aijan:/etc/iptables#
|
|
|
+root@atom:/etc/iptables#
|
|
|
```
|
|
|
|
|
|
----
|
|
|
-
|
|
|
Pour IPV6:
|
|
|
|
|
|
----
|
|
|
-
|
|
|
-```
|
|
|
-
|
|
|
-root@aijan:/etc/iptables# cat rules.v6
|
|
|
+```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]
|
|
@@ -621,19 +588,13 @@ COMMIT
|
|
|
-A TCP -p tcp -m tcp --dport 22 -j ACCEPT
|
|
|
COMMIT
|
|
|
# Completed on Sun Feb 11 15:33:41 2018
|
|
|
-root@aijan:/etc/iptables#
|
|
|
-
|
|
|
+root@atom:/etc/iptables#
|
|
|
```
|
|
|
|
|
|
----
|
|
|
-
|
|
|
### Test DNS et du serveur de temps (avec iptables actif)
|
|
|
|
|
|
----
|
|
|
-
|
|
|
-```
|
|
|
-
|
|
|
-root@aijan:/home/ericadmin# nslookup www.gnome.org
|
|
|
+```shell
|
|
|
+root@atom:/home/ericadmin# nslookup www.gnome.org
|
|
|
Server: 192.168.111.254
|
|
|
Address: 192.168.111.254#53
|
|
|
|
|
@@ -644,7 +605,7 @@ Address: 209.132.180.168
|
|
|
Name: proxy.gnome.org
|
|
|
Address: 209.132.180.180
|
|
|
|
|
|
-root@aijan:/home/ericadmin# timedatectl status
|
|
|
+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
|
|
@@ -654,8 +615,6 @@ NTP synchronized: yes
|
|
|
RTC in local TZ: no
|
|
|
```
|
|
|
|
|
|
----
|
|
|
-
|
|
|
Ça fonctionne.
|
|
|
|
|
|
### Installation de **ufw**
|
|
@@ -664,9 +623,7 @@ J'avais (ai) choisi **ufw**; je ne l'ai encore jamais utilisé, donc, c'est l'oc
|
|
|
|
|
|
Son installation est détaillée dans le paragraphe ci-dessus.
|
|
|
|
|
|
----
|
|
|
-
|
|
|
-```
|
|
|
+```shell
|
|
|
root@atom:/home/ericadmin# apt install ufw
|
|
|
Lecture des listes de paquets... Fait
|
|
|
Construction de l'arbre des dépendances
|
|
@@ -698,27 +655,19 @@ Traitement des actions différées (« triggers ») pour man-db (2.7.6.1-2) ...
|
|
|
Traitement des actions différées (« triggers ») pour rsyslog (8.24.0-1) ...
|
|
|
```
|
|
|
|
|
|
----
|
|
|
-
|
|
|
### Configuration de **ufw**
|
|
|
|
|
|
Après installation, le pare-feu est inactif.
|
|
|
|
|
|
----
|
|
|
-
|
|
|
-```
|
|
|
+```shell
|
|
|
root@atom:/home/ericadmin# ufw status
|
|
|
Status: inactive
|
|
|
root@atom:/home/ericadmin#
|
|
|
```
|
|
|
|
|
|
----
|
|
|
-
|
|
|
Nous allons autoriser les connexions **ssh** et **ntp**, seuls services en place pour l'instant.
|
|
|
|
|
|
----
|
|
|
-
|
|
|
-```
|
|
|
+```shell
|
|
|
root@atom:/home/ericadmin# ufw allow 22
|
|
|
Rules updated
|
|
|
Rules updated (v6)
|
|
@@ -729,31 +678,23 @@ Rule added
|
|
|
Rule added (v6)
|
|
|
```
|
|
|
|
|
|
----
|
|
|
-
|
|
|
### Activation du pare-feu:
|
|
|
|
|
|
----
|
|
|
-
|
|
|
-```
|
|
|
+```shell
|
|
|
root@atom:/home/ericadmin# ufw enable
|
|
|
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
|
|
|
Firewall is active and enabled on system startup
|
|
|
root@atom:/home/ericadmin#
|
|
|
```
|
|
|
|
|
|
----
|
|
|
-
|
|
|
### Vérification:
|
|
|
|
|
|
----
|
|
|
-
|
|
|
-```
|
|
|
+```shell
|
|
|
root@atom:/home/ericadmin# ufw status
|
|
|
Status: active
|
|
|
|
|
|
To Action From
|
|
|
--- ------ ----
|
|
|
+-- -
|
|
|
22 ALLOW Anywhere
|
|
|
123 ALLOW Anywhere
|
|
|
22 (v6) ALLOW Anywhere (v6)
|
|
@@ -762,39 +703,27 @@ To Action From
|
|
|
root@atom:/home/ericadmin#
|
|
|
```
|
|
|
|
|
|
----
|
|
|
-
|
|
|
Les connexions **ssh** et **ntp** sont autorisées, en **IPV4** et **IPV6**.
|
|
|
|
|
|
Nous ajouterons des règles en fonction des services utilisés.
|
|
|
|
|
|
### Pour désactiver le pare-feu:
|
|
|
|
|
|
----
|
|
|
-
|
|
|
-```
|
|
|
+```shell
|
|
|
ufw disable
|
|
|
```
|
|
|
|
|
|
----
|
|
|
-
|
|
|
### Activation du logging des actions de **ufw**
|
|
|
|
|
|
----
|
|
|
-
|
|
|
-```
|
|
|
+```shell
|
|
|
root@atom:/home/ericadmin# ufw logging on
|
|
|
Logging enabled
|
|
|
root@atom:/home/ericadmin#
|
|
|
```
|
|
|
|
|
|
----
|
|
|
-
|
|
|
-Vous pouvez voiur l'ensemble des commandes de **ufw** en tapant:
|
|
|
+Vous pouvez voir l'ensemble des commandes de **ufw** en tapant:
|
|
|
|
|
|
----
|
|
|
-
|
|
|
-```
|
|
|
+```shell
|
|
|
root@atom:/home/ericadmin# ufw --help
|
|
|
|
|
|
Usage: ufw COMMAND
|
|
@@ -830,7 +759,7 @@ Application profile commands:
|
|
|
root@atom:/home/ericadmin#
|
|
|
```
|
|
|
|
|
|
----
|
|
|
+
|
|
|
|
|
|
Il faut re-tester la connectivité en IPV4 et IPV6
|
|
|
|
|
@@ -838,4 +767,3 @@ Il faut re-tester la connectivité en IPV4 et IPV6
|
|
|
2. Extérieur -> serveur
|
|
|
|
|
|
On peut utiliser l'adresse **ipv6.google.com** pour vérifier la connexion IPV6 en dehors du réseau local.
|
|
|
-
|