Odoo security hardening

A self-hosted Odoo holds your financial, HR and customer records, so its defaults are not enough. This guide shows the decisions, build sequence, effort drivers and checks that make an on-premise Odoo hardened and patchable.

On this page

Odoo security hardening starts before the first login

If your on-premise Odoo holds accounting, payroll-adjacent HR records, sales pipelines and inventory valuations, and an internal or external reviewer will test it, hardening means controlling five surfaces: the database manager, the web entry point, user access, third-party code, and backups with patching. Those controls are only as strong as the platform underneath them, so the work starts with confirming what you are running before anyone configures a login page. The difficulty is that Odoo's security posture depends on four things at once: the edition, the plan, the version's support window, and the custom and third-party modules installed. Odoo's pricing page states that only the Custom plan can be hosted on-premise, and that plan is also the one that includes custom modules and external API access. Enterprise features require activating the database with a subscription code, and the Community edition does not have access to the upgrade service. Confirm your edition, plan and activation status in writing before you scope the review, because a Community or non-Custom setup changes which controls you can actually apply.

Version support is the second constraint. Odoo states that security patches are provided only during standard support, which covers the first three years after a major release. Odoo 17.0 standard support ended in September 2026, so a database on that version may already be outside the patch window. Odoo 18.0 standard support runs until September 2027 and Odoo 19.0 until September 2028, according to Odoo's support documentation. Ask whether your production version is still inside standard support on the date your review will be performed, and who will apply vendor patches when a new security release appears. If the answer is unclear, that gap is a finding in itself. Third-party and custom modules are the third constraint and the one most often underestimated. Every module that is not part of the core suite adds code that Odoo's patches do not cover, and custom modules written against one version must be ported before an upgrade can proceed. Build an inventory of installed modules, their sources, their authors and the versions they were tested against. Note which ones touch access rights, record rules, portal access or external APIs, since those are the places where a small coding mistake exposes accounting or HR data.

Before the first login, decide the following: who owns each control after handover, which evidence an auditor will ask for, and what is out of your hands. DeployOpen plans, configures, documents and tests these controls inside your infrastructure, and prepares the evidence an assessor will request. It does not issue audit reports, attestations or certifications. Those come from independent auditors or certification bodies that you select. Agree on that division of responsibility at the start, because it determines what the review scope can credibly promise.

Which Odoo components carry the security risk

An on-premise Odoo install exposes several surfaces at once: administrative access, the web tier, the data layer, third-party code and sign-in. Each needs its own control, and a default install rarely sets all of them for a production environment. The cards below list what each surface controls and what to check before go-live.

Master password and database manager

The master password protects the database manager, which can create, duplicate, back up, restore and drop databases from the web interface. Anyone who can reach that screen with the master password can act on every database on the server. Confirm that the database manager is disabled or restricted to administrators on the network, that the master password is not left at any installation default, and that it is stored outside the application configuration files that developers copy around.

Web server and reverse proxy

Odoo's application server should sit behind a reverse proxy that terminates TLS, controls which paths and hosts are reachable and limits request sizes. Without that layer, the application server and its administrative paths may be exposed directly to users and the internet. Check that only the intended public paths are proxied, that plain HTTP redirects to HTTPS, that the proxy mode and host settings match the public address, and that long-polling and websocket traffic is routed deliberately.

Users, groups, access rights and record rules

Odoo controls data access through access rights on models, group membership and record rules that filter individual records. A user with broad group membership can see and change data well beyond their job, and a missing record rule can expose another company's records in a multi-company database. Review which groups are assigned to which users, remove stale accounts, and test record rules with a user from each role before go-live.

Addons path and third-party modules

Custom and third-party modules run with the same privileges as core Odoo code, so the addons path is part of the trusted code base. Each module in that path should come from a known source, be reviewed for access rights, server actions, external calls and use of sudo or raw SQL, and be pinned to a version compatible with the installed Odoo release. Confirm that only approved directories are on the addons path and that developers cannot modify production code in place.

Filestore and PostgreSQL database

Odoo keeps structured business data in PostgreSQL and binary attachments in the filestore on disk, and both hold sensitive records. Check the database role Odoo uses, which should not be a superuser, the network address PostgreSQL listens on, the file permissions on the filestore directory and who on the host operating system can read either one. Encryption at rest and database backups should cover both the database and the filestore, since restoring one without the other leaves attachments broken.

Sign-in methods and two-factor authentication

Odoo documents sign-in through LDAP, Google Sign-In, Microsoft Azure OAuth, Facebook and two-factor authentication. Each method adds a trust relationship and a failure mode: an LDAP bind account with broad rights, an OAuth application with overly permissive scopes, or an account that bypasses two-factor because it was created before the policy applied. Decide which methods are permitted, disable the ones not in use, and confirm that accounts created on first sign-in receive only the groups they need.

Backup and duplication process

Backups and database duplicates carry the same data as production, including personal and financial records and credentials stored in the database. Confirm that backups are encrypted, access to them is restricted, restores are tested, and that copies made for testing are neutralized before anyone outside the production group can log in to them. Odoo documents duplication with neutralization for test copies, so the process should be written down and checked rather than left to individual administrators.

Which hardening decisions shape the rest of the work

This table compares the early choices that set the scope and risk of Odoo hardening, with the option, when it fits and the operational cost of each. Read it before scoping, because several rows change which later controls apply at all. The main takeaway is that edition, hosting and version decisions limit what you can harden later, so settle them first.

DecisionOption and when it fitsOperational cost
Edition and planCommunity (LGPL-3.0) suits teams that do not need Enterprise features. Enterprise on the Custom plan suits on-premise deployments that need Studio, multi-company or external API access.Enterprise requires a subscription and an activation code, and upgrade service access depends on it. Confirm current plan terms on the pricing page before committing.
Self-hosting versus Odoo.shSelf-hosting on your own infrastructure fits when data residency, network controls or custom code review must stay under your control. Odoo.sh fits when you want the vendor platform to run hosting.Self-hosting makes your team responsible for OS patching, PostgreSQL backups, TLS and monitoring. Confirm with Odoo which plans allow each hosting model.
Version to deployChoose a version whose standard support runs well beyond your planned go-live. Odoo 19.0 has standard support until September 2028 and Odoo 20.0 until September 2029.Security patches stop at the end of standard support. Odoo 17.0 standard support has ended, so new deployments should not start on it. Plan a major upgrade roughly every two to three years.
Sign-in methodLocal accounts suit small user bases with few systems. LDAP, Microsoft Azure OAuth or Google sign-in fit organizations that manage identity centrally.External identity adds a dependency on the directory and its availability. Confirm the LDAP template, user creation on first login and two-factor settings in your test copy.
TLS termination and reverse proxy placementTerminating TLS at a reverse proxy in front of Odoo fits most on-premise designs, with the proxy in a DMZ or internal tier according to your network policy.The proxy must forward correct headers and handle long-polling and websocket paths. Each certificate and proxy configuration needs renewal and change control.
Third-party module sourcingUse only modules from sources your team has reviewed and pinned to a version. Restrict installation to an approved list for production.Each module needs review on every upgrade, and unmaintained modules can block a version move. Budget review time before adding modules.
Test copies and neutralizationCreate test databases by duplication with neutralization so outbound email, payment and integration credentials are disabled. Use this for upgrade rehearsal and security testing.Test environments need their own access control and data handling rules. Confirm which personal data is copied and who may access each copy.

How to sequence an Odoo hardening project

