8.4. Security checklist

This section provides a summary of recommendations regarding security in Neo4j.

Below is a simple checklist highlighting the specific areas within Neo4j that may need some extra attention in order to ensure the appropriate level of security for your application.

  1. Deploy Neo4j on safe servers in safe networks:

    1. Use subnets and firewalls.
    2. Only open up for the necessary ports. For a list of relevant ports see Section 3.3, “Ports”.

      In particular, ensure that there is no external access to the port specified by the setting dbms.backup.address. Failing to protect this port may leave a security hole open by which an unauthorized user can make a copy of the database onto a different machine.

  2. Protect data-at-rest:

    1. Use volume encryption (e.g. Bitlocker).
    2. Manage access to database dumps (refer to Section 11.7, “Dump and load databases”) and backups (refer to Section 6.2, “Perform a backup”).
    3. Manage access to data files and transaction logs by ensuring the correct file permissions on the Neo4j files. Refer to Section 3.2.3, “File permissions” for instructions on permission levels.
  3. Protect data-in-transit:

    1. For remote access to the Neo4j database, only open up for encrypted Bolt or HTTPS.
    2. Use SSL certificates issued from a trusted Certificate Authority.

      1. For configuring your Neo4j installation to use encrypted communication, refer to Section 8.2, “SSL framework”.
      2. If using Causal Clustering, configure and use encryption for intra-cluster communication. For details, see Section 4.6, “Intra-cluster encryption”.
      3. If using Causal Clustering, configure and use encryption for backups. This ensures that only servers with the specified SSL policy and SSL certificates will be able to access the server and perform the backup.
      4. For configuring your Bolt and/or HTTPS connectors, refer to Section 3.7, “Configure Neo4j connectors”.
      5. If using LDAP, configure your LDAP system with encryption via StartTLS; see Section 7.5.5.1, “Use LDAP with encryption via StartTLS”.
  4. Be on top of the security for custom extensions:

    1. Validate any custom code that you deploy (procedures and unmanaged extensions) and ensure that they do not expose any parts of the product or data unintentionally.
    2. Survey the settings dbms.security.procedures.unrestricted and dbms.security.procedures.whitelist to ensure that they exclusively contain intentionally exposed extensions.
  5. Ensure the correct file permissions on the Neo4j files.
  6. Protect against the execution of unauthorized extensions by restricting access to the bin, lib, and plugins directories. Only the operating system user that Neo4j runs as should have permissions to those files. Refer to Section 3.2.3, “File permissions” for instructions on permission levels.
  7. If LOAD CSV is enabled, ensure that it does not allow unauthorized users to import data. How to configure LOAD CSV is described in Developer Manual → LOAD CSV.
  8. Do not turn off Neo4j authentication. Refer to Section 7.3, “Configuration” for details on this setting.
  9. Survey your neo4j.conf file for ports relating to deprecated functions (such as neo4j-shell, controlled by the parameter dbms.shell.port) and remote JMX (controlled by the parameter setting dbms.jvm.additional=-Dcom.sun.management.jmxremote.port=3637).
  10. Review Section 8.3, “Browser credentials handling” to determine whether the default credentials handling in Neo4j Browser complies with your security regulations. Follow the instructions to configure it if necessary.
  11. Use the latest patch version of Neo4j.