logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

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

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

#1 08-04-2019 23:04:47

Nsyo
Invité

[Résolu] Règles Iptables

Edit : Inattention, j'ai pas posté dans la bonne section. roll Si quelqu'un peut déplacer le post dans la section adéquate, c'est cool. Merci


Salut !

Je suis en train de configurer Iptables. Il fallait vraiment que je m'en occupe sérieusement...
Bref, un simple post pour savoir s'il y a des choses qui vous font tiquer, à modifier, rajouter, etc. help.gif
Je précise que c'est pour un ordinateur domestique, pas un serveur.


#!/usr/bin/env bash

stop() {
  echo "Stopping..."

  iptables -F
  iptables -X
  iptables -t nat -F
  iptables -t nat -X
  iptables -t mangle -F
  iptables -t mangle -X
  iptables -P INPUT ACCEPT
  iptables -P FORWARD ACCEPT
  iptables -P OUTPUT ACCEPT
}

start() {
  echo "Starting..."

  # Flush // On vide tout
  iptables -F
  iptables -X
  iptables -t nat -F
  iptables -t nat -X
  iptables -t mangle -F
  iptables -t mangle -X
  iptables -P INPUT ACCEPT
  iptables -P FORWARD ACCEPT
  iptables -P OUTPUT ACCEPT

  # Politique = On bloque tout
  iptables -P INPUT DROP
  iptables -P OUTPUT DROP
  iptables -P FORWARD DROP

  # Connexions établies
  iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
  iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT

  # Loopback
  iptables -A INPUT -i lo -j ACCEPT
  iptables -A OUTPUT -o lo -j ACCEPT

  # Ping
  iptables -A INPUT -p icmp -j ACCEPT
  iptables -A OUTPUT -p icmp -j ACCEPT

  # FTP
  iptables -A INPUT -p tcp --dport 21 -j ACCEPT
  iptables -A OUTPUT -p tcp --dport 21 -j ACCEPT

  # SSH
  iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT

  # HTTP
  iptables -A INPUT -p tcp --dport 80 -j ACCEPT
  iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT

  # HTTPS
  iptables -A INPUT -p tcp --dport 443 -j ACCEPT
  iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT

  # DNS
  iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
  iptables -A OUTPUT -p udp --dport 53 -j ACCEPT

  # Tor proxy
  iptables -A INPUT -p tcp --dport 9050 -j ACCEPT
  iptables -A OUTPUT -p tcp --dport 9050 -j ACCEPT

  # IRC
  iptables -A INPUT -p tcp --dport 6667 -j ACCEPT
  iptables -A OUTPUT -p tcp --dport 6667 -j ACCEPT

  # IRC + SSL
  iptables -A INPUT -p tcp --dport 6697 -j ACCEPT
  iptables -A OUTPUT -p tcp --dport 6697 -j ACCEPT

  # IMAP + TLS
  iptables -A INPUT -p tcp --dport 993 -j ACCEPT
  iptables -A OUTPUT -p tcp --dport 993 -j ACCEPT

  # SMTP (+ TLS)
  iptables -A INPUT -p tcp --dport 587 -j ACCEPT
  iptables -A OUTPUT -p tcp --dport 587 -j ACCEPT
}


case "$1" in
  "start") $1 ;;
  "stop") $1 ;;
esac
 



Au passage, vous savez ce que font ces règles ? J'ai vu ça dans pas mal de configs, mais j'ai du mal à comprendre ce que ça fait.


# Empty iptables rule file
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
 



Merci ! big_smile

Dernière modification par Nsyo (10-04-2019 16:44:44)

#2 09-04-2019 09:07:46

raleur
Membre
Inscription : 03-10-2014

Re : [Résolu] Règles Iptables

Nsyo a écrit :

c'est pour un ordinateur domestique, pas un serveur.


Alors pourquoi toutes ces règles dans la chaîne INPUT ?

Notes :
- Tu pourrais factoriser les commandes de réinitialisation de stop() et start() dans une autre fonction.
Ces commandes activent les tables nat et mangle (et pourquoi pas la table raw ?) qui ne sont pas utilisées par tes règles. A mon avis il serait plus plus propre de ne réinitaliser que les tables déjà actives, listées dans /proc/net/ip_tables_names.