This sequence takes an on-premise Odoo deployment from default settings to a documented, tested and patchable state. Each step closes with a check the team can verify before the next step begins. Exact parameter names and values should be confirmed against the Odoo 19.0 documentation or the version you actually run.

  1. Confirm edition, plan and support dates

    Before changing any setting, record which edition and plan the deployment uses, whether it is Community or Enterprise, and which Odoo version is running. Confirm that the version is still inside its standard support window, because security patches are only provided during standard support. Check that the hosting model is on-premise and that the subscription covers it. The step closes when the team has a written record of edition, plan, version and support end date, signed off by the owner of the platform.

  2. Secure the master password and database manager

    Replace the default master password in the server configuration with a long, unique secret stored in the organization's secrets management process. Restrict access to the database manager so that it is either disabled in production or reachable only by named administrators from controlled networks, and confirm the relevant option names in the Odoo 19.0 documentation for the deployed version. The check is a test that the database manager cannot be reached from an ordinary user network and that the master password is not stored in plain text in configuration files or version control.

  3. Place Odoo behind a reverse proxy with TLS

    Put a reverse proxy in front of the Odoo application and terminate TLS there, using certificates issued by your certificate authority. Configure the Odoo application to listen only on a local or internal interface, and block direct access to the application port at the host firewall and the network layer. Confirm the proxy settings that Odoo expects for forwarded headers and long-polling in the documentation for your version. The check is a scan from outside the network that shows the application port is closed and that only HTTPS on the proxy responds.

  4. Set up sign-in and two-factor authentication

    Decide how users will authenticate, either with local accounts, LDAP, or a supported OAuth provider, and configure that method before onboarding users. Enable two-factor authentication for all accounts that hold administrative or financial rights, and document the recovery process for lost devices. Remove or disable any shared or default accounts. The check is a login test for each method in a staging copy, plus a review confirming that administrative accounts cannot sign in without the second factor.

  5. Define groups, access rights and record rules

    Map each job role to an Odoo security group and grant only the access rights that role needs, then add record rules where users should see only some companies, teams or records. Keep the administrator group small and separate from day-to-day operational roles. Test every role with a non-admin account in a staging copy, attempting both the actions it should allow and the ones it should block. The check is a signed test matrix that shows each role passes its expected allow and deny cases, with any gaps fixed and retested.

  6. Inventory and review third-party and custom modules

    List every installed module, including custom Python modules, Studio customizations and third-party add-ons, and record its source, version and owner. Review each one for access control on models, use of sudo or elevated permissions, handling of credentials, and whether it is still maintained for the target Odoo version. Remove modules that are not in use and disable unused features. The check is an approved inventory with a named owner and a review decision for every module, and a list of modules that must be upgraded or replaced before the next version change.

  7. Configure backups with a tested restore

    Set up scheduled backups of the PostgreSQL database and the filestore together, and store copies off the application server in a location with separate access controls. Keep the encryption key and backup credentials outside the systems being backed up. Then perform a full restore into an isolated environment, start Odoo against the restored data, and confirm that records and attachments are present. The check is a documented restore run with its date, the time it took, and the result, repeated whenever the backup process changes.

  8. Create a patch and upgrade routine tied to support

    Write a routine that applies security updates and minor patches on a fixed cadence, and plans major version upgrades well before the standard support end date for the running version. Use a restored copy of production to rehearse each update and test custom modules against it before production changes. Assign owners for monitoring release notes and support dates. The check is a calendar entry for the next support end date, a rehearsal record from the most recent update, and a named owner who can approve a go or no-go decision.

How to verify that Odoo hardening holds and fails safely

A hardening change is only finished when someone has tried to break it and written down what happened. For an on-premise Odoo deployment, that means running a short set of checks against the live configuration, each with a stated expected result, and keeping the output so that an internal reviewer or an independent auditor can repeat the test later. Start with the database manager, because it is the highest-impact exposure. From a machine outside the trusted network segment, request the database manager page and confirm it does not list or create databases without the master password. Then confirm the master password is set to a strong value that is not stored in a shared file, and that the database manager is disabled in the production configuration if your team does not need it.

