Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème script Iptables

6 septembre 2017 à 11:45:42

Bonjour,

Je suis actuellement entrain de configurer Iptables sur un serveur vps de chez Harmony Hosting et je remarque quelques points étranges sur ma configuration. Ce script doit me permettre de me connecter en SSH à distance, HTTP/HTTPS et FTP pour un futur serveur web. Le fichier est le suivant:

 

Au départ je voulais bloquer toutes les connexions entrantes et sortantes au début du script et garder les connexions déjà établies actives, mais comme je me connecte en SSH à distance, je déclare les autorisations en premier puis je bloque tout le reste à la fin. Mais j'ai remarqué que lorsque je bloque les connexions sortantes je perd ma connexion à distance et je ne comprend pas pourquoi.. De même, je n'arrive pas à effectuer d'apt-get update ou même un ping sur google par exemple alors que HTTP est activé en entrée et en sortie, de plus que les connexions sortantes sont toutes ouvertes pour le moment car sinon cela me plante tout.. Avez-vous des pistes pour m'éclairer? :euh:

Merci d'avance pour votre aide!

  • Partager sur Facebook
  • Partager sur Twitter
6 septembre 2017 à 20:49:13

Voici un lien qui pourrai t aider https://doc.ubuntu-fr.org/iptables

Bonne continuation

  • Partager sur Facebook
  • Partager sur Twitter
Les petites choses ont leur importance ; c'est toujours par elles qu'on se perd. Auteur: Fedor Dostoïevski
6 septembre 2017 à 21:54:18

J'ai déjà été sur ce lien, mais merci
  • Partager sur Facebook
  • Partager sur Twitter
7 septembre 2017 à 9:36:28

Je me permet de te donner une copie d'un de mes scripts firewall avec iptables, cela t'aidera probablement:

Remarque : La base de ce script a été récupérée (il y a longteeeeemps) du tutoriel Reprenez le controle a l'aide de linux.

#!/bin/sh

allowed_ip='192.168.1.2,192.168.1.88'
# Bernard, Maurice

# Clean
iptables -t filter -F
iptables -t filter -X

# Drop all
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP

# Do not close established connexions
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

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

#### SECURITY ##

# Flood / DDOS
iptables -A FORWARD -p tcp --syn -m limit --limit 1/second -j ACCEPT
iptables -A FORWARD -p udp -m limit --limit 1/second -j ACCEPT
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/second -j ACCEPT

# Port scans
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

#### RULES ####

# ICMP
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT

# SSH
iptables -t filter -A INPUT -p tcp --dport 22 -s $allowed_ip -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 22 -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
iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT

# HTTP, HTTPS
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 8080 -s $allowed_ip -j ACCEPT

# Mail SMTP
iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 587 -j ACCEPT

# NTP
iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT

# Webmin
iptables -t filter -A INPUT -p tcp --dport 10000 -s $allowed_ip -j ACCEPT

# FTP
iptables -t filter -A INPUT -p tcp --dport 21 -s $allowed_ip -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 21 -j ACCEPT
iptables --append INPUT --protocol tcp --dport 11000:11100 --jump ACCEPT

# Mail POP3
iptables -t filter -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 110 -j ACCEPT

# OpenVPN
iptables -t filter -A OUTPUT -p udp --dport 60195 -j ACCEPT



-
Edité par Nox Inmortus 7 septembre 2017 à 9:37:41

  • Partager sur Facebook
  • Partager sur Twitter
7 septembre 2017 à 13:08:03

Nox Inmortus a écrit:

Je me permet de te donner une copie d'un de mes scripts firewall avec iptables, cela t'aidera probablement:

Remarque : La base de ce script a été récupérée (il y a longteeeeemps) du tutoriel Reprenez le controle a l'aide de linux.

#!/bin/sh

allowed_ip='192.168.1.2,192.168.1.88'
# Bernard, Maurice

# Clean
iptables -t filter -F
iptables -t filter -X

# Drop all
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP

# Do not close established connexions
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

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

#### SECURITY ##

# Flood / DDOS
iptables -A FORWARD -p tcp --syn -m limit --limit 1/second -j ACCEPT
iptables -A FORWARD -p udp -m limit --limit 1/second -j ACCEPT
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/second -j ACCEPT

# Port scans
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

#### RULES ####

# ICMP
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT

# SSH
iptables -t filter -A INPUT -p tcp --dport 22 -s $allowed_ip -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 22 -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
iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT

# HTTP, HTTPS
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 8080 -s $allowed_ip -j ACCEPT

# Mail SMTP
iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 587 -j ACCEPT

# NTP
iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT

# Webmin
iptables -t filter -A INPUT -p tcp --dport 10000 -s $allowed_ip -j ACCEPT

# FTP
iptables -t filter -A INPUT -p tcp --dport 21 -s $allowed_ip -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 21 -j ACCEPT
iptables --append INPUT --protocol tcp --dport 11000:11100 --jump ACCEPT

# Mail POP3
iptables -t filter -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 110 -j ACCEPT

# OpenVPN
iptables -t filter -A OUTPUT -p udp --dport 60195 -j ACCEPT



-
Edité par Nox Inmortus il y a environ 3 heures

Merci pour ton script! Tu l'utilise sur un serveur d'hebergeur? 

  • Partager sur Facebook
  • Partager sur Twitter
7 septembre 2017 à 13:43:37

Je ne sais pas ce que tu appelles serveur d'hébergeur ?

C'est le genre de script que j'utilise dans le process de sécurisation de mes machines, qu'elles soient dans un LAN que je contrôle ou non.

