
내 로컬 서브넷의 사용자가 내 MySQL 서버에 로그인하도록 허용하려고 합니다.
서버가 Ubuntu 23.10 및 MySql 버전 0.0.35-0ubuntu0.213.10.1을 실행 중입니다.
클라이언트는 macos Sonoma 14.2.1이 설치된 iMac 2대와 Windows 11 PC입니다.
우분투 서버는 내 로컬 서브넷(192.168.1.0)에 있지만 공용 고정 IP 주소를 통해서도 사용할 수 있습니다. 모든 클라이언트는 MYSQL Workbench 8.0을 사용하고 있습니다.
방화벽을 통해 서버에 대한 공개 액세스(HTTP 제외)를 차단했습니다. 하지만 내 문제는 내 로컬 클라이언트에게 MySQL 서버에 대한 액세스 권한을 부여하는 것입니다.
수정했습니다/etc/mysql/mysql.conf.d/mysqld.cnfbind-address = 127.00.0.1 to 0.0.0.0
Mysqld가 모든 서브넷에서 수신 대기하도록 변경되었습니다 . 그러나 이것은 매우 안전해 보이지만 실제로 작동합니다.
사용해 보았지만 bind-address = 192.168.1.xxx, 192.168.1.yyy, 192.1658.1.zzz
MySQL 서비스를 다시 시작하려고 하면 오류 메시지가 나타납니다.
**Job for mysql.service failed because the control process exited with error code.**
**See "systemctl status mysql.service" and "journalctl -xeu mysql.service" for details** With an exit code of 1.
또한 시도해 보았 bind-address = 192.168.1.0
으나 동일한 오류 메시지가 나타납니다. 바인드 주소를 내 로컬 서브넷 또는 세 명의 클라이언트로만 제한하는 방법에 대한 조언을 주시면 감사하겠습니다.
답변1
바인딩은 생각한 대로 작동하지 않습니다.
그것은 말한다어느바인딩할 네트워크 인터페이스입니다. 이는 머신에 구성된 네트워크 인터페이스여야 합니다.
0.0.0.0은 본질적으로 다음과 같은 특별한 경우입니다.모두사용 가능한 인터페이스.
어떤 방식으로든 트래픽을 제한하지 않으며 모든 IP가 수신 중인 인터페이스에서 트래픽에 연결할 수 있습니다. 트래픽을 제한하려면 방화벽을 사용하십시오.
따라서 귀하의 시나리오에서는 0.0.0.0에 바인딩하는 것이 좋습니다. 하나만 있는 경우 특정 인터페이스에 바인딩하는 것과 다르지 않습니다.
답변2
HAproxy "버퍼"를 추가한 비슷한 상황이 있습니다. 이것이 당신에게 효과가 있을지는 말할 수 없지만 효과가 있을 것입니다.
mysqld와 동일한 호스트에 HAproxy를 추가하고 포트 33061(기본 3306 대신)의 HAproxy에 리스너를 생성했습니다.
ss -antlp;
#LISTEN 0 128 <PUBLIC_IP>:33061 0.0.0.0:* users:(("haproxy",pid=32645,fd=12))
구성은 이렇습니다..
listen mysql
bind <PUBLIC_IP>:33061
mode tcp
option tcplog
acl mysql_ip_OK src -f /etc/haproxy/whitelist.IPs
tcp-request connection reject if !mysql_ip_OK
server mysql1 127.0.0.1:3306
"필터"는 다음과 같습니다 ...
cat <<EOF> /etc/haproxy/whitelist.IPs`
192.168.1.xxx
192.168.1.yyy
192.168.1.zzz
EOF
/etc/haproxy/whitelist.IPs에 구체적으로 나열되지 않은 경우 모든 연결 시도는 이론적으로 차단됩니다. 그런 다음 클라이언트는 <PUBLIC_IP>:3306 대신 <PUBLIC_IP>:33061에 연결하고 추가 보안을 얻습니다.