Next, confirm the exposed surface is what you designed. Scan the Odoo host from outside the proxy and verify that the only reachable service is the reverse proxy's TLS endpoint. The Odoo application port and the PostgreSQL port should not answer from any network except the internal segments that need them. Repeat the scan from inside the proxy network and from the application network, since a rule that blocks the public internet may still allow lateral access. Check the certificate chain and protocol versions the proxy negotiates, and record the scanner version, the target, the timestamp and the raw output. Those four fields are what make the result reproducible.

Access control is where most Odoo findings occur, so test it per role rather than per screen. Create one test user for each access group that exists in production, plus a user with no groups, and sign in as each. For every test user, confirm which menus appear, which records a list view returns for a company or team, and whether a record rule hides records that belong to another company or sales team. Then attempt the actions the user should not have: open a record by its database identifier in the URL, edit a field the role should only read, delete a record, and call the same model through the external API with that user's API key. The UI and the API must both refuse. Record each attempt as a row with the user, model, record identifier, action, expected result and observed result.

Two sign-in paths need failure testing as well. For two-factor authentication, enable it for a test user, then try to sign in with a wrong or missing second factor and confirm that no session is created and that repeated failures do not reveal which step failed. For LDAP, point a test user at an unreachable directory server, then at a server that returns an error, and confirm the login is refused rather than falling back to a local password that was never meant to apply. Also check the setting that creates users on first login from a template: a failed directory lookup must not create an account. Confirm these behaviors with the exact Odoo version and modules in your environment, since authentication behavior can change between releases.

Finally, prove that backups can be restored and that the restored copy is safe to use. Restore the most recent backup to an isolated test host, not to a machine that can reach production mail, payment or integration endpoints. Use Odoo's database duplication with neutralization so that outgoing email, scheduled actions and external connectors are disabled in the copy, and confirm the neutralization took effect. Compare record counts for key models, check that the filestore attachments open, and log the restore duration and any errors. Keep the restore log, the checksum of the backup file and the signed-off checklist together. Ask your independent assessor which evidence format they accept before you start, so the record is useful for the next assessment, not only for this one.

What drives the effort and cost of Odoo hardening

This table lists the factors that most change how much work Odoo hardening takes and how to keep each one manageable. Use it to see which inputs your team controls before asking a partner for a fixed-scope quote. The main takeaway is that fewer apps, fewer custom modules and an early role design reduce both review effort and ongoing patching load.

DriverWhy it changes effort or costHow to keep it down
Installed apps and custom modulesEach installed app adds menus, models, access rules and code paths that need review, configuration and testing after every patch.Install only the apps in the approved process scope, and prefer configuration over custom Python modules where possible.
Third-party modulesModules from outside Odoo need source review, dependency checks and a decision on whether they still work with the current version.Limit third-party modules to a short approved list and document the reason each one is needed.
User groups and record rulesEach group and record rule multiplies the access combinations that must be tested, and unclear rules are hard to audit.Define role-based groups early, map them to job functions and keep record rules to the cases that truly separate data by company or team.
Number of environmentsProduction, staging and test copies each need hardening, patch application, configuration checks and sanitized data handling.Keep a small set of environments and use neutralized database copies for testing so the same controls apply everywhere.
Integration endpoints using the external APIEach API consumer needs its own credential, scoped access, logging and error handling, and each adds a surface to test.Create one service account per integration with the narrowest group, and document every endpoint in use.
Sign-in method complexityCombining LDAP, OAuth providers, two-factor authentication and local accounts creates more paths to configure and verify.Choose one primary sign-in method for staff, disable unused providers and confirm the user creation rules before go-live.
Compliance scopeEach framework adds evidence requirements such as access reviews, change records and backup restore tests, and each needs an owner.Agree the control list and evidence format before work starts, and map each control to a specific Odoo setting or process.
Existing reverse proxy and backup toolingA team that already runs a managed reverse proxy with TLS and a backup platform needs less new build work, while a bare host needs both built and tested.Reuse existing TLS termination and backup tooling where it meets the requirements, and confirm the restore procedure with the platform owner.
Patch process ownershipOdoo security patches are only provided during standard support, so an undefined patch owner or missed window leaves the system exposed.Use one documented patch process with a named owner, a test database step and a fixed review cadence for each supported version.

