Bonjour bonjour !
Après avoir créé un thread pour la configuration, je me permet d'en créer un nouveau pour recueillir vos avis et optimisations, vu que l'on commençait à s'y perdre avec la tonne de message du premier thread.
Alors, vos avis ? Merci d'avance !
Voilà donc à quoi ressemble la configuration :
#!/bin/bash
#iptables-restore < /etc/iptables.test.rules
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
# Autorise les connexions déjà établies et localhost
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
#TOR
iptables -A OUTPUT -p tcp -m tcp --dport 9050 -m state --state NEW -j ACCEPT
# ICMP (Ping)
iptables -A INPUT -p icmp -j DROP
iptables -A OUTPUT -p icmp -j DROP
# DNS
iptables -A OUTPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT
# HTTP
iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
# HTTPS
iptables -A OUTPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT
# Mail SMTP
iptables -A OUTPUT -p tcp --dport 25 -m state --state NEW -j ACCEPT
#Transmission
iptables -A INPUT -p udp --dport 51413 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p udp --sport 51413 -m state --state NEW -j ACCEPT
# NTP (horloge du serveur)
iptables -A OUTPUT -p udp --dport 123 -m state --state NEW -j ACCEPT
# On log les paquets en entrée.
iptables -A INPUT -j LOG
# On log les paquets en sortie.
iptables -A OUTPUT -j LOG
# On log les paquets forward.
iptables -A FORWARD -j LOG
ip6tables -F
ip6tables -X
ip6tables -t nat -F
ip6tables -t nat -X
ip6tables -t mangle -F
ip6tables -t mangle -X
ip6tables -P INPUT DROP
ip6tables -P FORWARD DROP
ip6tables -P OUTPUT DROP
# Autorise les connexions déjà établies et localhost
ip6tables -A INPUT -m state --state ESTABLISHED -j ACCEPT
ip6tables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type router-advertisement -m state --state UNTRACKED -m hl --hl-eq 255 -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbour-advertisement -m state --state UNTRACKED -m hl --hl-eq 255 -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbour-solicitation -m state --state UNTRACKED -m hl --hl-eq 255 -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type router-solicitation -m state --state UNTRACKED -m hl --hl-eq 255 -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type neighbour-advertisement -m state --state UNTRACKED -m hl --hl-eq 255 -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type neighbour-solicitation -m state --state UNTRACKED -m hl --hl-eq 255 -j ACCEPT
ip6tables -A INPUT -p icmpv6 -j DROP
ip6tables -A OUTPUT -p icmpv6 -j DROP
#TOR
ip6tables -A OUTPUT -p tcp -m tcp --dport 9050 -m state --state NEW -j ACCEPT
# DNS
ip6tables -A OUTPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT
ip6tables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT
# HTTP
ip6tables -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
# HTTPS
ip6tables -A OUTPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT
# Mail SMTP
ip6tables -A OUTPUT -p tcp --dport 587 -m state --state NEW -j ACCEPT
#Transmission
ip6tables -A INPUT -p udp --dport 51413 -m state --state NEW -j ACCEPT
ip6tables -A OUTPUT -p udp --sport 51413 -m state --state NEW -j ACCEPT
# NTP (horloge du serveur)
ip6tables -A OUTPUT -p udp --dport 123 -m state --state NEW -j ACCEPT
# On log les paquets en entrée.
ip6tables -A INPUT -j LOG
# On log les paquets en sortie.
ip6tables -A OUTPUT -j LOG
# On log les paquets forward.
ip6tables -A FORWARD -j LOG
exit 0
# mettre la bonne syntaxe quand on colle du code sur linuxfr
Posté par NeoX . Évalué à 3.
si le code est en python, mettre
```python
[… le code …]
```
si c'est du code C
```C
[… le code …]
```
si c'est du shell
```sh
[… le code …]
```
# Bash
Posté par dastious . Évalué à 1. Dernière modification le 03 mai 2019 à 12:27.
Par les devs de netfilter : https://gist.github.com/Thermi/70c9d77dc96523885e81e3f86f59f587
Pour faire un script bash c'est mieux de faire comme ça : http://sfvlug.editthis.info/wiki/Things_You_Should_Know_About_Netfilter#Use_iptables-save_and_iptables-restore
D'ailleurs en regardant le script, il vaut mieux faire un ruleset car tu n'utilise pas bash et ça peut exploser.
et d'utiliser iptables-apply parce qu'on est pas kamikaze. Et pour reset : https://github.com/QueuingKoala/netfilter-samples/tree/master/reset-rules
[^] # Re: Bash
Posté par dastious . Évalué à 1.
PS les bonnes bases :
https://github.com/QueuingKoala/netfilter-samples/blob/master/rules-host/iptables.rules
https://github.com/QueuingKoala/netfilter-samples/blob/master/rules-host/ip6tables.rules
[^] # Re: Bash
Posté par redraven . Évalué à 1.
Je suis perdu. Mes règles sont pourtant bien appliquées ! Mais il y a une période de latence, si je comprend bien, où la machine est connectée au réseau sans que les règles soient appliquées ?
Je ne comprend juste pas. Configuré comme il est, mon script s'applique avant la connexion en network, non ?
Et je vois deux manière d'utiliser save et restore :
Entrer ses règles, faire un iptables-save > /etc/iptables.rules.
Puis iptables-restore < /etc/iptables_rules en haut du script, à placer soit dans /etc/network/if-pre-up.d/iptables, soit directement dans /etc/network.
Selon la doc officielle debian.
Ou faire un script avec les * et commit comme indiqué dans ton lien, mais comment faire pour qu'il soit appliqué au bon moment au démarrage ?
Je suis perdu.
# Mon opinion
Posté par Florent Fourcot . Évalué à 2.
Ce n'est forcément pas exhaustif mais quelques remarques en vrac :
[^] # Re: Mon opinion
Posté par redraven . Évalué à 1. Dernière modification le 03 mai 2019 à 16:54.
Tout fonctionne sans, donc je garde ces règles pour mon usage de base. J'ai un autre set de règles autorisant :
[^] # Re: Mon opinion
Posté par redraven . Évalué à 1.
Et en quoi mes règles de log peuvent mettre ma machine à genoux ?!
[^] # Re: Mon opinion
Posté par redraven . Évalué à 1.
Question bête, oui je comprend bien le pourquoi. Seul souci j'utilise PSAD, qui nécessite le log des INPUT. J'impose une limite à LOG ? Je me passe de PSAD ?
# Petit up et petite question
Posté par redraven . Évalué à 1.
Merci encore pour vos réponses.
Du coup, j'ai fais un iptables-save une fois mon script appliqué, puis automatisé le restore au démarrage. Tout semble fonctionner.
Pour les logs, dans la mesure ou Psad ne me donne plus d'alerte en input depuis qu'iptables est bien configuré, j'ai supprimé INPUT -j LOG.
Les questions qui me reste sont :
1) est-il possible d'encore rendre plus sécurisé iptables, ou je suis arrivé au bout des conseils et de mes lectures, et on ne peut guère faire mieux ?
2) comment appliquer les règles avant la connexion à internet via le network manager ? si la solution /etc/network/if-pre-up.d/iptables n'est pas adéquate, quelle est à la bonne.
Tout ce que je vois comme tutos, docs etc. c'est ou dans /etc/network/if-pre-up.d/iptables ou dans init.d.
Merci d'avance !
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.