journalctl 로 실시간 로그를 살펴보면 무작위 비밀번호 대입을 통해 해킹을 시도하는것을 볼 수 있다.
journalctl -f
8월 08 11:19:05 mysite.com mysqld[1255]: 2023-08-08 11:19:05 14129329 [Warning] Access denied for user 'root'@'212.194.138.136' (using password: YES)
8월 08 11:19:06 mysite.com mysqld[1255]: 2023-08-08 11:19:06 14129333 [Warning] Access denied for user 'root'@'212.194.138.136' (using password: YES)
8월 08 11:19:07 mysite.com mysqld[1255]: 2023-08-08 11:19:07 14129335 [Warning] Access denied for user 'admin'@'212.194.138.136' (using password: YES)
8월 08 11:19:07 mysite.com mysqld[1255]: 2023-08-08 11:19:07 14129342 [Warning] Access denied for user 'root'@'212.194.138.136' (using password: YES)
8월 08 11:19:08 mysite.com mysqld[1255]: 2023-08-08 11:19:08 14129349 [Warning] Access denied for user 'root'@'212.194.138.136' (using password: YES)
8월 08 11:19:09 mysite.com mysqld[1255]: 2023-08-08 11:19:09 14129353 [Warning] Access denied for user 'root'@'212.194.138.136' (using password: YES)
8월 08 11:19:10 mysite.com mysqld[1255]: 2023-08-08 11:19:10 14129363 [Warning] Access denied for user 'root'@'212.194.138.136' (using password: YES)
8월 08 11:19:11 mysite.com mysqld[1255]: 2023-08-08 11:19:11 14129364 [Warning] Access denied for user 'root'@'212.194.138.136' (using password: YES)
8월 08 11:19:11 mysite.com mysqld[1255]: 2023-08-08 11:19:11 14129366 [Warning] Access denied for user 'root'@'212.194.138.136' (using password: YES)
8월 08 11:19:12 mysite.com mysqld[1255]: 2023-08-08 11:19:12 14129369 [Warning] Access denied for user 'root'@'212.194.138.136' (using password: YES)
8월 08 11:19:13 mysite.com mysqld[1255]: 2023-08-08 11:19:13 14129376 [Warning] Access denied for user 'root'@'212.194.138.136' (using password: YES)
8월 08 11:19:14 mysite.com mysqld[1255]: 2023-08-08 11:19:14 14129377 [Warning] Access denied for user 'root'@'212.194.138.136' (using password: YES)
8월 08 11:19:15 mysite.com mysqld[1255]: 2023-08-08 11:19:15 14129378 [Warning] Access denied for user 'root'@'212.194.138.136' (using password: NO)
8월 08 11:19:15 mysite.com mysqld[1255]: 2023-08-08 11:19:15 14129392 [Warning] Access denied for user 'root'@'212.194.138.136' (using password: YES)
8월 08 11:19:16 mysite.com mysqld[1255]: 2023-08-08 11:19:16 14129397 [Warning] Access denied for user 'admin'@'212.194.138.136' (using password: YES)
8월 08 11:19:17 mysite.com mysqld[1255]: 2023-08-08 11:19:17 14129404 [Warning] Access denied for user 'eth'@'212.194.138.136' (using password: YES)
8월 08 11:19:18 mysite.com mysqld[1255]: 2023-08-08 11:19:18 14129408 [Warning] Access denied for user 'root'@'212.194.138.136' (using password: YES)
8월 08 11:19:19 mysite.com mysqld[1255]: 2023-08-08 11:19:19 14129411 [Warning] Access denied for user 'root'@'212.194.138.136' (using password: YES)
일반적인 보안조치로는
MySQL 서버에 대한 무작위 접속 시도로부터 시스템을 보호하기 위해 몇 가지 보안 조치를 취할 수 있습니다.
-
방화벽 설정: 서버에 방화벽을 구성하여 특정 IP 주소나 IP 대역 외의 접근을 차단합니다. 이를 통해 무단 접속 시도를 제한할 수 있습니다.
-
접속 시도 제한: MySQL 서버에 대한 접속 시도를 제한하거나 차단하는 기능을 사용할 수 있습니다. 예를 들어, fail2ban과 같은 도구를 사용하여 여러 번 실패한 접속 시도를 탐지하고 해당 IP 주소를 임시적으로 차단하는 방법이 있습니다.
-
강력한 암호화: MySQL 사용자 계정에 강력한 암호를 설정하여 무단 접속을 어렵게 만듭니다. 암호는 임의로 생성되고 복잡성을 갖도록 설정하는 것이 중요합니다.
-
최신 버전 및 보안 업데이트: MySQL 서버를 최신 버전으로 업데이트하고 보안 패치를 적용하여 알려진 취약점으로부터 시스템을 보호합니다.
-
SSH 터널링 사용: MySQL 서버 접속을 위해 SSH 터널링을 사용하면 암호화된 연결을 통해 보다 안전하게 접속할 수 있습니다.
-
불필요한 서비스 비활성화: MySQL 서버 외에도 불필요한 서비스를 비활성화하여 시스템의 노출을 최소화합니다.
-
로그 분석: 정기적으로 로그를 확인하고 이상 접속을 탐지하여 조치를 취합니다.
적극적인 대응 방법으로는
- 방화벽 설정: 해당 IP 주소인 '212.194.138.136'로부터의 접속을 방화벽을 통해 차단합니다. 예를 들어, iptables를 사용하여 다음과 같이 입력합니다.
sudo iptables -A INPUT -s 212.194.138.136 -j DROP
이렇게 하면 해당 IP 주소에서 들어오는 모든 트래픽이 차단됩니다. 하지만 IP 주소가 동적으로 바뀔 수 있으므로 이 방법은 임시적인 방법입니다.
-
MySQL 사용자 계정 보안 강화: 'root' 사용자 계정의 암호를 강력하게 설정하고, 다른 사용자에게 필요한 권한만 부여하여 접속을 제한할 수 있습니다.
-
로그인 실패 횟수 제한: fail2ban과 같은 도구를 사용하여 일정 횟수 이상의 로그인 실패 시도를 탐지하고 해당 IP 주소를 일시적으로 차단합니다.
-
SSH 터널링 사용: MySQL 서버에 접속하기 위해 SSH 터널링을 사용하면 MySQL 포트를 외부에 노출시키지 않고도 안전하게 접속할 수 있습니다.
이중 fail2ban 설치 및 사용법을 CentOS 기준으로 정리해보면
- fail2ban 설치:
sudo yum install epel-release # EPEL 저장소 설치 (이미 설치되어 있을 수 있습니다)
sudo yum install fail2ban # fail2ban 패키지 설치
- fail2ban 시작:
sudo systemctl start fail2ban # fail2ban 서비스 시작
sudo systemctl enable fail2ban # 부팅 시 자동으로 fail2ban 서비스 시작
- 설정 파일 확인 및 수정:
sudo vi /etc/fail2ban/jail.local # 설정 파일 편집. jail.local 파일이 없을 경우 jail.conf 파일을 복사하여 생성해도 됩니다.
fail2ban의 설정은 jail.conf 파일 또는 jail.local 파일에서 관리됩니다. jail.local 파일을 사용하면 원하는 설정을 쉽게 오버라이드할 수 있습니다. 예를 들어, SSH 서비스의 설정을 변경하려면 jail.local 파일에 다음과 같이 추가할 수 있습니다:
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
maxretry = 3
위 설정에서는 SSH 서비스(ssh)에 대해 로그 파일의 경로(%(sshd_log)s)를 감시하고, 3회 이상 로그인 실패 시도가 있으면 해당 IP 주소를 차단하도록 설정합니다.
- fail2ban 재시작:
sudo systemctl restart fail2ban # fail2ban 서비스 재시작하여 설정 적용
- 상태 확인:
sudo fail2ban-client status # fail2ban의 상태를 확인합니다.
위의 단계를 따라하면 CentOS에서 fail2ban이 설치되고 설정되어 다수의 실패한 로그인 시도를 감지하여 해당 IP 주소를 차단하도록 동작하게 됩니다.