How hardening changes by deployment model

A single-node deployment runs the Odoo application server, the PostgreSQL database and the filestore on one host. Hardening centers on that host: one reverse proxy terminates TLS in front of Odoo, the master password and database manager are locked down, and backups must leave the machine so a disk failure does not remove both the data and its copies.

  • TLS and proxy: Terminate TLS at a reverse proxy on the same host, disable the Odoo port from external access, and set the proxy and Odoo proxy-mode settings together so client addresses and HTTPS state are handled correctly.
  • Backups: Store dumps and filestore copies on a separate host or storage account, and test restores into a neutralized copy rather than the live database.
  • Patch delivery: Patches come from the host's own package or source update process, so the owner must schedule maintenance windows and keep the Odoo release within standard support.
  • Module installation: Install Enterprise and third-party modules from reviewed sources only, and confirm that the database manager is restricted after setup.

Confirm with the environment owner where the proxy and backup storage run, who can reach the database port, and whether the host has any route to the public internet for updates.

Secrets, access and network controls specific to Odoo

Most Odoo compromises start with something an installer left behind: a default master password, a database manager reachable from the internet, or a database role with more rights than the application needs. The controls below address those Odoo-specific weak points, and each one is worth checking on the running system rather than only in the installation notes.

Master password outside source control

The Odoo master password protects the database manager, which can create, duplicate, drop and back up databases. Keep it out of the configuration files committed to version control, store it in a restricted configuration file readable only by the Odoo service account, and rotate it when staff with knowledge of it change roles. Check that the password is not left at a default or shared value.

Database manager restricted to named networks

The database manager page should not be reachable from the public internet. Disable it where it is not needed, and where it is needed, restrict access at the reverse proxy to named administrator networks. Confirm that the proxy blocks database management paths for every other source, because an exposed manager is a route to data export and deletion that bypasses normal user sign-in.

Least-privilege PostgreSQL roles

Odoo needs a PostgreSQL role that can own and modify its own databases, but it does not need superuser rights on the cluster. Create a dedicated role for the application, avoid sharing it with other services, and confirm that backup and reporting tools use separate roles with read-only rights where possible. Review role attributes after every upgrade or hosting change.

Limited and reviewed administrator accounts

Odoo administrators can change access rights, export data and alter configuration across every company in the database. Keep the number of accounts with administrator rights small, name each one to a person, and review the list on a fixed schedule to remove leavers and unused accounts. Compare the list against the access groups documented for each role.

Two-factor authentication for administrators

Administrator accounts carry the highest impact if their passwords are reused or phished. Enforce two-factor authentication for every account with administrator rights, and confirm whether your chosen sign-in method (local passwords, LDAP, or an OAuth provider) lets Odoo enforce the second factor or whether the identity provider must enforce it. Test recovery steps before an administrator is locked out.

Control over module installation

Installing or updating a module runs its code on the server, so installation rights are effectively code execution rights. Restrict the ability to install apps and third-party modules to a small change group, require a review of each module before it reaches production, and record who installed what and when. This matters most when custom or community modules are part of the deployment.

Protected filestore and backup encryption keys

The filestore holds attachments and documents outside the database, so a database backup alone is incomplete and a filestore copy alone may expose sensitive files. Restrict filesystem permissions on the filestore, encrypt backups at rest, and store encryption keys separately from the backups they protect. Test a restore that uses only the documented key custody process so that recovery does not depend on one person.

What to monitor, back up, patch and document after go-live

