e-router 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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. set_defaults() {
  7. /usr/lib/systemd/scripts/iptables-flush
  8. iptables -P FORWARD DROP
  9. iptables -P OUTPUT ACCEPT
  10. iptables -P INPUT DROP
  11. }
  12. create_tables() {
  13. iptables -N WANIN
  14. iptables -N FORDROPLOG
  15. iptables -N WANDROPLOG
  16. iptables -N SILENTDROP
  17. ipset create -! $banset hash:ip hashsize 4096 timeout $bantime
  18. }
  19. activate() {
  20. iptables-save > /etc/iptables/iptables.rules
  21. systemctl restart iptables.service
  22. }
  23. create_wandroplog() {
  24. #iptables -A WANDROPLOG -p tcp -m limit --limit 5/min -j LOG --log-prefix "WANDROPLOG TCP: " --log-level 7
  25. iptables -A WANDROPLOG -p tcp -j LOG --log-prefix "WANDROPLOG TCP: " --log-level 7
  26. iptables -A WANDROPLOG -p udp -j LOG --log-prefix "WANDROPLOG UDP: " --log-level 7
  27. iptables -A WANDROPLOG -p icmp -j LOG --log-prefix "WANDROPLOG ICMP: " --log-level 7
  28. iptables -A WANDROPLOG -j DROP
  29. }
  30. create_fordroplog() {
  31. iptables -A FORDROPLOG -p tcp -j LOG --log-prefix "FORDROPLOG TCP: " --log-level 7
  32. iptables -A FORDROPLOG -p udp -j LOG --log-prefix "FORDROPLOG UDP: " --log-level 7
  33. iptables -A FORDROPLOG -p icmp -j LOG --log-prefix "FORDROPLOG ICMP: " --log-level 7
  34. iptables -A FORDROPLOG -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. iptables -A FORWARD -j FORDROPLOG
  40. }
  41. setup_nat() {
  42. iptables -t nat -A POSTROUTING -o ${wan} -s ${locnet} -j MASQUERADE
  43. }
  44. passbroadcast() {
  45. iptables -A WANIN -m pkttype --pkt-type broadcast -j ACCEPT
  46. iptables -A WANIN -m pkttype --pkt-type multicast -j ACCEPT
  47. }
  48. banwanin() {
  49. iptables -A WANIN -m set --match-set $banset src -p TCP -j REJECT
  50. }
  51. dropwanin() {
  52. while read -r port ; do
  53. [[ "$port" =~ ^[0-9]{1,}$ ]] || continue
  54. iptables -A WANIN -i ${wan} -m udp -p udp --dport $port -j DROP
  55. done < $CONFD/DROP.udp
  56. while read -r port ; do
  57. [[ "$port" =~ ^[0-9]{1,}$ ]] || continue
  58. iptables -A WANIN -i ${wan} -m tcp -p tcp --dport $port -j DROP
  59. done < $CONFD/DROP.tcp
  60. }
  61. passwanin() {
  62. while read -r port ; do
  63. [[ "$port" =~ ^[0-9]{1,}$ ]] || continue
  64. iptables -A WANIN -i ${wan} -m udp -p udp --dport $port -j ACCEPT
  65. done < $CONFD/ACCEPT.udp
  66. while read -r port ; do
  67. [[ "$port" =~ ^[0-9]{1,}$ ]] || continue
  68. iptables -A WANIN -i ${wan} -m tcp -p tcp --dport $port -j ACCEPT
  69. done < $CONFD/ACCEPT.tcp
  70. }
  71. setup_input() {
  72. iptables -A INPUT -i lo -j ACCEPT
  73. iptables -A INPUT -i ${eth0} -j ACCEPT
  74. iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
  75. iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
  76. banwanin
  77. dropwanin
  78. passwanin
  79. passbroadcast
  80. iptables -A INPUT -i ${wan} -j WANIN
  81. iptables -A INPUT -j WANDROPLOG
  82. }
  83. set_defaults
  84. create_tables
  85. create_fordroplog
  86. create_wandroplog
  87. setup_nat
  88. setup_input
  89. setup_forward
  90. #activate