> On 23 Apr 2017, at 15:19, Aleksandar Lazic <al-hapr...@none.at> wrote:
> 
> Hi Thierry
> 
> Am 20-04-2017 15:05, schrieb Thierry Fournier:
>> Hi,
>> After a quick private brainstorm, Willy propose to me a new binary encoding
>> for the headers. It is useless to give the numbers of headers contained in
>> the block, so the end of headers is marked by an empty header (header name
>> and value have a length of 0).
>> The new patches in attachment (first patch is 0002).
> 
> I have now created a docker image
> 
> https://hub.docker.com/r/me2digital/haproxy-waf/
> 
> The build was successfully and haproxy starts.
> 
> I have also try to check if the modsecurity starts and yeah it starts ;-)
> 
> ###
> 
> 1492953204.290643 [00] ModSecurity for nginx (STABLE)/2.9.1 
> (http://www.modsecurity.org/) configured.
> 1492953204.290705 [00] ModSecurity: APR compiled version="1.4.8"; loaded 
> version="1.4.8"
> 1492953204.290730 [00] ModSecurity: PCRE compiled version="8.32 "; loaded 
> version="8.32 2012-11-30"
> 1492953204.290739 [00] ModSecurity: YAJL compiled version="2.0.4"
> 1492953204.290743 [00] ModSecurity: LIBXML compiled version="2.9.1"
> 1492953204.290747 [00] ModSecurity: Status engine is currently disabled, 
> enable it by set SecStatusEngine to On.
> 1492953209.298799 [03] 0 clients connected
> 1492953209.298937 [04] 0 clients connected
> ...
> ###
> 
> Now we can go the next step and create a complete solution ;-)
> 
> It would be interesting to go the same way as mod_sec & nginx is going.
> 
> https://www.trustwave.com/Resources/SpiderLabs-Blog/Announcing-the-availability-of-ModSecurity-extension-for-Nginx/
> 


Hi aleksander,

Thanks for the news. I integrated ModSec using the same way than NGinx, so it is
absolutely a good idea to follow the same way than ModSec/NGinx. I will write an
howto and publish benchmark when I found a lot of time.

A feedback on your test is welcome.

Thierry

>> Thierry
> 
> Regards
> Aleks
> 
>>> On 19 Apr 2017, at 15:34, thierry.fourn...@arpalert.org wrote:
>>> Hi,
>>> There is a new lot of patches for the spoa/modescurity contrib.
>>> Thierry
>>> On Wed, 19 Apr 2017 11:24:36 +0200
>>> Thierry Fournier <thierry.fourn...@ozon.io> wrote:
>>>>> On 19 Apr 2017, at 09:16, Aleksandar Lazic <al-hapr...@none.at> wrote:
>>>>> Am 19-04-2017 05:51, schrieb Willy Tarreau:
>>>>>> On Tue, Apr 18, 2017 at 11:55:46PM +0200, Aleksandar Lazic wrote:
>>>>>>> Why not reuse the upcoming http/2 format.
>>>>>>> HTTP/2 is *easy* to parse and the implementations of servers are 
>>>>>>> growing?
>>>>>> Are you kidding ? I mean you want everyone to have to implement HPACK 
>>>>>> etc ?
>>>>> Well there are a currently lot of http/2 servers out there, but I 
>>>>> understand your concerns.
>>>>>>> I know this is still on the todo list but I think this is worth to go
>>>>>>> instead to add another protocol.
>>>>>>> Or we can take a look into grpc, which is on top of http/2 with 
>>>>>>> protobuffer.
>>>>>>> http://www.grpc.io/
>>>>>>> As I take more time to think in this direction why not add a grpc filter
>>>>>>> like the spoa filter?
>>>>>>> Opinions?
>>>>>> Code generators are always a pain to deal with. It reminds me the old 
>>>>>> days
>>>>>> when I was using rpcgen. And grpc doesn't provide a C implementation so 
>>>>>> that
>>>>>> kills it :-)
>>>>> Yeah I have also seen that they prefer c++, c#, go and other languages 
>>>>> but not offer a c lib.
>>>>> This is strange just because the core is written in c, but I don't need 
>>>>> to understand everything ;-)
>>>>>> Thierry told me he's going to implement a simple TLV-like list which will
>>>>>> be much easier to implement and easy to code on both sides.
>>>>> @Thierry:
>>>>> Ah something like netstrings ?
>>>>> https://cr.yp.to/proto/netstrings.txt
>>>> Hi thanks for the link. I do not like this encoding because it is not easy 
>>>> to
>>>> parse. I must read ascii representation of numbers and convert-it. I prefer
>>>> simple binary format, with length (encoding in the same way than the SPOE
>>>> protocol) and value.
>>>> Hi, the main goal is providing:
>>>> - a format easy to decode
>>>> - not adding lot of dependencies to haproxy
>>>> So, after brainstorm, I propose:
>>>> - remove all data already accessible via existing sample-fetches from the 
>>>> new
>>>>  sample-fetch introduced by my previous patch. These data are:
>>>>  method, path, query string, http-version and the body. All of these data 
>>>> are
>>>>  available in some sample fetches and it will be great to reuse it. Note 
>>>> that
>>>>  the only data which keep are the headers.
>>>> - For the headers I propose two format: The first format is for general 
>>>> use. It
>>>>  is simply the header block in the same format that we received (with the 
>>>> final
>>>>  \r\n for detecting truncated header bloc)
>>>> - For header I propose also a binary format like this:
>>>>  <number of headers>
>>>>  [
>>>>     <header name length><header name content>
>>>>     <header value length><header value content>
>>>>  ]…
>>>>  This format is easy to decode because each length is encoded with the SPOE
>>>>  numeric values encoding method, so it is always embedded in SPOE client.
>>>> The SPOE message description will become
>>>>  spoe-message check-request
>>>>     uniqueid args method path query req.ver req.hdrs_bin req.body_size 
>>>> req.body
>>>> uniqueid is a string which allow to do matching between the mod security 
>>>> logs and
>>>>        the haproxy logs. I propose the uniqueid, but this string can be 
>>>> another
>>>>        think like an header containing a uniqueid previously generated.
>>>> req.hrds_bin is the header bloc in binary format.
>>>> req.body_size is the advertised size of the body and it is used to 
>>>> determine if the
>>>>             body is full or truncated.
>>>> Thierry
>>>>>> I personally
>>>>>> think that adding dependencies on tons of libs to implement simple stuff
>>>>>> is more of a problem than an help even for implementors, because when you
>>>>>> start to enter some dependency hell or version incompatibilities, it's a
>>>>>> real pain, especially when it was done only to find how to implement
>>>>>> just a small list. These things are useful if you want to implement heavy
>>>>>> inter-application communications but it's not really the case here.
>>>>> I got you.
>>>>>> Cheers,
>>>>>> Willy
>>>>> Regards
>>>>> Aleks
>>> <0001-BUG-MINOR-change-header-declared-function-to-static-.patch><0002-REORG-spoe-move-spoe_encode_varint-spoe_decode_varin.patch><0003-MINOR-Add-binary-encoding-request-header-sample-fetc.patch><0004-MINOR-proto-http-Add-sample-fetch-wich-returns-all-H.patch><0005-MINOR-Add-ModSecurity-wrapper-as-contrib.patch>


Reply via email to