One place for hosting & domains

      How To Install and Secure Redis on CentOS 8


      Not using CentOS 8?


      Choose a different version or distribution.

      Introduction

      Redis is an open-source, in-memory key-value data store which excels at caching. A non-relational database, Redis is known for its flexibility, performance, scalability, and wide language support.

      Redis was designed for use by trusted clients in a trusted environment, and has no robust security features of its own. Redis does, however, have a few security features like a basic unencrypted password as well as command renaming and disabling. This tutorial provides instructions on how to install Redis and configure these security features. It also covers a few other settings that can boost the security of a standalone Redis installation on CentOS 8.

      Note that this guide does not address situations where the Redis server and the client applications are on different hosts or in different data centers. Installations where Redis traffic has to traverse an insecure or untrusted network will require a different set of configurations, such as setting up an SSL proxy or a VPN between the Redis machines.

      Prerequisites

      To complete this tutorial, you will need a server running CentOS 8. This server should have a non-root user with administrative privileges and a firewall configured with firewalld. To set this up, follow our Initial Server Setup guide for CentOS 8.

      Step 1 — Installing and Starting Redis

      You can install Redis with the DNF package manager. The following command will install Redis, its dependencies, and nano, a user-friendly text editor. You don’t have to install nano, but we’ll use it in examples throughout this guide:

      • sudo dnf install redis nano

      This command will prompt you to confirm that you want to install the selected packages. Press y then ENTER to do so:

      Output

      . . . Total download size: 1.5 M Installed size: 5.4 M Is this ok [y/N]: y

      Following this, there is one important configuration change to make in the Redis configuration file, which was generated automatically during the installation.

      Open this file with your preferred text editor. Here we’ll use nano:

      • sudo nano /etc/redis/redis.conf

      Inside the file, find the supervised directive. This directive allows you to declare an init system to manage Redis as a service, providing you with more control over its operation. The supervised directive is set to no by default. Since you are running CentOS, which uses the systemd init system, change this to systemd:

      /etc/redis/redis.conf

      . . .
      
      # If you run Redis from upstart or systemd, Redis can interact with your
      # supervision tree. Options:
      #   supervised no      - no supervision interaction
      #   supervised upstart - signal upstart by putting Redis into SIGSTOP mode
      #   supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
      #   supervised auto    - detect upstart or systemd method based on
      #                        UPSTART_JOB or NOTIFY_SOCKET environment variables
      # Note: these supervision methods only signal "process is ready."
      #       They do not enable continuous liveness pings back to your supervisor.
      supervised systemd
      
      . . .
      

      That’s the only change you need to make to the Redis configuration file at this point, so save and close it when you are finished. If you used nano to edit the file, do so by pressing CTRL + X, Y, then ENTER.

      After editing the file, start the Redis service:

      • sudo systemctl start redis.service

      If you’d like Redis to start on boot, you can enable it with the enable command:

      • sudo systemctl enable redis

      Notice that this command doesn’t include the .service suffix after the unit file name. You can usually leave this suffix off of systemctl commands, as it’s typically implied when interacting with systemd.

      You can check Redis’s status by running the following:

      • sudo systemctl status redis

      Output

      ● redis.service - Redis persistent key-value database Loaded: loaded (/usr/lib/systemd/system/redis.service; enabled; vendor preset: disabled) Drop-In: /etc/systemd/system/redis.service.d └─limit.conf Active: active (running) since Wed 2020-09-30 20:05:24 UTC; 13s ago Main PID: 13734 (redis-server) Tasks: 4 (limit: 11489) Memory: 6.6M CGroup: /system.slice/redis.service └─13734 /usr/bin/redis-server 127.0.0.1:6379

      Once you’ve confirmed that Redis is indeed running, you can test its functionality with this command:

      This should print PONG as the response:

      Output

      PONG

      If this is the case, it means you now have Redis running on your server and you can begin configuring it to enhance its security.

      Step 2 — Configuring Redis and Securing it with a Firewall

      An effective way to safeguard Redis is to secure the server it’s running on. You can do this by ensuring that Redis is bound only to either localhost or to a private IP address and also that the server has a firewall up and running.

      However, if you chose to set up Redis using another tutorial, then you may have updated the configuration file to allow connections from anywhere. This is not as secure as binding to localhost or a private IP.

      To remedy this, open the Redis configuration file again with your preferred text editor:

      • sudo nano /etc/redis.conf

      Locate the line beginning with bind and make sure it’s uncommented:

      /etc/redis.conf

      . . .
      bind 127.0.0.1
      

      If you need to bind Redis to another IP address (as in cases where you will be accessing Redis from a separate host) we strongly encourage you to bind it to a private IP address. Binding to a public IP address increases the exposure of your Redis interface to outside parties:

      /etc/redis.conf

      . . .
      bind your_private_ip
      

      After confirming that the bind directive isn’t commented out, you can save and close the file.

      If you’ve followed the prerequisite Initial Server Setup tutorial and installed firewalld on your server, and you do not plan to connect to Redis from another host, then you do not need to add any extra firewall rules for Redis. After all, any incoming traffic will be dropped by default unless explicitly allowed by the firewall rules. Since a default standalone installation of Redis server is listening only on the loopback interface (127.0.0.1 or localhost), there should be no concern for incoming traffic on its default port.

      If, however, you do plan to access Redis from another host, you will need to make some changes to your firewalld configuration using the firewall-cmd command. Again, you should only allow access to your Redis server from your hosts by using their private IP addresses in order to limit the number of hosts your service is exposed to.

      To begin, add a dedicated Redis zone to your firewalld policy:

      • sudo firewall-cmd --permanent --new-zone=redis

      Then specify which port you’d like to have open. Redis uses port 6397 by default:

      • sudo firewall-cmd --permanent --zone=redis --add-port=6379/tcp

      Next, specify any private IP addresses which should be allowed to pass through the firewall and access Redis:

      • sudo firewall-cmd --permanent --zone=redis --add-source=client_server_private_IP

      After running those commands, reload the firewall to implement the new rules:

      • sudo firewall-cmd --reload

      Under this configuration, when the firewall encounters a packet from your client’s IP address, it will apply the rules in the dedicated Redis zone to that connection. All other connections will be processed by the default public zone. The services in the default zone apply to every connection, not just those that don’t match explicitly, so you don’t need to add other services (e.g. SSH) to the Redis zone because those rules will be applied to that connection automatically.

      Keep in mind that using any firewall tool will work, whether you use firewalld, ufw, or iptables. What’s important is that the firewall is up and running so that unknown individuals cannot access your server. In the next step, you will configure Redis to only be accessible with a strong password.

      Step 3 — Configuring a Redis Password

      Configuring a Redis password enables one of its built-in security features — the auth command — which requires clients to authenticate before being allowed access to the database. Like the bind setting, the password is configured directly in Redis’s configuration file, /etc/redis.conf. Reopen that file:

      • sudo nano /etc/redis.conf

      Scroll to the SECURITY section and look for a commented directive that reads:

      /etc/redis.conf

      . . .
      # requirepass foobared
      

      Uncomment it by removing the #, and change foobared to a very strong password of your choosing.

      Note: Rather than make up a password yourself, you may use a tool like apg or pwgen to generate one. If you don’t want to install an application just to generate a password, though, you may use the command below. This command echoes a string value and pipes it into the following sha256sum command, which will display the string’s SHA256 checksum.

      Be aware that entering this command as written will generate the same password every time. To create a unique password, change the string in quotes to any other word or phrase:

      • echo "digital-ocean" | sha256sum

      Though the generated password will not be pronounceable, it will be very strong and long, which is exactly the type of password required for Redis. After copying and pasting the output of that command as the new value for requirepass, it should read:

      /etc/redis.conf

      . . .
      requirepass password_copied_from_output
      

      Alternatively, if you prefer a shorter password, you could instead use the output of the following command. Again, change the word in quotes so it will not generate the same password as this command:

      • echo "digital-ocean" | sha1sum

      After setting the password, save and close the file then restart Redis:

      • sudo systemctl restart redis

      To test that the password works, open the Redis client:

      The following is a sequence of commands used to test whether the Redis password works. The first command tries to set a key to a value before authentication:

      That won’t work as you have not yet authenticated, so Redis returns an error:

      Output

      (error) NOAUTH Authentication required.

      The following command authenticates with the password specified in the Redis configuration file:

      Redis will acknowledge that you have been authenticated:

      Output

      OK

      After that, running the previous command again should be successful:

      Output

      OK

      The get key1 command queries Redis for the value of the new key:

      Output

      "10"

      This last command exits redis-cli. You may also use exit:

      It should now be very difficult for unauthorized users to access your Redis installation. Be aware that if you’re already using the Redis client and then restart Redis, you’ll need to re-authenticate. Also, please note that without SSL or a VPN, the unencrypted password will still be visible to outside parties if you’re connecting to Redis remotely.

      Next, this guide will go over renaming Redis commands to further protect Redis from malicious actors.

      Step 4 — Renaming Dangerous Commands

      The other security feature built into Redis allows you to rename or completely disable certain commands that are considered dangerous. When run by unauthorized users, such commands can be used to reconfigure, destroy, or otherwise wipe your data. Some of the commands that are considered to be dangerous include:

      • FLUSHDB
      • FLUSHALL
      • KEYS
      • PEXPIRE
      • DEL
      • CONFIG
      • SHUTDOWN
      • BGREWRITEAOF
      • BGSAVE
      • SAVE
      • SPOP
      • SREM
      • RENAME
      • DEBUG

      This is not a comprehensive list, but renaming or disabling all of the commands in this list can help to improve your data store’s security. Whether you should disable or rename a given command will depend on your specific needs. If you know you will never use a command that can be abused, then you may disable it. Otherwise, you should rename it instead.

      Like the authentication password, renaming or disabling commands is configured in the SECURITY section of the /etc/redis.conf file. To enable or disable Redis commands, open the configuration file for editing one more time:

      • sudo nano /etc/redis.conf

      NOTE: These are examples. You should choose to disable or rename the commands that make sense for you. You can learn more about Redis’s commands and determine how they might be misused at redis.io/commands.

      To disable or kill a command, rename it to an empty string, like this:

      /etc/redis.conf

      # It is also possible to completely kill a command by renaming it into
      # an empty string:
      #
      rename-command FLUSHDB ""
      rename-command FLUSHALL ""
      rename-command DEBUG ""
      

      To rename a command, give it another name like in the examples below. Renamed commands should be difficult for others to guess, but easy for you to remember:

      /etc/redis.conf

      # It is also possible to completely kill a command by renaming it into
      # an empty string:
      #
      rename-command FLUSHDB ""
      rename-command FLUSHALL ""
      rename-command DEBUG ""
      rename-command SHUTDOWN SHUTDOWN_MENOT
      rename-command CONFIG ASC12_CONFIG
      

      Save your changes and close the file. Then apply the changes by restarting Redis:

      • sudo systemctl restart redis.service

      To test your new commands, enter the Redis command line:

      Authenticate yourself using the password you defined earlier:

      Output

      OK

      Assuming that you renamed the CONFIG command to ASC12_CONFIG, attempting to use the config command will fail:

      Output

      (error) ERR unknown command 'config'

      Calling the renamed command instead will be successful. Note that Redis commands are not case-sensitive:

      • asc12_config get requirepass

      Output

      1) "requirepass" 2) "your_redis_password"

      Finally, you can exit from redis-cli:

      Warning: Regarding renaming commands, there’s a cautionary statement at the end of the SECURITY section in the /etc/redis.conf file, which reads:

      /etc/redis.conf

      . . .
      
      # Please note that changing the name of commands that are logged into the
      # AOF file or transmitted to slaves may cause problems.
      
      . . .
      

      This means if the renamed command is not in the AOF file, or if it is but the AOF file has not been transmitted to replicas, then there should be no problem. Keep that in mind as you’re renaming commands. The best time to rename a command is when you’re not using AOF persistence or right after installation (that is, before your Redis-using application has been deployed).

      When you’re using AOF and dealing with Redis replication, consider this answer from the project’s GitHub issue page. The following is a reply to the author’s question:

      The commands are logged to the AOF and replicated to the slave the same way they are sent, so if you try to replay the AOF on an instance that doesn’t have the same renaming, you may face inconsistencies as the command cannot be executed (same for slaves).

      The best way to handle renaming in cases like that is to make sure that renamed commands are applied to the primary instance as well as every secondary instance in a Redis installation.

      Step 5 — Setting Data Directory Ownership and File Permissions

      This step will go through a couple of ownership and permissions changes you may need to make to improve the security profile of your Redis installation. This involves making sure that only the user that needs to access Redis has permission to read its data. That user is, by default, the redis user.

      You can verify this by grep-ing for the Redis data directory in a long listing of its parent directory. This command and its output are given below:

      • ls -l /var/lib | grep redis

      Output

      drwxr-x---. 2 redis redis 22 Sep 30 20:15 redis

      This output indicates that the Redis data directory is owned by the redis user, with secondary access granted to the redis group. This ownership setting is secure as are the folder’s permissions which, using octal notation, are set to 750.

      If your Redis data directory has insecure permissions (for example, it’s world-readable) you can ensure that only the Redis user and group have access to the folder and its contents by running the chmod command. The following example changes this folder’s the permissions setting to 770:

      • sudo chmod 770 /var/lib/redis

      The other permission you may need to change is that of the Redis configuration file. By default, it has a file permission of 640 and is owned by root, with secondary ownership by the root group:

      Output

      -rw-r-----. 1 redis root 62344 Sep 30 20:14 /etc/redis.conf

      That permission (640) means the Redis configuration file is readable only by the redis user and the root group. Because the configuration file contains the unencrypted password you configured in Step 4, redis.conf should be owned by the redis user, with secondary ownership by the redis group. To set this, run the following command:

      • sudo chown redis:redis /etc/redis.conf

      Then change the permissions so that only the owner of the file can read and write to it:

      • sudo chmod 600 /etc/redis.conf

      You may verify the new ownership and permissions by running the previous ls commands again:

      • ls -l /var/lib | grep redis

      Output

      total 40 drwxrwx---. 2 redis redis 22 Sep 30 20:15 redis

      Output

      total 40 -rw-------. 1 redis redis 62344 Sep 30 20:14 /etc/redis.conf

      Finally, restart Redis to reflect these changes:

      • sudo systemctl restart redis

      With that, your Redis installation has been secured.

      Conclusion

      Keep in mind that once someone is logged in to your server, it’s very easy to circumvent the Redis-specific security features you’ve put in place. This is why the most important security feature covered in this tutorial is the firewall, as that prevents unknown users from logging into your server in the first place.

      If you’re attempting to secure Redis communication across an untrusted network you’ll have to employ an SSL proxy, as recommended by Redis developers in the official Redis security guide.



      Source link

      How To Manage a Redis Database eBook


      Download the Complete eBook!

      How To Manage a Redis Database eBook in EPUB format

      How To Manage a Redis Database eBook in PDF format

      Introduction to the eBook

      This book aims to provide an approachable introduction to Redis concepts by outlining many of the key-value store’s commands so readers can learn their patterns and syntax, thus building up readers’ understanding gradually. The goal for this book is to serve as an introduction to Redis for those interested in getting started with it, or key-value stores in general. For more experienced users, this book can function as a collection of helpful cheat sheets and in-depth reference.

      This book is based on the How To Manage a Redis Database tutorial series found on DigitalOcean Community. The topics that it covers include how to:

      1. Connect to a Redis database

      2. Create and use a variety of Redis data types, including strings, sets, hashes, and lists

      3. Manage Redis clients and replicas

      4. Run transactions in Redis

      5. Troubleshoot issues in a Redis installation

      Each chapter is self-contained and can be followed independently of the others. By reading through this book, you’ll become acquainted with many of Redis’s most widely used commands, which will help you as you begin to build applications that take advantage of its power and speed.

      Download the eBook

      You can download the eBook in either the EPUB or PDF format by following the links below.

      Download the Complete eBook!

      How To Manage a Redis Database eBook in EPUB format

      How To Manage a Redis Database eBook in PDF format

      If you’d like to learn more about how to use Redis, visit the DigitalOcean Community’s Redis section. Alternatively, if you want to learn about other open-source database management systems, like MySQL, PostgreSQL, MariaDB, or MongoDB, we encourage you to check out our full library of database-related content.



      Source link

      So installieren und sichern Sie Redis unter Ubuntu 20.04


      Eine frühere Version dieses Tutorials wurde von Justin Ellingwood verfasst

      Einführung

      Redis ist ein In-Memory-Schlüsselwertspeicher, der für seine Flexibilität, Leistung und breite Sprachunterstützung bekannt ist. Dieses Tutorial zeigt, wie Sie Redis auf einem Ubuntu 20.04-Server installieren, konfigurieren und sichern.

      Voraussetzungen

      Um diesen Leitfaden auszuführen, benötigen Sie Zugriff auf einen Ubuntu 20.04-Server, der einen non-root user mit sudo-Berechtigungen und eine mit ufw konfigurierte Firewall aufweist. Hierzu können Sie unserem Leitfaden zur Ersteinrichtung eines Servers unter Ubuntu 20.04 folgen.

      Schritt 1 — Installieren und Konfigurieren von Redis

      Wir verwenden den APT-Paketmanager, um Redis aus den offiziellen Ubuntu-Repositorys zu installieren. Zum Zeitpunkt dieses Schreibens ist die in den Standard-Repositorys verfügbare Version 5.0.7.

      Als Erstes aktualisieren Sie Ihren lokalen apt-Paketcache:

      Installieren Sie anschließend Redis, indem Sie Folgendes eingeben:

      • sudo apt install redis-server

      Dadurch werden Redis und seine Abhängigkeiten heruntergeladen und installiert. Danach müssen Sie eine wichtige Konfigurationsänderung in der Redis-Konfigurationsdatei vornehmen, die bei der Installation automatisch generiert wurde.

      Öffnen Sie diese Datei mit Ihrem bevorzugten Texteditor:

      • sudo nano /etc/redis/redis.conf

      Suchen Sie in der Datei die Anweisung supervised. Mit dieser Anweisung können Sie ein Init-System deklarieren, um Redis als Dienst zu verwalten. Damit erhalten Sie mehr Kontrolle über seine Funktion. Die Anweisung supervised ist standardmäßig auf no eingestellt. Da Ubuntu das Init-System systemd verwendet, ändern Sie die Anweisung zu systemd:

      /etc/redis/redis.conf

      . . .
      
      # If you run Redis from upstart or systemd, Redis can interact with your
      # supervision tree. Options:
      #   supervised no      - no supervision interaction
      #   supervised upstart - signal upstart by putting Redis into SIGSTOP mode
      #   supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
      #   supervised auto    - detect upstart or systemd method based on
      #                        UPSTART_JOB or NOTIFY_SOCKET environment variables
      # Note: these supervision methods only signal "process is ready."
      #       They do not enable continuous liveness pings back to your supervisor.
      supervised systemd
      
      . . .
      

      Das ist die einzige Änderung, die Sie an dieser Stelle in der Redis-Konfigurationsdatei vornehmen müssen. Wenn Sie fertig sind, speichern und schließen Sie die Datei. Wenn Sie nano zum Bearbeiten der Datei verwendet haben, drücken Sie dazu STRG + X, Y und dann ENTER.

      Starten Sie dann den Redis-Dienst neu, damit die Änderungen, die Sie in der Konfigurationsdatei vorgenommen haben, angewendet werden:

      • sudo systemctl restart redis.service

      Redis ist nun installiert und konfiguriert und läuft auf Ihrem Rechner. Bevor Sie Redis benutzen, ist es jedoch ratsam, zunächst zu prüfen, ob es korrekt funktioniert.

      Schritt 2 — Testen von Redis

      Wie bei jeder neu installierten Software ist es sinnvoll, sicherzustellen, dass Redis wie erwartet funktioniert, bevor weitere Änderungen an der Konfiguration vorgenommen werden. Wir behandeln in diesem Schritt verschiedene Möglichkeiten, um zu prüfen, ob Redis korrekt funktioniert.

      Zuerst überprüfen Sie, ob der Redis-Dienst ausgeführt wird:

      • sudo systemctl status redis

      Wenn er ohne Fehler ausgeführt wird, gibt dieser Befehl eine Ausgabe, die der folgenden ähnelt:

      Output

      ● redis-server.service - Advanced key-value store Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2020-04-30 23:26:54 UTC; 4s ago Docs: http://redis.io/documentation, man:redis-server(1) Process: 36552 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS) Main PID: 36561 (redis-server) Tasks: 4 (limit: 2345) Memory: 1.8M CGroup: /system.slice/redis-server.service └─36561 /usr/bin/redis-server 127.0.0.1:6379 . . .

      Hier können Sie sehen, dass Redis ausgeführt wird und bereits aktiviert ist. Das bedeutet, dass Redis bei jedem Boot des Servers automatisch startet.

      Anmerkung: Diese Einstellung ist für viele häufige Anwendungsfälle von Redis wünschenswert. Falls Sie Redis lieber manuell bei jedem Boot des Servers starten möchten, können Sie das mit folgendem Befehl konfigurieren:

      • sudo systemctl disable redis

      Um zu testen, ob Redis richtig funktioniert, stellen Sie mit dem Redis-Befehlszeilenclient redis-cli eine Verbindung zum Server her:

      Testen Sie in der folgenden Eingabeaufforderung die Verbindung mit dem Befehl ping:

      Output

      PONG

      Diese Ausgabe bestätigt, dass die Serververbindung nach wie vor besteht. Als Nächstes überprüfen Sie, ob Sie Schlüssel festlegen können, indem Sie Folgendes ausführen:

      Output

      OK

      Rufen Sie den Wert ab, indem Sie Folgendes eingeben:

      Wenn alles funktioniert, können Sie den gespeicherten Wert abrufen:

      Output

      "It's working!"

      Nachdem Sie die Bestätigung haben, dass Sie den Wert abrufen können, beenden Sie die Redis-Eingabeaufforderung, um wieder zur Shell zu gelangen:

      Als Letztes testen wir, ob Redis auch nach einem Stopp oder Neustart die Daten noch enthält. Dazu starten Sie die Redis-Instanz zunächst neu:

      • sudo systemctl restart redis

      Stellen Sie dann erneut mit dem Befehlszeilenclient eine Verbindung her:

      Bestätigen Sie, dass Ihr Testwert immer noch verfügbar ist:

      Der Wert Ihres Schlüssels sollte immer noch zugänglich sein:

      Output

      "It's working!"

      Wenn Sie fertig sind, beenden Sie und kehren zur Shell zurück:

      Damit ist die Redis-Installation voll funktionsfähig und kann von Ihnen verwendet werden. Einige der Standardkonfigurationseinstellungen sind jedoch unsicher und bieten böswilligen Akteuren die Möglichkeit, Ihren Server und seine Daten anzugreifen und sich Zugang dazu zu verschaffen. Die verbleibenden Schritte in diesem Tutorial behandeln Methoden zur Milderung dieser Schwachstellen, wie sie in der offiziellen Redis-Website beschrieben sind. Diese Schritte sind optional und Redis wird auch dann noch funktionieren, wenn Sie sie nicht befolgen. Es wird jedoch dringend empfohlen, die Schritte auszuführen, um die Sicherheit Ihres Systems zu erhöhen.

      Schritt 3 — Binden an localhost

      Standardmäßig ist Redis nur von localhost zugänglich. Wenn Sie Redis jedoch mit einem anderen Tutorial als diesem installiert und konfiguriert haben, haben Sie die Konfigurationsdatei eventuell so geändert, dass sie Verbindungen von überall zulässt. Das ist nicht so sicher wie eine Bindung an localhost.

      Um dies zu korrigieren, öffnen Sie die Redis-Konfigurationsdatei zur Bearbeitung:

      • sudo nano /etc/redis/redis.conf

      Suchen Sie diese Zeile und stellen Sie sicher, dass die Kommentierung aufgehoben ist (entfernen Sie das #, falls vorhanden):

      /etc/redis/redis.conf

      bind 127.0.0.1 ::1
      

      Danach speichern und schließen Sie die Datei (drücken Sie STRG + X, Y und dann ENTER).

      Starten Sie dann den Dienst neu, um sicherzustellen, dass systemd Ihre Änderungen liest:

      • sudo systemctl restart redis

      Um zu prüfen, ob diese Änderung angenommen wurde, führen Sie den folgenden netstat-Befehl aus:

      • sudo netstat -lnp | grep redis

      Output

      tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 14222/redis-server tcp6 0 0 ::1:6379 :::* LISTEN 14222/redis-server

      Anmerkung: Der Befehl netstat ist möglicherweise nicht standardmäßig auf Ihrem System verfügbar. In diesem Fall können Sie ihn (sowie eine Reihe anderer praktischer Netzwerktools) mit dem folgenden Befehl installieren:

      • sudo apt install net-tools

      Die Ausgabe zeigt, dass das redis-server-Programm an localhost (127.0.0.1) gebunden ist und zeigt die Änderung, die Sie gerade in der Konfigurationsdatei vorgenommen haben. Wenn Sie eine andere IP-Adresse in dieser Spalte sehen, z. B. (0.0.0.0), sollten Sie überprüfen, ob Sie die Kommentierung in der korrekten Zeile aufgehoben haben und den Redis-Dienst erneut starten.

      Nachdem die Redis-Installation nun nur auf localhost lauscht, wird es für böswillige Akteure schwieriger, Anfragen zu stellen oder Zugriff auf Ihren Server zu erhalten. Allerdings ist Redis derzeit nicht so eingestellt, dass Benutzer sich authentifizieren müssen, bevor sie Änderungen an der Konfiguration oder den gespeicherten Daten von Redis vornehmen können. Um hier Abhilfe zu schaffen, können Sie mit Redis verlangen, dass Benutzer sich mit einem Passwort authentifizieren, bevor sie Änderungen über den Redis-Client redis-cli vornehmen.

      Schritt 4 — Konfigurieren eines Redis-Passworts

      Durch die Konfiguration eines Redis-Passworts wird eine der beiden in Redis integrierten Sicherheitsfunktionen befähigt – der Befehl auth, mit dem sich Clients für den Zugriff auf die Datenbank authentifizieren müssen. Das Passwort wird direkt in der Konfigurationsdatei von Redis, /etc/redis/redis.conf, konfiguriert. Öffnen Sie diese Datei erneut mit Ihrem bevorzugten Editor:

      • sudo nano /etc/redis/redis.conf

      Scrollen Sie zum Abschnitt SECURITY und suchen Sie eine Anweisung mit der Kommentierung:

      /etc/redis/redis.conf

      . . .
      # requirepass foobared
      . . .
      

      Heben Sie die Kommentierung auf, indem Sie # entfernen, und ändern Sie foobared in ein sicheres Passwort.

      Anmerkung: Über der Anweisung requirepass in der Datei redis.conf gibt es eine kommentierte Warnung:

      /etc/redis/redis.conf

      . . .
      # Warning: since Redis is pretty fast an outside user can try up to
      # 150k passwords per second against a good box. This means that you should
      # use a very strong password otherwise it will be very easy to break.
      #
      . . .
      

      Daher ist es wichtig, dass Sie einen sehr starken und sehr langen Wert als Ihr Passwort angeben. Anstatt ein Passwort selbst einzurichten, können Sie den Befehl openssl verwenden, um ein Zufallspasswort zu generieren, wie im folgenden Beispiel. Durch Weiterleiten der Ausgabe des ersten Befehls an den zweiten openssl-Befehl, wie hier gezeigt, werden alle durch den ersten Befehl erzeugten Zeilenumbrüche entfernt:

      • openssl rand 60 | openssl base64 -A

      Ihre Ausgabe sollte ungefähr wie folgt aussehen:

      Output

      RBOJ9cCNoGCKhlEBwQLHri1g+atWgn4Xn4HwNUbtzoVxAYxkiYBi7aufl4MILv1nxBqR4L6NNzI0X6cE

      Nach dem Kopieren und Einfügen der Ausgabe dieses Befehls als den neuen Wert für requirepass sollte es so aussehen:

      /etc/redis/redis.conf

      requirepass RBOJ9cCNoGCKhlEBwQLHri1g+atWgn4Xn4HwNUbtzoVxAYxkiYBi7aufl4MILv1nxBqR4L6NNzI0X6cE

      Nach dem Einrichten des Passworts speichern und schließen Sie die Datei. Starten Sie erneut Redis:

      • sudo systemctl restart redis.service

      Öffnen Sie den Redis-Client, um zu testen, ob das Passwort funktioniert:

      Folgendes zeigt eine Sequenz von Befehlen, mit denen getestet wird, ob das Redis-Passwort funktioniert. Der erste Befehl versucht, einen Schlüssel auf einen Wert vor der Authentifizierung einzustellen:

      Das funktioniert nicht, da Sie keine Authentifizierung durchgeführt haben. Daher gibt Redis einen Fehler aus:

      Output

      (error) NOAUTH Authentication required.

      Der nächste Befehl führt die Authentifizierung mit dem Passwort durch, das in der Redis-Konfigurationsdatei angegeben ist:

      Redis bestätigt:

      Output

      OK

      Danach wird der vorherige Befehl erfolgreich ausgeführt:

      Output

      OK

      get key1 fragt Redis nach dem Wert des neuen Schlüssels.

      Output

      "10"

      Nachdem Sie die Bestätigung haben, dass Sie Befehle im Redis ausführen können, beenden Sie redis-cli:

      Als Nächstes befassen wir uns mit der Umbenennung von Redis-Befehlen, die Ihrem Rechner schweren Schaden zufügen können, falls sie versehentlich oder durch einen bösartigen Akteur eingegeben werden.

      Schritt 5 — Umbenennen von gefährlichen Befehlen

      Die andere in Redis integrierte Sicherheitsfunktion besteht in der Umbenennung oder vollständigen Deaktivierung bestimmter Befehle, die als gefährlich eingestuft werden.

      Diese Befehle können von unautorisierten Benutzern dazu verwendet werden, Ihre Daten anders zu konfigurieren, zu zerstören oder anderweitig zu löschen. Wie das Authentifizierungs-Passwort wird das Umbenennen oder Deaktivieren von Befehlen im gleichen SECURITY-Abschnitt der Datei /etc/redis/redis.conf konfiguriert.

      Einige der Befehle, die als gefährlich eingestuft werden, sind: FLUSHDB, FLUSHALL, KEYS, PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF, BGSAVE, SAVE, SPOP, SREM, RENAME und DEBUG. Die Liste ist nicht umfassend, aber das Umbenennen oder Deaktivieren aller Befehle in dieser Liste ist ein guter Ausgangspunkt, um die Sicherheit Ihres Redis-Servers zu erhöhen.

      Ob Sie einen Befehl deaktivieren oder umbenennen sollten, hängt von Ihren spezifischen Bedürfnissen oder von denen Ihrer Website ab. Wenn Sie für einen Befehl, der missbraucht werden könnte, keine Verwendung haben, können Sie ihn deaktivieren. Andernfalls liegt es in Ihrem Interesse, diesen umzubenennen.

      Um Redis-Befehle umzubenennen oder zu deaktivieren, öffnen Sie erneut die Konfigurationsdatei:

      • sudo nano /etc/redis/redis.conf

      Achtung: Die folgenden Schritte zur Deaktivierung und Umbenennung von Befehlen sind Beispiele. Sie sollten nur die Befehle deaktivieren oder umbenennen, die für Sie sinnvoll sind. Sie können die vollständige Liste der Befehle unter redis.io/commands selbst überprüfen und eruieren, wie diese missbraucht werden könnten.

      Um einen Befehl zu deaktivieren, benennen Sie ihn einfach wie unten gezeigt in eine leere Zeichenfolge um (gekennzeichnet durch ein Paar Anführungszeichen ohne Zeichen dazwischen):

      /etc/redis/redis.conf

      . . .
      # It is also possible to completely kill a command by renaming it into
      # an empty string:
      #
      rename-command FLUSHDB ""
      rename-command FLUSHALL ""
      rename-command DEBUG ""
      . . .
      

      Zur Umbenennung eines Befehls geben Sie diesem wie bei den unten gezeigten Beispielen einen anderen Namen. Umbenannte Befehle sollten für andere schwierig zu erraten und für Sie selbst leicht zu merken sein:

      /etc/redis/redis.conf

      . . .
      # rename-command CONFIG ""
      rename-command SHUTDOWN SHUTDOWN_MENOT
      rename-command CONFIG ASC12_CONFIG
      . . .
      

      Speichern Sie Ihre Änderungen und schließen Sie die Datei.

      Nach der Umbenennung eines Befehls wenden Sie die Änderung an, indem Sie Redis neu starten:

      • sudo systemctl restart redis.service

      Um den neuen Befehl zu testen, gehen Sie in die Redis-Befehlszeile:

      Führen Sie eine Authentifizierung durch:

      Output

      OK

      Nehmen wir an, dass Sie den Befehl CONFIG so wie im voherigen Beispiel in ASC12_CONFIG umbenannt haben. Versuchen Sie zunächst, den ursprünglichen Befehl CONFIG zu verwenden. Das sollte fehlschlagen, da Sie diesen umbenannt haben:

      Output

      (error) ERR unknown command `config`, with args beginning with:

      Der umbenannte Befehl kann jedoch erfolgreich aufgerufen werden. Die Groß- und Kleinschreibung muss nicht beachtet werden:

      • asc12_config get requirepass

      Output

      1) "requirepass" 2) "your_redis_password"

      Zum Schluss können Sie redis-cli verlassen:

      Beachten Sie, dass Sie sich erneut authentifizieren müssen, wenn Sie bereits die Befehlszeile von Redis verwenden und Redis neu starten. Andernfalls erhalten Sie diesen Fehler, wenn Sie einen Befehl eingeben:

      Output

      NOAUTH Authentication required.

      Bezüglich der Umbenennung von Befehlen wird am Ende des Abschnitts SECURITY in /etc/redis/redis.conf folgende Warnung angegeben:

      /etc/redis/redis.conf

      . . .
      # Please note that changing the name of commands that are logged into the
      # AOF file or transmitted to replicas may cause problems.
      . . .
      

      Hinweis: Das Redis-Projekt verwendet die Begriffe „master“ und „slave“, während DigitalOcean generell die Alternativen „primary“ und „secondary“ bevorzugt. Um Verwirrungen zu vermeiden, werden an dieser Stelle die in der Redis-Dokumentation genutzten Begriffe verwendet.

      Das bedeutet, dass es kein Problem geben sollte, wenn der umbenannte Befehl nicht in der AOF-Datei enthalten ist, oder wenn er enthalten ist, aber die AOF-Datei nicht an Slaves übertragen wurde.

      Denken Sie bitte daran, wenn Sie Befehle umbenennen möchten. Der beste Zeitpunkt zur Umbenennung eines Befehls ist dann, wenn Sie keine AOF-Persistenz nutzen. Ein anderer Zeitpunkt ist direkt nach der Installation, bevor die Anwendung bereitgestellt wird, die Redis verwendet.

      Wenn Sie AOF verwenden und mit einer Master-Slave-Installation arbeiten, sollten Sie diese Antwort von der GitHub-Frageseite des Projekts beachten. Nachfolgend eine Antwort auf die Frage des Autors:

      Die Befehle werden in der AOF protokolliert und auf die gleiche Weise, in der sie gesendet werden, an den Slave repliziert. Wenn Sie also versuchen, die AOF auf einer Instanz, die nicht die gleiche Umbenennung hat, erneut wiederzugeben, kann es zu Inkonsistenzen kommen, da der Befehl nicht ausgeführt werden kann (dasselbe gilt für Slaves).

      Daher ist es in Fällen wie diesen am besten, bei der Umbenennung sicherzustellen, dass umbenannte Befehle auf alle Instanzen in Master-Slave-Installationen angewendet werden.

      Zusammenfassung

      In diesem Tutorial haben Sie Redis installiert und konfiguriert, die korrekte Funktion Ihrer Redis-Installation überprüft und die integrierten Sicherheitsfunktionen genutzt, um sie weniger anfällig für Angriffe böswilliger Akteure zu machen.

      Denken Sie daran, dass die Sicherheitsfunktionen von Redis, die wir eingerichtet haben, sehr leicht zu umgehen sind, sobald sich jemand auf Ihrem Server angemeldet hat. Daher ist die wichtigste Sicherheitseinrichtung auf Ihrem Redis-Server Ihre Firewall (die Sie konfiguriert haben, wenn Sie in den Voraussetzungen dem Leitfaden zur Ersteinrichtung eines Servers gefolgt sind). Diese Barriere ist für böswillige Akteure nur sehr schwer zu überwinden.



      Source link