[Topic unique] Firewall Avec Iptables

Firewall Avec Iptables [Topic unique] - réseaux et sécurité - Linux et OS Alternatifs

Marsh Posté le 23-05-2005 à 17:15:18    

Voila j'ai actuelement partager ma connection avec iptable et fait quelque redirection sans trop m'y plonger dedans
Je suis tomber sur un site qui expliquer assez bien iptable http://christian.caleca.free.fr/netfilter/ ( certe je pense qu'il y a mieux )
Et maintenant je voudrai faire donc un script qui:
-Bloque toute les connection venant d'internet
-Laisse passé les connection entrante que depuis certaine ip pour ssh
-Autorisé le port 80 ( apache )
-Laisse sortir les connection vers internet depuis mon reseau ( ou en fonction des plage ip )
-Redirectionner quelque port.
 
Donc je commence si vous avez des supposition suplementaire ( gestion differente par rapport a la dmz et au rezo local )
 

Code :
  1. #### Variables ####
  2. ### Chemin vers Iptables ###
  3. IPT="/sbin/iptables"
  4. ### Determination des interfaces ###
  5. LOCAL="eth0"
  6. INTERNET="eth1"
  7. VPN="tap0"
  8. PORT_VPN="5000"
  9. PRIVATE="192.168.0.0/16"
  10. ### Remize a zeri de iptable : ###
  11. $IPT -F
  12. ### Nous supprimons d'éventuelles chaînes personnelles : ###
  13. $IPT -X
  14. ### Bloque tout par default ###
  15. $IPT -P INPUT DROP
  16. $IPT -P OUTPUT DROP
  17. $IPT -P FORWARD DROP
  18. ### Partage de la connection ###
  19. $IPT -t nat -A POSTROUTING -o $INTERNET -j MASQUERADE
  20. echo 1 > /proc/sys/net/ipv4/ip_forward
  21. ### Accepte les loopback ###
  22. $IPT -A INPUT -i lo -j ACCEPT
  23. $IPT -A OUTPUT -o lo -j ACCEPT
  24. ### Accepte les connection sortante ###
  25. $IPT -P OUTPUT ACCEPT
  26. ### Accepte les connection local ( estimer sure ) ###
  27. $IPT -A INPUT -i $LOCAL -j ACCEPT
  28. $IPT -A OUTPUT -o $LOCAL -j ACCEPT
  29. ### Autorise mon VPN ###
  30. ### Le port ###
  31. $IPT -A INPUT -p udp --dport $PORT_VPN -j ACCEPT
  32. ### Accepte les connection VPN ( estimer sure ) ###
  33. $IPT -A INPUT -i $VPN -j ACCEPT
  34. $IPT -A OUTPUT -o $VPN -j ACCEPT
  35. # Verifie les adresse ip allant sur internet
  36. $IPT -A FORWARD -s ! $PRIVATE -i $LOCAL -j DROP
  37. ### Bloque tout les NETBIOS Vers internet ###
  38. $IPT -A FORWARD -p tcp --sport 137:139 -o $INTERNET -j DROP
  39. $IPT -A FORWARD -p udp --sport 137:139 -o $INTERNET -j DROP
  40. $IPT -A OUTPUT -p tcp --sport 137:139 -o $INTERNET -j DROP
  41. $IPT -A OUTPUT -p udp --sport 137:139 -o $INTERNET -j DROP
  42. ### Verifie que les connection depuis internet n'ont pas une ip local ###
  43. $IPT -A FORWARD -i $INTERNET -s 192.168.0.0/16 -j DROP
  44. $IPT -A FORWARD -i $INTERNET -s 172.16.0.0/12 -j DROP
  45. $IPT -A FORWARD -i $INTERNET -s 10.0.0.0/8 -j DROP
  46. $IPT -A INPUT -i $INTERNET -s 192.168.0.0/16 -j DROP
  47. $IPT -A INPUT -i $INTERNET -s 172.16.0.0/12 -j DROP
  48. $IPT -A INPUT -i $INTERNET -s 10.0.0.0/8 -j DROP
  49. ### Lourde les connection loopback venant et sortant d'internet ###
  50. $IPT -A INPUT -i $INTERNET -s $LOOP -j DROP
  51. $IPT -A FORWARD -i $INTERNET -s $LOOP -j DROP
  52. $IPT -A INPUT -i $INTERNET -d $LOOP -j DROP
  53. $IPT -A FORWARD -i $INTERNET -d $LOOP -j DROP
  54. ### Autorise les requete de ping de tout le monde ###
  55. ### Perso je le met que en local et pas depuis internet ###
  56. ###$IPT -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
  57. ### ou alors que depuis le local ###
  58. $IPT -A INPUT -p icmp --icmp-type echo-request -i $LOCAL -j ACCEPT
  59. $IPT -A INPUT -p icmp --icmp-type echo-request -i $VPN -j ACCEPT
  60. ### A choisir ###
  61. ### Accepte ssh  depuis internet ###
  62. $IPT -A INPUT -p tcp --dport ssh -i $INTERNET -j ACCEPT
  63. $IPT -A OUTPUT -p tcp --sport ssh -o $INTERNET -j ACCEPT
  64. ### Accepte http  depuis internet ###
  65. $IPT -A INPUT -p tcp --dport http -i $INTERNET -j ACCEPT
  66. $IPT -A OUTPUT -p tcp --sport http -o $INTERNET -j ACCEPT
  67. ### On log tout ca ###
  68. ### Log les drop ###
  69. $IPT -N LOG_DROP
  70. $IPT -A LOG_DROP -j LOG   --log-prefix '[IPTABLES DROP]  : '
  71. $IPT -A LOG_DROP -j DROP
  72. ### Log des accepte ###
  73. $IPT -N LOG_ACCEPT
  74. $IPT -A LOG_ACCEPT -j LOG   --log-prefix '[IPTABLES ACCEPT]  : '
  75. $IPT -A LOG_ACCEPT -j ACCEPT
  76. ### Log des paquet non traité ###
  77. $IPT -A FORWARD -j LOG_DROP
  78. $IPT -A INPUT -j LOG_DROP
  79. $IPT -A OUTPUT -j LOG_DROP


