Advertisement
Guest User

Iptables pour VPS OVH

a guest
Sep 16th, 2019
4,299
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.09 KB | None | 0 0
  1. ####
  2. # Objectif :
  3. # https://www.developpez.net/forums/d2005213/systemes/linux/securite/cherche-relecture-script-defaut-iptables/#post11132781
  4. ###
  5.  
  6. # Début de la règle.
  7. *filter
  8.  
  9. ###
  10. # Pas de filtrage sur l'interface de loopback.
  11. # Le serveur ne doit pas avoir de soucis à communiquer avec lui-même au niveau des services internes.
  12. ###
  13. -A INPUT -i lo -j ACCEPT
  14. # Pourquoi autoriser le loopback vers l'extérieur ?
  15. # -A OUTPUT -o lo -j ACCEPT
  16.  
  17. ###
  18. # Ne pas casser les connexions établies pour ne pas se retrouver bloqué en cas de règles trop restrictives !
  19. ###
  20. # Permettre à une connexion ouverte de recevoir du trafic en entrée.
  21. -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
  22.  
  23. # Permettre à une connexion ouverte de recevoir du trafic en sortie.
  24. # -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
  25. -A OUTPUT -m conntrack ! --ctstate INVALID -j ACCEPT
  26.  
  27. ###
  28. # Ajouter les services autorisés à se connecter dans Iptables.
  29. # Adapter le port et éventuellement le protocole TCP par UDP en fonction de la configuration souhaitée.
  30. # --sport est l'abréviation de --source-port
  31. # --dport est l'abréviation de --destination-port
  32. ###
  33. #
  34. # Autoriser le port SSH par défaut.
  35. # Cette règle est à conserver sauf en cas de configuration du Port Knocking.
  36. # Pour le moment, je laisse le port ouvert en INPUT, pour éviter des incidents de connexion au serveur.
  37. # -A INPUT -p tcp --dport 22 -j ACCEPT
  38. -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
  39. # -A OUTPUT -p tcp --dport 22 -m state --state ESTABLISHED -j ACCEPT
  40. # Remplacer la commande précédente pour autoriser le serveur à se connecter à distance par SSH.
  41. -A OUTPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
  42. #
  43. # Autoriser SSH entrant uniquement à partir d'un réseau spécifique.
  44. # Les règles suivantes autorisent les connexions ssh entrantes uniquement à partir du réseau 192.168.100.x.
  45. # -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
  46. # -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
  47. # Remplacer la commande précédente pour autoriser le serveur à se connecter à distance par SSH à partir d'un réseau spécifique.
  48. # -A OUTPUT -o eth0 -p tcp -d 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
  49. #
  50. # Il est conseillé de laisser cache.ovh.net pour permettre à OVH d'intervenir sur le serveur.
  51. # Si vous fermez le port 22 pour les techniciens ils ne pourront pas intervenir.
  52. -A INPUT -p tcp --dport 22 --source cache.ovh.net -j ACCEPT
  53. #
  54. # Autoriser les connexions DNS entrantes :
  55. -A INPUT -p tcp --dport 53 -j ACCEPT
  56. -A OUTPUT -p tcp --dport 53 -j ACCEPT
  57. # Autoriser les connexions DNS sortantes :
  58. # (Trouver un exemple pour comprendre pourquoi une connexion DNS sortante est nécessaire.)
  59. -A OUTPUT -p udp --dport 53 -j ACCEPT
  60. -A INPUT -p udp --sport 53 -j ACCEPT
  61. #
  62. # Si un serveur FTP est installé, permet de le joindre depuis l'extérieur sur le port 20 et 21 :
  63. -A INPUT -p tcp --dport 20:21 -j ACCEPT
  64. #
  65. # Si un serveur de mail avec SMTP, POP3 et IMAP est installé, le rendre joignable de l'extérieur :
  66. # Mail SMTP:25
  67. # -A INPUT -p tcp --dport 25 -j ACCEPT
  68. # -A OUTPUT -p tcp --dport 25 -j ACCEPT
  69. # Mail POP3:110
  70. # -A INPUT -p tcp --dport 110 -j ACCEPT
  71. # -A OUTPUT -p tcp --dport 110 -j ACCEPT
  72. # Mail IMAP:143
  73. # -A INPUT -p tcp --dport 143 -j ACCEPT
  74. # -A OUTPUT -p tcp --dport 143 -j ACCEPT
  75. # Mail POP3S:995
  76. # -A INPUT -p tcp --dport 995 -j ACCEPT
  77. # -A OUTPUT -p tcp --dport 995 -j ACCEPT
  78. # Combiner plusieurs ports dans la même règle avec multiport :
  79. -A INPUT -p tcp -m multiport --dports 25,110,143,995 -m state --state NEW,ESTABLISHED -j ACCEPT
  80. -A OUTPUT -p tcp -m multiport --dports 25,110,143,995 -m state --state ESTABLISHED -j ACCEPT
  81. #
  82. # Si un serveur web est installé :
  83. -A INPUT -p tcp --dport 80 -j ACCEPT
  84. -A OUTPUT -p tcp --dport 80 -j ACCEPT
  85. -A INPUT -p tcp --dport 443 -j ACCEPT
  86. -A OUTPUT -p tcp --dport 443 -j ACCEPT
  87. #
  88. # Si NIS est utilisé pour gérer les comptes utilisateurs, authoriser les connexions NIS.
  89. # If you don’t allow the NIS related ypbind connections, users will not be able to login.
  90. # The NIS ports are dynamic. When the ypbind starts it allocates the ports.
  91. # First do a rpcinfo -p as shown below and get the port numbers. In this example, it was using port 853 and 850.
  92. # rpcinfo -p | grep ypbind
  93. # Now allow incoming connection to the port 111, and the ports that were used by ypbind.
  94. # -A INPUT -p tcp --dport 111 -j ACCEPT
  95. # -A INPUT -p udp --dport 111 -j ACCEPT
  96. # -A INPUT -p tcp --dport 853 -j ACCEPT
  97. # -A INPUT -p udp --dport 853 -j ACCEPT
  98. # -A INPUT -p tcp --dport 850 -j ACCEPT
  99. # -A INPUT -p udp --dport 850 -j ACCEPT
  100. #
  101. # Si un serveur Samba est installé :
  102. # Vérifier si il faut une règle INPUT et vérifier la règle OUTPUT :
  103. # -A OUTPUT -p udp -m udp --dport 137 -j CT --helper netbios-ns
  104. #
  105. # Permettre la connexion au serveur par XDMCP :
  106. # -A INPUT -p udp --dport 177 -j ACCEPT
  107. # Permettre à la machine client de se connecter par XDMCP à une machine distante :
  108. # -A INPUT -p tcp --dport 6001 -j ACCEPT
  109. #
  110. # Si un serveur CUPS éventuel doit être joignable de l'extérieur :
  111. # -A INPUT -p udp -m udp --dport 631 -j ACCEPT
  112. #
  113. # Décommenter les lignes suivantes pour autoriser rsync depuis un réseau spécifique :
  114. # -A INPUT -p tcp -s 192.168.101.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT
  115. # -A OUTPUT -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT
  116. #
  117. # Décommenter les lignes suivantes si OpenVPN Server est installé et tourne sur le port 913 en UDP :
  118. # -A INPUT -p udp --dport 913 -j ACCEPT
  119. #
  120. # Si un serveur webmin est installé, il fonctionne en localhost, on y accède en export display, inutile de l'ouvrir :
  121. # -A INPUT -p tcp --dport 1000 -j ACCEPT
  122. # -A OUTPUT -p tcp --dport 1000 -j ACCEPT
  123. #
  124. # Décommenter la ligne suivante pour pouvoir reçevoir des flux UDP VideoLAN.
  125. # -A INPUT -p udp --dport 1234 -j ACCEPT
  126. #
  127. # Si l'outil de monitoring Monit est utilisé, privilégier le transfert de port depuis la configuration de Monit vers le port proxy 8080 pour ne pas avoir à ouvrir le port 1337.
  128. # Autoriser le port 1337. Le port dépend de la configuration de Monit. Il fonctionne en localhost
  129. # -A INPUT -p tcp --dport 1337 -j ACCEPT
  130. #
  131. # Décommenter les 3 lignes suivantes pour pouvoir utiliser GnomeMeeting :
  132. # -A INPUT -p tcp --dport 1720 -j ACCEPT
  133. # -A INPUT -p tcp --dport 30000:33000 -j ACCEPT
  134. # -A INPUT -p udp --dport 5000:5006 -j ACCEPT
  135. #
  136. # Rendre le serveur CVS joignable depuis l'extérieur via "pserver".
  137. # Si les utilisateurs accèdent au serveur CVS exclusivement via SSH,
  138. # seule la ligne concernant le serveur SSH doit être décommentée.
  139. # -A INPUT -p tcp --dport 2401 -j ACCEPT
  140. #
  141. # Si un serveur de base de données MariaDB est installé, autoriser le trafic loopback en interne pour localhost.
  142. # Ne pas ouvrir le port 3306 sauf pour faire communiquer des serveurs en interne.
  143. # -A INPUT -p tcp --dport 3306 -j ACCEPT
  144. # -A OUTPUT -p tcp --dport 3306 -j ACCEPT
  145. # Autoriser la connexion MySQL uniquement à partir d'un réseau spécifique :
  146. # -A INPUT -p tcp -s 192.168.100.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
  147. # -A OUTPUT -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT
  148. #
  149. # Si le serveur de partage d'écran Teamviewer est installé :
  150. # C'est le port 5938 TCP et UDP qui sera utilisé, puis, le port 443 ou 80 en dernier recours.
  151. # Il semblerait qu'il soit inutile d'ouvrir les ports, puisque le serveur va effectuer sa demande de connexion vers l'extérieur. La connexion devrait alors s'établir.
  152. # Préférer Anydesk et identifier les ports pour anydesk.
  153. # -A INPUT -p tcp --dport 5938 -j ACCEPT
  154. # -A INPUT -p udp --dport 5938 -j ACCEPT
  155. #
  156. # Si SickRage est installé, autoriser le trafic en interne pour localhost, ce qui a été fait plus haut. Ne pas ouvrir le port 8081. Je n'utilise pas SickRage, tester en situation :
  157. # -A INPUT -p tcp --dport 8081 -j ACCEPT
  158. #
  159. # Si la synchronisation avec DropBox est installée :
  160. # DropBox utilise le port 17500 TCP et UDP pour la synchronisation réseau par défaut.
  161. # Il utilise également les ports TCP 17600 et TCP 17603 pour le bouton Web «Ouvrir».
  162. # Il semblerait qu'il soit inutile d'ouvrir les ports, puisque le serveur va effectuer sa demande de connexion vers l'extérieur. La connexion devrait alors s'établir.
  163. # -A INPUT -p tcp --dport 17500 -j ACCEPT
  164. # -A INPUT -p udp --dport 17500 -j ACCEPT
  165. # -A INPUT -p tcp --dport 17600 -j ACCEPT
  166. # -A INPUT -p tcp --dport 17603 -j ACCEPT
  167.  
  168. ###
  169. # Règles complémentaires pour optimiser le serveur.
  170. ###
  171. # Faire face au flood :
  172. -A FORWARD -p tcp --syn -m limit --limit 1/second -j ACCEPT
  173. -A FORWARD -p udp -m limit --limit 1/second -j ACCEPT
  174. -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/second -j ACCEPT
  175.  
  176. # Limiter à 2 demandes de connexion par seconde pour une IP sur le protocole SSH.
  177. # -A INPUT -p tcp --syn --dport ssh -m connlimit --connlimit-above 2 -j DROP
  178. # Autoriser uniquement 3 connexions en SSH sur un intervalle de 120 secondes (2 minutes).
  179. -A INPUT -p tcp --dport ssh -m state --state NEW -m recent --update --seconds 120 --hitcount 3 -j DROP
  180.  
  181. # Limiter le nombre de connexions entrantes par minute à 100 et définit une rafale limite de 200.
  182. -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT
  183.  
  184. # Bloquer ICMP pour interdire les réponses du serveur suite à une requête PING :
  185. -A INPUT -p icmp --icmp-type echo-request -j DROP
  186. -A OUTPUT -p icmp --icmp-type echo-reply -j DROP
  187. # Autoriser le serveur a lancer une requête PING de l'intérieur vers un serveur externe :
  188. -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
  189. -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
  190. #
  191. # Autoriser ICMP pour OVH et le monitoring :
  192. # Si toutes les requêtes PING sont bloquées, même celles d'OVH, le bon état de marche du serveur ne sera plus surveillé et si il tombe en panne OVH n'en sera pas avertis.
  193. # Autoriser au moins les adresses suivantes de OVH a PING : ping.ovh.net, proxy.p19.ovh.net, proxy.rbx.ovh.net, proxy.ovh.net, proxy-rbx2.ovh.net, proxy.sbg.ovh.net, proxy.bhs.ovh.net
  194. #
  195. # L'adresse IP de votre serveur, pour exemple, 213.186.57.143 doit laisser passer :
  196. # 213.186.57.249 si vous êtes sur un serveur HG. (Règle temporaire.)
  197. # 213.186.57.250 pour le serveur SLA.
  198. # 213.186.57.251 pour le serveur mrtg pour pouvoir bénéficier de RTM.
  199. #
  200. # Renseigner le début de l'adresse IP de votre serveur :
  201. # DEBUT_ADRESSE_IP_SERVEUR="213.186.57"
  202. #
  203. # Adresses à autoriser d'après la documentation OVH : https://docs.ovh.com/gb/en/cloud/dedicated/monitoring-ip-ovh/
  204. # Mise en application : https://community.centminmod.com/threads/ovh-icmp-ping-whitelist-for-csf-firewall.11427/
  205. #
  206. # -A INPUT -p tcp --dport 22 --source cache.ovh.net -j ACCEPT
  207. # -A INPUT -p icmp --source proxy.ovh.net -j ACCEPT
  208. # -A INPUT -p icmp --source proxy.p19.ovh.net -j ACCEPT
  209. # -A INPUT -p icmp --source proxy.rbx.ovh.net -j ACCEPT
  210. # -A INPUT -p icmp --source proxy.sbg.ovh.net -j ACCEPT
  211. # -A INPUT -p icmp --source proxy.bhs.ovh.net -j ACCEPT
  212. # -A INPUT -p icmp --source ping.ovh.net -j ACCEPT
  213. # -A INPUT -p icmp --source 151.80.231.244 -j ACCEPT # Monitoring
  214. # -A INPUT -p icmp --source 151.80.231.245 -j ACCEPT # Monitoring
  215. # -A INPUT -p icmp --source 151.80.231.246 -j ACCEPT # Monitoring
  216. # -A INPUT -p icmp --source 151.80.231.247 -j ACCEPT # Monitoring
  217. # -A INPUT -p icmp --source 37.187.231.251 -j ACCEPT # Monitoring
  218. # -A INPUT -p icmp --source a2.ovh.net -j ACCEPT
  219. # -A INPUT -p icmp --source 92.222.184.0/24 -j ACCEPT
  220. # -A INPUT -p icmp --source 92.222.185.0/24 -j ACCEPT
  221. # -A INPUT -p icmp --source 92.222.186.0/24 -j ACCEPT
  222. # -A INPUT -p icmp --source 167.114.37.0/24 -j ACCEPT
  223. # -A INPUT -p tcp --source 192.168.0.0/16 -j ACCEPT
  224. # -A INPUT -p udp --source 192.168.0.0/16 -j ACCEPT
  225. # SLA server :
  226. # -A INPUT -p icmp --source DEBUT_ADRESSE_IP_SERVEUR.251 -j ACCEPT
  227. # DEBUT_ADRESSE_IP_SERVEUR = aaa.bbb.ccc according to the previous rule :
  228. # -A INPUT -p icmp --source DEBUT_ADRESSE_IP_SERVEUR.250 -j ACCEPT
  229. # temporary, only for HG server :
  230. # -A INPUT -p icmp --source DEBUT_ADRESSE_IP_SERVEUR.249 -j ACCEPT
  231. # -A OUTPUT -p udp --dport 6100:6200 -j ACCEPT # OVH RTM
  232. #
  233. # Vérifier les paquets ICMP bloqués depuis le fichier de journalisation /var/log/messages :
  234. # grep -i 'ICMP_IN Blocked' /var/log/messages| tail -5| awk '{print $1,$2,$3,$5,$6,$7,$8,$9,$12,$13,$19,$20}'; date
  235. # Vérifier les informations des adresses IP bloquées pour s'assurer que ce n'est pas un service de OVH :
  236. # curl ipinfo.io/92.222.185.1
  237.  
  238. # DROP le Multicast :
  239. # Je ne pense pas en avoir besoin pour le moment, il me semble inutile de l'autoriser.
  240. # Ce système est plus efficace que l'unicast pour diffuser des contenus simultanément vers une large audience. (Audio, Vidéo.)
  241. -A INPUT -m pkttype --pkt-type multicast -j DROP
  242. -A FORWARD -m pkttype --pkt-type multicast -j DROP
  243. -A OUTPUT -m pkttype --pkt-type multicast -j DROP
  244. # DROP IGMP également pour bloquer le multicast ? Quelle méthode préférer ?
  245. # Si nécessaire, tenter de logger tout paquet igmp sans spécifier de source pour voir ce que ça donne dans "/var/log/syslog".
  246. # iptables -A INPUT -p igmp -j LOG --log-level info --log-prefix "IGMP: "
  247. # L'IGMP est un protocole standard utilisé par la suite de protocoles TCP/IP pour la multidiffusion dynamique, le multicast.
  248. -A INPUT -p igmp -j DROP
  249. -A FORWARD -p igmp -j DROP
  250. -A OUTPUT -p igmp -j DROP
  251. # Reçevoir des annonces SAP de session multicast :
  252. # L'adresse IP doit sûrement être celle de votre serveur finissant par 254.
  253. # Si je ne configure rien, les dernières lignes du script Iptables devraient rejeter ce genre de requêtes.
  254. # -A INPUT -p udp -d 224.2.127.254 --dport 9875 -j ACCEPT
  255.  
  256. # DROP des scans XMAS et NULL :
  257. # Vérifier la nécessite.
  258. -A INPUT -p tcp --tcp-flags FIN,URG,PSH FIN,URG,PSH -j DROP
  259. -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
  260. -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
  261. -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
  262.  
  263. # DROP silencieusement les paquets broadcastés.
  264. # Vérifier la nécessite.
  265. -A INPUT -m pkttype --pkt-type broadcast -j DROP
  266.  
  267. ###
  268. # LOG
  269. ###
  270. # On log les paquets en entrée.
  271. -A INPUT -j LOG
  272. # On log les paquets forward.
  273. -A FORWARD -j LOG
  274.  
  275. # Fermer tous les ports pour les connexions entrantes.
  276. # REJECT les paquets est plus propre mais DROP est plus sécurisé !
  277. # Avec DROP, si un paquet arrive et n'est pas accepté, on l'efface. Le client attendra de son côté une réponse en vain, jusqu'au timeout.
  278. # Avec REJECT, si un paquet non sollicité arrive, on renvoie au client une erreur et il n'attend plus car il a une réponse négative.
  279. # En cas d'envoi de paquets à répétition sur un mauvais port, avec DROP le serveur ne traitera pas les requêtes, alors qu'avec REJECT le serveur prendra le temps de répondre.
  280. # -A INPUT -j DROP
  281. # Interdire toutes les autres connexions entrantes et sortantes.
  282. # Les connexions entrantes seront bloquées par défaut.
  283. -P INPUT -j DROP
  284. # Les connexions destinées à être forwardées seront bloquées par défaut.
  285. -P FORWARD -j DROP
  286. # Les connexions sortantes seront bloquées par défaut.
  287. -P OUTPUT -j DROP
  288.  
  289. COMMIT
  290. # Fin de la règle.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement