JavaScript&TypeScript

Node.js로 특정 IP 접근 허용/차단

hjkang

특정 IP로만 접근을 허용하거나 차단해야 하는 경우가 있다.

Node.js와 Express.js 환경에서 어떻게 하는지 알아보자.

 

 

특정 IP 설정

const ips = ['127.0.0.1','127.0.0.2'];

 

접근 허용

const allowIPs = (ips) => {
  return (req, res, next) => {
    const clientIP = req.headers['x-forwarded-for'] || req.socket.remoteAddress;

    if (ips.includes(clientIP)) {
      next();
    } else {
      res.status(403).send('접근 차단');
    }
  };
};

app.use(allowIPs(ips));

 

접근 차단

const blockIPs = (ips) => {
  return (req, res, next) => {
    const clientIP = req.headers['x-forwarded-for'] || req.socket.remoteAddress;

    if (ips.includes(clientIP)) {
      res.status(403).send('접근 차단');
    } else {
      next();
    }
  };
};

app.use(blockIPs(ips));

 

 

req.headers['x-forwarded-for']

  • 프록시나 로드밸런서를 통해 들어온 요청에서 클라이언트의 IP 주소를 확인하기 위한 헤더 값
  • 쉼표로 구분된 IP 주소 목록이며, 첫 번째 IP 주소가 클라이언트의 실제 IP 주소

 

req.socket.remoteAddress

  • Node.js 속성을 통해 접속한 클라이언트의 IP 주소

 

 

 


참고

- https://medium.com/zigbang/node-js%EC%99%80-express%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-ip-%ED%99%94%EC%9D%B4%ED%8A%B8%EB%A6%AC%EC%8A%A4%ED%8A%B8-ip-%EB%B8%94%EB%9E%99%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0-32d810e6e4a7