A vous


Message édité par korben31 le 25-05-2005 à 14:13:56
Reply

Marsh Posté le 23-05-2005 à 17:15:18   

Reply

Marsh Posté le 23-05-2005 à 17:25:25    

ajoute des règles pour permettre à l'interface loopback (lo)de communiquer.
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT


Message édité par jlighty le 23-05-2005 à 17:26:43
Reply

Marsh Posté le 23-05-2005 à 17:25:42    

Reply

Marsh Posté le 24-05-2005 à 09:09:29    

up

Reply

Marsh Posté le 24-05-2005 à 10:08:25    

si quelqu'un sais a quoi ca sert ca =>
 
# Check source address validity on packets going out to internet
iptables -A FORWARD -s ! $PRIVATE -i eth1 -j DROP
 
et si c'est vraiment utilé dans notre cas ...

Reply

Marsh Posté le 24-05-2005 à 10:22:10    

C'est pour droper les paquets ayant une adresse sourve réservée au réseau privé. J'ai oublié le numéro de la RFC.
c'est les adresses 192.168.0.0/16, 10.0.0.0/8, etc...
 
Edit: du moins je le suppose vu que tu n'as pas dit ce qu'il y avait dans la variable $PRIVATE


Message édité par l0ky le 24-05-2005 à 10:23:35
Reply

Marsh Posté le 24-05-2005 à 10:38:07    

ah oué je voi mais bon pourquoi pas mais en general un vpn est assez sure quoi que ...

Reply

Marsh Posté le 24-05-2005 à 10:43:22    

Hmm on pourrai aussi faire une ligne pour verifier les adresse venant du vpn sont bien des adresse local de mon reseau...

