Dans le monde moderne de la technologie Internet, l’importance d’assurer la sécurité des applications web et des serveurs ne peut être surestimée car la fréquence et la sophistication des cyber-attaques ne cessent d’augmenter. C’est pourquoi il est de plus en plus nécessaire de mettre en place des mesures de sécurité robustes et de pointe pour les systèmes basés sur le web.
La liste blanche d’adresses IP est l’une des nombreuses techniques modernes de sécurisation des applications web, des serveurs et des API. Bien qu’elle ne soit utilisée que dans certains cas spécifiques, il s’agit d’une méthode recommandée pour garantir la restriction de l’accès aux ressources sur l’internet en cas de besoin.
Qu’est-ce que l’IP Whitelisting ?
Le whitelisting IP est simplement un type de whitelisting qui peut être considéré comme une mesure de sécurité web utilisée pour restreindre l’accès à un réseau ou à une ressource à une adresse IP définie ou à une plage d’adresses IP considérées comme autorisées à accéder au système.
Lorsque la liste blanche des adresses IP est mise en œuvre dans un système, seules les adresses IP ajoutées à la liste blanche peuvent accéder au système et à ses ressources, tandis que les autres adresses IP sont bloquées.
La liste blanche d’adresses IP est un moyen très courant de sécuriser des données très importantes qui ne doivent être accessibles qu’à une seule personne ou à un ensemble donné de personnes, et qui doivent être protégées contre toute tentative de piratage.
Un exemple courant de liste blanche d’adresses IP se trouve dans MongoDB Atlas, où vous configurez un cluster de base de données Mongo dans le nuage et où vous êtes invité à ajouter votre adresse IP actuelle à une liste afin que les requêtes vers votre base de données ou votre cluster ne soient autorisées que si elles proviennent de votre ordinateur.
Quand faut-il mettre en place une liste blanche d’adresses IP ?
La liste blanche d’adresses IP n’est pas nécessaire pour tous les systèmes ou toutes les applications. Dans certains cas, il est recommandé et approprié de l’implémenter dans une application ou un système. Voici quelques exemples de scénarios dans lesquels vous devriez envisager de mettre en place une liste blanche d’adresses IP.
- Lorsque l’application n’est destinée qu’à un groupe spécifique d’utilisateurs, tels que les employés ou les clients d’une entreprise particulière.
- Lorsque vous souhaitez que l’application ne soit accessible qu’à partir d’un lieu spécifique, vous pouvez mettre sur liste blanche une série d’adresses IP spécifiques à ce lieu.
- Lorsque l’application est utilisée pour donner accès à des informations confidentielles ou à la propriété intellectuelle, telles qu’une base de données de recherche ou un logiciel propriétaire.
- Lorsque l’application est privée mais accessible sur l’internet et doit être protégée contre les menaces extérieures, telles que les attaques DDoS ou les infections par des logiciels malveillants.
- Lorsque l’application est hébergée sur une plateforme de cloud public et qu’elle doit être protégée contre les accès non autorisés d’autres locataires ou utilisateurs de la plateforme.
- Lorsque l’application est utilisée dans un secteur réglementé, tel que la santé ou la finance, où la conformité aux normes de sécurité est requise.
Il existe de nombreux autres cas, mais fondamentalement, chaque fois qu’une application présente l’une des propriétés mentionnées ci-dessus, vous devez envisager de mettre en œuvre une liste blanche d’adresses IP.
Comment implémenter une liste blanche d’adresses IP en Go
Go est un langage de programmation moderne et populaire pour la construction de serveurs web et d’APIs. Il contient tout ce dont vous avez besoin pour construire une application web standard et sécurisée.
Cette section démontre l’utilisation du framework Gin de Go pour implémenter l’exemple de serveur et la logique de liste blanche d’IP qui est une fonction middleware. Vous pouvez installer le framework Gin dans un projet en exécutant la commande suivante.
go get github.com/gin-gonic/gin
Après avoir installé le framework Gin, vous pouvez maintenant passer à l’implémentation de l’intergiciel de liste blanche d’adresses IP. Vous pouvez créer un nouveau fichier middleware n’importe où dans votre projet, en fonction de son architecture. Voici l’implémentation de la fonction middleware :
package middlewares
import (
"github.com/gin-gonic/gin"
"net/http"
)
func IPWhiteListMiddleware(whitelist map[string]bool) gin.HandlerFunc {
return func(c *gin.Context) {
userIP := c.ClientIP()
if !whitelist[userIP] {
c.AbortWithStatusJSON(http.StatusForbidden, gin.H{
"error": "You are not authorized to access this resource!",
})
} else {
c.Next()
}
}
}
Dans le code ci-dessus, la fonction IPWhiteListMiddleware La fonction IPWhiteListMiddleware est définie pour accepter une liste blanche d’adresses IP définie comme argument. La liste blanche est implémentée sous la forme d’une structure de données de type carte, de sorte que les adresses IP peuvent facilement se voir attribuer des valeurs de vrai et faux pour indiquer leur accessibilité.
La fonction utilise ensuite la fonction ClientIP pour obtenir l’adresse IP actuelle de l’utilisateur qui tente de faire la requête, et vérifie si elle est présente dans la liste blanche et avec une adresse vrai valeur. S’il n’est pas trouvé, ou s’il a une valeur de fauxl’intergiciel abandonne la demande et renvoie une erreur 403 (Forbidden).
Un exemple de point de terminaison pour tester cette fonctionnalité peut être mis en œuvre pour voir comment fonctionne la liste blanche d’adresses IP. Le code suivant est un programme qui définit une liste blanche et met en œuvre deux points de terminaison (un restreint et un non restreint).
package main
import (
"github.com/gin-gonic/gin"
"go-ip-whitelist/middlewares"
"net/http"
)
var IPWhitelist = map[string]bool{
"127.0.0.1": true,
"111.2.3.4": true,
"::1": true,
}
func main() {
router := gin.Default()
router.GET("/index", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "Welcome to my secure application!",
})
})
restrictedPage := router.Group("https://www.makeuseof.com/")
restrictedPage.Use(middlewares.IPWhiteListMiddleware(IPWhitelist))
restrictedPage.GET("/adminZone", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "This endpoint is secured with IP whitelisting!",
})
})
router.Run(":3333")
}
Lorsque l’application est exécutée avec go run main.gole serveur démarre sur le port 3333, et vous pouvez exécuter des requêtes de test sur le serveur /adminZone pour voir comment fonctionne l’intergiciel. Vous pouvez également basculer la valeur de l’IP localhost dans la liste blanche entre vrai et faux.
Voici un exemple de requête qui montre que l’adresse IP n’est pas sur liste blanche ou que sa valeur dans la liste blanche est fixée à faux:
Voici une autre demande pour le cas où l’adresse IP est présente dans la liste blanche des adresses IP avec sa valeur fixée à vrai:
Vous risquez d’obtenir une réponse d’erreur 403 (Forbidden) si vous testez le programme en plaçant l’adresse IP générique localhost (127.0.0.1) sur liste blanche. L’adresse IP la plus susceptible de fonctionner localement est la suivante ::1 qui est l’équivalent IPv6 de 127.0.0.1 (Ipv4). Essayez la liste blanche ::1 si 127.0.0.1 ne fonctionne pas, et vous pouvez également essayer d’enregistrer le fichier userIP dans la console pour voir l’adresse exacte utilisée.
Sécuriser les applications Web avec la liste blanche d’adresses IP
Dans le monde d’aujourd’hui, la sécurité des applications et des systèmes web est de la plus haute importance, car la technologie ne cesse de progresser. La liste blanche d’adresses IP est un moyen très simple et efficace de restreindre l’accès aux ressources sur Internet aux seules sources de confiance.
Jusqu’à présent dans cet article, le concept de liste blanche d’adresses IP a été couvert en détail, quand l’implémenter, et comment l’implémenter dans Go en utilisant le framework Gin. Il est recommandé de ne mettre en œuvre la liste blanche d’adresses IP que lorsque cela est nécessaire afin d’éviter des coûts techniques inutiles.
