Hoe Moet Je De Beveiliging Van Je Database?

0
62
Shutterstock/hywards

Uw database server bevat vaak uw meest gevoelige gegevens, zoals vertrouwelijke gegevens van de gebruiker. Het is belangrijk om het implementeren van security best practices te minimaliseren van het risico van een aanvaller toegang krijgen tot uw database.

Deze gids zal worden voor MySQL in het bijzonder, want het is de meest voorkomende database, maar de meeste van deze begrippen van toepassing zijn op het type database—je zult alleen maar vragen een andere configuratie hetzelfde effect te verkrijgen.

Ervoor te Voeren mysql_secure_installation

MySQL heeft een ingebouwde tool die kan omgaan met een paar basic security taken. Na de installatie van MySQL, voer je het volgende commando in de terminal:

mysql_secure_installation

Dit zal u door middel van een aantal taken—het instellen van een nieuw wachtwoord, het verwijderen van anonieme gebruikers en testen van databases en het uitschakelen van extern root login. Daarna zal de MySQL opnieuw laden config voor u, zodat u ziet de wijzigingen zijn direct zichtbaar.

Het vergrendelen van SSH

Dit hoeft niet technisch te zijn heeft niets te maken met de database zelf, maar ook uw database is zo veilig als de server waarop het wordt uitgevoerd, dus u zult willen nemen van de nodige stappen om te vergrendelen SSH en het voorkomen van de meest voorkomende beveiligingslekken.

U kunt lees onze volledige gids over SSH beveiliging om meer te leren, maar de kern ervan is een paar stappen:

  • Wachtwoord uitschakelen aanmelden, gebruik van SSH-sleutels alleen.
  • Tarief limiet voor mislukte aanmeldingspogingen met denyhosts om te voorkomen dat brute kracht.
  • De witte lijst voor toegang tot de lijst met vertrouwde IP-adressen.
  • Schakel root login via SSH—op deze manier aanvallers nodig om te weten dat uw gebruikersnaam.
  • Het opzetten van Multi-Factor Authenticatie voor SSH als je echt paranoïde.

Het uitvoeren van een Standalone Database in een Eigen Subnet

In plaats van een lokale database op dezelfde server die nginx is uitgevoerd, is het beter voor de veiligheid voor het uitvoeren van uw database in een besloten subnet op te nemen dat alleen toegankelijk is door andere servers in uw eigen cloud. Veel cloud providers, waaronder AWS, bieden deze functies.

De setup ziet er zo uit:

Uw Virtual Private Cloud (VPC) is gewoon de container die alle van uw AWS middelen uitvoeren. Dingen in deze cloud met elkaar kunnen praten over hun privé-IP-adressen net als apparaten in uw huis zou communiceren.

Servers in de openbare subnet openbare IP-adressen, en rechtstreeks toegankelijk voor iedereen. Servers in het eigen subnet niet openbaar IP-adressen—alleen voor particuliere doeleinden. Ze kunnen nog steeds toegang tot het internet, door het gebruik van Network Address Translation, dezelfde methode die geeft uw computer achter een router thuis.

Dit betekent dat alle servers gelanceerd in het privé subnet geheel niet toegankelijk van buiten aanvallers. De enige manier om uw database kan worden geopend is als de web server in gevaar is gebracht, en zelfs dan zou het nog steeds een privilege escalation.

Op de top van de uitkeringen, deze configuratie is ook veel gemakkelijker om op te schalen. Bijvoorbeeld, je zou kunnen hebben vier web servers die draaien op WordPress, die alle aansluiten op een enkele gezaghebbende database server. Op deze manier, alle vier webservers synchroniseren en u kunt eenvoudig de schaal omhoog en omlaag om de vraag te voldoen, zonder zich zorgen te maken over de database. Dit kan leiden tot een aantal problemen met de prestaties door de netwerken overhead, maar met de juiste multilayer caching, het probleem is minimaal in vergelijking met de architectonische voordelen.

Om MySQL alleen het accepteren van verbindingen van particuliere aansluitingen, wil je gebruik maken van een netmasker in uw SUBSIDIE-en verliesrekening. Dit werkt niet met de CIDR—notatie-alleen de volledige netmask.

