본문 바로가기

Node.js

Node.js를 사용하여 Bastion Server (배스천 서버)를 통한 연결

오늘날의 상호 연결된 세계에서는 민감한 데이터를 보호하는 것이 무엇보다 중요합니다.

기업의 경우 데이터베이스에 안전하게 액세스하려면 보호된 네트워크에 대한 게이트웨이 역할을 하는 전용 호스트인 배스천 서버를 통과해야 하는 경우가 많습니다.

배스천 호스트는 내부 네트웍과 외부 네트웍 사이에 위치하는 게이트웨이로, 보안대책의 일환으로 사용되어, 내부 네트웍을 겨냥한 공격에 대해 방어하도록 설계되었다

 

Node.js를 사용하여 배스천 서버를 통해 MySQL 데이터베이스에 대한 보안 연결을 설정하는 방법을 살펴보겠습니다.

SSH 터널링을 활용하여 데이터베이스 상호 작용이 기밀로 유지되고 보호되도록 보장합니다.

 

사전 작업

  • 로컬 컴퓨터에 Node.js 설치
  • MySQL 데이터베이스 및 배스천 서버에 대한 자격 증명에 액세스
  • tunnel-ssh 및 mysql Node.js 패키지.

 

SSH 터널링을 사용하여 단계 설정

우리의 접근 방식은 신뢰할 수 없는 네트워크를 통해 두 지점 사이에 보안 연결을 설정하는 기술인 SSH 터널링에 달려 있습니다.

tunnel-ssh 라이브러리는 Node.js에서 이 프로세스를 단순화합니다. 먼저 필요한 패키지를 설치해 보겠습니다.

npm install tunnel-ssh mysql

 

 

Node.js 스크립트 만들기

이제 배스천 서버에 대한 SSH 터널을 조정하고 MySQL 데이터베이스에 원활하게 연결하는 Node.js 스크립트를 구성해 보겠습니다.

const tunnel = require('tunnel-ssh');
const mysql = require('mysql');

// Bastion server configuration
const bastionConfig = {
  host: 'your-bastion-server-ip',
  username: 'your-ssh-username',
  privateKey: require('fs').readFileSync('/path/to/your/private-key.pem')
};

// MySQL database configuration
const mysqlConfig = {
  host: 'your-database-hostname',
  user: 'your-database-username',
  password: 'your-database-password',
  database: 'your-database-name'
};

// SSH tunnel configuration
const tunnelConfig = {
  host: 'your-database-hostname',
  port: 22,
  username: 'your-ssh-username',
  privateKey: require('fs').readFileSync('/path/to/your/private-key.pem'),
  dstHost: '127.0.0.1',
  dstPort: 3306,
  localHost: '127.0.0.1',
  localPort: 3306
};

// Establish SSH tunnel
tunnel(tunnelConfig, (error, server) => {
  if (error) {
    console.error('Error creating SSH tunnel:', error);
    return;
  }

  // Create MySQL connection
  const connection = mysql.createConnection(mysqlConfig);

  // Connect to MySQL database
  connection.connect((err) => {
    if (err) {
      console.error('Error connecting to MySQL:', err);
      return;
    }

    console.log('Connected to MySQL through SSH tunnel');

    // Perform database operations here...

    // Close the MySQL connection and SSH tunnel when done
    connection.end();
    server.close();
  });
});

 

 

Connection 정보를 실제 서버 정보로 바꾸고 인증을 위한 개인 키 파일(private-key.pem)이 있는지 확인하세요.

Node.js를 사용하여 배스천 서버를 통해 MySQL 연결을 보호하는 것은 데이터 인프라의 견고성을 향상시키는 데 중요한 단계입니다. SSH 터널링을 사용하면 잠재적으로 보안되지 않은 네트워크를 통과하는 경우에도 데이터베이스 상호 작용이 기밀로 보호됩니다.

 

 

'Node.js' 카테고리의 다른 글

Node.js 개발을 위한 필수 도구 Nodemon  (0) 2024.03.12
Node.js에서 dotenv 모듈을 활용한 환경 변수 관리  (0) 2024.03.06
JavaScript 클로저  (0) 2023.07.08
JavaScript의 즉시 실행 함수(IIFE)  (0) 2023.05.22
PM2  (0) 2023.05.01