리눅스 서버 보안/데이터베이스 보안

데이터베이스 네트워크 보안 설정

seungwon9201 2024. 8. 5. 16:23

데이터베이스는 사용자 다수가 외부에서 접근하는 서비스로 네트워크 보안이 가장 중요하다. 만약 데이터베이스에 누구나 접속이 가능하다면 서비스 거부 공격이나 SQL Injection 같은 해킹 공격에 취약해질 수밖에 없다. 이번 실습에서는 방화벽 설정을 통해서 데이터베이스를 사용하는 특정 포트만 네트워크에 접근하게 하고, 원격 접속을 제한하여 네트워크 보안을 강화해 볼 것이다.

 


데이터베이스의 네트워크 방화벽 설정

MariaDB와 Mysql은 주로 TCP 3306번 포트로 통신을 한다. 외부 사용자가 데이터베이스에 접근하도록 하려면 해당 포트의 방화벽을 허용해야 한다. 

그러나 이렇게 모든 사용자가 접근하도록 방화벽 정책을 사용한다면 해킹공격에 매우 취약해진다. 보안을 강화하기 위해서 데이터베이스를 사용하는 서버만 해당 데이터베이스에 접근이 가능하도록 특정 IP에 대한 방화벽을 허용해야 한다.

 

특정 IP에 대한 방화벽 허용 명령어는 아래와 같다.

sudo ufw allow from [소스 IP 대역] to any port [포트 번호] proto [프로토콜]

이런 명령어를 사용하게 되면 해당 프로토콜과 포트번호를 사용하는 IP 대역만 해당 데이터베이스에 접근이 가능하다!

 

하지만 데이터베이스 관리자가 불필요하게 많은 권한을 갖고 있거나 허락되지 않은 관리자가 데이터베이스에 접근하게 된다면 데이터가 쉽게 유출될 가능성이 있다. 그래서 이번엔 이것을 방지하기 위해서 사용자 및 네트워크 접근 권한을 설정해 볼 것이다.

 

MariaDB관리 콘솔에 들어가서 mysql.user 테이블의 정보를 확인하자.

데이터베이스의 보안을 강화하려면 데이터베이스의 접근할 수 있는 사용자의 접근 권한을 최소로 설정해야 한다.

그렇기 위해서 아래와 같이 명령어를 입력해 주면 된다. 

GRANT ALL PRIVILEGES ON *.* TO '아이디'@'네트워크 주소' IDENTIFIED BY '비밀번호'

필자는 이름 test와 패스워드 test로 생성했다. 이제 설정 값을 적용하고 사용자권한을 조회해 보자.

이렇게 데이터베이스를 관리할 때 최소한의 사용자에게 권한을 부여해서 네트워크를 통한 접속 시도를 줄일 수 있다.