- Autoriser le port 21 est insuffisant pour le protocole FTP. Cela ne prend pas en compte les connexions de données actives ou passives qui utilisent des ports dynamiques différents de 21. Pour cela il faut charger le module nf_conntrack_ftp et ajouter une règle dans la table raw avec la cible CT pour marquer les connexions FTP à surveiller et des règles pour autoriser les connexions de données liées (RELATED).
- Les règles autorisant les paquets ICMP laissent passer bien plus que le ping.
- Le port 993 pour IMAPS (TLS implicite) est obsolète. On est censé utiliser le port standard 143 avec TLS explicite.
- Le port 587 n'est pas SMTP mais Submission, un sous-ensemble du protocole SMTP pour les clients de messagerie (alors que le protocole SMTP complet est prévu pour la communication entre agents de transport).

Nsyo a écrit :

Au passage, vous savez ce que font ces règles ?


Oui. Que veux-tu savoir exactement ?

Nsyo a écrit :

J'ai vu ça dans pas mal de configs, mais j'ai du mal à comprendre ce que ça fait.


Un conseil : n'utilise pas ce que tu ne comprends pas. Ça risque de bloquer du traffic que tu souhaites autoriser et/ou te procurer un faux sentiment de sécurité.

Dernière modification par raleur (09-04-2019 22:46:03)


Il vaut mieux montrer que raconter.

Hors ligne

#3 09-04-2019 23:47:43

Nsyo
Invité

Re : [Résolu] Règles Iptables

Salut !

Merci pour ta réponse smile

Finalement je vais pas utiliser le script tel quel mais plutôt utiliser la commande

iptables-save > /etc/iptables/iptables.rules

(fournit par iptable-persistent chez Debian il me semble). C'est plus simple que de faire un script + service.

En effet, je viens de voir que les tables mangle, nat et filter sont listées dans /proc/net/ip_tables_names.
Donc pour la partie réinitialisation, je peux laisser tel quel non ?

J'ai viré les règles de la chaine INPUT. Va savoir pourquoi j'ai cru que c'était nécessaire. roll
J'ai enlevé le FTP, autant privilégier le SFTP. Et j'ai conservé ICMP en sortie.
(Et j'ai corrigé le port de connexion IMAP dans mon client mail au passage wink)

Tu penses quoi des règles actuelles ?

#!/usr/bin/env bash

# voir /proc/net/ip_tables_names
# table filter = table par défaut

stop() {
  echo "Stopping..."

  iptables -t filter -F
  iptables -t filter -X
  iptables -t mangle -F
  iptables -t mangle -X
  iptables -t nat -F
  iptables -t nat -X
  iptables -P INPUT ACCEPT
  iptables -P FORWARD ACCEPT
  iptables -P OUTPUT ACCEPT
}

start() {
  stop

  echo "Starting..."
 
  iptables -P INPUT DROP
  iptables -P OUTPUT DROP
  iptables -P FORWARD DROP

  # Connexions établies
  iptables -t filter -A INPUT -m state --state ESTABLISHED -j ACCEPT
  iptables -t filter -A OUTPUT -m state --state ESTABLISHED -j ACCEPT

  # Loopback
  iptables -t filter -A INPUT -i lo -j ACCEPT

  # Ping
  iptables -t filter -A OUTPUT -p icmp -j ACCEPT

  # SSH
  iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
  iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT

  # HTTP
  iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
  iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT

  # DNS
  iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
  iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT

  # Tor proxy
  iptables -t filter -A OUTPUT -p tcp --dport 9050 -j ACCEPT

  # IRC
  iptables -t filter -A OUTPUT -p tcp --dport 6667 -j ACCEPT
  iptables -t filter -A OUTPUT -p tcp --dport 6697 -j ACCEPT

  # IMAP
  iptables -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT

  # Submission (SMTP)
  iptables -t filter -A OUTPUT -p tcp --dport 587 -j ACCEPT

  # Caldav Posteo
  iptables -t filter -A OUTPUT -p tcp --dport 8843 -j ACCEPT

  # Cardav Posteo
  iptables -t filter -A OUTPUT -p tcp --dport 8443 -j ACCEPT
}

case "$1" in
  "start") $1 ;;
  "stop") $1 ;;
esac

 

#4 10-04-2019 12:06:27

raleur
Membre
Inscription : 03-10-2014

Re : [Résolu] Règles Iptables

