Guest User

Untitled

a guest
Jan 20th, 2013
429
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 5.04 KB | None | 0 0
  1. #!/bin/sh
  2.  
  3. IF="eth0"
  4. IF6="eth0"
  5. IPTABLES=`which iptables`
  6. IP6TABLES=`which ip6tables`
  7.  
  8.  
  9. BASEDIR="/etc/firewall/"
  10. TCP_PORTS="opened-tcp-ports"
  11. UDP_PORTS="opened-udp-ports"
  12. TCP_PORTS6="opened-tcp6-ports"
  13. UDP_PORTS6="opened-udp6-ports"
  14. BLACKLIST_IP="blacklist-ip"
  15. BLACKLIST_IP6="blacklist-ip6"
  16.  
  17. SPOOF_IPS="0.0.0.0/8 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 224.0.0.0/3"
  18.  
  19.  
  20. /bin/echo -n "Setting up firewall rules: "
  21.  
  22. if [ ! -d ${BASEDIR} ]; then
  23.     mkdir -p ${BASEDIR}
  24. fi
  25.  
  26. if [ ! -f ${BASEDIR}${TCP_PORTS} ]; then
  27.     touch ${BASEDIR}${TCP_PORTS}
  28. fi
  29. if [ ! -f ${BASEDIR}${UDP_PORTS} ]; then
  30.     touch ${BASEDIR}${UDP_PORTS}
  31. fi
  32. if [ ! -f ${BASEDIR}${TCP_PORTS6} ]; then
  33.     touch ${BASEDIR}${TCP_PORTS6}
  34. fi
  35. if [ ! -f ${BASEDIR}${UDP_PORTS6} ]; then
  36.     touch ${BASEDIR}${UDP_PORTS6}
  37. fi
  38. if [ ! -f ${BASEDIR}${BLACKLIST_IP} ]; then
  39.     touch ${BASEDIR}${BLACKLIST_IP}
  40. fi
  41. if [ ! -f ${BASEDIR}${BLACKLIST_IP6} ]; then
  42.     touch ${BASEDIR}${BLACKLIST_IP6}
  43. fi
  44.  
  45. # Aktuális szabályok ürítése, láncok törlése
  46. $IPTABLES -F
  47. $IPTABLES -F -t nat
  48. $IPTABLES -X
  49. $IPTABLES -X -t nat
  50.  
  51. # Alap policy ACCEPT
  52. $IPTABLES -P INPUT ACCEPT
  53. $IPTABLES -P OUTPUT ACCEPT
  54. $IPTABLES -P FORWARD ACCEPT
  55.  
  56.  
  57. # Támadások és portscan ellen védelem
  58.  
  59. # SYN scan
  60. $IPTABLES -N SYNSCAN
  61. $IPTABLES -A SYNSCAN -m recent --set --name BLACKLIST_30M --rsource
  62. $IPTABLES -I SYNSCAN -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix "[Firewall] (Maybe) SYN scan: "
  63.  
  64. $IPTABLES -I INPUT -p tcp -m state --state NEW -m multiport --dports 23,79 -j SYNSCAN
  65.  
  66. # FIN scan
  67. $IPTABLES -N FINSCAN
  68. $IPTABLES -A FINSCAN -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix "[Firewall] FIN scan: "
  69. $IPTABLES -A FINSCAN -j DROP
  70.  
  71. $IPTABLES -I INPUT -p tcp --tcp-flags ALL FIN -j FINSCAN
  72.  
  73. # ACK scan
  74. $IPTABLES -N ACKSCAN
  75. $IPTABLES -A ACKSCAN -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix "[Firewall] ACK scan: "
  76. $IPTABLES -A ACKSCAN -j DROP
  77.  
  78. $IPTABLES -I INPUT -p tcp ! --syn -m state --state NEW -j ACKSCAN
  79.  
  80. # XMAS scan
  81. $IPTABLES -N XMASSCAN
  82. $IPTABLES -A XMASSCAN -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix "[Firewall] XMAS scan: "
  83. $IPTABLES -A XMASSCAN -j DROP
  84.  
  85. $IPTABLES -I INPUT -p tcp --tcp-flags ALL ALL -j XMASSCAN
  86. $IPTABLES -I INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -j XMASSCAN
  87. $IPTABLES -I INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j XMASSCAN
  88.  
  89.  
  90. # NULL scan
  91. $IPTABLES -N NULLSCAN
  92. $IPTABLES -A NULLSCAN -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix "[Firewall] NULL scan: "
  93. $IPTABLES -A NULLSCAN -j DROP
  94.  
  95. $IPTABLES -I INPUT -p tcp --tcp-flags ALL NONE -j NULLSCAN
  96.  
  97. # IP spoofing
  98. $IPTABLES -N IPSPOOFING
  99. $IPTABLES -A IPSPOOFING -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix "[Firewall] IP spoofing: "
  100. $IPTABLES -A IPSPOOFING -j DROP
  101.  
  102. echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
  103.  
  104. for ip in $SPOOF_IPS
  105. do
  106.     $IPTABLES -I INPUT -i $IF -s $ip -j IPSPOOFING
  107. done
  108.  
  109.  
  110. # UDP scan (Üres UDP csomagok)
  111. $IPTABLES -N UDPSCAN
  112. $IPTABLES -A UDPSCAN -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix "[Firewall] UDP scan: "
  113. $IPTABLES -A UDPSCAN -j DROP
  114.  
  115. $IPTABLES -I INPUT -p udp -m length --length 0:28 -j UDPSCAN
  116.  
  117. # ICMP flood
  118.  
  119. $IPTABLES -N ICMPFLOOD
  120. $IPTABLES -A ICMPFLOOD -m limit --limit 2/s --limit-burst 2 -j RETURN
  121. $IPTABLES -A ICMPFLOOD -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix "[Firewall] ICMP flood: "
  122. $IPTABLES -A ICMPFLOOD -m recent --set --name BLACKLIST_30M --rsource
  123.  
  124. $IPTABLES -I INPUT -p icmp -j ICMPFLOOD
  125.  
  126. # UDP flood
  127.  
  128. $IPTABLES -N UDPFLOOD
  129. #Ez még nincs kész :))
  130.  
  131. # SYN flood
  132.  
  133. $IPTABLES -N SYNFLOOD
  134. $IPTABLES -A SYNFLOOD -m limit --limit 2/s --limit-burst 2 -j RETURN
  135. $IPTABLES -A SYNFLOOD -m limit --limit 1/min --limit-burst 2 -j LOG --log-prefix "[Firewall] SYN flood: "
  136. $IPTABLES -A SYNFLOOD -m recent --set --name BLACKLIST_30M --rsource
  137.  
  138. $IPTABLES -I INPUT -p tcp --syn -j SYNFLOOD
  139.  
  140. # Invalid packages
  141. $IPTABLES -A INPUT -m state --state INVALID -j DROP
  142.  
  143.  
  144. #30 perces tiltólista
  145. $IPTABLES -I INPUT -m recent --update --seconds 1800 --hitcount 1 --name BLACKLIST_30M --rsource -j REJECT --reject-with icmp-host-unreachable
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152. # Bejövő TCP portok nyitása
  153. for port in $(cat ${BASEDIR}${TCP_PORTS})
  154. do
  155.     $IPTABLES -A INPUT -i $IF -p tcp -m state --syn --state NEW --dport $port -j ACCEPT
  156. done
  157.  
  158. # Bejövő UDP portok nyitása
  159. for port in $(cat ${BASEDIR}${UDP_PORTS})
  160. do
  161.     $IPTABLES -A INPUT -i $IF -p tcp -m state --syn --state NEW --dport $port -j ACCEPT
  162. done
  163.  
  164. # IPv4 feketelistás IP-k
  165.  
  166. for ip in $(cat ${BASEDIR}${BLACKLIST_IP})
  167. do
  168.     $IPTABLES -A INPUT -i $IF -s $ip -j REJECT --reject-with icmp-host-unreachable
  169. done
  170.  
  171. # Néhány bejövő kapcsolat logolása...
  172. $IPTABLES -A INPUT -i $IF -p tcp -m state --syn --state NEW --dport 32500 -j LOG --log-prefix "[Firewall] Incoming SSH connection: "
  173.  
  174.  
  175. # Minden egyéb elutasítása
  176. $IPTABLES -A INPUT -i $IF -p tcp -m state --state NEW -j REJECT --reject-with icmp-host-unreachable
  177. $IPTABLES -A INPUT -i $IF -p udp -m state --state NEW -j REJECT --reject-with icmp-host-unreachable
Advertisement
Add Comment
Please, Sign In to add comment