un script iptables spécial serveur.

un script iptables spécial serveur. - réseaux et sécurité - Linux et OS Alternatifs

Marsh Posté le 01-09-2005 à 12:24:14    

Salut à tous,
 
Je cherche à renforcer la sécurité de mes petits serveurs web. J'ai trouvé à droite à gauche des scripts pour iptables mais ils sont tous orientés "home usage" (notamment le célèbre script d'Arno).
 
Je cherche donc à faire un script sans fioritures destiné à sécuriser efficacement un serveur web classique. Et je propose qu'on l'élabore ensemble histoire d'en faire profiter tout le monde.
 
 
NB : je suis au courant qu'un firewall sur un serveur n'est pas la meilleure solution, car les services tournant dessus sont autant de failles possibles, mais ça me semble un bon début avant d'installer un firewall en amont. En plus c'est une sécurité supplémentaire car au cas où le super firewall qui protège toute la baie tombait en panne et qu'on devait le court-circuiter, les machines sont toujours protégées. Mais bon, bref, c'est pas le sujet.
 
 
 
J'ai donc commencer par faire le tour des services dont j'avais besoin sur mon serveur web, et ça a été assez vite : ssh, http, smtp, mysql.
smtp et mysql n'étant pas nécessaire pour la plupart des serveurs, je vais pour l'instant me concentrer sur ssh et http.
J'ai 2 interfaces réseaux sur mes serveurs, mais pour l'instant je vais me concentrer sur celle qui est connectée au net (l'autre est connecté en réseau local et ne sert qu'à faire des rsync via ssh).
 
 
NB2 : je suis un total newbie avec iptables, je vais donc sans doute faire de grosses conneries, soyez indulgent et je suis sûr qu'on pourra faire un truc bien ;-)
 
 
NB3 : si vous trouver que c'est une idée complètement con vous pouvez le dire aussi :jap:
 
 
Bon aller je post le début de mon script d'ici peu...

Reply

Marsh Posté le 01-09-2005 à 12:24:14   

Reply

Marsh Posté le 01-09-2005 à 13:14:52    

bon ben voilà mon premier script, il est basique mais ne demande qu'à évoluer, des grosses conneries déjà?
Je me suis évidemment inspiré des scripts existants déjà sur le forum ou autre.
 
Il est maintenant pleinement fonctionnel mais peut encore être amélioré ;)
 

