[카테고리:] 미분류

  • 우분투 서버 MySQL/MariaDB 보안 강화하기: 3306 포트 보안 설정 가이드

    데이터베이스 서버는 웹 애플리케이션의 핵심 구성 요소로, 워드프레스와 같은 CMS 시스템에서는 특히 중요한 역할을 합니다. 그러나 이러한 데이터베이스 서버가 외부에 노출될 경우 심각한 보안 위협이 될 수 있습니다. 이번 포스팅에서는 워드프레스를 운영하는 우분투 서버에서 MySQL/MariaDB의 3306 포트를 안전하게 보호하는 방법에 대해 상세히 알아보겠습니다.

    데이터베이스 포트 노출의 위험성

    MySQL 또는 MariaDB의 기본 포트인 3306이 외부에 노출되면 다음과 같은 보안 위협에 직면할 수 있습니다:

    1. 무차별 대입 공격(Brute Force Attack): 해커가 다양한 비밀번호 조합을 시도하여 데이터베이스에 접근할 수 있습니다.
    2. 취약점 공격: 알려진 MySQL/MariaDB 취약점을 이용한 공격이 가능합니다.
    3. 데이터 유출: 인증 정보가 탈취되면 중요한 사용자 정보와 사이트 데이터가 유출될 수 있습니다.
    4. 서비스 거부 공격(DoS): 데이터베이스 서버에 대한 연결 요청을 과도하게 발생시켜 서비스를 마비시킬 수 있습니다.

    데이터베이스 포트 보안 상태 확인하기

    우분투 서버에서 데이터베이스의 현재 바인딩 상태와 포트 개방 여부를 확인하는 방법은 다음과 같습니다:

    1. 현재 리스닝 중인 포트 확인

    sudo netstat -tulpn | grep 3306
    

    또는

    sudo ss -tulpn | grep 3306
    

    이 명령어는 다음과 같은 결과를 보여줍니다:

    tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      785404/mariadbd
    

    위 결과는 MariaDB가 로컬호스트(127.0.0.1)에만 바인딩되어 있음을 의미합니다. 이는 서버 내부에서만 접근이 가능하고 외부에서는 접근할 수 없는 안전한 상태입니다.

    만약 결과가 다음과 같다면 주의가 필요합니다:

    tcp        0      0 0.0.0.0:3306          0.0.0.0:*               LISTEN      785404/mariadbd
    

    이는 MariaDB가 모든 네트워크 인터페이스(0.0.0.0)에 바인딩되어 있어 외부에서도 접근 가능한 상태입니다.

    2. 데이터베이스 설정 파일 확인

    MySQL의 경우:

    sudo cat /etc/mysql/mysql.conf.d/mysqld.cnf | grep bind-address
    

    MariaDB의 경우:

    sudo cat /etc/mysql/mariadb.conf.d/50-server.cnf | grep bind-address
    

    결과:

    bind-address            = 127.0.0.1
    

    이는 데이터베이스가 로컬호스트에만 바인딩되도록 설정되어 있음을 의미합니다.

    데이터베이스 포트 보안 강화하기

    데이터베이스 포트 보안을 강화하는 방법은 크게 두 가지 접근법이 있습니다:

    1. 데이터베이스 바인딩 주소 제한

    MariaDB/MySQL 설정 파일을 편집하여 바인딩 주소를 로컬호스트로 제한합니다:

    sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
    

    다음 설정을 찾아 수정하거나 추가합니다:

    bind-address = 127.0.0.1
    

    이후 데이터베이스를 재시작합니다:

    sudo systemctl restart mysql
    

    또는

    sudo systemctl restart mariadb
    

    2. 방화벽을 통한 추가 보호

    우분투의 UFW(Uncomplicated Firewall)를 사용하여 추가적인 보안 레이어를 구성합니다:

    # UFW 상태 확인
    sudo ufw status
    
    # UFW 활성화(비활성화된 경우)
    sudo ufw enable
    
    # 3306 포트에 대한 외부 접근 차단
    sudo ufw deny 3306
    

    외부 접근 테스트

    설정이 제대로 적용되었는지 확인하기 위해 외부에서 nmap과 같은 도구를 사용하여 포트 스캔을 수행합니다:

    nmap -p 3306 your_server_ip
    

    결과가 “filtered” 또는 “closed”로 표시되면 포트가 외부에서 접근할 수 없음을 의미합니다.

    워드프레스와의 호환성

    워드프레스는 일반적으로 같은 서버에서 실행되는 데이터베이스에 접근하기 때문에, 데이터베이스를 로컬호스트에만 바인딩해도 정상적으로 작동합니다. wp-config.php 파일에서 데이터베이스 호스트를 다음과 같이 설정하는 것이 중요합니다:

    define( 'DB_HOST', 'localhost' );
    

    또는

    define( 'DB_HOST', '127.0.0.1' );
    

    고급 설정: 원격 접근이 필요한 경우

    특별한 경우 원격에서 데이터베이스에 안전하게 접근해야 한다면 다음 방법을 고려할 수 있습니다:

    1. SSH 터널링: 3306 포트를 직접 개방하는 대신 SSH 터널을 통해 안전하게 접근합니다. ssh -L 3306:127.0.0.1:3306 user@your_server_ip
    2. 특정 IP 허용: 방화벽에서 특정 IP만 3306 포트에 접근할 수 있도록 설정합니다. sudo ufw allow from trusted_ip_address to any port 3306
    3. VPN 사용: VPN을 구성하여 안전한 네트워크 내에서만 데이터베이스에 접근합니다.

    결론

    데이터베이스 보안은 워드프레스 사이트의 전체 보안에서 매우 중요한 부분입니다. 기본적으로 MySQL/MariaDB의 3306 포트는 외부에 노출되지 않도록 설정하는 것이 중요합니다. 이 글에서 설명한 두 가지 방법(바인딩 주소 제한 및 방화벽 설정)을 모두 적용하여 이중 보안을 구축하는 것을 권장합니다.

    이러한 설정을 통해 데이터베이스가 외부 위협으로부터 안전하게 보호됨과 동시에 워드프레스 사이트는 정상적으로 작동하게 됩니다. 정기적인 보안 점검과 업데이트는 장기적인 시스템 안정성을 위해 필수적임을 잊지 마세요.

    참고 사항

    • 서버 환경에 따라 설정 파일의 경로가 다를 수 있으니 주의하세요.
    • 데이터베이스 보안은 전체 시스템 보안의 일부일 뿐이므로, 워드프레스 자체의 보안 설정도 함께 관리해야 합니다.
    • 정기적인 백업은 데이터 손실 방지를 위한 핵심 보안 관행입니다.