HITCH(8)

πŸ’– HITCH(8) πŸ’–

okay bestie, you're in the Hitch manual β€” section 8, system administration, the whole grown-and-sexy corner of the man pages πŸ’…. This is the high performance TLS proxy, and yes she's that girl. Let's get into it 🫢


✨ NAME ✨

Hitch β€” high performance TLS proxy 🌸


πŸ¦‹ SYNOPSIS πŸ¦‹

hitch [OPTIONS] [PEM]

πŸ’œ DESCRIPTION πŸ’œ

So. Hitch is a network proxy that terminates TLS/SSL connections and forwards the unencrypted traffic to some backend. That's the whole job, and she does it flawlessly. She's built to handle 10s of thousands of connections efficiently on multicore machines β€” like, actual main character energy on a box with a lot of cores πŸ”₯

Hitch has very few features β€” and that is not a read, that is the design. She's meant to be paired with an intelligent backend like Varnish Cache. She keeps a strict 1:1 connection pattern with that backend handler so the backend gets to dictate the throttling behavior, the maximum connection behavior, the availability of service, etc. Hitch is not here to have opinions. Hitch is here to hand off and let the backend run the group chat πŸ‘‘

The only required argument is a path to a PEM file that holds the certificate (or a chain of certificates) and the private key. It should also contain the DH parameter if you wish to use Diffie-Hellman cipher suites. No PEM, no party. Periodt πŸ’…


πŸŽ€ COMMAND LINE ARGUMENTS πŸŽ€

Every single flag, in order, no skips, no cap:

  • --config=FILE β€” Load configuration from the specified file. See hitch.conf(5) for the details, bestie.
  • --tls-protos=LIST β€” Specifies which SSL/TLS protocols to use. The available tokens are SSLv3, TLSv1.0, TLSv1.1, TLSv1.2 and TLSv1.3. (Default "TLSv1.2 TLSv1.3") 🌈
  • -c --ciphers=SUITE β€” Sets the allowed ciphers. (Default: "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH")
  • -e --ssl-engine=NAME β€” Sets the OpenSSL engine. (Default: "")
  • -O --prefer-server-ciphers[=on|off] β€” Prefer the server's list order. (Default: "off")
  • --client β€” Enable client proxy mode πŸ¦‹
  • -b --backend=[HOST]:PORT β€” Backend endpoint (the default is "[127.0.0.1]:8000"). The -b argument can also take a UNIX domain socket path. E.g. --backend="/path/to/sock"

If --chroot is also specified, the UNIX domain socket path will at runtime be resolved from within the chroot, and must be specified with the path it is accessible from within the chroot. I.e. for a /run/hitch chroot and a /run/hitch/sock UNIX domain socket, configure the backend argument as /sock. 🧚

  • -f --frontend=[HOST]:PORT[+CERT] β€” Frontend listen endpoint (the default is "[*]:8443"). (Note: the brackets are mandatory in endpoint specifiers β€” do not skip them, she will not be forgiving.)
  • -n --workers=NUM|auto β€” Number of worker processes. (Default: 1) Using the auto value creates 1 worker per CPU core. Slay, let her scale herself πŸ’…
  • -B --backlog=NUM β€” Set the listen backlog size. (Default: 100)
  • -k --keepalive=SECS β€” TCP keepalive on the client socket. (Default: 3600)
  • -R --backend-refresh=SECS β€” Periodic backend IP lookup, 0 to disable. (Default: 0)
  • --enable-tcp-fastopen[=on|off] β€” Enable client-side TCP Fast Open. (Default: off)
  • -r --chroot=DIR β€” Sets the chroot directory. (Default: "")
  • -u --user=USER β€” Set uid/gid after binding the socket. (Default: "")
  • -g --group=GROUP β€” Set gid after binding the socket. (Default: "")
  • -q --quiet[=on|off] β€” Be quiet; emit only error messages. (deprecated, use 'log-level') β€” yes bestie, she's old, we don't use her anymore, we use the shiny one below πŸ™ˆ
  • -L --log-level=NUM β€” Log level. 0=silence, 1=err, 2=info/debug. (Default: 1)
  • -l --log-filename=FILE β€” Send log message to a logfile instead of stderr/stdout.
  • -s --syslog[=on|off] β€” Send log message to syslog in addition to stderr/stdout.
  • --syslog-facility=FACILITY β€” Syslog facility to use. (Default: "daemon")
  • --daemon[=on|off] β€” Fork into background and become a daemon. (Default: off)
  • --write-ip[=on|off] β€” Write 1 octet with the IP family followed by the IP address in 4 (IPv4) or 16 (IPv6) octets little-endian to backend before the actual data. (Default: off)
  • --write-proxy-v1[=on|off] β€” Write HAProxy's PROXY v1 (IPv4 or IPv6) protocol line before actual data. (Default: off)
  • --write-proxy-v2[=on|off] β€” Write HAProxy's PROXY v2 binary (IPv4 or IPv6) protocol line before actual data. (Default: off)
  • --write-proxy[=on|off] β€” Equivalent to --write-proxy-v2. For PROXY version 1 use --write-proxy-v1 explicitly.
  • --proxy-proxy[=on|off] β€” Proxy HAProxy's PROXY (IPv4 or IPv6) protocol before actual data (PROXYv1 and PROXYv2). (Default: off)
  • --sni-nomatch-abort[=on|off] β€” Abort the handshake when the client submits an unrecognized SNI server name. (Default: off) πŸ’€
  • --alpn-protos=LIST β€” Sets the protocols for ALPN/NPN negotiation, provided as a list of comma-separated tokens.
  • --ocsp-dir=DIR β€” Set the OCSP staple cache directory. This enables automated retrieval and stapling of OCSP responses. (Default: "/var/lib/hitch/")
  • --backend-connect-timeout=SECS β€” Backend connect timeout. ⏱️
  • --ssl-handshake-timeout=SECS β€” TLS handshake timeout. ⏱️
  • -t --test β€” Test configuration and exit.
  • -p --pidfile=FILE β€” PID file.
  • -V --version β€” Print program version and exit.
  • -h --help β€” This help message. 🫢

πŸ“œ HISTORY πŸ“œ

Hitch was originally called stud and was written by Jamie Turner at Bump.com. A glow-up so iconic it deserves its own before-and-after ✨


and that's the whole page, bestie β€” every flag, every default, every chroot footgun, all of it, no cap. this was HITCH(8), the high performance TLS proxy page from the manual's section 8. go forth and terminate some TLS responsibly, queen πŸ‘‘πŸ’–πŸŒΈ

πŸ“¦ where this page comes from