Code :
  1. #### Variables ####
  2. ### Chemin vers Iptables ###
  3. IPT="/sbin/iptables"
  4. ### interfaces ###
  5. INTERNET="eth0"
  6. LOCAL="eth1"
  7. flush(){
  8. ### purge de iptables ###
  9. $IPT -F
  10. $IPT -X
  11. }
  12. stop() {
  13. #On accepte les packets par defaut
  14. $IPT -P INPUT ACCEPT
  15. $IPT -P OUTPUT ACCEPT 
  16. $IPT -P FORWARD ACCEPT
  17. }
  18. start() {
  19. ### Bloque tout par défaut ###
  20. $IPT -P INPUT DROP
  21. $IPT -P OUTPUT DROP
  22. $IPT -P FORWARD DROP
  23. ### charge les modules nécessaires ###
  24. modprobe ip_conntrack
  25. modprobe ip_conntrack_ftp
  26. ### déclaration des chaines personnelles ###
  27. $IPT -N VALID_CHECK
  28. $IPT -N RESERVED_NET_CHECK
  29. ### Autorise tout le trafic appartenant à des connections existantes. (nécessite le module ip_conntrack) ###
  30. $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  31. $IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  32. ### Accepte les loopback ###
  33. $IPT -A INPUT -i lo -j ACCEPT
  34. $IPT -A OUTPUT -o lo -j ACCEPT
  35. ### vérifie la validité des paquets en INPUT ###
  36. $IPT -A INPUT -j VALID_CHECK
  37. ### Verifie que les connection depuis internet n'ont pas une IP locale ###
  38. ### desactiver ceci si vous tester ce script au sein de votre réseau local et que vous êtes branché sur l'interface $INTERNET ###
  39. $IPT -A INPUT -i $INTERNET -j RESERVED_NET_CHECK
  40. ### requetes icmp ###
  41. $IPT -A INPUT -p icmp --icmp-type echo-request -m limit --limit 20/s --limit-burst 100 -j ACCEPT
  42. $IPT -A OUTPUT -p icmp --icmp-type echo-request -m limit --limit 20/s --limit-burst 100 -j ACCEPT
  43. $IPT -A INPUT -p icmp --icmp-type redirect -j DROP
  44. $IPT  -A INPUT -p icmp --icmp-type network-redirect -j DROP
  45. $IPT -A INPUT -p icmp --icmp-type TOS-network-redirect -j DROP
  46. $IPT -A INPUT -p icmp --icmp-type TOS-host-redirect -j DROP
  47. $IPT -A INPUT -p icmp -j ACCEPT
  48. ### Autorise l'envoi de requêtes DNS ###
  49. $IPT -A OUTPUT -p udp --dport 53 -o $INTERNET -m state --state NEW -j ACCEPT
  50. ### les requêtes DNS peuvent aussi être filtrées par adresse IP ###
  51. #$IPT -A OUTPUT -p udp --dport 53 -o $INTERNET -d xxx.xxx.xxx.xxx -m state --state NEW -j ACCEPT
  52. ### Autorise l'envoi de requêtes NTP ###
  53. $IPT -A OUTPUT -p udp --dport 123 -o $INTERNET -m state --state NEW -j ACCEPT
  54. ######### ssh ##########
  55. ### Si vous n'avez pas d'IP fixe vous pouvez choisir d'accepter ssh depuis toute interface ###
  56. #$IPT -A INPUT -p tcp --sport 1025: --dport ssh -m state --state NEW --syn -j ACCEPT
  57. #$IPT -A OUTPUT -p tcp --dport ssh -m state --state NEW --syn -j ACCEPT
  58. ### Je préfère n'accepter ssh sur l'interface $INTERNET en entrée que depuis certaines adresses IP jugées sûres (mon bureau, chez moi) ###
  59. $IPT -A INPUT -p tcp --sport 1025: --dport ssh -i $INTERNET -s xxx.xxx.xxx.xxx -m state --state NEW --syn -j ACCEPT
  60. ### Accepte les connexions ssh sur l'interface $LOCAL ###
  61. $IPT -A INPUT -p tcp --sport 1025: --dport ssh -i $LOCAL -m state --state NEW --syn -j ACCEPT
  62. $IPT -A OUTPUT -p tcp --dport ssh -o $LOCAL -m state --state NEW --syn -j ACCEPT
  63. ######### http ##########
  64. ### Accepte http  depuis toute interface ###
  65. $IPT -A INPUT -p tcp --sport 1025: --dport http -m state --state NEW --syn -j ACCEPT
  66. $IPT -A OUTPUT -p tcp --dport http -m state --state NEW --syn -j ACCEPT
  67. ######### smtp ##########
  68. ### mon serveur ne servant qu'à envoyer des mails générés par php, je n'accepte SMTP qu'en sortie sur l'interface $INTERNET ###
  69. $IPT -A OUTPUT -p tcp --dport smtp -o $INTERNET --syn -j ACCEPT
  70. ######### mysql ##########
  71. ### accepte mysql depuis l'interface $LOCAL ###
  72. $IPT -A INPUT -p tcp --sport 1025: --dport mysql -i $LOCAL -m state --state NEW --syn -j ACCEPT
  73. $IPT -A OUTPUT -p tcp --dport mysql -o $LOCAL -m state --state NEW --syn -j ACCEPT
  74. ######### ftp ##########
  75. ### ouvre ftp en sortie uniquement (nécessite le module ip_conntrack_ftp) ###
  76. $IPT -A OUTPUT -p tcp --dport ftp -o $INTERNET -m state --state NEW --syn -j ACCEPT
  77. ### variante inspirée du guide de sécurité debian (autorise les mises à jour de sécurité uniquement) ###
  78. ### plusieurs règles peuvent être ajouter pour autoriser vos mirroirs de paquet deb ou rpm... ###
  79. #$IPT -A OUTPUT -p tcp -d security.debian.org --dport ftp -m state --state NEW -j ACCEPT
  80. ### vérifie la validité des paquets entrants ###
  81. # Drop (NMAP) scan packets #
  82. $IPT -A VALID_CHECK -p tcp --tcp-flags ALL FIN,URG,PSH -m limit --limit 3/m --limit-burst 5 -j ULOG --ulog-prefix "Stealth XMAS scan: "
  83. $IPT -A VALID_CHECK -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
  84. $IPT -A VALID_CHECK -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -m limit --limit 3/m --limit-burst 5 -j ULOG --ulog-prefix "Stealth XMAS-PSH scan: "
  85. $IPT -A VALID_CHECK -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
  86. $IPT -A VALID_CHECK -p tcp --tcp-flags ALL ALL -m limit --limit 3/m --limit-burst 5 -j ULOG --ulog-prefix "Stealth XMAS-ALL scan: "
  87. $IPT -A VALID_CHECK -p tcp --tcp-flags ALL ALL -j DROP
  88. $IPT -A VALID_CHECK -p tcp --tcp-flags ALL FIN -m limit --limit 3/m --limit-burst 5 -j ULOG --ulog-prefix "Stealth FIN scan: "
  89. $IPT -A VALID_CHECK -p tcp --tcp-flags ALL FIN -j DROP
  90. $IPT -A VALID_CHECK -p tcp --tcp-flags SYN,RST SYN,RST -m limit --limit 3/m --limit-burst 5 -j ULOG --ulog-prefix "Stealth SYN/RST scan: "
  91. $IPT -A VALID_CHECK -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
  92. $IPT -A VALID_CHECK -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit 3/m --limit-burst 5 -j ULOG --ulog-prefix "Stealth SYN/FIN scan(?): "
  93. $IPT -A VALID_CHECK -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
  94. $IPT -A VALID_CHECK -p tcp --tcp-flags ALL NONE -m limit --limit 3/m --limit-burst 5 -j ULOG --ulog-prefix "Stealth Null scan: "
  95. $IPT -A VALID_CHECK -p tcp --tcp-flags ALL NONE -j DROP
  96. # Drop packets with bad tcp flags
  97. $IPT -A VALID_CHECK -p tcp --tcp-option 64 -m limit --limit 3/m --limit-burst 1 -j ULOG --ulog-prefix "Bad TCP flag(64): "
  98. $IPT -A VALID_CHECK -p tcp --tcp-option 64 -j DROP
  99. $IPT -A VALID_CHECK -p tcp --tcp-option 128 -m limit --limit 3/m --limit-burst 1 -j ULOG --ulog-prefix "Bad TCP flag(128): "
  100. $IPT -A VALID_CHECK -p tcp --tcp-option 128 -j DROP
  101. # Drop invalid packets
  102. $IPT -A VALID_CHECK -m state --state INVALID -j DROP
  103. # Drop port 0 scan packets
  104. $IPT -A VALID_CHECK -p tcp --dport 0 -j DROP
  105. $IPT -A VALID_CHECK -p udp --dport 0 -j DROP
  106. # Drop source port 0 packets
  107. $IPT -A VALID_CHECK -p tcp --sport 0 -j DROP
  108. $IPT -A VALID_CHECK -p udp --sport 0 -j DROP
  109. ### Verifie que les connection depuis internet n'ont pas une IP locale ###
  110. $IPT -A RESERVED_NET_CHECK -s 10.0.0.0/8 -m limit --limit 60/h --limit-burst 1 -j ULOG --ulog-prefix "Class A address: "
  111. $IPT -A RESERVED_NET_CHECK -s 172.16.0.0/12 -m limit --limit 60/h --limit-burst 1 -j ULOG --ulog-prefix "Class B address: "
  112. $IPT -A RESERVED_NET_CHECK -s 192.168.0.0/16 -m limit --limit 60/h --limit-burst 1 -j ULOG --ulog-prefix "Class C address: "
  113. $IPT -A RESERVED_NET_CHECK -s 169.254.0.0/16 -m limit --limit 60/h --limit-burst 1 -j ULOG --ulog-prefix "Class M$ address: "
  114. $IPT -A RESERVED_NET_CHECK -i $INTERNET -s 10.0.0.0/8 -j DROP
  115. $IPT -A RESERVED_NET_CHECK -i $INTERNET -s 172.16.0.0/12 -j DROP
  116. $IPT -A RESERVED_NET_CHECK -i $INTERNET -s 192.168.0.0/16 -j DROP
  117. $IPT -A RESERVED_NET_CHECK -i $INTERNET -s 169.254.0.0/16 -j DROP
  118. # Autres protections réseau (cf. http://iptables-tutorial.frozentux [...] ysctl.txt)
  119. echo 1 > /proc/sys/net/ipv4/tcp_syncookies
  120. echo 0 > /proc/sys/net/ipv4/ip_forward
  121. echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
  122. echo 1 >/proc/sys/net/ipv4/conf/all/log_martians
  123. #echo 1 > /proc/sys/net/ipv4/ip_always_defrag # non dispo par défaut sur ma debian
  124. echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
  125. echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
  126. echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
  127. echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
  128. }
  129. case "$1" in
  130.   start)
  131.        flush
  132.        start
  133.      ;;
  134.   stop)
  135.      flush && stop
  136.      ;;
  137.   restart)
  138.      flush && start
  139.      ;;
  140.   *)
  141.   echo "Usage: /etc/init.d/firewall {start|restart|stop}"
  142.   exit 1
  143.      ;;
  144. esac
  145. exit 0


 
 
 
 
 