Hardening is not finished at go-live. The controls you set up in the first weeks only stay effective if someone reviews them on a schedule, and the most common gaps appear months later, after staff change roles, a certificate quietly approaches expiry, or a module is installed for a one-off project and forgotten. Plan these recurring tasks with named owners before the system goes live, and treat each one as part of the operating model rather than a project deliverable. Start with access. Review users, access groups and their memberships on a fixed cadence and whenever someone changes role or leaves. Focus on the groups that grant administrative rights, the Settings and Technical features, and any group that can export data or change record rules. If you use LDAP or another external sign-in, confirm that a disabled directory account also stops Odoo access, because a local Odoo user with a password can otherwise remain active. Check who holds the master password and confirm that the database manager is still restricted to the people who need it. Next, make the logs useful. Forward the Odoo server log and the reverse proxy access and error logs to a central location where someone can search them. Build a short list of signals to review: repeated failed sign-ins for one account, sign-ins from unusual addresses, changes to users or access groups, module installs and upgrades, and database manager actions. Ask your team which log retention period your policies require and confirm that the proxy and application logs keep the same time source so events can be correlated.

Keep the transport layer current. Track the expiry dates of every TLS certificate on the reverse proxy and any load balancer in front of it, and automate renewal where your certificate authority supports it. After each renewal or proxy configuration change, test the public endpoint and check that the Odoo login page and longpolling traffic still work. Review the proxy's supported protocol versions and cipher settings on a schedule set by your security standard, and record the date of each review. Backups need the same discipline. The database and the filestore are two parts of one system: attachments, images and generated documents live in the filestore, while the records that reference them live in PostgreSQL. Take both in the same backup window, store copies off the application server, and encrypt them. Then test restores on a regular schedule into a separate environment, using a database duplicate with neutralization for test copies where that suits your process. Measure how long the restore takes, confirm the restored instance starts, and check that a sample of attachments opens. A backup that has never been restored is an assumption, not a control.

Patch and version management is the control most often lost. Odoo security patches are provided only during standard support, so record the version you run and its standard support end date in your asset register. Standard support for Odoo 19.0 runs until September 2028, and Odoo 20.0 is supported until September 2029. Odoo 18.0 is supported until September 2027, while Odoo 17.0 standard support ended in September 2026. If your instance runs 17.0 or an older version, treat that as an open risk and confirm with Odoo and your partner what options remain before planning the next step. Put the end-of-support date on a calendar with a review point well before it, because upgrades of custom code take longer than the upgrade of core. Finally, document every third-party module. For each module, record its name, source, exact version, the Odoo version it targets, the person who approved it, the date of the last security review, and whether it is active in production. Remove modules that are no longer used, and re-review any module after an Odoo upgrade. Keep this register next to your configuration and access review records so an auditor or a new administrator can see the whole picture in one place. Ask your implementation partner to hand over this register as a deliverable at go-live.

Questions buyers ask about Odoo security hardening

What drives the cost of Odoo security hardening?

The main drivers are how many components are in scope, how many custom and third-party modules need review, how many databases and companies share the environment, and how much of the current setup is already documented. The partner is paid for assessment, configuration changes, the access model review and handover documentation. Your team pays in staff time to answer access questions, approve changes and test. Your infrastructure owner pays for certificates, reverse proxy capacity and backup storage. Most of the work is one-time, while patching within support, periodic access reviews and backup restore tests recur. No cost figure is given here because it depends on the environment. Ask for a fixed-scope quote that lists each area, the module count, the environments covered, what is excluded and whether hosting costs are separate.

How long does Odoo security hardening take?

Duration depends on scope: the number of databases, the number of custom and third-party modules, whether a reverse proxy and TLS already exist, and how quickly the owners of access decisions respond. The work usually follows a sequence: inventory, configuration of the server and database manager, access model review, module review, backup and restore testing, and a patch process. Your version also sets a boundary. Odoo 19.0 has standard support until September 2028, so a hardening plan should account for the upgrade path before that date. No timeline is given here. Ask for a schedule in the written scope that shows each phase, the dependencies on your team and the testing windows.

What does our internal team need to provide for hardening?

