The only place tcp-request appears in my config is in relation to
rate-limiting, which we have set up to track but not enforce. Here are the
associated rules:
frontend main
[...]
acl rate_whitelist src 10.0.0.1
acl rate_whitelist src 10.0.1.1
acl rate_whitelist src 10.0.1.2
acl rate_whitelist src 10.0.1.3
acl rate_whitelist src 10.0.1.4
stick-table type ip size 200k expire 60s store gpc0
tcp-request connection track-sc0 src if ! rate_whitelist
#use_backend throttled if { sc0_get_gpc0 gt 0 }
backend www
[...]
stick-table type ip size 200k expire 1m store http_req_rate(30s)
acl abuse_req_rate sc1_http_req_rate gt 1000
acl mark_as_abuser sc0_inc_gpc0(main) gt 0
tcp-request content track-sc1 src
tcp-request content reject if abuse_req_rate mark_as_abuser
Here's a pastebin of the full config:
https://paste.ubuntu.com/p/nM6xq4Vp2z/
Thanks!
On Tue, Mar 17, 2020 at 1:24 AM Christopher Faulet <[email protected]>
wrote:
> Le 06/03/2020 à 18:53, Sean Reifschneider a écrit :
> > Here's what the stack traces look like, they all seem to be showing
> > "pattern_exec_match" and "epool_wait":
> >
> > PID: 14348 (haproxy)
> > UID: 0 (root)
> > GID: 0 (root)
> > Signal: 11 (SEGV)
> > Timestamp: Thu 2020-03-05 19:59:05 MST (14h ago)
> > Command Line: /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p
> > /run/haproxy.pid -S /run/haproxy-master.sock
> > Executable: /usr/sbin/haproxy
> > Control Group: /system.slice/haproxy.service
> > Unit: haproxy.service
> > Slice: system.slice
> > Boot ID: 847e3549533c4b9b970c6ec86776621d
> > Machine ID: 90c4e8de95634bd898f918ea24b07374
> > Hostname: fw1
> > Storage:
> >
> /var/lib/systemd/coredump/core.haproxy.0.847e3549533c4b9b970c6ec86776621d.14348.1583463545000000.lz4
> > Message: Process 14348 (haproxy) of user 0 dumped core.
> >
> > Stack trace of thread 14349:
> > #0 0x0000564a9deaed08 pattern_exec_match (haproxy)
> > #1 0x0000564a9dee8eda acl_exec_cond (haproxy)
> > #2 0x0000564a9ded9848 tcp_exec_l4_rules (haproxy)
> > #3 0x0000564a9decfe24 session_accept_fd (haproxy)
> > #4 0x0000564a9debab44 n/a (haproxy)
> > #5 0x0000564a9dedc88e process_runnable_tasks (haproxy)
> > #6 0x0000564a9de87dd2 n/a (haproxy)
> > #7 0x00007f0f0de6a6db start_thread (libpthread.so.0)
> > #8 0x00007f0f0c8de88f __clone (libc.so.6)
> >
> > Stack trace of thread 14348:
> > #0 0x00007f0f0c8debb7 epoll_wait (libc.so.6)
> > #1 0x0000564a9dda7cef n/a (haproxy)
> > #2 0x0000564a9de87dbf n/a (haproxy)
> > #3 0x0000564a9dda5a4e main (haproxy)
> > #4 0x00007f0f0c7deb97 __libc_start_main (libc.so.6)
> > #5 0x0000564a9dda672a _start (haproxy)
> >
> > I have a bunch of ACLs to select the backend based on the host header,
> like:
> >
> > acl sitedown_stg_acl hdr(host) -m reg -i ^sitedown.example.com
> > <http://sitedown.example.com>
> > use_backend sitedown_stg if sitedown_stg_acl
> >
> > I'm not seeing anything particularly weird about those, the most
> complicated is
> > probably:
> >
> > acl aerial_acl hdr(host) -m reg -i ^aerial[1-4].(dev|stg).
> example.com
> > <http://example.com>
> > use_backend aerial if aerial_acl
> >
> > Thoughts?
> >
>
> Hi,
>
> If the segfault happens during execution of L4 rules, it means the faulty
> acl is
> on a "tcp-request connection" rule, not on use_backend directive. Could
> you
> share this part of your configuration ?
>
> --
> Christopher Faulet
>