EDIT1 : j'avais oublié les règles pour les DNS
EDIT2 : j'ai ajouté les règles de l0ky en ligne 17 pour de meilleures perfs.
EDIT3 : corrigé une erreure au niveau des règles mysql
EDIT4 : grosses discussions sur les règles aux lignes 29 à 35
EDIT5 : ajout du flag --syn pour identifier les ouvertures de connexion tcp.
EDIT6 :  
- ajout du flag  -m state --state NEW pour les protocoles attendant une réponse (tous sauf SMTP dans mon cas)
- ajout du support du ftp en sortie
- suppression de la restriction ssh par adresse IP en sortie sur l'interface $INTERNET (trop restrictif si je veux synchroniser vers plein de serveurs et peu risqué), mais comme je ne synchronise que sur l'interface $LOCAL pour l'instant c'est en commentaire.
EDIT7 :
- ajout de règles pour vérifier la validité des paquets
- optimisations à l'aide de chaines personnelles
EDIT8 :
- ajout d'une variante pour n'autoriser que le trafic ftp en sortie vers les miroirs de paquets d'un système
- mis en place d'autre protections réseau (non spécifiques à iptables) inspirées du guide de sécurisation debian
EDIT9 : LOGs!
EDIT10 :  
- ajout de règles plus précises pour l'icmp
- correction d'erreurs au niveau des flags sport et dport
EDIT11 : ajout d'un flag  --sport 1025: pour les protocoles utilisant un port>1024 en sortie
EDIT12 :  
- ajout d'un script de démarrage
- mise en commentaire de la ligne pour ip_always_defrag qui n'est pas dispo sur toutes les distros
EDIT13 : ajout du chargement des modules
EDIT14 :
- suppression des règles TCP pour les DNS (seul l'UDP est utilisé ici)
- ajout d'un lien pour l'exlpication des protections réseau du noyau
EDIT15 : ajout d'une règle pour la synchro ntp

Message cité 1 fois
Message édité par duch le 13-09-2005 à 10:43:16
Reply

Marsh Posté le 01-09-2005 à 13:25:39    

pour le dns c'est plutot --dport 53

Reply

Marsh Posté le 01-09-2005 à 13:27:12    

Tu ne precise jamais les tables utilisées et par defaut, c'est filter. Ce qui fait que la table nat et mangle ne sont pas initialisées dans ton script car tu utilise toujours filter. ex:

echo "++ Suppression de toutes les chaînes pré-définies"
iptables -t filter -F
iptables -t nat -F
iptables -t mangle -F
 
echo "++ Suppression de toutes les chaînes utilisateur"
iptables -t filter -X
iptables -t nat -X
iptables -t mangle -X
 
echo "++ Initialisation de la table filter"
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
iptables -t filter -P FORWARD DROP
 
echo "++ Initialisation de la table nat"
iptables -t nat -P PREROUTING  ACCEPT
iptables -t nat -P OUTPUT      ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
 
echo "++ Initialisation de la table mangle"
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


 
Tes premieres regles (les 3 INPUT et 3 FORWARD) de DROP sont inutiles puisque par defaut, tu as tout droppé :)


