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을 설치할 수 있습니다.