Concernant les règles :
- Pourquoi avoir supprimé la règle pour le loopback en INPUT ?
- La règle "ping" n'autorise pas que le ping mais tous les paquets ICMP, donc le ping n'est qu'un type (echo-request) parmi d'autres.
- La suppression de la règle autorisant les paquets ICMP dans INPUT a l'inconvénient de bloquer des paquets utiles comme les messages d'erreur ICMP. Par exemple cela empêche traceroute de fonctionner (traceroute ICMP ou TCP puisque les règles n'autorisent pas les paquets UDP émis par le traceroute standard) ainsi que le Path MTU Discovery (détermination de la taille max de paquet utilisable sur un chemin donné). Les types ICMP indispensables sont destination-unreachable, parameter-problem et time-exceeded dans l'état RELATED.
- Tu as laissé la règle en INPUT pour SSH, je suppose donc qu'un serveur SSH tourne sur la machine ?

Concernant l'utilisation d'iptables-save + iptables-restore :
- iptables-save sauvegarde seulement l'état des tables actives (listées dans /proc/net/ip_tables_names) et iptables-restore affecte seulement les tables figurant dans le fichier d'entrée. Cela implique que si une table est inactive lors de la sauvegarde et active lors de la restauration, son état ne sera pas modifié par iptables-restore.
- Pour rappel, les tables disponibles sont filter, nat, mangle (les plus connues) mais aussi raw et security.
- Au démarrage du système, toutes les tables sont inactives mais si on a joué avec les règles et qu'on veut réinitialiser l'état d'iptables, iptables-restore ne restaurera pas forcément l'état antérieur.
- Il y a deux méthodes pour restaurer un état identique :
- Activer toutes les tables avant d'exécuter iptables-save pour sauvegarder l'état de toutes les tables disponibles. Inconvénient : les tables actives non utilisées consomment des ressources (mémoire, temps CPU) pour rien.
- Désactiver toutes les tables actives avant d'exécuter iptables-restore. Cela se fait en déchargeant les modules du noyau correspondant après avoir vidé les tables. Le code shell serait le suivant :

for table in $(cat /proc/net/ip_tables_names) ; do
  iptables -t $table -F      # effacer les règles de la table
  iptables -t $table -X      # effacer les chaînes utilisateur de la table
  modprobe -r iptable_$table # décharger le module de la table
done
iptables-restore < /etc/iptables/iptables.rules
 

Dernière modification par raleur (10-04-2019 12:08:34)


Il vaut mieux montrer que raconter.

Hors ligne

#5 10-04-2019 15:32:32

Nsyo
Invité

Re : [Résolu] Règles Iptables

Pour le loopback, c'est la règle en OUTPUT que j'ai supprimé. J'ai vu que ça n'était pas forcément nécessaire. Donc question de simplicité. Si j'ai des soucis plus tard avec certains outils, je pourrais rajouter la règle, mais là tout semble fonctionner correctement.

raleur a écrit :

Les règles autorisant les paquets ICMP laissent passer bien plus que le ping.


Ça m'a fait penser que ça pouvait poser des problèmes de sécurité, d’où l'interdiction en entrée. Mais finalement, c'est plus clair avec les explications. wink
J'ai dû rajouter le type ICMP echo-request parce que le ping était bloqué. Par contre, je n'arrive pas à configurer l'état. Avec ces règles là, ça fonctionne :

iptables -A OUTPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type parameter-problem -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type time-exceeded -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT

iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -A INPUT -p icmp --icmp-type parameter-problem -j ACCEPT
iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
 


Mais en rajoutant l'état RELATED, les paquets ICMP sont bloqués en entrée et en sortie. Par exemple :

$ ping -c 3 gnu.org
PING gnu.org (209.51.188.148) 56(84) bytes of data.
ping: sendmsg: Opération non permise
ping: sendmsg: Opération non permise
ping: sendmsg: Opération non permise
^C
--- gnu.org ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 26ms
 



En effet, il y a la règle en INPUT pour SSH pour avoir accès à ma machine occasionnellement depuis l’extérieur. Mais le serveur et la redirection du trafic sont la plupart du temps désactivés, activés seulement au besoin.

Merci pour ces précieuses informations concernant iptables-save + iptables-restore big_smile

Dernière modification par Nsyo (10-04-2019 15:41:24)

#6 10-04-2019 15:42:58

raleur
Membre
Inscription : 03-10-2014

Re : [Résolu] Règles Iptables

Nsyo a écrit :

Pour le loopback, c'est la règle en OUTPUT que j'ai supprimé. J'ai vu que ça n'était pas forcément nécessaire.


Dans ton cas les deux règles sont nécessaires car les paquets de loopback doivent passer par les deux chaîne OUTPUT puis INPUT qui ont des politiques par défaut DROP.

Nsyo a écrit :

Mais en rajoutant l'état RELATED, les paquets ICMP sont bloqués en entrée et en sortie. Par exemple


L'état RELATED ne doit s'appliquer qu'aux 3 types d'erreur (en INPUT et OUTPUT), pas à echo-request (en OUTPUT seulement si tu ne veux pas répondre au ping entrant).


Il vaut mieux montrer que raconter.

Hors ligne

#7 10-04-2019 16:44:13

Nsyo
Invité

Re : [Résolu] Règles Iptables

Parfait tout fonctionne ! Merci pour ton aide ! big_smile

Je mets le script en guise de base pour d'autres qui voudraient configurer Iptables :

#!/usr/bin/env bash

# table filter = table par défaut

reset() {
  # Supprime les règles pour les tables déjà actives
  for table in $(cat /proc/net/ip_tables_names); do
    iptables -t $table -F
    iptables -t $table -X
  done

  # Autorise les connexions entrantes, sortantes et les redirections pour la table filter
  iptables -t filter -P OUTPUT ACCEPT
  iptables -t filter -P INPUT ACCEPT
  iptables -t filter -P FORWARD ACCEPT
}

stop() {
  echo "Stopping..."

  reset

  echo "Done"
}

start() {
  echo "Starting..."

  reset
 
  # Interdit les connexions entrantes, sortantes et les redirections pour la table filter
  iptables -t filter -P OUTPUT DROP
  iptables -t filter -P INPUT DROP
  iptables -t filter -P FORWARD DROP

  # Connexions établies
  iptables -t filter -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
  iptables -t filter -A INPUT -m state --state ESTABLISHED -j ACCEPT

  # Loopback
  iptables -t filter -A OUTPUT -o lo -j ACCEPT
  iptables -t filter -A INPUT -i lo -j ACCEPT

  # ICMP
  iptables -t filter -A OUTPUT -p icmp --icmp-type destination-unreachable -m state --state RELATED -j ACCEPT
  iptables -t filter -A OUTPUT -p icmp --icmp-type parameter-problem -m state --state RELATED -j ACCEPT
  iptables -t filter -A OUTPUT -p icmp --icmp-type time-exceeded -m state --state RELATED -j ACCEPT
  iptables -t filter -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
  iptables -t filter -A INPUT -p icmp --icmp-type destination-unreachable -m state --state RELATED -j ACCEPT
  iptables -t filter -A INPUT -p icmp --icmp-type parameter-problem -m state --state RELATED -j ACCEPT
  iptables -t filter -A INPUT -p icmp --icmp-type time-exceeded -m state --state RELATED -j ACCEPT
  iptables -t filter -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

  # SSH
  iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
  iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT

  # HTTP
  iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
  iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT

  # DNS
  iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
  iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT

  # Tor proxy
  iptables -t filter -A OUTPUT -p tcp --dport 9050 -j ACCEPT

  # IRC
  iptables -t filter -A OUTPUT -p tcp --dport 6667 -j ACCEPT
  iptables -t filter -A OUTPUT -p tcp --dport 6697 -j ACCEPT

  # IMAP
  iptables -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT

  # Submission (SMTP)
  iptables -t filter -A OUTPUT -p tcp --dport 587 -j ACCEPT

  # Caldav Posteo
  iptables -t filter -A OUTPUT -p tcp --dport 8843 -j ACCEPT

  # Cardav Posteo
  iptables -t filter -A OUTPUT -p tcp --dport 8443 -j ACCEPT

  echo "Done"
}

case "$1" in
  "start") $1 ;;
  "stop") $1 ;;