Het VERLENEN van ALLE in de database.* NAAR ‘gebruiker’@’10.0.1.0/255.255.255.0’ GEÏDENTIFICEERD DOOR het ‘wachtwoord’

Als u van plan bent om slechts een server, moet u ten minste bind uw database naar localhost, zodat deze niet toegankelijk vanaf het internet toch.

Binden aan Localhost als Mogelijk (of in ieder geval een Andere Poort)

Als u geen toegang krijgen tot uw database server van iets anders dan de andere processen op de machine zelf, kunt u lock it down, zodat het is niet toegankelijk via het netwerk. Natuurlijk werkt dit alleen als u een server met alles, en dat is niet de beste configuratie in de eerste plaats.

Als je niet kan binden aan localhost, het is een goed idee om de standaard poort naar iets anders.

Één van beide manier, u doet dit heel eenvoudig door binding van MySQL naar localhost, wat betekent dat het zal alleen maar luisteren op de loopback-adres, en niet op een open poorten. Open /etc/mysql/mijn.conf in je favoriete tekst editor en voeg de volgende regel in de [mysqld] gedeelte:

bind-address = 127.0.0.1

U kunt ook de standaard poort uit dezelfde rubriek:

Port=5000

Opnieuw MySQL, en ziet u de wijzigingen.

Let Op Uw Shell Geschiedenis

De meeste dingen die je doet in Linux worden vastgelegd. Als een aanvaller erin slaagt om toegang te krijgen tot deze log bestanden, ze kunnen escaleren van hun rechten door het vinden van wachtwoorden die zijn opgeslagen in hen.

Dit kan gebeuren op twee manieren voor MySQL, beide zijn gemakkelijk te voorkomen. De eerste is wanneer u inloggen op de MySQL shell—je wilt nooit geef het wachtwoord op als een argument op de commando-regel. Laat het altijd leeg, en laat MySQL vragen.

mysql -u root -p

Anders, het is zichtbaar met behulp van de opdracht geschiedenis.

MySQL heeft ook zijn eigen geschiedenis, opgeslagen in ~/.mysql_history. Dit is natuurlijk niet inloggen het wachtwoord dat u gebruikt om in te loggen, maar als u een nieuwe gebruiker van de MySQL command line, die verklaring zal worden aangemeld—wachtwoord en alle. U wilt wissen dit bestand als een voorzorgsmaatregel als u ooit te wijzigen van gebruikersaccounts.

# cat /dev/null > ~/.mysql_history

Als Je op AWS, Overweeg het Gebruik van RDS

AWS is Relational Database Service (RDS)is een volledig beheerde database in de cloud. Als u niet wilt dat om te zorgen hoeft te maken over de database veiligheid, en wil gewoon een inzetbare oplossing, RDS (en alle AWS andere beheerde database services) zal wegnemen van de hoofdpijn.

Maakt gebruik van RDS AWS eigen Identiteit en Access Management (IAM) systeem. IAM beheert machtigingen voor alles wat je doet op AWS. Elke actie in het web-based Management Console, CLI commando ‘ s en API-verzoeken moet gaan door middel van IAM. Elke actie zal worden geblokkeerd als de gebruiker of de entiteit, het uitvoeren van niet uitdrukkelijke toestemming hebben om toegang te krijgen tot de gegeven bron. Op de top van dat, RDS is een eigen standaard, zodat je geen zorgen hoeft te maken over de aanvallen van het internet.

U zult nog steeds met behulp van de standaard MySQL gebruikersnaam en wachtwoord verificatie verbinding maken met de database zelf al—IAM gewoon beveiligt alles over de database, zoals de configuratie. Echter, u kunt gebruik maken van AWS Geheimen Manager, waarmee u constant beveiligingssleutels zonder code herschikkingen, en heeft ingebouwde integratie voor RDS op te starten.

Als u wilt, kunt u ook inschakelen voor de IAM-Database Verificatie, die u zal toestaan te omzeilen wachtwoord auth helemaal en gewoon gebruik maken van IAM. Echter, het voegt een aantal overhead, en als zodanig, is het tarief beperkt tot 200 nieuwe verbindingen per seconde voor MySQL.