---------------
BOFH excuse #400:We are Microsoft.  What you are experiencing is not a problem; it is an undocumented feature.
Reply

Marsh Posté le 01-09-2005 à 13:28:01    

copier/coller qui a rippé, corrigé.
Merci
 
pas de remarques sinon, pas de trucs inutiles, de trous...
 
EDIT : je répondais à l0ky


Message édité par duch le 01-09-2005 à 13:29:15
Reply

Marsh Posté le 01-09-2005 à 13:30:31    

j'aurais un peu renforcé l'affaire avec --syn pour l'acceptation des connection TCP (entrante/sortante)

Reply

Marsh Posté le 01-09-2005 à 13:30:53    

sebchap > effectivement je n'utilise que la table filter
je devrais donc mettre ces règles à la fin, après avoir accpeter certains paquets?

Reply

Marsh Posté le 01-09-2005 à 13:31:21    

$IPT -A OUTPUT -p tcp --sport ssh -o $LOCAL --syn -j ACCEPT

Reply

Marsh Posté le 01-09-2005 à 13:32:32    

l0ky a écrit :

j'aurais un peu renforcé l'affaire avec --syn pour l'acceptation des connection TCP (entrante/sortante)


 
ouaip, j'ai vu que c'était utilisé mais pour l'instant je n'ai pas encore tout compris, donc plutôt que de faire des copier/coller où je ne comprends rien, j'y vais petit à petit...

