Advertisement
echoslider

finish_iptables_firewall

Jun 5th, 2021 (edited)
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 7.02 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. #my iptables Firewall with Portscan Blocking and Redjuce of DDos.
  4.  
  5. PATH=$PATH:/usr/sbin:/sbin:/usr/bin:/bin
  6.  
  7. #config
  8. interface='br0'
  9. ping='0'
  10. trace='0'
  11. gateway='0'
  12.  
  13.  
  14. # iptables suchen
  15. iptables=`which iptables`
  16.  
  17. # wenn iptables nicht installiert abbrechen
  18. test -f $iptables || exit 0
  19.  
  20. case "$1" in
  21.    start)
  22. echo "Starte Firewall..."
  23. # alle Regeln löschen
  24. $iptables -F
  25. $iptables -X
  26. $iptables -t nat -F
  27. $iptables -t nat -X
  28. $iptables -t mangle -F
  29. $iptables -t mangle -X
  30.  
  31.  
  32. $iptables -P INPUT DROP
  33. $iptables -P FORWARD ACCEPT
  34. $iptables -P OUTPUT ACCEPT
  35.  
  36.  
  37. # über Loopback alles erlauben
  38. $iptables -A INPUT -i lo -j ACCEPT
  39. $iptables -A OUTPUT -o lo -j ACCEPT
  40.  
  41. # chains für kvm
  42. $iptables -N 'LIBVIRT_FWI'
  43. $iptables -N 'LIBVIRT_FWO'
  44. $iptables -N 'LIBVIRT_FWX'
  45. $iptables -N 'LIBVIRT_INP'
  46. $iptables -N 'LIBVIRT_OUT'
  47.  
  48.  
  49.  
  50. # bestehende Verbindungen akzeptieren
  51. $iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  52.  
  53. #finger
  54. #$iptables -A INPUT -p tcp --dport 79 -j ACCEPT
  55.  
  56. #pptp GRE
  57. #$iptables -A INPUT -p gre -j ACCEPT
  58.  
  59. $iptables -A INPUT -m state --state NEW -s 0.0.0.0/0 -m recent --set
  60. $iptables -A INPUT -m state --state NEW -s 0.0.0.0/0 -m recent --update --seconds 15 --hitcount 5 -j DROP
  61.  
  62.  
  63.  
  64. if [ -f "/root/ports.conf" ]; then
  65.  
  66. cat "/root/ports.conf" | while read line; do
  67. echo "Open Port $line"
  68.  
  69.  
  70. $iptables -A INPUT -p tcp --dport "$line" -m state --state NEW -m recent --set
  71. $iptables -A INPUT -p tcp --dport "$line" -m state --state NEW -m recent --update --seconds 15 --hitcount 5 -j DROP
  72. $iptables -A INPUT -p tcp --dport "$line" -j ACCEPT
  73. $iptables -A INPUT -p tcp --sport "$line" -j ACCEPT
  74.  
  75. $iptables -A INPUT -p udp --dport "$line" -m state --state NEW -m recent --set
  76. $iptables -A INPUT -p udp --dport "$line" -m state --state NEW -m recent --update --seconds 15 --hitcount 5 -j DROP
  77. $iptables -A INPUT -p udp --dport "$line" -j ACCEPT
  78. $iptables -A INPUT -p udp --sport "$line" -j ACCEPT
  79.  
  80.  
  81.  
  82.  
  83. done
  84.  
  85. fi
  86.  
  87.  
  88.  
  89.  
  90. #anti PortScan
  91. $iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
  92.  
  93. #anti smurf
  94. $iptables -A INPUT -p tcp -m tcp --tcp-flags RST RST -m limit --limit 2/second --limit-burst 2 -j ACCEPT
  95.  
  96. # Ping-of-Death
  97. $iptables -A FORWARD -p icmp --icmp-type 8 -m limit --limit 1/s -j ACCEPT
  98.  
  99. # SYN-Flood-Schutz
  100. $iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
  101.  
  102. # SYN und RST gleichzeitig gesetzt
  103. $iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
  104. $iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
  105.  
  106. # SYN und FIN gesetzt
  107. $iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
  108. $iptables -A FORWARD -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
  109.  
  110. #fin und urg und psh gesetzt
  111. $iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
  112. $iptables -A FORWARD -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
  113.  
  114. #all syn
  115. $iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
  116. $iptables -A FORWARD -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
  117.  
  118. #all
  119. $iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
  120. $iptables -A FORWARD -p tcp --tcp-flags ALL ALL -j DROP
  121.  
  122. #Keine Flags gesetzt nmap 0 scan
  123. $iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
  124. $iptables -A FORWARD -p tcp --tcp-flags ALL NONE -j DROP
  125.  
  126. #nmap fin stealth scan
  127. $iptables -A INPUT -p tcp --tcp-flags ALL FIN -j DROP
  128. $iptables -A FORWARD -p tcp --tcp-flags ALL FIN -j DROP
  129.  
  130. #xmas
  131. $iptables -A INPUT -p tcp --tcp-flags ALL URG,ACK,PSH,RST,SYN,FIN -j DROP
  132. $iptables -A FORWARD -p tcp --tcp-flags ALL URG,ACK,PSH,RST,SYN,FIN -j DROP
  133.  
  134. # FIN und RST gleichzeitig gesetzt
  135. $iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
  136. $iptables -A FORWARD -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
  137.  
  138. # FIN ohne ACK
  139. $iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP
  140. $iptables -A FORWARD -p tcp --tcp-flags ACK,FIN FIN -j DROP
  141.  
  142. # PSH ohne ACK
  143. $iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP
  144. $iptables -A FORWARD -p tcp --tcp-flags ACK,PSH PSH -j DROP
  145.  
  146. # URG ohne ACK
  147. $iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP
  148. $iptables -A FORWARD -p tcp --tcp-flags ACK,URG URG -j DROP
  149.  
  150. # All TCP sessions should begin with SYN
  151. $iptables -A INPUT -p tcp ! --syn -m state --state NEW -s 0.0.0.0/0 -j DROP
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158. #traceroute erlauben
  159. if [ $trace -eq "1" ]; then
  160.  
  161. echo "accept trace"
  162. $iptables -A INPUT -p ICMP --icmp-type 11 -s 0.0.0.0/0 -j ACCEPT
  163.  
  164. fi
  165.  
  166.  
  167. #Limiting the incoming icmp ping request:
  168. if [ $ping -eq "1" ]; then
  169.  
  170. echo "accept icmp ping"
  171.  
  172. $iptables -A INPUT -p icmp --icmp-type echo-request -m recent --set
  173. $iptables -A INPUT -p icmp --icmp-type echo-request -m recent --update --seconds 3 --hitcount 20 -j DROP
  174. $iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
  175.  
  176. fi
  177.  
  178.  
  179.  
  180. #####################################################
  181.  
  182. # Forwarding/Routing
  183. echo 0 > /proc/sys/net/ipv4/ip_forward 2> /dev/null
  184.  
  185. #Activate Gateway Mode:
  186. if [ $gateway -eq "1" ]; then
  187.  
  188. echo "activate gateway"
  189.  
  190. echo 1 > /proc/sys/net/ipv4/ip_forward 2> /dev/null
  191. $iptables -A FORWARD -p tcp --syn -s 10.0.0.0/24 -j TCPMSS --set-mss 1356
  192. $iptables -t nat -A POSTROUTING -o $interface -j MASQUERADE
  193.  
  194. fi
  195.  
  196.  
  197.  
  198.  
  199.  
  200. #SYN-Cookies
  201. echo 1 > /proc/sys/net/ipv4/tcp_syncookies 2> /dev/null
  202.  
  203. #Stop Source-Routing
  204. for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/accept_source_route 2> /dev/null; done
  205.  
  206. #Stop Redirecting
  207. for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/accept_redirects 2> /dev/null; done
  208.  
  209. #Reverse-Path-Filter
  210. for i in /proc/sys/net/ipv4/conf/*; do echo 2 > $i/rp_filter 2> /dev/null; done
  211.  
  212. #Log Martians
  213. for i in /proc/sys/net/ipv4/conf/*; do echo 1 > $i/log_martians 2> /dev/null; done
  214.  
  215. #BOOTP-Relaying ausschalten
  216. for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/bootp_relay 2> /dev/null; done
  217.  
  218. #Proxy-ARP ausschalten
  219. for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/proxy_arp 2> /dev/null; done
  220.  
  221. #Ungültige ICMP-Antworten ignorieren
  222. echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses 2> /dev/null
  223.  
  224. #ICMP Echo-Broadcasts ignorieren
  225. echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts 2> /dev/null
  226.  
  227. #Max. 500/Sekunde (5/Jiffie) senden
  228. echo 5 > /proc/sys/net/ipv4/icmp_ratelimit
  229.  
  230. #Speicherallozierung und -timing für IP-De/-Fragmentierung
  231. echo 262144 > /proc/sys/net/ipv4/ipfrag_high_thresh
  232. echo 196608 > /proc/sys/net/ipv4/ipfrag_low_thresh
  233. echo 30 > /proc/sys/net/ipv4/ipfrag_time
  234.  
  235. #TCP-FIN-Timeout zum Schutz vor DoS-Attacken setzen
  236. echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
  237.  
  238. #Maximal 3 Antworten auf ein TCP-SYN
  239. echo 3 > /proc/sys/net/ipv4/tcp_retries1
  240.  
  241. #TCP-Pakete maximal 15x wiederholen
  242. echo 15 > /proc/sys/net/ipv4/tcp_retries2
  243.  
  244.  
  245. ;;
  246.    stop)
  247. echo "Stoppe Firewall..."
  248. # alle Regeln löschen
  249. $iptables -F
  250. $iptables -X
  251. $iptables -t nat -F
  252. $iptables -t nat -X
  253. $iptables -t mangle -F
  254. $iptables -t mangle -X
  255. $iptables -P INPUT ACCEPT
  256. $iptables -P FORWARD ACCEPT
  257. $iptables -P OUTPUT ACCEPT
  258.  
  259. ;;
  260.    test)
  261.    $0 start
  262. sleep 2m
  263.    $0 stop
  264.  
  265. ;;
  266.    *)
  267. echo "Usage: /etc/init.d/firewall (start|stop|test)"
  268. exit 1
  269. ;;
  270. esac
  271. exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement