Bloquer les adresse IPs d'un réseau externe avec expressjs

Mis à jour le

Je dispose d'un serveur nodejs avec express et j'ai besoin d'autoriser l'accès à une route uniquement aux adresses IP de mon réseau interne.

Pour ça, j'utilise une librairie : express-ipfilter :

// index.js

import express from 'express';
import { IpFilter, IpDeniedError } from 'express-ipfilter';

const app = express();

const clientIp = (req) => {
    return req.headers['x-forwarded-for'] ? (req.headers['x-forwarded-for']).split(',')[0] : req.socket.remoteAddress;
};

const ips = ['172.17.0.0/16', '10.10.0.0/16', '127.0.0.1', '::1'];

app.use(IpFilter(ips, { mode: 'allow', detectIp: clientIp }));

app.use((err, req, res, next) => {
    if (err instanceof IpDeniedError) {
        res.status(401);
        return res.end('You shall not pass');
    }

    return next();
});

app.get('/', async (req, res) => {
    res.end('Secure route');
});

export default app;

©2017-2021