esac
 



Encore 2-3 bricoles à ajouter, mais l'essentiel est là.

Dernière modification par Nsyo (10-04-2019 16:47:00)

#8 10-04-2019 19:47:25

raleur
Membre
Inscription : 03-10-2014

Re : [Résolu] Règles Iptables

On va encore dire que je pinaille, mais...

La réinitialisation par la fonction reset() est incomplète : elle vide les tables actives mais ne les décharge pas (donc elles restent actives) et ne réinitialise pas la politique par défaut de leurs chaînes. Par exemple si jamais tu avais réglé la politique par défaut de la chaîne PREROUTING de la table mangle à DROP, alors elle resterait ainsi et bloquerait tous les paquets entrants. C'est là que ça se complique : modifier la politique par défaut doit se faire pour chaque chaîne, or chaque table a des chaînes différentes. On peut adopter différentes méthodes :
- définir en dur les chaînes associées à chaque table avec l'instruction case ou un tableau associatif ;
- extraire les chaînes d'une table à partir de la sortie d'iptables-save, par exemple :

iptables-save -t $table | grep "^:" | cut -f 1 -d " " | cut -c 2-


- faire comme si toutes les tables avaient toutes les chaînes, avec "|| true" pour neutraliser les erreurs de chaînes inexistantes.

