Advertisement
Guest User

Untitled

a guest
Sep 19th, 2012
463
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.49 KB | None | 0 0
  1. #!/bin/sh
  2. # Originally by Friends Land and edited by Kaiser
  3.  
  4. # find iptables binary
  5. ipt=`/usr/bin/whereis iptables | awk '{print $2}'`
  6.  
  7. # configure kernel
  8. conf_kernel() {
  9. # Smurf protection
  10. # echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
  11. # drop "source route" packets (change routing tables)
  12. echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
  13. # drop ICMP redirect packets that can change routing tables
  14. echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
  15. # protection from wrong ICMP error packets
  16. # echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
  17. # spoofing protection - network interfaces will only accept packets
  18. # from routing tables
  19. echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
  20. # logs weird (spoofed, source routed, redirects) packets
  21. echo 1 > /proc/sys/net/ipv4/conf/all/log_martians
  22. # ignores ICMP at all
  23. # disables by default
  24. # echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
  25. }
  26.  
  27. # deconfigure kernel
  28. deconf_kernel() {
  29. # echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
  30. echo "1" > /proc/sys/net/ipv4/conf/all/accept_source_route
  31. echo "1" > /proc/sys/net/ipv4/conf/all/accept_redirects
  32. # echo "0" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
  33. echo "0" > /proc/sys/net/ipv4/conf/all/rp_filter
  34. echo "0" > /proc/sys/net/ipv4/conf/all/log_martians
  35. # echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_all
  36. }
  37.  
  38. clean_rules() {
  39. $ipt -F
  40. $ipt -X
  41. $ipt -t nat -F
  42. $ipt -t nat -X
  43. $ipt -P FORWARD ACCEPT
  44. $ipt -P INPUT ACCEPT
  45. $ipt -P OUTPUT ACCEPT
  46. }
  47.  
  48. start_rules() {
  49. # Default rules
  50. $ipt -P INPUT DROP
  51. $ipt -P FORWARD DROP
  52. $ipt -P OUTPUT ACCEPT
  53.  
  54. # Block NEW connection with flag other than SYN
  55. $ipt -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
  56. $ipt -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP
  57.  
  58. # Drop fragmented packets
  59. $ipt -A INPUT -f -j DROP
  60. $ipt -A FORWARD -f -j DROP
  61.  
  62. # Drop connections in INVALID state
  63. $ipt -A INPUT -m state --state INVALID -j DROP
  64. $ipt -A FORWARD -m state --state INVALID -j DROP
  65.  
  66. # Allow loopback interface connections
  67. # IMPORTANT !
  68. $ipt -A INPUT -i lo -j ACCEPT
  69.  
  70. # Allow estabilished connections
  71. $ipt -A INPUT -p tcp -j ACCEPT -m state --state ESTABLISHED,RELATED
  72. $ipt -A INPUT -p udp -j ACCEPT -m state --state ESTABLISHED
  73.  
  74. # NULL scanning detection
  75. $ipt -A INPUT -p tcp --tcp-flags ALL NONE -m limit --limit 10/s --limit-burst 4 -j LOG --log-level debug --log-prefix "firewall: SKAN_NULL: "
  76. $ipt -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
  77. # NEW packets without SYN flah are always suspicious
  78. $ipt -N scans
  79. $ipt -A INPUT -p tcp ! --syn -m state --state NEW -j scans
  80. $ipt -A scans -p tcp --tcp-flags ALL RST -m limit --limit 10/s --limit-burst 4 -j LOG --log-level debug --log-prefix "firewall: SKAN_INVERSE: "
  81. $ipt -A scans -p tcp --tcp-flags ALL RST -j DROP
  82. $ipt -A scans -p tcp --tcp-flags ALL ACK -m limit --limit 10/s --limit-burst 4 -j LOG --log-level debug --log-prefix "firewall: SKAN_TCP_PING: "
  83. $ipt -A scans -p tcp --tcp-flags ALL ACK -j DROP
  84. $ipt -A scans -p tcp --tcp-flags ALL FIN -m limit --limit 10/s --limit-burst 4 -j LOG --log-level debug --log-prefix "firewall: SKAN_FIN: "
  85. $ipt -A scans -p tcp --tcp-flags ALL FIN -j DROP
  86. $ipt -A scans -p tcp --tcp-flags ALL FIN,PSH,URG -m limit --limit 10/s --limit-burst 4 -j LOG --log-level debug --log-prefix "firewall: SKAN_XMAS-NMAP: "
  87. $ipt -A scans -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP
  88. $ipt -A scans -p tcp -m limit --limit 10/s --limit-burst 4 -j LOG --log-level debug --log-prefix "firewall: SKAN_INNE: "
  89. $ipt -A scans -j DROP
  90.  
  91. # packets from unwanted sources
  92. $ipt -A INPUT -s 178.217.184.190 -j DROP # Land attack
  93. $ipt -A INPUT -s 10.0.0.0/8 -j DROP # A class
  94. $ipt -A INPUT -s 172.16.0.0/12 -j DROP # B class
  95. $ipt -A INPUT -s 192.168.0.0/16 -j DROP # C class
  96. $ipt -A INPUT -s 224.0.0.0/4 -j DROP # multicast
  97. $ipt -A INPUT -d 224.0.0.0/4 -j DROP # multicast
  98. $ipt -A INPUT -s 240.0.0.0/5 -j DROP # reserved
  99.  
  100. # OTS - limit concurrent connections
  101. $ipt -A INPUT -p tcp -m recent --rcheck --seconds 60 -j DROP
  102. $ipt -A INPUT -p tcp --dport 7171 -m connlimit --connlimit-above 10 -m recent --set -j DROP
  103. $ipt -A INPUT -p tcp --dport 7172 -m connlimit --connlimit-above 10 -m recent --set -j DROP
  104.  
  105. # OTS - Iptable rules for common floods attacks
  106. $ipt -N conn-flood
  107. $ipt -I INPUT 1 -p tcp .syn -j conn-flood
  108. $ipt -A conn-flood -m limit .limit 7/s .limit-burst 20 -j RETURN
  109. $ipt -A conn-flood -j DROP
  110. $ipt -A INPUT -p icmp -m limit --limit 1/s --limit-burst 1 -j ACCEPT
  111. $ipt -A INPUT -p icmp -j DROP
  112. $ipt -I INPUT -p tcp -m state --state NEW,ESTABLISHED -m recent --set -j ACCEPT
  113. $ipt -I INPUT -p tcp -m state --state NEW -m recent --update --seconds 3 --hitcount 20 -j DROP
  114.  
  115. # What we allow
  116. # ICMP
  117. $ipt -A INPUT -p icmp -m limit --limit 15/s -j ACCEPT
  118.  
  119. # SSH
  120. $ipt -A INPUT -p tcp --dport 22 -j ACCEPT
  121.  
  122. # FTP
  123. $ipt -A INPUT -p tcp --dport 21 -j ACCEPT
  124.  
  125. # http
  126. $ipt -A INPUT -p tcp --dport 80 -j ACCEPT
  127.  
  128. # Tibia ( Otserv )
  129. $ipt -A INPUT -p tcp --dport 7171 -j ACCEPT
  130. $ipt -A INPUT -p tcp --dport 7172 -j ACCEPT
  131. }
  132.  
  133. case $1 in
  134. start)
  135. echo "Firewall: Loading..."
  136. conf_kernel
  137. clean_rules
  138. start_rules
  139. echo "Firewall: Loaded."
  140. exit 1
  141. ;;
  142. stop)
  143. echo "Firewall: Unloading..."
  144. deconf_kernel
  145. clean_rules
  146. echo "Firewall: Unloaded."
  147. ;;
  148. *)
  149. echo "Usage: $NAME {start|stop}" >&2
  150. exit 1
  151. ;;
  152. esac
  153.  
  154. exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement