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

Mis à jour le dimanche 1 août 2021 par johackim

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;