Reply

Marsh Posté le 01-09-2005 à 13:38:34    

duch a écrit :

sebchap > effectivement je n'utilise que la table filter
je devrais donc mettre ces règles à la fin, après avoir accpeter certains paquets?


L'initialisation se fait au debut (flush des regles puis application des regles par defaut DROP).
Après, tu ne devrais plus avoir de regles DROP ;)
 
edit: dans tes regles ACCEPT, tu peux aussi rajouter a chaque fois l'interface de sortie/entrée ainsi que la source/destination des connexions si elles sont connues et fixes. Mais ce n'est pas obligatoire.


Message édité par sebchap le 01-09-2005 à 13:40:13

---------------
BOFH excuse #400:We are Microsoft.  What you are experiencing is not a problem; it is an undocumented feature.
Reply

Marsh Posté le 01-09-2005 à 13:38:34   

Reply

Marsh Posté le 01-09-2005 à 13:44:26    

oups, mais alors si je drop les paquets prétendant venir du réseau local et qu'ensuite j'accepte toutes les connexions venant d'internet, ça sert à rien?!?
 
j'suis perdu là...

Reply

Marsh Posté le 01-09-2005 à 13:47:27    

sebchap a écrit :

edit: dans tes regles ACCEPT, tu peux aussi rajouter a chaque fois l'interface de sortie/entrée ainsi que la source/destination des connexions si elles sont connues et fixes. Mais ce n'est pas obligatoire.


 
c'est ce que j'ai fait au niveau de ssh et des dns, pour le reste je ne pense pas en avoir besoin.


Message édité par duch le 01-09-2005 à 13:48:15
Reply

Marsh Posté le 01-09-2005 à 13:49:25    

duch a écrit :

oups, mais alors si je drop les paquets prétendant venir du réseau local et qu'ensuite j'accepte toutes les connexions venant d'internet, ça sert à rien?!?
 
j'suis perdu là...


Tu es obligé de dropper toute les connexions par defaut, c'est une regles de base :)
Ensuite, tu n'accepte pas TOUTE les connexions venant d'internet, tu acceptes seulement celle qui ont un statut particulier (ESTABLISHED et RELATED). C'est ce qu'on appele le suivi de connexion. Ca bloque donc les nouvelles connexions (NEW), les connexions invalides (INVALID) et UNTRACKED.
Par contre, il me semble que tu dois accepter les nouvelle connexions vers l'exterieur (relgle OUTPUT) et pas seulement les connexions ESTABLISHED et RELATED.


---------------
BOFH excuse #400:We are Microsoft.  What you are experiencing is not a problem; it is an undocumented feature.
Reply

Marsh Posté le 01-09-2005 à 13:52:47    

ces règles là (pour http par exemple) ne suffisent pas a accepter des nouvelles connexions? :
 
# $IPT -A INPUT -p tcp --dport http -j ACCEPT
# $IPT -A OUTPUT -p tcp --sport http -j ACCEPT

Reply

Marsh Posté le 01-09-2005 à 13:55:09    

je profite de ce topic, car je ne comprends pas un truc:
dans chaque script iptable je vois ces lignes
# ### Autorise tout le trafic appartenant à des connections existantes. ###
# $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# $IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# $IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
 
 
c'est quoi ces connections deja existantes ?

Reply

Marsh Posté le 01-09-2005 à 13:57:55    

bah ça il me semble que j'ai compris, ce sont des paquets en rapport avec une connexions déjà existante (où des paquets ont déjà été transmis) ou en relation avec une connexion existantes.
 
Je suppose que le kernel se débrouille pour les reconnaitre...

Reply

Marsh Posté le 01-09-2005 à 13:59:31    

duch a écrit :

ces règles là (pour http par exemple) ne suffisent pas a accepter des nouvelles connexions? :
 
# $IPT -A INPUT -p tcp --dport http -j ACCEPT
# $IPT -A OUTPUT -p tcp --sport http -j ACCEPT


Ca c'est juste pour ton serveur http ;)
tes connexions avec internet sont bcp plus diversifiées (port, ptotocole etc...)


