firewall 6.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. #!/bin/bash
  2. ### BEGIN INIT INFO
  3. # Provides: iptables
  4. # Required-Start: $local_fs $remote_fs $network $syslog
  5. # Required-Stop: $local_fs $remote_fs $network $syslog
  6. # Default-Start: 2 3 4 5
  7. # Default-Stop: 0 1 6
  8. # X-Interactive: true
  9. # Short-Description: Einfache Firewall basierend auf netfilter/ip(6)tables
  10. ### END INIT INFO
  11. #OWN Version 2017-09-19.01
  12. set +H;
  13. touch /etc/firewall.before &&
  14. touch /etc/firewall.blacklist &&
  15. touch /etc/firewall.nat &&
  16. touch /etc/firewall.routing &&
  17. touch /etc/firewall &&
  18. touch /etc/firewall.tc &&
  19. touch /etc/firewall.after ||
  20. exit 1;
  21. [[ -f /etc/init.d/firewall ]] && [[ ! -f /usr/local/sbin/firewall ]] && ln -s /etc/init.d/firewall /usr/local/sbin/firewall 2>/dev/null || true;
  22. prompt_for_fw_restart() {
  23. while true; do
  24. read -p "Soll die Firewall nun neu gestartet werden, um die Regeln zu übernehmen? [y/N] " -n 1 ANSWER;
  25. echo ""
  26. case "$ANSWER" in
  27. y|Y|j|J)
  28. fw_start
  29. break
  30. ;;
  31. n|N|"")
  32. break
  33. ;;
  34. *)
  35. echo -e "Ungültige Eingabe"
  36. ;;
  37. esac
  38. done
  39. }
  40. fw_stop() {
  41. echo "Stoppe IPtables-Paketfilter"
  42. echo "Firewall gestoppt am `date`" >> /var/log/firewall
  43. # Vorhandene Regeln löschen
  44. /sbin/iptables -F # Alle Regeln in Tabelle Filter löschen
  45. /sbin/iptables -t nat -F # Alle Regeln in Tabelle Nat löschen
  46. /sbin/iptables -t mangle -F # Alle Regeln in Tabelle Mangle löschen
  47. /sbin/iptables -t raw -F # Alle Regeln in Tabelle raw löschen
  48. /sbin/ip6tables -F # Alle Regeln in Tabelle Filter löschen
  49. /sbin/ip6tables -t nat -F # Alle Regeln in Tabelle Nat löschen
  50. /sbin/ip6tables -t mangle -F # Alle Regeln in Tabelle Mangle löschen
  51. /sbin/ip6tables -t raw -F # Alle Regeln in Tabelle raw löschen
  52. # Vorhandene Ketten löschen
  53. /sbin/iptables -X # Alle benutzerdefinierten Ketten in Tabelle Filter löschen
  54. /sbin/iptables -t nat -X # Alle benutzerdefinierten Ketten in Tabelle Nat löschen
  55. /sbin/iptables -t mangle -X # Alle benutzerdefinierten Ketten in Tabelle Mangle löschen
  56. /sbin/iptables -t raw -X # Alle benutzerdefinierten raw in Tabelle Mangle löschen
  57. /sbin/ip6tables -X # Alle benutzerdefinierten Ketten in Tabelle Filter löschen
  58. /sbin/ip6tables -t nat -X # Alle benutzerdefinierten Ketten in Tabelle Nat löschen
  59. /sbin/ip6tables -t mangle -X # Alle benutzerdefinierten Ketten in Tabelle Mangle löschen
  60. /sbin/ip6tables -t raw -X # Alle benutzerdefinierten raw in Tabelle Mangle löschen
  61. # Default-Policy setzen
  62. /sbin/iptables -P INPUT ACCEPT
  63. /sbin/iptables -P OUTPUT ACCEPT
  64. /sbin/iptables -P FORWARD DROP
  65. /sbin/ip6tables -P INPUT ACCEPT
  66. /sbin/ip6tables -P OUTPUT ACCEPT
  67. /sbin/ip6tables -P FORWARD DROP
  68. }
  69. fw_start() {
  70. fw_stop;
  71. echo "Starte IPtables-Paketfilter"
  72. echo "Firewall gestartet am `date`" >> /var/log/firewall
  73. # Timeout für Connection-Tracking bei UDP drastisch erhöhen
  74. echo -n "600" > /proc/sys/net/netfilter/nf_conntrack_udp_timeout 2>/dev/null || true
  75. echo -n "3600" > /proc/sys/net/netfilter/nf_conntrack_udp_timeout_stream 2>/dev/null || true
  76. # ICMPv6 vom Router zulassen (essentiell!)
  77. /sbin/ip6tables -I INPUT -s fe00::/8 -p ipv6-icmp -j ACCEPT
  78. /sbin/ip6tables -I INPUT -p ipv6-icmp -j ACCEPT
  79. # ICMP-Echo-Requests und -Replys zulassen
  80. /sbin/iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
  81. /sbin/ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT
  82. /sbin/iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
  83. /sbin/ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-reply -j ACCEPT
  84. # SSH stets zulassen
  85. /sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  86. /sbin/ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT
  87. /sbin/iptables -A INPUT -p tcp --dport 20202 -j ACCEPT
  88. /sbin/ip6tables -A INPUT -p tcp --dport 20202 -j ACCEPT
  89. # Statische Regeln
  90. /bin/bash /etc/firewall.before
  91. # Blacklist
  92. /bin/bash /etc/firewall.blacklist
  93. # Regeln für Routing und NATing
  94. /bin/bash /etc/firewall.nat
  95. /bin/bash /etc/firewall.routing
  96. # Persoenliche Firewall
  97. /bin/bash /etc/firewall
  98. # Traffic-Control-Regeln
  99. /bin/bash /etc/firewall.tc
  100. # Statische Regeln
  101. /bin/bash /etc/firewall.after
  102. # Contrack-Regeln
  103. /sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT &&
  104. /sbin/iptables -P INPUT DROP
  105. /sbin/ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT &&
  106. /sbin/ip6tables -P INPUT DROP
  107. /sbin/iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT &&
  108. /sbin/iptables -P FORWARD DROP
  109. /sbin/ip6tables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT &&
  110. /sbin/ip6tables -P FORWARD DROP
  111. }
  112. case "$1" in
  113. reload|restart|start)
  114. fw_start
  115. ;;
  116. stop)
  117. fw_stop
  118. ;;
  119. status)
  120. tail -n 1 /var/log/firewall
  121. echo -e "\n\n\n"
  122. echo "##########################"
  123. echo "##### Tabelle filter #####"
  124. echo "##########################"
  125. echo ""
  126. /sbin/iptables -L -vn
  127. echo ""
  128. /sbin/ip6tables -L -vn
  129. echo -e "\n\n\n"
  130. echo "#######################"
  131. echo "##### Tabelle nat #####"
  132. echo "#######################"
  133. echo ""
  134. /sbin/iptables -t nat -L -vn
  135. echo ""
  136. /sbin/ip6tables -t nat -L -vn
  137. echo -e "\n\n\n"
  138. echo "##########################"
  139. echo "##### Tabelle mangle #####"
  140. echo "##########################"
  141. echo ""
  142. /sbin/iptables -t mangle -L -vn
  143. echo ""
  144. /sbin/ip6tables -t mangle -L -vn
  145. echo -e "\n\n\n"
  146. echo "#######################"
  147. echo "##### Tabelle raw #####"
  148. echo "#######################"
  149. echo ""
  150. /sbin/iptables -t raw -L -vn
  151. echo ""
  152. /sbin/ip6tables -t raw -L -vn
  153. ;;
  154. before)
  155. editor /etc/firewall.before
  156. prompt_for_fw_restart
  157. ;;
  158. bl|black|block|blacklist)
  159. editor /etc/firewall.blacklist
  160. prompt_for_fw_restart
  161. ;;
  162. nat|NAT)
  163. editor /etc/firewall.nat
  164. prompt_for_fw_restart
  165. ;;
  166. route|routes|router|routing)
  167. editor /etc/firewall.routing
  168. prompt_for_fw_restart
  169. ;;
  170. edit|config)
  171. editor /etc/firewall
  172. prompt_for_fw_restart
  173. ;;
  174. tc|trafficcontrol|traffic-control)
  175. editor /etc/firewall.tc
  176. prompt_for_fw_restart
  177. ;;
  178. after)
  179. editor /etc/firewall.after
  180. prompt_for_fw_restart
  181. ;;
  182. *)
  183. echo "Fehlerhafter Aufruf" >&2
  184. echo "Syntax: $0 [start|stop|status|edit*]" >&2
  185. echo " *) Listen: before, bl, nat, routes, edit, tc, after" >&2
  186. exit 1
  187. ;;
  188. esac