scripts: better error handling and revert for set_rules
Signed-off-by: HeshamTB <hishaminv@gmail.com>
This commit is contained in:
parent
825424a1de
commit
7fb7a08d80
@ -2,35 +2,97 @@
|
||||
|
||||
iptables=iptables
|
||||
|
||||
PROGRAM="${0}"
|
||||
cmd="${1}"
|
||||
wgIface="${2}"
|
||||
uplinkIface="${3}"
|
||||
wg_iface="${2}"
|
||||
uplink_iface="${3}"
|
||||
wg_port="${4}"
|
||||
|
||||
cmd() {
|
||||
echo "[#] $*" >&2
|
||||
"$@"
|
||||
}
|
||||
|
||||
print_usage() {
|
||||
cat >&2 <<-_EOF
|
||||
${PROGRAM} [ set | unset ] <wg_interface> <uplink_interface> <wg_port>
|
||||
_EOF
|
||||
}
|
||||
|
||||
HAVE_SET_NAT=0
|
||||
add_nat() {
|
||||
cmd ${iptables} -t nat -A POSTROUTING -o ${uplink_iface} -j MASQUERADE
|
||||
HAVE_SET_NAT=1
|
||||
}
|
||||
|
||||
HAVE_SET_FORWARD=0
|
||||
add_forward() {
|
||||
cmd ${iptables} -I FORWARD 1 -i ${uplink_iface} -o ${wg_iface} -j ACCEPT
|
||||
cmd ${iptables} -I FORWARD 1 -i ${wg_iface} -o ${uplink_iface} -j ACCEPT
|
||||
HAVE_SET_FORWARD=1
|
||||
}
|
||||
|
||||
HAVE_SET_ISOLATION=0
|
||||
add_isolation() {
|
||||
cmd ${iptables} -I FORWARD -i ${wg_iface} -o ${wg_iface} -j DROP
|
||||
HAVE_SET_ISOLATION=1
|
||||
}
|
||||
|
||||
HAVE_OPEN_PORT=0
|
||||
add_port() {
|
||||
cmd ${iptables} -I INPUT 1 -i ${uplink_iface} -p udp --dport ${wg_port} -j ACCEPT
|
||||
HAVE_OPEN_PORT=1
|
||||
}
|
||||
|
||||
add_rules() {
|
||||
trap 'rm_rules; exit' INT TERM EXIT
|
||||
cmd ${iptables} -A FORWARD -i ${wgIface} -j ACCEPT
|
||||
cmd ${iptables} -A FORWARD -o ${wgIface} -j ACCEPT
|
||||
cmd ${iptables} -t nat -A POSTROUTING -o ${uplinkIface} -j MASQUERADE || exit 1
|
||||
add_forward || exit 1
|
||||
add_nat || exit 1
|
||||
add_isolation || exit 1
|
||||
add_port || exit 1
|
||||
trap - INT TERM EXIT
|
||||
}
|
||||
|
||||
rm_rules() {
|
||||
cmd ${iptables} -D FORWARD -i ${wgIface} -j ACCEPT
|
||||
cmd ${iptables} -D FORWARD -o ${wgIface} -j ACCEPT
|
||||
cmd ${iptables} -t nat -D POSTROUTING -o ${uplinkIface} -j MASQUERADE
|
||||
rm_forward() {
|
||||
cmd ${iptables} -D FORWARD -i ${uplink_iface} -o ${wg_iface} -j ACCEPT
|
||||
cmd ${iptables} -D FORWARD -i ${wg_iface} -o ${uplink_iface} -j ACCEPT
|
||||
}
|
||||
|
||||
rm_nat() {
|
||||
cmd ${iptables} -t nat -D POSTROUTING -o ${uplink_iface} -j MASQUERADE
|
||||
}
|
||||
|
||||
rm_isolate() {
|
||||
cmd ${iptables} -D FORWARD -i ${wg_iface} -o ${wg_iface} -j DROP
|
||||
}
|
||||
|
||||
rm_port() {
|
||||
cmd ${iptables} -D INPUT -i ${uplink_iface} -p udp --dport ${wg_port} -j ACCEPT
|
||||
}
|
||||
|
||||
rm_rules() {
|
||||
[[ $HAVE_SET_FORWARD -eq 0 ]] || rm_forward
|
||||
[[ $HAVE_SET_NAT -eq 0 ]] || rm_nat
|
||||
[[ $HAVE_SET_ISOLATION -eq 0 ]] || rm_isolate
|
||||
[[ $HAVE_OPEN_PORT -eq 0 ]] || rm_port
|
||||
}
|
||||
|
||||
if [ ! $# -eq 4 ]
|
||||
then
|
||||
print_usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "${cmd}" == "set" ]
|
||||
then
|
||||
add_rules
|
||||
|
||||
elif [ "${cmd}" == "unset" ];
|
||||
then
|
||||
HAVE_OPEN_PORT=1
|
||||
HAVE_SET_ISOLATION=1
|
||||
HAVE_SET_NAT=1
|
||||
HAVE_SET_FORWARD=1
|
||||
rm_rules
|
||||
else
|
||||
# cat << "Invalid command. Use set or unset" >&2
|
||||
|
Loading…
Reference in New Issue
Block a user