외부 mysql 로그인 시도 차단

외부 mysql 로그인 시도 차단

Mysql 데이터베이스에 대한 외부 로그인을 어떻게 방지합니까?

즉, 내 데이터베이스를 조작할 수 있는지 확인하는 유일한 방법은 SSH를 사용하여 내 컴퓨터에 로그인하고 루트/sudoer로 작업하는 것입니다.

내 기계는우분투 서버조치, HTTPS를 사용할 때 사람들이 포트 80 또는 443에서 로그인을 시도할 수 없도록 PHPmyadmin을 제거했습니다. 하지만 사람들은 여전히 ​​유사한 소프트웨어를 사용하여 로그인을 시도할 수 있습니다.MySQL 워크벤치또는 이와 유사한 소프트웨어를 사용하는 경우 이러한 일이 발생하지 않도록 하고 내 OS의 루트 사용자/sudoer만 통과할 수 있도록 데이터베이스를 실제로 잠그고 싶습니다 mysql -u root -p.

명확히 하기 위해 다른 데이터베이스 사용자가 내 시스템이나 외부에서 자신의 비밀번호를 사용하여 로그인할 수 없도록 하고 싶습니다. 이 컴퓨터를 사용하는 사람은 나뿐이지만 루트/sudoer 외에 다른 컴퓨터 사용자가 있더라도 여전히 그들을 원합니다. 는 Mysql에 로그인할 수 있는 방법이 아니며, 머신 외부에서 누구도 로그인할 수 없도록 하고 싶습니다. 즉, 저 외에 다른 사람이 데이터베이스를 운영하는 것을 원하지 않습니다.


3306 외에 추가 포트를 잠가야 할 것 같습니다. 이 올바른지?

다음 목록에서 해당 포트를 제거할 수 있습니다 /etc/csf/csf.conf.

# Allow incoming TCP ports
TCP_IN = "20,21,22,25,53,80,110,143,443,465,587,993,995,9000"

# Allow outgoing TCP ports
TCP_OUT = "20,21,22,25,53,80,110,113,443,587,993,995,9000"

참고: PHP-FPM에 대해 필터링되지 않은 포트 9000이 있습니다.

답변1

mysqld리스너만 루프백하도록 허용

예를 들어 /etc/mysql/my.cnf다음 구성을 추가하거나 변경합니다.

bind-address 127.0.0.1

이렇게 하면 로컬로 실행되는 프로그램만 mysql 데이터베이스에 연결할 수 있습니다.

답변2

MySQL에 대한 외부 액세스를 잠그는 올바른 방법은 아래와 같이 bind-address지시문을 사용하는 것입니다./etc/mysql.cnf데이지로 설명. 유효한 MySQL 계정을 가진 사람이 로컬로 로그인하는 것을 효과적으로 방지할 수는 없습니다(그러나 UNIX 계정은 MySQL 계정을 의미하지 않으며 서로 다릅니다).

귀하의 질문의 다른 부분에 답변하겠습니다.

3306 외에 추가 포트를 잠가야 할 것 같습니다. 이 올바른지?

# Allow incoming TCP ports
TCP_IN = "20,21,22,25,53,80,110,143,443,465,587,993,995,9000"

현재 귀하의 csf.conf파일에는 사용할 가치가 거의 없을 정도로 많은 서비스를 허용하도록 방화벽이 설정되어 있습니다.

  • 20 - FTP 데이터(인터넷을 통해 FTP가 허용되는 이유는 무엇입니까?)
  • 21 - FTP 명령(위와 동일)
  • 22 - SSH(괜찮습니다. 하지만 계정이 단단히 잠겨 있는지 확인하세요. 비활성화하는 것을 고려하세요.모두비공인인증 로그인)
  • 25 - SMTP 인바운드(수신 메일 서버를 실제로 실행하고 있습니까?)
  • 53 - DNS(정말로 공용 DNS를 운영하고 있나요?)
  • 80 - HTTP(웹 서버를 실행하고 있습니까?)
  • 110 - POP3(구식 프로토콜, 메일 서버를 실행 중인 경우 993에서 IMAPS 사용을 고려)
  • 143 - IMAP(보안되지 않음, 993에서는 IMAPS 사용)
  • 443 - HTTPS(웹 서버를 실행하고 있습니까?)
  • 465 - SMTPS(실제로 공용 메일 서버를 실행하고 있습니까?)
  • 587 - SMTP-MSA(위와 동일)
  • 993 - IMAPS(이 서버에서 읽기 위해 메일 메시지를 받은 경우에만)
  • 995 POP3S(안전하지만 여전히 사용되지 않음)
  • 9000 – 누가 알겠어요?

서비스를 제공하지 않으면 허용하지 마십시오. IMAPS를 위해 POP3, IMAP 및 POP3S를 모두 꺼야 합니다(사용 가능한 경우). SMTP*를 요구하는 메일 서버를 실제로 실행하고 있지 않는 한 SMTP*를 제공하지 마십시오.받다인터넷에서 보낸 이메일. FTP를 실행하지 마십시오. 대신 파일 전송에 SSH를 사용하세요.

다른 시스템에서 MySQL Workbench를 사용하려는 경우에도 .net에서 전달자를 실행하여 로컬 연결만 허용하도록 MySQL을 설정할 수 있습니다 ssh. 나는 여러 서버에 대해 이 작업을 수행합니다.

ssh -nf -L localhost:3306:localhost:3306 ADDRESS_OF_REMOTE_SYSTEM sleep 60
# Using Workbench, now connect to MySQL seemingly on the local machine

답변3

roaima는 지금까지 확실히 신뢰할 만한 답변을 갖고 있으므로 ssh를 통해 명령줄에서 MySQL을 실행하는 것에 대해 여러분이 알지 못할 수도 있는 매우 간단한 일련의 사항을 추가하겠습니다.

  1. 가능한 경우 루트 로그인을 비활성화하고 비밀번호 로그인을 비활성화하고 키가 필요하지만 이는 그다지 중요하지 않으며 항상 편리하지는 않을 수 있습니다. 그러나 일단 시스템이 설정되면 가능하면 SSH에 대한 루트 기능 활성화를 피해야 합니다. 꼭 필요한 이유는 없으니 하지 마세요. 팁: 복잡한 임의의 사용자 이름을 사용하면 추측하기가 더 어려워집니다.

  2. 나는 대부분의 사람들이 이것을 깨닫지 못한다고 생각합니다: ssh 쉘에 무언가를 입력하면 그 내용은 쉘 히스토리에 저장되고 히스토리를 실행하여 검색할 수 있습니다. 따라서 명령 실행의 일부로 mysql 비밀번호 행을 사용하면 명령을 실행하거나 mysql에 연결하면 기록에 기록됩니다. 이 문제를 피하는 매우 간단한 방법이 있습니다. 명령줄에 입력된 모든 mysql 명령 앞에 공백을 두는 것입니다. 그게 다야. 공백으로 인해 쉘은 명령을 기록에 추가할 때 명령을 무시합니다.

  3. 그런 다음 다음을 실행하십시오. 역사 -c 쉘 기록을 지우십시오. 이것은 적어도 Bash에서는 작동하지만 다른 모든 것에 대해서는 모르겠습니다.

이는 매우 간단하고 노력이 거의 필요하지 않으며 쉘 기록과 매우 추측하기 쉬운 SSH 사용자 이름이라는 두 가지 일반적인 약점을 제거합니다.

관련 정보