iptables-simple.sh 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #!/bin/bash
  2. # Simple IPTables script for servers.
  3. set -eu
  4. command -v iptables 1>/dev/null || (echo "Please install iptables." 1>&2 && exit -1)
  5. command -v netfilter-persistent 1>/dev/null || (echo "Please install iptables-persistent and netfilter-persistent." 1>&2 && exit -1)
  6. ## Helper functions
  7. ipt4() {
  8. iptables "$@" || return $?
  9. }
  10. ipt6() {
  11. ip6tables "$@" || return $?
  12. }
  13. ipt46() {
  14. ipt4 "$@" || return $?
  15. ipt6 "$@" || return $?
  16. }
  17. ipt_save() {
  18. netfilter-persistent save || return $?
  19. }
  20. ## Policies
  21. ipt46 -P INPUT DROP
  22. ipt46 -P FORWARD DROP
  23. ipt46 -P OUTPUT DROP
  24. ## Clear all
  25. ipt46 -F
  26. ipt46 -X
  27. ipt46 -t nat -F
  28. ipt46 -t nat -X
  29. ipt46 -t mangle -F
  30. ipt46 -t mangle -X
  31. ipt46 -t raw -F
  32. ipt46 -t raw -X
  33. ipt46 -t security -F
  34. ipt46 -t security -X
  35. ## Input Basic
  36. # Connection tracking
  37. ipt46 -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
  38. ipt46 -A INPUT -m conntrack --ctstate INVALID -j DROP
  39. # Localhost
  40. ipt46 -A INPUT -i lo -j ACCEPT
  41. # Ping
  42. ipt4 -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
  43. ipt6 -A INPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT
  44. # NDP
  45. ipt6 -A INPUT -p icmpv6 --icmpv6-type router-solicitation -j ACCEPT
  46. ipt6 -A INPUT -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT
  47. ipt6 -A INPUT -p icmpv6 --icmpv6-type neighbor-solicitation -j ACCEPT
  48. ipt6 -A INPUT -p icmpv6 --icmpv6-type neighbor-advertisement -j ACCEPT
  49. # DHCPv6 client and server
  50. ipt6 -A INPUT -p udp --dport 546 -j ACCEPT
  51. ipt6 -A INPUT -p udp --dport 547 -j ACCEPT
  52. ## Input Special
  53. # SSH
  54. ipt46 -A INPUT -p tcp --dport 22 -j ACCEPT
  55. ## Output
  56. # Accept all
  57. ipt46 -A OUTPUT -j ACCEPT
  58. ## Save
  59. ipt_save
  60. echo "Done"