{"id":16935376,"url":"https://github.com/dsander/rabbitcage","last_synced_at":"2025-03-22T12:31:43.206Z","repository":{"id":56889995,"uuid":"443804","full_name":"dsander/rabbitcage","owner":"dsander","description":"A AMQP firewall which allows to restrict user access to RabbitMQ using ACLs.","archived":false,"fork":false,"pushed_at":"2009-12-21T22:39:30.000Z","size":88,"stargazers_count":24,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-18T11:05:32.166Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dsander.png","metadata":{"files":{"readme":"README.markdown","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2009-12-20T15:53:26.000Z","updated_at":"2019-08-13T14:30:02.000Z","dependencies_parsed_at":"2022-08-21T00:50:21.928Z","dependency_job_id":null,"html_url":"https://github.com/dsander/rabbitcage","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dsander%2Frabbitcage","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dsander%2Frabbitcage/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dsander%2Frabbitcage/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dsander%2Frabbitcage/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dsander","download_url":"https://codeload.github.com/dsander/rabbitcage/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244959442,"owners_count":20538625,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-13T20:54:22.220Z","updated_at":"2025-03-22T12:31:42.895Z","avatar_url":"https://github.com/dsander.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RabbitCage\n\n**WARNING: This project is at a very early stage of development. The command line options and the config file format will most likely change in future versions.**\n\nRabbitCage is a AMQP application firewall build on EventMachine. The code has been heavily inspired by mojombo's awesome [ProxyMachine](http://github.com/mojombo/proxymachine/).\n\nRabbitCage was written because RabbitMQ's access control capabilities are rather limited.\n\nRabbitCage works as a transparent, content aware proxy between the connecting client and a AMQP broker (currently only tested with RabbitMQ). Based on configured ACL-like rules RabbitCage will either forward or reject the message. Messages sent from the broker are forwarded directly to the client using EventMachine's [proxy incoming to](http://eventmachine.rubyforge.org/EventMachine/Connection.html#M000275), though it will just affect the client -\u003e server performance.\n\n## Installation\n\n\tsudo gem install rabbitcage\n\n## Running\n\n\tUsage:\n\trabbitcage -c \u003cconfig file\u003e [-h \u003chost\u003e] [-p \u003cport\u003e]\n\t\n\tOptions:\n\t    -c, --config CONFIG              Configuration file\n\t    -h, --host HOST                  Hostname to bind. Default 0.0.0.0\n\t    -p, --port PORT                  Port to listen on. Default 5672\n\t    -r, --remote-host HOST           Hostname of the RabbitMQ server to connect to. Default 'localhost'\n\t    -x, --remote-port PORT           Port of the RabbitMQ server to connect to. Default 5673\n\t    -v                               Verbose output (denied requests).\n\t    -V                               Very verbose output (denied requests/allowed requests).\n\t    -D                               Debug output (denied requests/allowed requests/debug info).\n\n## Example config file\n\t# Basic syntax:\n\t# allow|deny 'username'|:all, AMQP method|:all, AMQP class|:all, Hash of AMQP method properties\n\t#\n\t# This example will allow the admin user to perform any action on the broker.\n\t# A guest is allowed to consume every exchange which name does not start with 'private_' and\n\t# register every queue which name does not start with 'reserved_'\n\tinclude RabbitCageACL\n\tconfig do\n\t  allow 'admin', :all, :all\n\t  allow 'guest', :all, :queue, :name =\u003e /^(?!reserved_)/\n\t  allow 'guest', :all, :exchange, :name =\u003e /^(?!private_)/\n\t  allow 'guest', [:consume, :get], :basic\n\t  allow 'guest', :all, :connection\n\t  allow 'guest', :all, :channel\n\t  allow 'guest', :all, :access\n\t  default :deny\n\tend\n\n## Performance\nHere are some basic performance measurements which compares a raw connection to RabbitMQ with a filtered one. Check the [spec/performance/test.rb](http://github.com/dsander/rabbitcage/blob/master/spec/performance/test.rb) script to get information about how the tests were run. If you have a more benchmark results or suggestions about how to change the benchmark, please let me know.\n\n\tAverage message delay:\n\tRabbitMQ    : 0.00293165922164917\n\tRabbitCache : 0.00457870006561279\n\n\tFor a 1kb message do 1000 times:\n\tRabbitMQ    push to queue : 0.443398952484131\n\tRabbitMQ    pop from queue: 0.711700439453125\n\tRabbitMQ    async get     : 0.847184419631958\n\tRabbitCache push to queue : 0.764634847640991\n\tRabbitCache pop from queue: 1.02018523216248\n\tRabbitCache async get     : 0.852582693099976\n\n\n## Note on Patches/Pull Requests\n \n* Fork the project.\n* Make your feature addition or bug fix.\n* Add tests for it. This is important so I don't break it in a\n  future version unintentionally.\n* Commit, do not mess with rakefile, version, or history.\n  (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)\n* Send me a pull request. Bonus points for topic branches.\n\n## Copyright\n\nCopyright (c) 2009 Dominik Sander. See LICENSE for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdsander%2Frabbitcage","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdsander%2Frabbitcage","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdsander%2Frabbitcage/lists"}