Reply

Marsh Posté le 24-05-2005 à 10:44:32    

Ca permet entre autres de ne pas polluer, et d'éviter certaines attaques

Reply

Marsh Posté le 24-05-2005 à 10:45:32    

oui ou si l'autre n'est pas securisé ca evite que moi je le soi a mon tour
faut esseyer de faire :d

Reply

Marsh Posté le 24-05-2005 à 10:45:32   

Reply

Marsh Posté le 24-05-2005 à 10:47:17    

Ca doit donner un truc genre ca jpense =>
 
### Verifie les adresse ip Venant du vpn ###
$IPT -A INPUT -s ! $PRIVATE -i $VPN -j DROP
$IPT -A FOWARD -s ! $PRIVATE -i $VPN -j DROP


Message édité par korben31 le 24-05-2005 à 11:01:36
Reply

Marsh Posté le 24-05-2005 à 10:47:50    

Faudrait peut être que tu décrives quelque part ton architecture si tu veux des réponses cohérentes...

Reply

Marsh Posté le 24-05-2005 à 10:49:09    

ensuite évite d'utiliser des variables qui ne sont pas définies : $LOOP

Reply

Marsh Posté le 24-05-2005 à 10:50:32    

ué aussi :d  
Bah perso
 
192.168.1.xxx                192.168.0.xxx
  Win Xp|                       |Win XP
[Debian]|--Internet--[Routeur]--|[Debian]
10.4.0.1                         10.4.0.2  
 
Mais faut que chacun puisse l'adapter

Reply

Marsh Posté le 24-05-2005 à 10:50:50    

Dans ton archi VPN, est-ce que ton firewall est la seule machine chez toi ? Sinon ce n'est pas INPUT et OUTPUT qu'il faut utilser mais plutot FORWARD.

Reply

Marsh Posté le 24-05-2005 à 10:55:28    

bah perso
Ma machine debian et relier directement a la freebox contrairement a mon ami
et derriere ya des machine sous win xp
donc a mon avis il faut les deux INPUT et FOWARD ( pour mon serv et pour les clients )


Message édité par korben31 le 24-05-2005 à 11:03:59
Reply

Marsh Posté le 24-05-2005 à 11:01:13    

Oui, ma remarque s'appliquait surtout à ta dernière règle

Reply

Marsh Posté le 24-05-2005 à 11:04:25    

oué j'y avais pas penser sinon ca regle que pour le serveur debian et ca filtre pas pour le reste du reseau jpense

Reply

Marsh Posté le 24-05-2005 à 11:04:59    

J'ai une petite question.
 
Quand on met /8 /16, ça permet de selectionner un range d'ips mais à quoi correspond le 8 ?
 
Est ce que 10.0.0.0/8 selectionne les adresses 10.x.y.z ?
 
Dans ce cas, je pense ne pas faire d'erreur avec 10.0.0.0/24 qui donne 10.0.0.x .
 
J'ai bon ?

Reply

Marsh Posté le 24-05-2005 à 11:05:26    

oui, en fait ca sélectionne le nombre de bits à partir de la gauche.


Message édité par l0ky le 24-05-2005 à 11:06:13
Reply

Marsh Posté le 24-05-2005 à 11:06:36    

cool, merci :jap:

Reply

Marsh Posté le 24-05-2005 à 11:14:54    

moi j'ai une question j'ai vu des option avec mangle ca sert a quoi ?

Reply

Marsh Posté le 24-05-2005 à 11:17:05    

modifier les paquets
man iptables

Reply

Marsh Posté le 24-05-2005 à 11:22:34    

# Seules les connexions déjà établies ou en relation avec
# des connexions établies sont acceptées venant du Net vers le LAN
iptables -A FORWARD -i ppp0 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

Reply

Marsh Posté le 24-05-2005 à 11:29:09    

J'ai trouver un bon "man" en francais  
http://lea-linux.org/reseau/secu/iptables.html