---------------
BOFH excuse #400:We are Microsoft.  What you are experiencing is not a problem; it is an undocumented feature.
Reply

Marsh Posté le 01-09-2005 à 14:01:41    

bah oui, ce n'était qu'un exemple mais dans le cas de mon serveur, les connexions à internet ne sont pas très diversifiée.
en tout et pour tout, je n'ai que 4 ports d'ouvert et je les ai ouvert explicitement par des règles, c'est pour ça que je ne comprends pas où est le blème :crazy:

Reply

Marsh Posté le 01-09-2005 à 14:14:50    

duch a écrit :

bah oui, ce n'était qu'un exemple mais dans le cas de mon serveur, les connexions à internet ne sont pas très diversifiée.
en tout et pour tout, je n'ai que 4 ports d'ouvert et je les ai ouvert explicitement par des règles, c'est pour ça que je ne comprends pas où est le blème :crazy:


Tu n'auras que 2 ports d'ouvert en permanence a priori: 80 et 22 pour le serveur web et ssh respectivement.
Pour ces deux serveur tu dois autoriser les connexions entrantes vers ces ports et les connexions sortante en provenance de ces ports. Mais quand tu te connecte a un site internet par exemple, la reponse que ce site t'envoie ne vas pas arriver sur ton port 80 mais sur un port quelconque. C'est pour ca que tu dois aussi autoriser certaine connexions quelque soit leur port de destination, a partir du moment où elles ont un statut correct.


---------------
BOFH excuse #400:We are Microsoft.  What you are experiencing is not a problem; it is an undocumented feature.
Reply

Marsh Posté le 01-09-2005 à 14:18:26    

ah, ok compris, mais comment tu fais ça? avec --state NEW, c'est ça?

Reply

Marsh Posté le 01-09-2005 à 14:27:17    

duch a écrit :

ah, ok compris, mais comment tu fais ça? avec --state NEW, c'est ça?


Je n'ai jamais monté de serveur web donc je ne sais pas s'il faut accepter les connexions entrantes NEW, mais a priori, je dirais oui (mais attends la confirmation de qqun d'autre).
Ce qui est sur, c'est que tu ne dois pas accepter TOUTE les connexions entrante NEW, seulement celle a destination de ton serveur web (port 80) (en supposant que j'ai raison)
Pour filtrer selon le statut, c'est avec l'option -m puis le nom du filtre et enfin les options du filtre (cf man iptables)


---------------
BOFH excuse #400:We are Microsoft.  What you are experiencing is not a problem; it is an undocumented feature.
Reply

Marsh Posté le 01-09-2005 à 14:32:08    

j'ai réfléchis à ça en allant chercher mon porc sauce aigre douce, mais il ne me semble pas que j'ai besoin d'une règle particulière, car comme c'est moi qui initie la connexion, les paquets qui viennent du serveur sont ESTABLISHED, non?

Reply

Marsh Posté le 01-09-2005 à 14:45:32    

duch a écrit :

j'ai réfléchis à ça en allant chercher mon porc sauce aigre douce, mais il ne me semble pas que j'ai besoin d'une règle particulière, car comme c'est moi qui initie la connexion, les paquets qui viennent du serveur sont ESTABLISHED, non?


C'est possible, essaye :)


---------------
BOFH excuse #400:We are Microsoft.  What you are experiencing is not a problem; it is an undocumented feature.
Reply

Marsh Posté le 01-09-2005 à 14:46:43    

bon alors et pour en revenir à ce que tu me disais tout à l'heure, elles servent à rien mes règles DROP à la fin?

Reply

Marsh Posté le 01-09-2005 à 15:01:33    

duch a écrit :

bon alors et pour en revenir à ce que tu me disais tout à l'heure, elles servent à rien mes règles DROP à la fin?


oui puisque par defaut, tout est bloqué des le debut :)


---------------
BOFH excuse #400:We are Microsoft.  What you are experiencing is not a problem; it is an undocumented feature.
Reply

Marsh Posté le 01-09-2005 à 15:04:33    

bah ouais, mais comme ensuite j'accepte TOUT ce qui rentre sur mon port 80 (par exemple), il faut bien ces règles DROP pour accepter ce qui rentre sur le port 80 SAUF les requêtes qui viennent prétendument d'un réseau local.
 
j'étais d'accord avec toi pour dire que placée au début elle ne servait à rien puisque il y avait les règles DROP avant et qu'ensuite, j'acceptais tout, mais à la fin il me semble que ça a un sens, car le paquet va continuer son bonhomme de chemin jusqu'à se faire dropper.


