From Kromonos, 3 Years ago, written in Bash.
Embed
  1. #!/bin/bash
  2. ISO="af cn tw in hk jp tr ua kr br ru"
  3.  
  4. ### Set PATH ###
  5. WGET=/usr/bin/wget
  6. EGREP=/bin/egrep
  7. IPTABLES=`which iptables`
  8.  
  9. ### No editing below ###
  10. SPAMLIST="countrydrop"
  11. ZONEROOT="/root/iptables"
  12. DLROOT="http://www.ipdeny.com/ipblocks/data/countries"
  13.  
  14. cleanOldRules(){
  15.     ${IPTABLES} -F
  16.     ${IPTABLES} -X
  17.     ${IPTABLES} -t nat -F
  18.     ${IPTABLES} -t nat -X
  19.     ${IPTABLES} -t mangle -F
  20.     ${IPTABLES} -t mangle -X
  21.     ${IPTABLES} -P INPUT ACCEPT
  22.     ${IPTABLES} -P OUTPUT ACCEPT
  23.     ${IPTABLES} -P FORWARD ACCEPT
  24. }
  25.  
  26. # create a dir
  27. [ ! -d $ZONEROOT ] && /bin/mkdir -p $ZONEROOT
  28.  
  29. # clean old rules
  30. cleanOldRules
  31.  
  32. # create a new iptables list
  33. ${IPTABLES} -N $SPAMLIST
  34.  
  35. for c  in $ISO
  36. do
  37.         # local zone file
  38.         tDB=$ZONEROOT/$c.zone
  39.  
  40.         # get fresh zone file
  41.         $WGET -O $tDB $DLROOT/$c.zone
  42.  
  43.         # country specific log message
  44.         SPAMDROPMSG="$c Country Drop"
  45.  
  46.         # get
  47.         BADIPS=$(egrep -v "^#|^$" $tDB)
  48.         for ipblock in $BADIPS
  49.         do
  50.            ${IPTABLES} -A $SPAMLIST -s $ipblock -j DROP
  51.         done
  52. done
  53.  
  54. # Drop everything
  55. ${IPTABLES} -I INPUT -j $SPAMLIST
  56. ${IPTABLES} -I OUTPUT -j $SPAMLIST
  57. ${IPTABLES} -I FORWARD -j $SPAMLIST
  58.  
  59.  
  60. ${IPTABLES} -A INPUT -m state --state INVALID -j DROP
  61.  
  62. # FTP_BRUTE CHAIN
  63. ${IPTABLES} -A INPUT -p tcp -m multiport --dports 20,21 -m state --state NEW -m recent --set --name FTP_BRUTE
  64. ${IPTABLES} -A INPUT -p tcp -m multiport --dports 20,21 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --rttl --name FTP_BRUTE -j DROP
  65.  
  66. # SYNFLOOD CHAIN
  67. ${IPTABLES} -A INPUT -m state --state NEW -p tcp -m tcp --syn -m recent --name SYNFLOOD --set
  68. ${IPTABLES} -A INPUT -m state --state NEW -p tcp -m tcp --syn -m recent --name SYNFLOOD --update --seconds 1 --hitcount 60 -j DROP
  69.  
  70. ${IPTABLES} -A INPUT   -m state --state INVALID -j DROP                                                 # Drop invalid packets
  71. ${IPTABLES} -A FORWARD -m state --state INVALID -j DROP                                                 # Drop invalid packets
  72. ${IPTABLES} -A OUTPUT  -m state --state INVALID -j DROP                                                 # Drop invalid packets
  73. ${IPTABLES} -A INPUT -p tcp -m tcp --tcp-flags SYN,FIN SYN,FIN -j DROP                                  # Drop TCP - SYN,FIN packets
  74. ${IPTABLES} -A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP                                  # Drop TCP - SYN,RST packets
  75.  
  76. ${IPTABLES} -A INPUT -s 10.0.0.0/8       -j DROP                                                                # (Spoofed network)
  77. ${IPTABLES} -A INPUT -s 192.0.0.1/24     -j DROP                                                                # (Spoofed network)
  78. ${IPTABLES} -A INPUT -s 169.254.0.0/16   -j DROP                                                                # (Spoofed network)
  79. ${IPTABLES} -A INPUT -s 172.16.0.0/12    -j DROP                                                                # (Spoofed network)
  80. ${IPTABLES} -A INPUT -s 224.0.0.0/4      -j DROP                                                                # (Spoofed network)
  81. ${IPTABLES} -A INPUT -d 224.0.0.0/4      -j DROP                                                                # (Spoofed network)
  82. ${IPTABLES} -A INPUT -s 240.0.0.0/5      -j DROP                                                                # (Spoofed network)
  83. ${IPTABLES} -A INPUT -d 240.0.0.0/5      -j DROP                                                                # (Spoofed network)
  84. ${IPTABLES} -A INPUT -s 0.0.0.0/8        -j DROP                                                                # (Spoofed network)
  85. ${IPTABLES} -A INPUT -d 0.0.0.0/8        -j DROP                                                                # (Spoofed network)
  86. ${IPTABLES} -A INPUT -d 239.255.255.0/24 -j DROP                                                                # (Spoofed network)
  87. #${IPTABLES} -A INPUT -d 255.255.255.255  -j DROP                                                                # (Spoofed network)
  88. ${IPTABLES} -A INPUT -s 109.63.96.0/20   -j DROP
  89.