Jak źle jest ustawienie adresu wiązania MySQL na 0.0.0.0?

35

Próbuję zezwolić zdalnemu serwerowi na dostęp do instancji MySQL, która obecnie współdzieli serwer Linux z aplikacją internetową. Zgodnie z dokumentacją jedynym sposobem, w jaki byłoby to możliwe (chyba że nie rozumiem poprawnie) jest ustawienie dyrektywy wiążącej adres na 0.0.0.0 , co powoduje, że MySQL pozwala na dostęp z dowolnego adresu IP, który może wygenerować prawidłowego użytkownika.

Tak więc dwa pytania:

  1. jak szkodliwe byłoby to dla bezpieczeństwa?
  2. czy istnieje lepsze podejście do umożliwienia lokalnej i zdalnej interakcji z MySQL?
jonathanatx
źródło

Odpowiedzi:

36

Myślę, że trochę źle rozumiesz ustawienie adresu powiązania . Są to lokalne adresy, które MySQL będzie nasłuchiwał połączeń. Domyślnie jest to 0.0.0.0, czyli wszystkie interfejsy. To ustawienie nie ogranicza adresów IP, które mogą uzyskać dostęp do serwera, chyba że określono wartość 127.0.0.1 tylko dla hosta lokalnego.

Jeśli chcesz ograniczyć niektórym użytkownikom z określonych adresów IP, wykorzystują tworzyć / użytkownika o dofinansowanie takiegoCREATE USER 'bobdole'@'192.168.10.221';

Doug Luxem
źródło
+1, ale tylko uwaga, że ​​domyślny adres nasłuchu różni się w zależności od instalacji MySQL.
John Gardeniers,
Dzięki Doug, myślę, że domyślnym w tym przypadku był mój lokalny host, ale dobrze wiedzieć, że użytkownicy określonej bazy danych są nadal ograniczeni przez IP.
jonathanatx
@jonathanatx Domyślny adres powiązania MySQL (w 5.6 i tak daleko, jak wiem) to 0.0.0.0. Chociaż uważam, że w przypadku wielu instalacji najlepszym rozwiązaniem jest wiązanie lokalnie. Nie otwieraj drzwi, jeśli nie chcesz, aby ktoś przez nie przechodził.
ebyrob
1

za. To jest złe. Chociaż możesz ograniczyć dostęp użytkownika przez ip do każdej bazy danych, myślę, że bezpieczniej jest mieć wszystkie połączenia przychodzące lokalnie. Na moich serwerach pozwalam MySQL akceptować tylko połączenia lokalne, 127.0.0.1, ponieważ jest to konfiguracja domyślna. Aby uzyskać zdalny dostęp do bazy danych, wystarczy utworzyć tunel ssh przed połączeniem z bazą danych, a następnie połączyć się lokalnie. Jeśli kodujesz za pomocą php, możesz to zrobić dość łatwo. Jeśli używasz aplikacji komputerowej, łatwo to zrobić w systemie Linux (wyszukaj tunel ssh), w systemie Windows zwykle używam programu takiego jak Putty, aby wykonać tunel dla mnie.

Jayson Just
źródło
7
To całkiem szalone. Standardowym sposobem jest utworzenie użytkowników, do których można uzyskać dostęp tylko z niektórych nazw hostów lub adresów IP. Zmuszenie każdego serwera WWW do wykonania tunelu SSH do bazy danych to o wiele więcej pracy niż trzeba.
TheLQ
3
Twój serwer WWW i serwer bazy danych nie zawsze są tym samym urządzeniem. Nie pozwól, aby połączenia przychodziły z Internetu, z pewnością .. ale istnieją bezpieczne sposoby na architekturę rozwiązań z dostępem do sieci MySQL.
Shane Madden
1
Dla małych instalacji (jeden db, jeden WWW) Państwo może zrobić ssh tunelowanie. Aby uzyskać prawdziwą konfigurację, Twoje VPN i zapory będą cię chronić, dlatego otworzyłbyś się przez 0.0.0.0, aby umożliwić zdalny dostęp.
Sonia Hamilton,
2
Dla wszystkich, którzy myślą, że pomysł na tunel SSH jest szalony, zastanów się, że większość ruchu MySQL jest oczywista. Jeśli z jakiegoś powodu musisz połączyć się przez niezaufaną sieć (tj. Internet), rozważ SSH lub skorzystaj z VPN. Uruchom Wireshark lub inny sniffer pakietów, jeśli chcesz zobaczyć, o czym mówię.
Brad
2
@Brad MySQL obsługuje szyfrowanie, więc nie jest to poprawne.
Marti Markov