hook_post-iptable-rules 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #!/bin/bash
  2. host6=$(dig AAAA +short <TPL:SERVER_NAME> | grep -v '\.$')
  3. host4=$(dig A +short <TPL:SERVER_NAME> | grep -v '\.$')
  4. # IPv6
  5. sudo ip6tables -w -N vpnclient_in
  6. sudo ip6tables -w -N vpnclient_out
  7. sudo ip6tables -w -N vpnclient_fwd
  8. sudo ip6tables -w -A vpnclient_in -p icmpv6 -j ACCEPT
  9. sudo ip6tables -w -A vpnclient_in -s fd00::/8,fe80::/10 -j ACCEPT
  10. sudo ip6tables -w -A vpnclient_in -p tcp --dport 22 -j ACCEPT
  11. sudo ip6tables -w -A vpnclient_in -p tcp --dport 443 -j ACCEPT
  12. sudo ip6tables -w -A vpnclient_in -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
  13. sudo ip6tables -w -A vpnclient_in -j DROP
  14. if [ ! -z "${host6}" ]; then
  15. for i in ${host6}; do
  16. sudo ip6tables -w -A vpnclient_out -d "${i}" -p <TPL:PROTO> --dport <TPL:SERVER_PORT> -j ACCEPT
  17. done
  18. fi
  19. for i in <TPL:DNS0> <TPL:DNS1>; do
  20. if [[ "${i}" =~ : ]]; then
  21. sudo ip6tables -w -A vpnclient_out -p udp -d "${i}" --dport 53 -j ACCEPT
  22. fi
  23. done
  24. sudo ip6tables -w -A vpnclient_out -d fd00::/8,fe80::/10 -j ACCEPT
  25. sudo ip6tables -w -A vpnclient_out -p udp --dport 5353 -d ff02::fb -j ACCEPT
  26. sudo ip6tables -w -A vpnclient_out -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
  27. sudo ip6tables -w -A vpnclient_out -j DROP
  28. sudo ip6tables -w -A vpnclient_fwd -j DROP
  29. sudo ip6tables -w -I INPUT 1 -i <TPL:WIRED_DEVICE> -j vpnclient_in
  30. sudo ip6tables -w -I OUTPUT 1 -o <TPL:WIRED_DEVICE> -j vpnclient_out
  31. sudo ip6tables -w -I FORWARD 1 -o <TPL:WIRED_DEVICE> -j vpnclient_fwd
  32. # IPv4
  33. sudo iptables -w -N vpnclient_in
  34. sudo iptables -w -N vpnclient_out
  35. sudo iptables -w -N vpnclient_fwd
  36. sudo iptables -w -A vpnclient_in -p icmp -j ACCEPT
  37. sudo iptables -w -A vpnclient_in -s 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,169.254.0.0/16 -j ACCEPT
  38. sudo iptables -w -A vpnclient_in -p tcp --dport 22 -j ACCEPT
  39. sudo iptables -w -A vpnclient_in -p tcp --dport 443 -j ACCEPT
  40. sudo iptables -w -A vpnclient_in -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
  41. sudo iptables -w -A vpnclient_in -j DROP
  42. if [ ! -z "${host4}" ]; then
  43. for i in ${host4}; do
  44. sudo iptables -w -A vpnclient_out -d "${i}" -p <TPL:PROTO> --dport <TPL:SERVER_PORT> -j ACCEPT
  45. done
  46. fi
  47. for i in <TPL:DNS0> <TPL:DNS1>; do
  48. if [[ "${i}" =~ \. ]]; then
  49. sudo iptables -w -A vpnclient_out -p udp -d "${i}" --dport 53 -j ACCEPT
  50. fi
  51. done
  52. sudo iptables -w -A vpnclient_out -d 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,169.254.0.0/16 -j ACCEPT
  53. sudo iptables -w -A vpnclient_out -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
  54. sudo iptables -w -A vpnclient_out -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
  55. sudo iptables -w -A vpnclient_out -j DROP
  56. sudo iptables -w -A vpnclient_fwd -j DROP
  57. sudo iptables -w -I INPUT 1 -i <TPL:WIRED_DEVICE> -j vpnclient_in
  58. sudo iptables -w -I OUTPUT 1 -o <TPL:WIRED_DEVICE> -j vpnclient_out
  59. sudo iptables -w -I FORWARD 1 -o <TPL:WIRED_DEVICE> -j vpnclient_fwd
  60. exit 0