e-router 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. #!/bin/bash
  2. ((EUID == 0 )) || { echo "Need root"; exit 1; }
  3. set -euo pipefail
  4. CONFD=/etc/e-router
  5. source $CONFD/config
  6. if $debug ; then
  7. set -x
  8. fi
  9. set_defaults() {
  10. /usr/lib/systemd/scripts/iptables-flush
  11. iptables -P FORWARD DROP
  12. iptables -P OUTPUT ACCEPT
  13. iptables -P INPUT DROP
  14. }
  15. create_tables() {
  16. iptables -N FORWARD-LOG-DROP
  17. iptables -N WAN-LOG-DROP
  18. iptables -N FW-FILTERED
  19. iptables -N FW-OPEN
  20. iptables -N FW-CAST
  21. ipset create -! $banset hash:ip hashsize 4096 timeout $bantime
  22. ipset create -! $whiteset hash:net hashsize 4096
  23. }
  24. setup_wandroplog() {
  25. iptables -A WAN-LOG-DROP -p tcp -j LOG --log-prefix "WAN-LOG-DROP TCP: " --log-level 7
  26. iptables -A WAN-LOG-DROP -p udp -j LOG --log-prefix "WAN-LOG-DROP UDP: " --log-level 7
  27. iptables -A WAN-LOG-DROP -p icmp -j LOG --log-prefix "WAN-LOG-DROP ICMP: " --log-level 7
  28. iptables -A WAN-LOG-DROP -j DROP
  29. }
  30. setup_fordroplog() {
  31. iptables -A FORWARD-LOG-DROP -p tcp -j LOG --log-prefix "FORWARD-LOG-DROP TCP: " --log-level 7
  32. iptables -A FORWARD-LOG-DROP -p udp -j LOG --log-prefix "FORWARD-LOG-DROP UDP: " --log-level 7
  33. iptables -A FORWARD-LOG-DROP -p icmp -j LOG --log-prefix "FORWARD-LOG-DROP ICMP: " --log-level 7
  34. iptables -A FORWARD-LOG-DROP -j DROP
  35. }
  36. setup_forward() {
  37. iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
  38. iptables -A FORWARD -i ${eth0} -o ${wan} -j ACCEPT
  39. if $debug ; then
  40. iptables -A FORWARD -j FORWARD-LOG-DROP
  41. else
  42. iptables -A FORWARD -j DROP
  43. fi
  44. }
  45. setup_nat() {
  46. iptables -t nat -A POSTROUTING -o ${wan} -s ${locnet} -j MASQUERADE
  47. }
  48. setup_white() {
  49. while read -r net ; do
  50. [[ "$net" =~ ^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}.[0-9]{1,}/[0-9]{1,}$ ]] || continue
  51. ipset -! add $whiteset $net
  52. done < $CONFD/WHITE.nets
  53. }
  54. banbadips() {
  55. iptables -A WAN-IN -m set --match-set $banset src -j REJECT
  56. }
  57. setup_white() {
  58. while read -r port ; do
  59. [[ "$port" =~ ^[0-9]{1,}$ ]] || continue
  60. iptables -A FW-FILTERED -m udp -p udp --dport $port -j ACCEPT
  61. done < $CONFD/WHITE.udp
  62. while read -r port ; do
  63. [[ "$port" =~ ^[0-9]{1,}$ ]] || continue
  64. iptables -A FW-FILTERED -m tcp -p tcp --dport $port -j ACCEPT
  65. done < $CONFD/WHITE.tcp
  66. }
  67. setup_open() {
  68. while read -r port ; do
  69. [[ "$port" =~ ^[0-9]{1,}$ ]] || continue
  70. iptables -A FW-OPEN -m udp -p udp --dport $port -j ACCEPT
  71. done < $CONFD/ACCEPT.udp
  72. while read -r port ; do
  73. [[ "$port" =~ ^[0-9]{1,}$ ]] || continue
  74. iptables -A FW-OPEN -m tcp -p tcp --dport $port -j ACCEPT
  75. done < $CONFD/ACCEPT.tcp
  76. }
  77. setup_cast() {
  78. iptables -A FW-CAST -m pkttype --pkt-type broadcast -j ACCEPT
  79. iptables -A FW-CAST -m pkttype --pkt-type multicast -j ACCEPT
  80. }
  81. setup_input() {
  82. iptables -A INPUT -i lo -j ACCEPT
  83. iptables -A INPUT -i ${eth0} -j ACCEPT
  84. iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
  85. iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
  86. iptables -A INPUT -i ${wan} -m set --match-set $banset src -j REJECT
  87. iptables -A INPUT -i ${wan} -m set --match-set $whiteset src -j FW-FILTERED
  88. iptables -A INPUT -i ${wan} -j FW-OPEN
  89. iptables -A INPUT -i ${wan} -j FW-CAST
  90. if $debug ; then
  91. iptables -A INPUT -j WAN-LOG-DROP
  92. else
  93. iptables -A INPUT -j DROP
  94. fi
  95. }
  96. main () {
  97. set_defaults
  98. create_tables
  99. setup_fordroplog
  100. setup_wandroplog
  101. setup_white
  102. setup_nat
  103. setup_forward
  104. setup_white
  105. setup_open
  106. setup_cast
  107. setup_input
  108. }
  109. main