123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- .. _guide-security:
- ==========
- Security
- ==========
- .. contents::
- :local:
- Introduction
- ============
- While Celery is written with security in mind, it should, like everything
- else, be treated as an unsafe component.
- Depending on you or your company's `Security Policy`_, there are
- various steps you can take to make your Celery installation more secure.
- .. _`Security Policy`: http://en.wikipedia.org/wiki/Security_policy
- Areas of Concern
- ================
- * Broker
- It is imperative that the broker is guarded from unwanted access.
- The worker must not automatically trust the messages it receives
- from the broker, especially if the broker is publicly accessible.
- If possible, the first step should be to use a firewall to deny access
- to the broker, so that only white-listed machines have access to the port
- the broker is listening on.
- While firewalls are usually effective, they don't help
- if someone temporarily disables them, leaving a statistically enough short
- window of attack to be fairly safe, but then that same someone forgets
- to re-enable it and it's not detected until months later.
- This along with firewall misconfiguration
- happens frequently in the real world, and with all the other possible
- ways to get behind private networks, this is why you should never
- trust that something behind a firewall is protected, and does not need
- further security measures.
- If your broker supports fine-grained access control, like RabbitMQ,
- this is something you should look at enabling. See for example
- http://www.rabbitmq.com/access-control.html.
- * Client
- In Celery, "client" refers to anything that sends
- messages to the broker, e.g. web-servers that apply tasks.
- Having your broker properly secured doesn't matter if arbitrary messages
- can be sent through a client.
- * Worker
- By default any task executed in the worker has the same access to the workers
- memory space, file-system and devices as the privileges of the
- current user. That is except when using the multiprocessing pool, where
- there are dedicated worker processes for tasks. It will have access to
- any memory copied as a result of the :fun:`fork` call, and also unless
- ``maxtasksperchild`` is set to 1, access to the memory contents written
- by parent tasks in the same worker child process.
- Limiting access to memory contents can be done by launching every task
- in a subprocess (:fun:`fork` + :fun:`execve`).
- Limiting file-system and device access can be accomplished by using
- `chroot`_, `jail`_, `sandboxing`_, virtual machines or other
- mechanisms as enabled by the platform or additional software.
- Also remember that any task executed in the worker will have the
- same network access as the machine it is running on. So if the worker is
- located in an internal network, it may be a good idea to firewall
- the workers outbound traffic.
- .. _`chroot`: http://en.wikipedia.org/wiki/Chroot
- .. _`jail`: http://en.wikipedia.org/wiki/FreeBSD_jail
- .. _`sandboxing`:
- http://en.wikipedia.org/wiki/Sandbox_(computer_security)
- Serializers
- ===========
- *To be written.*
- Message Signing
- ===============
- *To be written.*
- Intrusion Detection
- ===================
- The most important part when defending your systems against
- intruders is the ability to detect that the system has in fact been
- compromised.
- Logs
- ----
- Logs are often the first place we go to to find evidence
- of security breaches, but the logs are useless if they can be tampered with.
- If you are serious about security you should log to a centralized
- log server, with strict access control. This should be easy to setup
- using syslog, (also `syslog-ng`_ and `rsyslog`_.)
- A tip for the paranoid is to send logs using UDP and cut the
- transmit part of the logging servers network cable :-)
- .. _`syslog-ng`: http://en.wikipedia.org/wiki/Syslog-ng
- .. _`rsyslog`: http://www.rsyslog.com/
- Tripwire
- --------
- `Tripwire`_ is a (now commercial) data integrity tool used to keep
- cryptographic hashes of files in the file-system, so that administrators
- can be alerted when they change. This way if the damage is done, and your
- system has been compromised you can tell exactly what files the intruders
- changed (password files, logs, backdoors, rootkits and so on).
- Often this is the only way you will be able to detect an intrusion.
- Several good open source alternatives exists, including:
- * `OSSEC`_
- * `Samhain`_
- * `Open Source Tripwire`_
- * `AIDE`_
- Also, the `ZFS`_ file-system comes with built-in integrity checks
- that can be used.
- .. _`Tripwire`: http://tripwire.com/
- .. _`OSSEC`: http://www.ossec.net/
- .. _`Samhain`: http://la-samhna.de/samhain/index.html
- .. _`AIDE`: http://aide.sourceforge.net/
- .. _`Open Source Tripwire`: http://sourceforge.net/projects/tripwire/
- .. _`ZFS`: http://en.wikipedia.org/wiki/ZFS
|