blob: b66ffa71936fe1353e2bfba07199c02f5e4fb643 (
plain) (
tree)
|
|
# managed by Ansible
{% import 'macros.j2' as macros with context %}
# general
log connection errors
# hosts
table <local> { 127.0.0.1 }
{% call(h) macros.loop_valid_hosts("servers") -%}
table <{{ h.inventory_hostname }}> { {{ h.__ip.internal }} }
{% for name, rules in h.relayd_rules.items() if rules.domain is defined %}
table <{{ h.inventory_hostname }}_{{ rules.domain }}> { {{ h.__ip.internal }} }
{% endfor %}
{%- endcall %}
# protocols
http protocol "https" {
tls ciphers "HIGH:!AES128:!kRSA:!aNULL"
tls ecdhe "P-384,P-256,X25519"
tcp { sack, backlog 128 }
match request header append "X-Forwarded-For" value "$REMOTE_ADDR"
match request header append "X-Forwarded-By" value "$SERVER_ADDR:$SERVER_PORT"
match request header set "Connection" value "close"
match request header set "X-Forwarded-Proto" value "https"
match request header set "X-Forwarded-Port" value "443"
match response header set "Content-Security-Policy" value "upgrade-insecure-requests"
match response header set "Referrer-Policy" value "no-referrer"
match response header set "X-XSS-Protection" value "1; mode=block"
tls keypair "{{ relayd_domain_name }}"
pass request quick header "Host" value "{{ relayd_domain_name }}" forward to <local>
{% call(h) macros.loop_valid_hosts("servers") -%}
{% for name, rules in h.relayd_rules.items() if rules.domain is defined %}
{% set domain_name = rules.domain ~ "." ~ relayd_domain_name -%}
tls keypair "{{ domain_name }}"
pass request quick header "Host" value "{{ domain_name }}" forward to <{{ h.inventory_hostname }}_{{ rules.domain }}>
{% endfor %}
{%- endcall %}
block label "{{ relayd_block_msg }}"
return error
}
http protocol "http" {
# acme
pass request quick path "/.well-known/acme-challenge/*" forward to <local>
pass request quick header "Host" value "{{ relayd_domain_name }}" forward to <local>
{% call(h) macros.loop_valid_hosts("servers") -%}
{% for name, rules in h.relayd_rules.items() if rules.domain is defined %}
{% set domain_name = rules.domain ~ "." ~ relayd_domain_name -%}
pass request quick header "Host" value "{{ domain_name }}" forward to <{{ h.inventory_hostname }}_{{ rules.domain }}>
{% endfor %}
{%- endcall %}
return error
}
# relays
relay "www" {
listen on egress port 80
protocol "http"
# assume httpd reverse proxy is running for https redirection
forward to <local> port 8888 check icmp
}
relay "wwwtls" {
listen on egress port 443 tls
protocol "https"
forward to <local> port 80 check http "/" code 200
{% call(h) macros.loop_valid_hosts("servers") -%}
{% for name, rules in h.relayd_rules.items() if rules.domain is defined %}
forward to <{{ h.inventory_hostname }}_{{ rules.domain }}> port {{ rules.port }} check tcp
{% endfor %}
{%- endcall %}
}
|