EDIT : s/restore/save/

Dernière modification par raleur (10-04-2019 20:56:53)


Il vaut mieux montrer que raconter.

Hors ligne

#9 10-04-2019 22:35:34

Nsyo
Invité

Re : [Résolu] Règles Iptables

J'ai modifié la fonction reset() pour correctement réinitialiser les tables. À la limite, je pourrais rajouter les tableaux pour les autres tables. Par contre, je n'ai pas compris ce que tu voulais dire par "décharger" les tables. scratchhead.gif

reset() {

  # Chaînes pour chaque tables
  filterChains=("INPUT" "FORWARD" "OUTPUT")
  natChains=("PREROUTING" "INPUT" "OUTPUT" "POSTROUTING")
  mangleChains=("PREROUTING" "INPUT" "FORWARD" "OUTPUT" "POSTROUTING")

  # Réinitialise chaque chaînes = politique par défaut = ACCEPT
  deleteRules() {
    tables=("${@}")

    for chain in ${tables[@]}; do
      iptables -t $table -P $chain ACCEPT
      echo "iptables -t $table -P $chain ACCEPT"
    done
  }

  # Sélectionne les tables actives
  for table in $(cat /proc/net/ip_tables_names); do
    # Supprime les règles dans chaque chaînes
    iptables -t $table -F
    echo "iptables -t $table -F"
    # Supprime les chaînes utilisateurs
    iptables -t $table -X
    echo "iptables -t $table -X"

    # Réinitialise chaque chaînes = politique par défaut = ACCEPT
    case $table in
      filter) deleteRules "${filterChains[@]}" ;;
      nat) deleteRules "${natChains[@]}" ;;
      mangle) deleteRules "${mangleChains[@]}" ;;
    esac
  done

}
 



Pour vérifier qu'il ne manque rien, j'ai mis quelques echo :

$ ./iptables.sh stop
iptables -t nat -F
iptables -t nat -X
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P INPUT ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t mangle -F
iptables -t mangle -X
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P INPUT ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT
iptables -t filter -F
iptables -t filter -X
iptables -t filter -P INPUT ACCEPT
iptables -t filter -P FORWARD ACCEPT
iptables -t filter -P OUTPUT ACCEPT


Mais de toute manière, les règles Iptables sont bien vides.

#10 11-04-2019 08:30:41

raleur
Membre
Inscription : 03-10-2014

Re : [Résolu] Règles Iptables

Nsyo a écrit :

Par contre, je n'ai pas compris ce que tu voulais dire par "décharger" les tables.


Décharger les modules du noyau correspondants avec modprobe. Voir mon message #4.


Il vaut mieux montrer que raconter.

Hors ligne

#11 11-04-2019 09:58:41

Nsyo
Invité

Re : [Résolu] Règles Iptables

C'est vrai ! Tout est bon alors, je rajoute ça ! Merci encore big_smile

Il y a moyen de faire plus propre mais voilà le code pour les autres :

#!/usr/bin/env bash

# table filter = table par défaut

[[ $UID -ne 0 ]] && echo "You need to be root to perform this command!" && exit 1