Message édité par duch le 01-09-2005 à 15:06:03
Reply

Marsh Posté le 01-09-2005 à 15:47:29    

duch a écrit :

bah ouais, mais comme ensuite j'accepte TOUT ce qui rentre sur mon port 80 (par exemple), il faut bien ces règles DROP pour accepter ce qui rentre sur le port 80 SAUF les requêtes qui viennent prétendument d'un réseau local.
 
j'étais d'accord avec toi pour dire que placée au début elle ne servait à rien puisque il y avait les règles DROP avant et qu'ensuite, j'acceptais tout, mais à la fin il me semble que ça a un sens, car le paquet va continuer son bonhomme de chemin jusqu'à se faire dropper.


Si tu veux que ton serveur web ne soit pas accesible via le reseau local, alors c'est dans les regles d'acces au port 80 qu'il faut le specifier:

iptables -t filter -A INPUT -p tcp --dport 80 -s ! 192.168.0.0/24 -j ACCEPT


 
edit: quand tu dis "pretendument", ca veut dire quoi ? Si tu pense que quelqu'un venant d'internet peut avoir ce genre d'adresse, alors rassure toi, ce n'est pas possible. Elle serait automatiquement detruite sur les routeurs. Ce sont des plages reservé aux adresse privées.


Message édité par sebchap le 01-09-2005 à 15:49:27

---------------
BOFH excuse #400:We are Microsoft.  What you are experiencing is not a problem; it is an undocumented feature.
Reply

Marsh Posté le 01-09-2005 à 15:58:36    

oui effectivement si elles ne peuvent pas arriver jusqu'à ma machine, ces règles ne servent à rien. > j'efface
 
En ce qui concerne l'accès au port 80 par le réseau local, ça ne me dérange pas, mais si je voulais l'interdire je ne ferais pas comme tu propose mais plutôt comme ça :
 
$IPT -A INPUT -p tcp --dport http -i $INTERNET -j ACCEPT
$IPT -A OUTPUT -p tcp --sport http -o $INTERNET -j ACCEPT
 
en gros comme les packets sont DROP par défaut je ne les accepte que sur l'interface $INTERNET, ce qui reviens à les interdire sur l'interface $LOCAL, j'ai bon?


Message édité par duch le 01-09-2005 à 15:58:52
Reply

Marsh Posté le 01-09-2005 à 16:00:35    

sebchap a écrit :

edit: quand tu dis "pretendument", ca veut dire quoi ? Si tu pense que quelqu'un venant d'internet peut avoir ce genre d'adresse, alors rassure toi, ce n'est pas possible. Elle serait automatiquement detruite sur les routeurs. Ce sont des plages reservé aux adresse privées.


Si si c'est possible [:dawa]
Il y a certains FAI qui utilisent des adresses privées pour leur équipement et qui ne drop pas au niveau des routeurs . Y a un topic sur WSR qui en parle.
 
indice: le FAI est en étroite relation avec FT et se termine par doo :p
 
Mais bon, c'est toujours bon de dropper ca [:dawao]

Reply

Marsh Posté le 01-09-2005 à 16:02:10    

ah bah merde alors, je vais remettre ces règles, mais je les met où finalement?

Reply

Marsh Posté le 01-09-2005 à 16:19:44    

l0ky a écrit :

Si si c'est possible [:dawa]
Il y a certains FAI qui utilisent des adresses privées pour leur équipement et qui ne drop pas au niveau des routeurs . Y a un topic sur WSR qui en parle.
 
indice: le FAI est en étroite relation avec FT et se termine par doo :p
 
Mais bon, c'est toujours bon de dropper ca [:dawao]


Le lien stp :o
 

Citation :


ah bah merde alors, je vais remettre ces règles, mais je les met où finalement?


Bah si tu droppe, ton serveur sera inacessible du reseau local (sauf peut etre si tu filtre par MAC). Enfin c'est comme tu veux. Tu peux les remettre a la fin


---------------
BOFH excuse #400:We are Microsoft.  What you are experiencing is not a problem; it is an undocumented feature.
Reply

Marsh Posté le 01-09-2005 à 16:23:12    

non mon serveur ne sera pas accessible du réseau local puisque je ne DROP que sur l'interface $INTERNET

Reply

Marsh Posté le 01-09-2005 à 16:25:12    

Ah, autant pour moi, je n'avais plus les lignes sous les yeux :o


---------------
BOFH excuse #400:We are Microsoft.  What you are experiencing is not a problem; it is an undocumented feature.
Reply

