<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="text">g.raphaelli's weblog</title>
  <id>http://g.raphaelli.com/tags/firewall/feed.atom</id>
  <updated>2009-01-12T10:45:44Z</updated>
  <link href="http://g.raphaelli.com/" />
  <link href="http://g.raphaelli.com/tags/firewall/feed.atom" rel="self" />
  <generator uri="http://zine.pocoo.org/" version="0.1.2">Zine</generator>
  <entry xml:base="http://g.raphaelli.com/tags/firewall/feed.atom">
    <title type="text">Circumventing security policy with gearman</title>
    <id>tag:g.raphaelli.com,2009-01-09/entry:2009/1/9/defeating-firewalls-with-gearmand</id>
    <updated>2009-01-12T10:45:44Z</updated>
    <published>2009-01-12T10:42:00Z</published>
    <link href="http://g.raphaelli.com/2009/1/9/circumventing-security-policy-with-gearman" />
    <author>
      <name>g</name>
    </author>
    <content type="html">&lt;p&gt;Gearman can be handy for defeating security in situations like the one pictured:

&lt;/p&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://static.g.raphaelli.com/images/2009/01/12/host-setup.png"&gt;&lt;/div&gt;

Here, Host A can initiate connections to Host B but Host B is blocked by a firewall/router ACL/etc from initiating communications with Host A.&lt;p&gt;&lt;/p&gt;

&lt;p&gt;With gearman, you can call a service on Host A from Host B with a setup like this:

&lt;/p&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://static.g.raphaelli.com/images/2009/01/12/gearman-rpc.png"&gt;&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;Run a gearmand job server on host B (or any host that A and B can both reach).&lt;/li&gt;
&lt;li&gt;Register a gearman worker running on Host A with that job server.&lt;/li&gt;
&lt;li&gt;Submit work from a client running on Host B to that job server.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;/p&gt;

&lt;p&gt;This idea can be taken another step by chaining workers together such that calling abc() as depicted above creates a job that Host C, which can't reach or be reached by Host B at all, can ultimately execute.  That kind of setup makes it increasingly difficult to track an individual task's real status but it can be handy in a pinch.&lt;/p&gt;</content>
  </entry>
</feed>

