J'ai iptables-persistent
et netfilter-persistent
installé :
$ dpkg -l '*-persistent'
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-============================================-===========================-===========================-==============================================================================================
ii iptables-persistent 1.0.4 all boot-time loader for netfilter rules, iptables plugin
ii netfilter-persistent 1.0.4 all boot-time loader for netfilter configuration
J'ai aussi les règles enregistrées dans /etc/iptables/rules.v4
(Je ne m'intéresse qu'à IPv4 pour l'instant) :
$ cat /etc/iptables/rules.v4
# Generated by iptables-save v1.6.0 on Fri Jan 19 09:49:17 2018
*security
:INPUT ACCEPT [11740:1271860]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [9784:2123999]
COMMIT
# Completed on Fri Jan 19 09:49:17 2018
# Generated by iptables-save v1.6.0 on Fri Jan 19 09:49:17 2018
*raw
:PREROUTING ACCEPT [18262:1677349]
:OUTPUT ACCEPT [9784:2123999]
COMMIT
# Completed on Fri Jan 19 09:49:17 2018
# Generated by iptables-save v1.6.0 on Fri Jan 19 09:49:17 2018
*nat
:PREROUTING ACCEPT [7367:452849]
:INPUT ACCEPT [872:48764]
:OUTPUT ACCEPT [500:37441]
:POSTROUTING ACCEPT [500:37441]
COMMIT
# Completed on Fri Jan 19 09:49:17 2018
# Generated by iptables-save v1.6.0 on Fri Jan 19 09:49:17 2018
*mangle
:PREROUTING ACCEPT [18262:1677349]
:INPUT ACCEPT [18259:1677229]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [9784:2123999]
:POSTROUTING ACCEPT [9784:2123999]
COMMIT
# Completed on Fri Jan 19 09:49:17 2018
# Generated by iptables-save v1.6.0 on Fri Jan 19 09:49:17 2018
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 -j REJECT --reject-with icmp-port-unreachable
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m multiport --dports 25,587,465
-A INPUT -p tcp -m state --state NEW -m multiport --dports 110,995
-A INPUT -p tcp -m state --state NEW -m multiport --dports 143,993
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m multiport --dports 3721:3725 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A INPUT -j DROP
-A FORWARD -j DROP
-A OUTPUT -j ACCEPT
COMMIT
# Completed on Fri Jan 19 09:49:17 2018
La règle qui m'intéresse vraiment est celle vers la fin :
-A INPUT -p tcp -m state --state NEW -m multiport --dports 3721:3725 -j ACCEPT
Cependant, lorsque je redémarre le serveur, je n'obtiens pas cette règle :
$ sudo iptables -4 -L
[sudo] password for kal:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
REJECT all -- anywhere 127.0.0.0/8 reject-with icmp-port-unreachable
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:http
ACCEPT tcp -- anywhere anywhere tcp dpt:https
tcp -- anywhere anywhere state NEW multiport dports smtp,submission,urd
tcp -- anywhere anywhere state NEW multiport dports pop3,pop3s
tcp -- anywhere anywhere state NEW multiport dports imap2,imaps
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
ACCEPT icmp -- anywhere anywhere icmp echo-request
LOG all -- anywhere anywhere limit: avg 5/min burst 5 LOG level debug prefix "iptables denied: "
DROP all -- anywhere anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DROP all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
Chain f2b-shadowsocks (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
Chain f2b-sshd (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
Notez également qu'iptables a quelques règles qui étaient présentes avant même que j'installe iptables-persistent
et netfilter-persistent
- par exemple. ceux pour http, smtp, pop3, imap, ssh. Je n'ai aucune idée d'où ils viennent. Bien sûr, j'ai installé openssh et nginx et leurs services sont activés, mais je n'ai jamais ajouté de règles iptables pour eux moi-même.
Si je regarde la sortie de journalctl, netfilter-persistent.service a démarré avec succès :
$ sudo journalctl -xu netfilter-persistent.service
-- Logs begin at Fri 2018-01-19 18:55:13 HKT, end at Fri 2018-01-19 19:05:41 HKT. --
Jan 19 18:55:13 yuma systemd[1]: Starting netfilter persistent configuration...
-- Subject: Unit netfilter-persistent.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit netfilter-persistent.service has begun starting up.
Jan 19 18:55:13 yuma netfilter-persistent[1997]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables start
Jan 19 18:55:14 yuma netfilter-persistent[1997]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables start
Jan 19 18:55:14 yuma systemd[1]: Started netfilter persistent configuration.
-- Subject: Unit netfilter-persistent.service has finished start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit netfilter-persistent.service has finished starting up.
--
-- The start-up result is done.
Si je redémarre manuellement netfilter-persistent.service
une fois la machine complètement démarrée, j'obtiens la règle que je veux :
$ sudo iptables -4 -L
[...]
ACCEPT tcp -- anywhere anywhere state NEW multiport dports 3721:3725
[...]
Alors pourquoi netfilter-persistent
n'est-il pas fonctionne réellement au démarrage ?
Est-ce que quelque chose écrase complètement iptables après netfilter-persistent
?
Que puis-je faire ?
MISE À JOUR
Je n'ai pas non plus ufw
ou firewalld
.
Réponse acceptée :
Il s'avère donc que mon serveur a un fichier nommé /etc/iptables.firewall.rules
, et les règles étaient restaurées à partir de celui-ci dans /etc/network/if-pre-up.d/firewall
:
#!/bin/sh
/sbin/iptables-restore < /etc/iptables.firewall.rules
/etc/iptables.firewall.rules
semble être un ancien fichier que j'ai créé en 2015, à la suite d'un ancien tutoriel pour conserver les règles iptables.
Tout ce que j'avais à faire était d'ajouter ma nouvelle règle à ce fichier.
Je suppose que la leçon est que, après avoir vérifié l'habituel ufw
et iptables-persistent
/netfilter-persistent
trucs, je devrais juste grep -rn iptables-restore /etc/
. Si cela ne trouve rien, il est également possible que des règles soient ajoutées dynamiquement via dbus
, si firewalld
est activé.