Reply

Marsh Posté le 24-05-2005 à 12:03:57    

Ah oué pour les logs aussi si qq sais en faire des "Standard"

Reply

Marsh Posté le 24-05-2005 à 12:06:34    

Citation :


$IPT -N LOG_DROP
£IPT -A LOG_DROP -j LOG   --log-prefix '[IPTABLES DROP]  : '
$IPT -A LOG_DROP -j DROP


pour les paquets acceptés

Citation :


$IPT -N LOG_ACCEPT
$IPT -A LOG_ACCEPT -j LOG   --log-prefix '[IPTABLES ACCEPT]  : '
$IPT -A LOG_ACCEPT -j ACCEPT


Message édité par jlighty le 24-05-2005 à 12:08:20
Reply

Marsh Posté le 24-05-2005 à 12:14:16    

Oué mais bon faut pas avoir 1000 log non plus sinon ca va prendre pas mal de place :d
 
### Log des paquet refused ###
iptables -A FORWARD -j LOG_DROP
iptables -A INPUT -j LOG_DROP
iptables -A OUTPUT -j LOG_DROP  
 
c'est a la fin

Reply

Marsh Posté le 24-05-2005 à 15:59:06    

Ah mon avis j'ai oublier le foward du VPN

Reply

Marsh Posté le 24-05-2005 à 16:06:10    

Bad argument `DROP'
Try `iptables -h' or 'iptables --help' for more information.
Oops jsais pas d'ou ca vien

Reply

Marsh Posté le 24-05-2005 à 18:09:57    

j'ai merder quelque part la :'(
il me blok ma connection jpe plus surfer vous voyez pas ?

Reply

Marsh Posté le 24-05-2005 à 18:17:42    

Tu acceptes les connections sortantes (-A OUTPUT -j  ACCEPT) mais tu n'acceptes nul part les paquets appartenant à des connections ESTABLISHED/RELATED.
 
Pense à mettre les balises
[cpp][/cpp]
pour qu'on puisse mettre les références des lignes ) problèmes.

Reply

Marsh Posté le 24-05-2005 à 18:27:52    

Code :
  1. iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


c'est ca qui faut rajouter ?
 
C'est pas du code c plus plus c est pour ca que je les pas mis ^^
 
Edit: Non toujours pareil il me lourde tout mais j'arrive quand meme a me connect au serv samba


Message édité par korben31 le 24-05-2005 à 18:30:19
Reply

Marsh Posté le 24-05-2005 à 18:32:08    

Ah ca y es jai du progres ^^
j'ai rajouter ca
$IPT -A FORWARD -i $LOCAL -j ACCEPT
et c'est bon ( au debut j'avais mi -o ca pouvai pas marcher cest sure :d )
 