Marsh Posté le 01-09-2005 à 16:29:48    

bon, ok maintenant que tout le monde est d'accord sur la base, il ne reste plus qu'à amélioré ça.
 
l0ky tu parlais tout à l'heure de --syn, j'ai lu la manpage de iptables (une fois de plus) et sur ce coup là, je trouve pas ça très clair, tu pourrais m'éclairer?
 
j'ai vu aussi que HuGoBioS utilisait toute une ribambelle de règles pour vérifier la validité des paquets (voi ici : http://forum.hardware.fr/forum2.ph [...] ash_post=0 au milieu du topic) z'en pensez quoi?


Message édité par duch le 01-09-2005 à 16:33:16
Reply

Marsh Posté le 01-09-2005 à 16:34:32    

sebchap a écrit :

Le lien stp :o


J'en sais rien moi, je suis pas un moteur de recherche [:cupra]
Le titre du topic était à propos de ping d'ordinateur fantome...
 
J'essaierai de le retrouver mais la pas le temps


Message édité par l0ky le 01-09-2005 à 16:34:54
Reply

Marsh Posté le 01-09-2005 à 16:36:07    

duch a écrit :

bon, ok maintenant que tout le monde est d'accord sur la base, il ne reste plus qu'à amélioré ça.
 
l0ky tu parlais tout à l'heure de --syn, j'ai lu la manpage de iptables (une fois de plus) et sur ce coup là, je trouve pas ça très clair, tu pourrais m'éclairer?


C'est pour renforcer un peu l'aspect statefull du paquet. Il ne matches que les paquets ayant seulement les paquets TCP ayant le flag syn d'activer (signalant une demande de connection TCP)

Reply

Marsh Posté le 01-09-2005 à 16:41:39    

ok j'ai compris (enfin je crois), comme au début on accepte tous les paquets provenant d'une connexion ESTABLISHED ou RELATED, on peux dans les règles suivantes être plus restrictifs et n'accepter que les paquets correctement formés  pour ouvrir une connexion.
 
Ceux-là seront acceptés la première fois grâce aux règles spécifiques, et ensuite tout les paquets correspondant au flux TCP qui n'auraient pas été accepté par ces règles le seront avant grâce aux règles des lignes 18, 19 et 20.
 
j'ai bon?

Reply

Marsh Posté le 01-09-2005 à 16:42:31    

sebchap a écrit :

Le lien stp :o


http://forum.hardware.fr/forum2.ph [...] ash_post=0
 
 
 

duch a écrit :

ok j'ai compris (enfin je crois), comme au début on accepte tous les paquets provenant d'une connexion ESTABLISHED ou RELATED, on peux dans les règles suivantes être plus restrictifs et n'accepter que les paquets correctement formés  pour ouvrir une connexion.
 
Ceux-là seront acceptés la première fois grâce aux règles spécifiques, et ensuite tout les paquets correspondant au flux TCP qui n'auraient pas été accepté par ces règles le seront avant grâce aux règles des lignes 18, 19 et 20.
 
j'ai bon?


jap


Message édité par l0ky le 01-09-2005 à 16:43:06
Reply

Marsh Posté le 01-09-2005 à 16:49:17    

y'a qd même un truc que je capte pas (et c'est un peu grave) :  
si un paquet est DROP, logiquement les règles suivantes ne devraient pas être évaluées (d'après ce que j'ai lu), et pourtant c'est le cas puisque sinon les paquets ne passeraient pas la première chaine (qui DROP tout...).
Inversement un paquet ACCEPTé, peut continuer à parcourir les chaines jusqu'à ce qu'il rencontre une chaine qui éventuellement le DROP, alors pourquoi dans le cas de l'utilisation de --syn alors qu'il est passé par les règles 18,19, et 20 le paquet ne serait-il pas DROPpé par les règles contenant le flag --syn?


Message édité par duch le 01-09-2005 à 16:49:59
Reply

Marsh Posté le 01-09-2005 à 16:51:04    

Presque:
Sauf que iptables -P OUTPUT DROP ne met pas en place une regle mais une politique. C'est à dire ce que fera netfilter si aucun match n'a correspondu durant la traversée de la chaine OUTPUT
 
En fait, pour simplifier, netfilter parcours une chaine jusqu'à ce qu'une regle matche. Dans ce cas là il applique l'action et basta, il ne finit pas la traversée. Si aucue règle n'a matchée alors il applique la politique (ici DROP)


Message édité par l0ky le 01-09-2005 à 16:52:38
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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