Nice, thanks. I'll upgrade our dev-machine the coming week! Frontend has nothing to do with what I want to do, I want to drop/tarpit/reject after the response.
Den 29 juli 2017 5:40 em skrev "[email protected]" <[email protected]>: > 2017-07-29 16:57 GMT+02:00 Charlie Elgholm <[email protected]>: > > Ok, but anyhow, this actually means that I can use http-response to do > > something on the response. That's good. I'll play with it for a while on > my > > dev-server. Nice! > > > > Version can be upgraded, of course, if I can just motivate it! :) > > > > Den 29 juli 2017 12:44 em skrev "Igor Cicimov" > > <[email protected]>: > >> > >> > >> > >> On Fri, Jul 28, 2017 at 10:00 PM, Charlie Elgholm <[email protected]> > >> wrote: > >>> > >>> Ok, I'm on the 1.5.x bransch unfortunately, due to Oracle Linux issues. > >>> Can install manually, but that might raise some eyebrows. > >>> > >>> But what you're telling me is that I can route the request to another > >>> backend (or drop it) in haproxy based on something I received from one > >>> backend?? > >>> > >>> Den 28 juli 2017 1:40 em skrev "Igor Cicimov" > >>> <[email protected]>: > >>> > >>> > >>> > >>> On Fri, Jul 28, 2017 at 6:03 PM, Charlie Elgholm <[email protected]> > >>> wrote: > >>>> > >>>> Thanks! > >>>> > >>>> I was really hoping for acl-validation on the basis of the response > from > >>>> the backend server, and not on the incoming request at the frontend. > >>>> And, as much as I really like lua as a language, I'd rather keep my > >>>> haproxy with as small footprint as possible. =) > >>>> > >>>> Really nice example about all the possibilities though, thanks! > >>>> > >>>> This is how all examples I find operate: > >>>> incoming request => haproxy => frontend => acl based on what's known > >>>> about the incoming requests => A or B > >>>> A: backend => stream backend response to client > >>>> B: tarpit / reject > >>>> > >>>> I would like this: > >>>> incoming request => haproxy => frontend => backend => acl based on > >>>> what's known about the response from the backend => A or B > >>>> A: stream backend response to client > >>>> B: tarpit / reject > >>>> > >>>> > >>>> 2017-07-28 9:52 GMT+02:00 Igor Cicimov <igorc@encompasscorporation. > com>: > >>>>> > >>>>> > >>>>> > >>>>> On 28 Jul 2017 5:41 pm, "Charlie Elgholm" <[email protected]> > wrote: > >>>>> > >>>>> Hi Folks, > >>>>> > >>>>> Either I'm too stupid, or it's because it's Friday.... > >>>>> > >>>>> Can you tarpit/reject (or other action) based on a response from the > >>>>> backend? > >>>>> You should be able to, right? > >>>>> > >>>>> Like this: > >>>>> tcp-response content tarpit/reject if res.hdr(X-Tarpit-This) > >>>>> > >>>>> Can someone explain this to me? (Free beer.) > >>>>> > >>>>> I have a fairly complex ruleset on my backend server, written in > Oracle > >>>>> PL/SQL, which monitors Hack- or DoS-attempts, and I would love to > tarpit > >>>>> some requests on the frontend (by haproxy) based on something that > happens > >>>>> on my backend. > >>>>> > >>>>> As I do now I return a 503 response from the server, and > iptable-block > >>>>> those addresses for a while. But since they see the 503 response > they'll > >>>>> return at a later date and try again. I would like the connection to > just > >>>>> die (drop, no response at all) or tarpit (long timeout, so they give > up). I > >>>>> suppose/hope they'll eventually remove my IP from their databases. > >>>>> > >>>>> I'm guessing a tarpit is smarter than a reject, since the reject will > >>>>> indicate to the attacker that somethings exist behind the server IP. > >>>>> An iptable "drop" would be preferable, but I guess that's a little > late > >>>>> since haproxy has already acknowledged the connection to the > attacker. > >>>>> > >>>>> -- > >>>>> Regards > >>>>> Charlie Elgholm > >>>>> Brightly AB > >>>>> > >>>>> Good example of delay with lua: > >>>>> http://godevops.net/2015/06/24/adding-random-delay- > specific-http-requests-haproxy-lua/ > >>>> > >>>> > >>>> > >>>> > >>>> -- > >>>> Regards > >>>> Charlie Elgholm > >>>> Brightly AB > >>> > >>> > >>> Well the idea is to redirect the response on the backend (based on some > >>> condition) to a local frontend where you can use the tarpit on the > request. > >>> > >>> You cam also try: > >>> > >>> http-response silent-drop if { status 503 } > >>> > >>> that you can use in the backed (at least in 1.7.8, not sure for other > >>> versions) > >>> > >>> > >>> > >> > >> I was thinking of something along these lines: > >> > >> frontend ft_tarpit > >> mode http > >> bind 127.0.0.1:4444 > >> default_backend bk_tarpit > >> > >> backend bk_tarpit > >> mode http > >> timeout tarpit 3600s > >> http-request tarpit > >> > >> backend bk_main > >> mode http > >> http-response redirect 127.0.0.1:4444 if { status 503 } > >> > >> but you are out of luck again since "http-response redirect" was > >> introduced in 1.6 > >> > > > > Hi Charlie, > > many ideas come to my mind to solve your requirement, but all of these > require HAProxy 1.6 (or better: HAProxy 1.7) > > Some keywords: > > "http-response silent-drop" > "http-response track-sc" + checking stick-table entry with acl in frontend > "http-response" + (random) delay with lua (my preferred solution) > > > ------------------- > Best Regards > > Bjoern >