stop() {
  echo "Stopping..."

  # Chaînes pour chaque tables
  filterChains=("INPUT" "FORWARD" "OUTPUT")
  natChains=("PREROUTING" "INPUT" "OUTPUT" "POSTROUTING")
  mangleChains=("PREROUTING" "INPUT" "FORWARD" "OUTPUT" "POSTROUTING")

  # Réinitialise chaque chaînes = politique par défaut = ACCEPT
  deleteRules() {
    tables=("${@}")

    for chain in ${tables[@]}; do
      iptables -t $table -P $chain ACCEPT
    done
  }

  # Sélectionne les tables actives
  for table in $(cat /proc/net/ip_tables_names); do
    # Supprime les règles dans chaque chaînes
    iptables -t $table -F
    # Supprime les chaînes utilisateurs
    iptables -t $table -X

    # Réinitialise chaque chaînes = politique par défaut = ACCEPT
    case $table in
      filter) deleteRules "${filterChains[@]}" ;;
      nat) deleteRules "${natChains[@]}" ;;
      mangle) deleteRules "${mangleChains[@]}" ;;
    esac

    # Décharge les modules du noyau
    modprobe -r iptable_$table
  done

  echo "Done"

  exit 0
}

start() {
  echo "Starting..."

  # Interdit les connexions entrantes, sortantes et les redirections pour la table filter
  iptables -t filter -P OUTPUT DROP
  iptables -t filter -P INPUT DROP
  iptables -t filter -P FORWARD DROP

  # Connexions établies
  iptables -t filter -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
  iptables -t filter -A INPUT -m state --state ESTABLISHED -j ACCEPT

  # Loopback
  iptables -t filter -A OUTPUT -o lo -j ACCEPT
  iptables -t filter -A INPUT -i lo -j ACCEPT

  # ICMP
  iptables -t filter -A OUTPUT -p icmp --icmp-type destination-unreachable -m state --state RELATED -j ACCEPT
  iptables -t filter -A OUTPUT -p icmp --icmp-type parameter-problem -m state --state RELATED -j ACCEPT
  iptables -t filter -A OUTPUT -p icmp --icmp-type time-exceeded -m state --state RELATED -j ACCEPT
  iptables -t filter -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
  iptables -t filter -A INPUT -p icmp --icmp-type destination-unreachable -m state --state RELATED -j ACCEPT
  iptables -t filter -A INPUT -p icmp --icmp-type parameter-problem -m state --state RELATED -j ACCEPT
  iptables -t filter -A INPUT -p icmp --icmp-type time-exceeded -m state --state RELATED -j ACCEPT
  iptables -t filter -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

  # SSH
  iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
  iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT

  # HTTP
  iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
  iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT

  # DNS
  iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
  iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT

  # Tor proxy
  iptables -t filter -A OUTPUT -p tcp --dport 9050 -j ACCEPT

  # IRC
  iptables -t filter -A OUTPUT -p tcp --dport 6667 -j ACCEPT
  iptables -t filter -A OUTPUT -p tcp --dport 6697 -j ACCEPT

  # IMAP
  iptables -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT

  # Submission (SMTP)
  iptables -t filter -A OUTPUT -p tcp --dport 587 -j ACCEPT

  # Caldav Posteo
  iptables -t filter -A OUTPUT -p tcp --dport 8843 -j ACCEPT

  # Cardav Posteo
  iptables -t filter -A OUTPUT -p tcp --dport 8443 -j ACCEPT

  echo "Done"

  exit 0
}

case "$1" in
  "start") $1 ;;
  "stop") $1 ;;
esac
 

Dernière modification par Nsyo (11-04-2019 10:35:02)

#12 11-04-2019 12:44:26

raleur
Membre
Inscription : 03-10-2014

Re : [Résolu] Règles Iptables

Si tu décharges les modules des tables, tu n'as plus besoin de réinitialiser les politiques par défaut à ACCEPT.
Au passage, la fonction deleteRules() est très mal nommée.

Note : dans le noyau installé sur certains serveurs dédiés les tables sont compilées en dur et non en modules et sont donc toujours actives.

Il vaut mieux montrer que raconter.

Hors ligne

#13 11-04-2019 13:58:04

Nsyo
Invité

Re : [Résolu] Règles Iptables

En effet, mais le code est brut. Je vais arranger ça et ajouter encore quelques éléments manquants.

raleur a écrit :

Note : dans le noyau installé sur certains serveurs dédiés les tables sont compilées en dur et non en modules et sont donc toujours actives.


Bon à savoir ça wink

Pied de page des forums