Files
xdp-project-bpf-examples/xdp-synproxy/install-rules.sh
Vincent Li d4450991a2 Add xdp-synproxy Dockerfile and Kubernetes DaemonSet manifest
User could build xdp-synproxy container and runs in kubernetes
as daemonset to protect kubernetes node from SYN flood attack

Signed-off-by: Vincent Li <vincent.mc.li@gmail.com>
2023-10-26 19:01:56 +00:00

49 lines
1.3 KiB
Bash
Executable File

#!/bin/bash
set -e
sysctl -w net.ipv4.tcp_syncookies=2
sysctl -w net.ipv4.tcp_timestamps=1
sysctl -w net.netfilter.nf_conntrack_tcp_loose=0
SYNPROXY="-m state --state INVALID,UNTRACKED -j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1460"
CT="-j CT --notrack"
while test $# -gt 0; do
case "$1" in
--interface*)
# shellcheck disable=SC2001
# the below sed is to support both formats "--flag value" and "--flag=value"
INTERFACE=$(echo "$1" | sed -e 's/^[^=]*=//g')
shift
;;
--ports*)
# shellcheck disable=SC2001
# the below sed is to support both formats "--flag value" and "--flag=value"
PORTS=$(echo "$1" | sed -e 's/^[^=]*=//g')
shift
;;
*)
break
;;
esac
done
COMMA=','
if [[ "$PORTS" == *"$COMMA"* ]]; then
IFS=',' read -ra PORT <<< "$PORTS"
for p in "${PORT[@]}"; do
echo $p
/usr/sbin/iptables -t raw -I PREROUTING -i $INTERFACE -p tcp -m tcp --syn --dport $p $CT
/usr/sbin/iptables -t filter -A INPUT -i $INTERFACE -p tcp -m tcp --dport $p $SYNPROXY
done
else
/usr/sbin/iptables -t raw -I PREROUTING -i $INTERFACE -p tcp -m tcp --syn --dport $PORTS $CT
/usr/sbin/iptables -t filter -A INPUT -i $INTERFACE -p tcp -m tcp --dport $PORTS $SYNPROXY
fi
/usr/sbin/iptables -t filter -A INPUT -i $INTERFACE -m state --state INVALID -j DROP