MySQL에 대한 무차별 대입 공격을 방지 하시겠습니까? 망치질을 시작하여 포트 3306에서 연결을 열고

MySQLd에 대한 네트워킹을 켜야하지만, 매번 서버가 망각에 빠지게됩니다. 비밀번호 추측 스크립트는 서버에서 망치질을 시작하여 포트 3306에서 연결을 열고 임의의 비밀번호를 영원히 시도합니다.

이 문제가 발생하는 것을 어떻게 막을 수 있습니까?

SSH의 경우 denyhosts를 사용합니다. 거부 호스트가 MySQLd에서 작동하도록하는 방법이 있습니까?

또한 MySQL이 실행되는 포트를 변경하는 것을 고려했지만 이것은 이상적이지 않으며 스톱 갭 솔루션 (새로운 포트를 발견하면 어떻게됩니까?)

다른 아이디어가 있습니까?

다른 경우, FreeBSD 6.x에서 MySQL 5.x를 실행하고 있습니다.



답변

MySQL 용 denyhosts와 같은 소프트웨어 패키지는 모르지만 몇 가지 솔루션이 있습니다.

  • 특정 IP 주소로 로그인을 제한하십시오. 모든 호스트가 서버에 연결되도록 %를 사용하지 마십시오.
  • 더욱 안전한, iptables를 설정하여 인증 된 IP 주소에서 3306에만 액세스 할 수 있도록하십시오.
  • ssh를 사용하여 트래픽을 박스로 터널링 한 다음 localhost를 통해 연결
  • Denyhosts 또는 BFD 스크립트를 수정하여 mysql 액세스 로그를 분석하고 방화벽에서의 모든 무차별 시도를 차단하십시오.

편집 :

귀하의 의견에 대답하려면 다음을 시도하십시오 .

iptables -A INPUT -p tcp -s 202.54.1.50 --sport 1024:65535 -d 202.54.1.20 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -s 202.54.1.20 --sport 3306 -d 202.54.1.50 --dport 1024

여기서 .20은 MySQL이고 .50은 원격 연결 IP 주소입니다.


답변

1 : 포트를 3306에서 변경하십시오. 보안 향상을 위해가 아니라 잘못된 로그인 공격을 처리하기 위해 서버를로드해야합니다.

2 : SSL 인증서를 작성하고 MySQL 서버에서 활성화하십시오 (어쨌든 클라이언트-서버 연결을 암호화해야합니다)

3 : 하나 이상의 클라이언트 인증서를 만듭니다 (모든 클라이언트에 인증서가 필요하고이를 사용하도록 클라이언트 소프트웨어를 구성해야 함). 클라이언트가 .Net 인 경우 클라이언트 인증서를 pkcs12 형식으로 변환해야하지만 쉽게 수행 할 수 있습니다 . 안내서를 참조하십시오 .

4 : MySQL 사용자 계정에 x509 클라이언트 인증서가 필요하도록 설정 한 다음 공격자는 로그인 자격 증명과 클라이언트 인증서가 모두 필요합니다 (클라이언트 인증서에 암호를 입력 할 수도 있고 공격자도이를 필요로합니다).

내가 사용 인증서와 키 파일을 만들기 위해 가이드를하지만, 거기 많은 가이드가있다.

클라이언트 액세스가 아닌 관리 목적으로 Linux 상자에 액세스하기 위해 SSH 연결 만 사용하는 것이 좋습니다.


답변

MySQL 프록시를 사용하면 연결 요청이 승인되지 않은 IP 범위에서 온 경우 사용자 / 패스 조합이 필요하지만 로그인을 처리하기 위해 X 초 동안 대기하는 작은 LUA 스크립트를 작성할 수 있습니다.

세 번의 시도 실패 후 IP 범위를 블랙리스트하기 위해 LUA 스크립트에 약간의 추가 로직을 추가 할 수 있습니다.

대체로 기술적으로는 가능하지만 SSH 또는 VPN을 통해 공통의 허용 된 (FW 또는 기타 수단을 통해) IP 범위로 터널링하는 다른 권장 사항을 따르겠습니다.


답변

보안 호스트에서만 mysqld 포트에 액세스 할 수없는 이유는 무엇입니까?


답변

이것이 “실제”답변은 아니지만-왜 외부 세계에 직접 노출해야하는지 모르겠습니다.

해당 상자에서 ssh를 활성화하고 터널링을 사용하여 DB 엔진에 액세스 할 수 없습니까?

또는 다른 VPN 솔루션에 액세스 할 수 있습니다 (openvpn이 떠오름).


답변

문제에 대한 실질적인 해결책은 아니지만 다른 포트에서 서버를 실행하는 경우 도움이 될 수 있습니다. 대부분의 스캔 봇은 3306 만 검사하도록 프로그래밍되어있을 것입니다. 문제를 해결하지는 않지만 포트를 변경하면 스캔 횟수가 훨씬 줄어 듭니다.


답변

나는 연결이 방화벽 화되어야한다고 믿습니다 : 빠르고 훌륭합니다. iptables에 대한 많은 자습서가 있습니다 🙂

또한 방화벽이 알려진 호스트를 차단하지 못하도록 서버에서 smth를 실행하는 클라이언트 호스트에 cronjob을 설치할 수 있습니다.