Toutes mes VM de mes différents LANs on un template de ce genre, que je modifie suivant les services que j'installe ensuite.

Après ce script la est vraiment le top du top, car c'est le script présent sur mon VPS qui héberge mes interfaces web. Donc il est chez OVH et accessible via son IP publique. Pour des machines en LAN, je n'utilise pas de variable $allowed_ip pour filtrer les IP.

  • Partager sur Facebook
  • Partager sur Twitter
7 septembre 2017 à 14:23:32

j'ai aussi essayé de faire un DROP de la table filter en entrée, sortie et en redirection mais lorsque je le fait ma connexion SSH à distance se perd sachant que j'utilise aussi SSH, c'est étrange :o
  • Partager sur Facebook
  • Partager sur Twitter
7 septembre 2017 à 15:48:01

A quoi ressemble ton script iptables actuel ?
  • Partager sur Facebook
  • Partager sur Twitter
7 septembre 2017 à 22:10:09

Essaie de faire ceci 

nc adresse_IP 22

Donnes nous le retour

Dans la variable allowed IP tu devrais mettre l adresse du routeur en public et non celui du réseau local a moins que le serveur soit dans le réseau local.

-
Edité par gmormorromrom 7 septembre 2017 à 22:14:28

  • Partager sur Facebook
  • Partager sur Twitter
Les petites choses ont leur importance ; c'est toujours par elles qu'on se perd. Auteur: Fedor Dostoïevski
7 septembre 2017 à 22:10:25

je l'ai indiqué dans mon post ;)
  • Partager sur Facebook
  • Partager sur Twitter
7 septembre 2017 à 22:19:52

Bonsoir tone5846,

Je te conseille d'y aller pas à pas dans tes tests de configuration afin de localiser le problème. Ne test pas ton script entier mais uniquement un seul et unique service. Pour chaque service testé réalise une démarche semblable :

  • se documenter sur le service/protocole utilisé (numéro de port ? tcp ou udp ? dans quel direction va le flux ? le service est installé et bien configuré ? ...)
  • partir de zéro (réaliser un "clean" => options -F et -X et policies ACCEPT)
  • mettre en place les règles "génériques" (par exemple, ne pas casser les connexions établis => related, established), mais ne pas mettre de règles de DROP ou REJECT
  • rajouter les règles qui te semble utiles pour le service que tu test
  • mettre en place les policies DROP

Si c'est bon re-applique la même démarche pour un autre service (ssh, web, ftp, icmp/ping, ...), sinon essai de trouver le problème et n'hésite pas à poster la configuration.

Par exemple pour tester le ssh, déroule tes commandes une à une (pas dans un script) :

# clean
iptables -F
iptables -X

# garder les connexions etablies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# ssh
iptables -t filter -A INPUT -p tcp --dport 22222 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 22222 -j ACCEPT

# une fois que tu as mis en place tes regles, applique les policies DROP :
iptables -P INPUT DROP
iptables -P OUTPUT DROP

Si ça passes c'est que c'est (peut être) bon, sinon tu sais que le problème se trouve avant la policy DROP (peut être que tu auras besoins de mettre dans les règles générique les protocoles NTP et DNS ... ou pas (; )

Tu peux aussi t'aider des options -L ou -S pour voir ta configuration courante et les règles qui match. Je te laisse tester les commandes suivantes pour comprendre :

iptables -L
iptables -L OUTPUT
iptables -L -n
iptables -L -n -v
iptables -S
iptables -S OUTPUT

Aussi je te conseille d'utiliser les policies à la place des regles DROP car tu es sur qu'elles ne seront appliqués seulement et seulement si aucune règles ne match (remplace 'iptables -A INPUT -j DROP' par 'iptables -P INPUT DROP')

P.S. : fait les choses pas à pas, et lorsque tu es bloqué donne nous ta config (Un problème est plus facile à résoudre qu'un ensemble de problèmes (; )

-
Edité par mika83 7 septembre 2017 à 22:23:27

  • Partager sur Facebook
  • Partager sur Twitter
8 septembre 2017 à 9:07:53

Je te conseille aussi de suivre les conseils du vieux sage mika83.

Néanmoins, je pense que ton script ne fonctionne pas simplement parce que tu met le DROP a la toute fin.

Le script va exécuter chaque commande une par une de haut en bas.

Grossièrement c'est ce que tu lui dis :

- autorise ça

- autorise ça

- BLOQUE TOUT

La meilleure manière de faire, c'est plutôt, de tout bloquer dès le début, et ensuite d'autoriser ce dont tu as besoin.

  • Partager sur Facebook
  • Partager sur Twitter
11 septembre 2017 à 17:37:26

Merci pour vos conseils, je vais tester tout ça ^^
  • Partager sur Facebook
  • Partager sur Twitter
12 septembre 2017 à 5:09:00

Nox Inmortus a écrit:

Je te conseille aussi de suivre les conseils du vieux sage mika83.

Néanmoins, je pense que ton script ne fonctionne pas simplement parce que tu met le DROP a la toute fin.

Le script va exécuter chaque commande une par une de haut en bas.

Grossièrement c'est ce que tu lui dis :

- autorise ça

- autorise ça

- BLOQUE TOUT

La meilleure manière de faire, c'est plutôt, de tout bloquer dès le début, et ensuite d'autoriser ce dont tu as besoin.


Effectivement, les commandes vont être exécutées de façon séquentiel et c'est le DROP final qui sera appliqué.
  • Partager sur Facebook
  • Partager sur Twitter
Arch : "Keep It Simple, Stupid"