Your team needs to provide working access to the servers, database and cloud or data center accounts, with privileges that let the partner make configuration changes. It should supply a staging copy of the database. Odoo documents duplication with neutralization for test copies, which keeps production data out of the test environment. Provide the installed module list with versions and sources, a network diagram covering DNS, certificates and firewall rules, and the location and retention of current backups. Name an owner for each access decision, such as who approves group membership, record rules for sensitive data and administrator accounts. Agree on change windows and a contact who can approve production changes.

Can our team harden Odoo without an outside partner?

Yes, a team with Linux, PostgreSQL, reverse proxy and Odoo administration skills can handle much of the work alone, and Odoo's documentation covers the core settings. The judgment calls are where outside help usually adds the most value: designing the access model, reviewing third-party modules for security issues, and assembling evidence that another party can check. Confirm that your team has the skills, the time and an upgrade plan that fits within standard support. Also confirm who will test restores and who will review changes to custom code. A written scope helps you measure whether the internal work is finished and where the gaps are.

Does hardening Odoo Community edition work the same way as Enterprise?

Most server-side controls apply to both editions. These include the master password, database manager restrictions, TLS termination at a reverse proxy, access rights, record rules and backups. The differences are in the product and its support. Community has no access to Odoo's upgrade service, and Enterprise features are only available with an Enterprise subscription. Enterprise source code is not publicly available, which affects how you review it. Confirm with Odoo which security updates and support terms apply to the Community version and release you run, because the documented standard support terms are written for the Enterprise and hosted offerings. Plan upgrades with that difference in mind before you commit to a hardening baseline.

Does a hardening review prove Odoo is compliant with a standard?

No. A hardening review does not produce a compliance certification, attestation or audit report. DeployOpen prepares systems, controls and evidence for compliance assessments, but independent auditors and certification bodies issue the assessment results. A review gives you documented configuration, access decisions, backup and restore records and a list of gaps that an auditor can test. Before work starts, ask the auditor which standard applies and which controls they will sample. Then map the evidence to those controls so the review produces what the assessment needs. Ask for the evidence format in the written scope.

How long will Odoo security patches keep coming for our version?

Security patches are only provided during standard support, which covers the first three years after a major release on Odoo Online, Odoo.sh and on-premise. Documented dates are Odoo 18.0 until September 2027, Odoo 19.0 until September 2028 and Odoo 20.0 until September 2029. Odoo 17.0 standard support ended in September 2026. Paid extended support is limited to Odoo.sh for select versions and to on-premise, and it is not a substitute for planning. Hardening does not extend support. Check the end date for your exact version in Odoo's support documentation, and schedule the upgrade and its testing well before standard support ends.

How DeployOpen scopes, hardens and hands over Odoo security work

DeployOpen is a Chainscore Labs company that plans, implements, hardens, backs up, documents and supports self-hosted open-source platforms inside the client's own infrastructure. For Odoo, we agree a written scope first, harden the instance in the client's environment, and hand over documentation and runbooks the internal team can operate.

How we scope

  • Confirm the Odoo edition, plan and hosting model, since on-premise use depends on the plan you hold.
  • Inventory the installed apps, third-party modules, custom code, sign-in methods and exposed endpoints before any change.
  • Agree the written scope, deliverables and timeline in advance, and list what is excluded such as penetration testing or code rewrites.

How we build

  • Configure the master password and database manager, restricting database access and removing unused database listings.
  • Place Odoo behind a reverse proxy with TLS, and review access rights and record rules for each sensitive model.
  • Review third-party and custom modules for risky code paths, and confirm backups and patch levels within standard support.

How we hand over

  • Deliver a hardening record listing each setting changed, its reason and the verification result.
  • Provide backup and restore runbooks, and document how to test a restore in a non-production copy.
  • Walk your administrators through access review, patch steps and the change log before closing the engagement.

How we support

  • Offer ongoing support and periodic review as a retainer, aligned to the agreed scope.
  • Plan patching and version moves against the Odoo support window, so security fixes remain available.
  • Ask for a quote that separates one-time hardening work from recurring support, testing and upgrade effort.

Sources and further reading

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.