mais j'ai encore quelque merde genre les log s'affiche sur l'ecran du pc :'(
je sais qu'il faut changer le log lvl mais cmt ?


Message édité par korben31 le 24-05-2005 à 18:33:27
Reply

Marsh Posté le 24-05-2005 à 18:35:53    

korben31 a écrit :

Code :
  1. iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


c'est ca qui faut rajouter ?
 
C'est pas du code c plus plus c est pour ca que je les pas mis ^^


Et ? C'est juste pour qu'il y ait les numéros de lignes pour qu on puisse s'y référer. C'est plus facile pour t'aider. C'est toi qui va.
 
Ensuite, c'est plus propre d'utiliser le suivit de connection.
Netfilter est statefull autant l'utiliser au mieux.
 
Edit: et c'est surtout dans ton premier post que ca serait utile, les balises...


Message édité par l0ky le 24-05-2005 à 18:36:33
Reply

Marsh Posté le 24-05-2005 à 18:37:46    

oué mais j'sais pas du tout comment ca marche je finalise un peut et je repost le tout et si tu pouvais m'aider a amelioré le tout ( ou sur msn si ta une adresse )
En tout ca merci de ton attention

Reply

Marsh Posté le 24-05-2005 à 18:44:33    

Bon voila se que j'ai maintenant =>

Code :
  1. #### Variables ####
  2. ### Chemin vers Iptables ###
  3. IPT="/sbin/iptables"
  4. ### Determination des interfaces ###
  5. LOCAL="eth0"
  6. INTERNET="eth1"
  7. VPN="tap0"
  8. PORT_VPN="5000"
  9. PRIVATE="192.168.1.0/16"
  10. ### Remize a zeri de iptable : ###
  11. $IPT -F
  12. ### Nous supprimons d'éventuelles chaînes personnelles : ###
  13. $IPT -X 
  14. ### Bloque tout par default ###
  15. $IPT -P INPUT DROP
  16. $IPT -P OUTPUT DROP
  17. $IPT -P FORWARD DROP
  18. ### Accepte les connection sortante ###
  19. $IPT -P OUTPUT ACCEPT
  20. ### Accepte les loopback ###
  21. $IPT -A INPUT -i lo -j ACCEPT
  22. $IPT -A OUTPUT -o lo -j ACCEPT
  23. ### Accepte les connection local ( estimer sure ) ###
  24. $IPT -A INPUT -i $LOCAL -j ACCEPT
  25. $IPT -A OUTPUT -o $LOCAL -j ACCEPT
  26. $IPT -A FORWARD -i $LOCAL -j ACCEPT
  27. ### Accepte les connection local ( estimer sure ) ###
  28. $IPT -A INPUT -i eth2 -j ACCEPT
  29. $IPT -A OUTPUT -o eth2 -j ACCEPT
  30. $IPT -A FORWARD -i eth2 -j ACCEPT
  31. ### Autorise mon VPN ###
  32. ### Le port ###
  33. $IPT -A INPUT -p udp --dport $PORT_VPN -j ACCEPT
  34. ### Accepte les connection VPN ( estimé sure ) ###
  35. $IPT -A INPUT -i $VPN -j ACCEPT
  36. $IPT -A OUTPUT -o $VPN -j ACCEPT
  37. $IPT -A FORWARD -i $VPN -j ACCEPT
  38. ### Partage de la connection ###
  39. $IPT -t nat -A POSTROUTING -o $INTERNET -j MASQUERADE
  40. echo 1 > /proc/sys/net/ipv4/ip_forward
  41. # Verifie les adresse ip allant sur internet ( pas fini j'ai plusieurs plage ip )
  42. #$IPT -A FORWARD -s ! $PRIVATE -i $LOCAL -j DROP
  43. ### Bloque tout les NETBIOS Vers internet ###
  44. $IPT -A FORWARD -p tcp --sport 137:139 -o $INTERNET -j DROP
  45. $IPT -A FORWARD -p udp --sport 137:139 -o $INTERNET -j DROP
  46. $IPT -A OUTPUT -p tcp --sport 137:139 -o $INTERNET -j DROP
  47. $IPT -A OUTPUT -p udp --sport 137:139 -o $INTERNET -j DROP
  48. ### Verifie que les connection depuis internet n'ont pas une ip local ###
  49. $IPT -A FORWARD -i $INTERNET -s 192.168.0.0/16 -j DROP
  50. $IPT -A FORWARD -i $INTERNET -s 172.16.0.0/12 -j DROP
  51. $IPT -A FORWARD -i $INTERNET -s 10.0.0.0/8 -j DROP
  52. $IPT -A INPUT -i $INTERNET -s 192.168.0.0/16 -j DROP
  53. $IPT -A INPUT -i $INTERNET -s 172.16.0.0/12 -j DROP
  54. $IPT -A INPUT -i $INTERNET -s 10.0.0.0/8 -j DROP
  55. ### Lourde les connection loopback venant et sortant d'internet  ###
  56. ###( met une erreur de drop surement parce que c'est pas comme ca le -s $LOOP ) ###
  57. #$IPT -A INPUT -i $INTERNET -s $LOOP -j DROP
  58. #$IPT -A FORWARD -i $INTERNET -s $LOOP -j DROP
  59. #$IPT -A INPUT -i $INTERNET -d $LOOP -j DROP
  60. #$IPT -A FORWARD -i $INTERNET -d $LOOP -j DROP
  61. ### Autorise les requete de ping de tout le monde ###
  62. ### Perso je le met que en local et pas depuis internet ###
  63. #$IPT -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
  64. ### ou alors que depuis le local et pas internet ###
  65. #$IPT -A INPUT -p icmp --icmp-type echo-request -i $LOCAL -j ACCEPT
  66. #$IPT -A INPUT -p icmp --icmp-type echo-request -i $VPN -j ACCEPT
  67. #$IPT -A FORWARD -p icmp --icmp-type echo-request -i $LOCAL -j ACCEPT
  68. ### Plus simplement ca doit marcher : ###
  69. $IPT -A INPUT -p icmp --icmp-type echo-request -i ! $INTERNET -j ACCEPT
  70. ### A choisir ###
  71. ### Accepte ssh  depuis internet ###
  72. $IPT -A INPUT -p tcp --dport ssh -i $INTERNET -j ACCEPT
  73. $IPT -A OUTPUT -p tcp --sport ssh -o $INTERNET -j ACCEPT
  74. ### Accepte http  depuis internet ###
  75. $IPT -A INPUT -p tcp --dport http -i $INTERNET -j ACCEPT
  76. $IPT -A OUTPUT -p tcp --sport http -o $INTERNET -j ACCEPT
  77. #### Ca je sais pas trop je test  ^^ ###
  78. iptables -A OUTPUT -o $INTERNET -m state  --state NEW,ESTABLISHED -p tcp --dport 80 -j ACCEPT
  79. iptables -A INPUT  -i $INTERNET -m state  --state ESTABLISHED     -p tcp --sport 80 -j ACCEPT
  80. iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  81. iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
  82. ### On log tout ca ###
  83. ### Log les drop ###
  84. $IPT -N LOG_DROP
  85. $IPT -A LOG_DROP -j LOG   --log-prefix '[IPTABLES DROP]  : '
  86. $IPT -A LOG_DROP -j DROP
  87. ### Log des accepte ###
  88. $IPT -N LOG_ACCEPT
  89. $IPT -A LOG_ACCEPT -j LOG   --log-prefix '[IPTABLES ACCEPT]  : '
  90. $IPT -A LOG_ACCEPT -j ACCEPT
  91. ### Log des paquet non traité ###
  92. $IPT -A FORWARD -j LOG_DROP
  93. $IPT -A INPUT -j LOG_DROP
  94. $IPT -A OUTPUT -j LOG_DROP


 
Se qu'il reste a faire :
-regler le log lvl
-faire des truk plus propre a certain endroit avec les  ESTABLISHED,RELATED
 
Voila voila je sens que je touche au but ^^
 
Edit: Ah oué j'oublier ca :'(  
[root@Speed-ReZo] (~) #ping free.fr
ping: unknown host free.fr


Message édité par korben31 le 25-05-2005 à 14:14:16
Reply

Marsh Posté le 24-05-2005 à 19:00:38    

il faut aussi ouvre le port 53 en TCP et UDP pour le DNS

Reply

Marsh Posté le 24-05-2005 à 19:02:29    

ok
j'ai une autre couille aussi
May 24 19:30:14 Speed-ReZo kernel: [IPTABLES DROP]  : IN= OUT=eth1 SRC=81.56.84.188 DST=194.242.113.47 LEN=71 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=UDP SPT=56397 DPT=53 LEN=33
pourquoi il me le lourde ?


Message édité par korben31 le 24-05-2005 à 19:17:02
Reply

Marsh Posté le 24-05-2005 à 19:05:11    

heu à quoi correspond SP$ ?
normalement il doit te retourner le numéro de port source et destination

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed