Blame bootstrap_ver/extensions/libxt_SYNPROXY.man

Packit Service dd8e2b
This target will process TCP three-way-handshake parallel in netfilter
Packit Service dd8e2b
context to protect either local or backend system. This target requires
Packit Service dd8e2b
connection tracking because sequence numbers need to be translated.
Packit Service dd8e2b
.TP
Packit Service dd8e2b
\fB\-\-mss\fP \fImaximum segment size\fP
Packit Service dd8e2b
Maximum segment size announced to clients. This must match the backend.
Packit Service dd8e2b
.TP
Packit Service dd8e2b
\fB\-\-wscale\fP \fIwindow scale\fP
Packit Service dd8e2b
Window scale announced to clients. This must match the backend.
Packit Service dd8e2b
.TP
Packit Service dd8e2b
\fB\-\-sack\-perm\fP
Packit Service dd8e2b
Pass client selective acknowledgement option to backend (will be disabled
Packit Service dd8e2b
if not present).
Packit Service dd8e2b
.TP
Packit Service dd8e2b
\fB\-\-timestamps\fP
Packit Service dd8e2b
Pass client timestamp option to backend (will be disabled if not present,
Packit Service dd8e2b
also needed for selective acknowledgement and window scaling).
Packit Service dd8e2b
.PP
Packit Service dd8e2b
Example:
Packit Service dd8e2b
.PP
Packit Service dd8e2b
Determine tcp options used by backend, from an external system
Packit Service dd8e2b
.IP
Packit Service dd8e2b
tcpdump -pni eth0 -c 1 'tcp[tcpflags] == (tcp-syn|tcp-ack)'
Packit Service dd8e2b
.br
Packit Service dd8e2b
    port 80 &
Packit Service dd8e2b
.br
Packit Service dd8e2b
telnet 192.0.2.42 80
Packit Service dd8e2b
.br
Packit Service dd8e2b
18:57:24.693307 IP 192.0.2.42.80 > 192.0.2.43.48757:
Packit Service dd8e2b
.br
Packit Service dd8e2b
    Flags [S.], seq 360414582, ack 788841994, win 14480,
Packit Service dd8e2b
.br
Packit Service dd8e2b
    options [mss 1460,sackOK,
Packit Service dd8e2b
.br
Packit Service dd8e2b
    TS val 1409056151 ecr 9690221,
Packit Service dd8e2b
.br
Packit Service dd8e2b
    nop,wscale 9],
Packit Service dd8e2b
.br
Packit Service dd8e2b
    length 0
Packit Service dd8e2b
.PP
Packit Service dd8e2b
Switch tcp_loose mode off, so conntrack will mark out\-of\-flow
Packit Service dd8e2b
packets as state INVALID.
Packit Service dd8e2b
.IP
Packit Service dd8e2b
echo 0 > /proc/sys/net/netfilter/nf_conntrack_tcp_loose
Packit Service dd8e2b
.PP
Packit Service dd8e2b
Make SYN packets untracked
Packit Service dd8e2b
.IP
Packit Service dd8e2b
iptables \-t raw \-A PREROUTING \-i eth0 \-p tcp \-\-dport 80
Packit Service dd8e2b
    \-\-syn \-j CT \-\-notrack
Packit Service dd8e2b
.PP
Packit Service dd8e2b
Catch UNTRACKED (SYN packets) and INVALID (3WHS ACK packets) states
Packit Service dd8e2b
and send them to SYNPROXY. This rule will respond to SYN packets with
Packit Service dd8e2b
SYN+ACK syncookies, create ESTABLISHED for valid client response (3WHS ACK
Packit Service dd8e2b
packets) and drop incorrect cookies. Flags combinations not expected
Packit Service dd8e2b
during 3WHS will not match and continue (e.g. SYN+FIN, SYN+ACK).
Packit Service dd8e2b
.IP
Packit Service dd8e2b
iptables \-A INPUT \-i eth0 \-p tcp \-\-dport 80
Packit Service dd8e2b
    \-m state \-\-state UNTRACKED,INVALID \-j SYNPROXY
Packit Service dd8e2b
    \-\-sack\-perm \-\-timestamp \-\-mss 1460 \-\-wscale 9
Packit Service dd8e2b
.PP
Packit Service dd8e2b
Drop invalid packets, this will be out\-of\-flow packets that were not
Packit Service dd8e2b
matched by SYNPROXY.
Packit Service dd8e2b
.IP
Packit Service dd8e2b
iptables \-A INPUT \-i eth0 \-p tcp \-\-dport 80 \-m state \-\-state INVALID \-j DROP