Linux Iptables Firewall Shell Script For Standalone Server

WebServer của bạn đang có dấu hiệu bị DoS? Hy vọng đoạn script sư tầm sau đây có thể giúp bạn giải quyết phần nào vấn đề đó:

A shell script on iptables rules for a webserver (no need to use APF or CSF) just run this script from /etc/rc.local and you are done. Save following script as /root/scripts/fw.start:

  1. #!/bin/bash
  2. # A Linux Shell Script with common rules for IPTABLES Firewall.
  3. # By default this script only open port 80, 22, 53 (input)
  4. # All outgoing traffic is allowed (default – output)
  5. # ————————————————————————-
  6. # Copyright (c) 2004 nixCraft project <http://cyberciti.biz/fb/&gt;
  7. # This script is licensed under GNU GPL version 2.0 or above
  8. # ————————————————————————-
  9. # This script is part of nixCraft shell script collection (NSSC)
  10. # Visit http://bash.cyberciti.biz/ for more information.
  11. # ————————————————————————-
  12. IPT=”/sbin/iptables”
  13. SPAMLIST=”blockedip”
  14. SPAMDROPMSG=”BLOCKED IP DROP”
  15. echo “Starting IPv4 Wall…”
  16. $IPT -F
  17. $IPT -X
  18. $IPT -t nat -F
  19. $IPT -t nat -X
  20. $IPT -t mangle -F
  21. $IPT -t mangle -X
  22. modprobe ip_conntrack
  23. [ -f /root/scripts/blocked.ips.txt ] && BADIPS=$(egrep -v -E “^#|^$” /root/scripts/blocked.ips.txt)
  24. PUB_IF=”eth0″
  25. #unlimited
  26. $IPT -A INPUT -i lo -j ACCEPT
  27. $IPT -A OUTPUT -o lo -j ACCEPT
  28. # DROP all incomming traffic
  29. $IPT -P INPUT DROP
  30. $IPT -P OUTPUT DROP
  31. $IPT -P FORWARD DROP
  32. if [ -f /root/scripts/blocked.ips.txt ];
  33. then
  34. # create a new iptables list
  35. $IPT -N $SPAMLIST
  36. for ipblock in $BADIPS
  37. do
  38. $IPT -A $SPAMLIST -s $ipblock -j LOG –log-prefix “$SPAMDROPMSG”
  39. $IPT -A $SPAMLIST -s $ipblock -j DROP
  40. done
  41. $IPT -I INPUT -j $SPAMLIST
  42. $IPT -I OUTPUT -j $SPAMLIST
  43. $IPT -I FORWARD -j $SPAMLIST
  44. fi
  45. # Block sync
  46. $IPT -A INPUT -i ${PUB_IF} -p tcp ! –syn -m state –state NEW -m limit –limit 5/m –limit-burst 7 -j LOG –log-level 4 –log-prefix “Drop Sync”
  47. $IPT -A INPUT -i ${PUB_IF} -p tcp ! –syn -m state –state NEW -j DROP
  48. # Block Fragments
  49. $IPT -A INPUT -i ${PUB_IF} -f -m limit –limit 5/m –limit-burst 7 -j LOG –log-level 4 –log-prefix “Fragments Packets”
  50. $IPT -A INPUT -i ${PUB_IF} -f -j DROP
  51. # Block bad stuff
  52. $IPT -A INPUT -i ${PUB_IF} -p tcp –tcp-flags ALL FIN,URG,PSH -j DROP
  53. $IPT -A INPUT -i ${PUB_IF} -p tcp –tcp-flags ALL ALL -j DROP
  54. $IPT -A INPUT -i ${PUB_IF} -p tcp –tcp-flags ALL NONE -m limit –limit 5/m –limit-burst 7 -j LOG –log-level 4 –log-prefix “NULL Packets”
  55. $IPT -A INPUT -i ${PUB_IF} -p tcp –tcp-flags ALL NONE -j DROP # NULL packets
  56. $IPT -A INPUT -i ${PUB_IF} -p tcp –tcp-flags SYN,RST SYN,RST -j DROP
  57. $IPT -A INPUT -i ${PUB_IF} -p tcp –tcp-flags SYN,FIN SYN,FIN -m limit –limit 5/m –limit-burst 7 -j LOG –log-level 4 –log-prefix “XMAS Packets”
  58. $IPT -A INPUT -i ${PUB_IF} -p tcp –tcp-flags SYN,FIN SYN,FIN -j DROP #XMAS
  59. $IPT -A INPUT -i ${PUB_IF} -p tcp –tcp-flags FIN,ACK FIN -m limit –limit 5/m –limit-burst 7 -j LOG –log-level 4 –log-prefix “Fin Packets Scan”
  60. $IPT -A INPUT -i ${PUB_IF} -p tcp –tcp-flags FIN,ACK FIN -j DROP # FIN packet scans
  61. $IPT -A INPUT -i ${PUB_IF} -p tcp –tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
  62. # Allow full outgoing connection but no incomming stuff
  63. $IPT -A INPUT -i eth0 -m state –state ESTABLISHED,RELATED -j ACCEPT
  64. $IPT -A OUTPUT -o eth0 -m state –state NEW,ESTABLISHED,RELATED -j ACCEPT
  65. # Allow ssh
  66. $IPT -A INPUT -p tcp –destination-port 22 -j ACCEPT
  67. # allow incomming ICMP ping pong stuff
  68. $IPT -A INPUT -p icmp –icmp-type 8 -m state –state NEW,ESTABLISHED,RELATED -j ACCEPT
  69. $IPT -A OUTPUT -p icmp –icmp-type 0 -m state –state ESTABLISHED,RELATED -j ACCEPT
  70. # Allow port 53 tcp/udp (DNS Server)
  71. $IPT -A INPUT -p udp –dport 53 -m state –state NEW,ESTABLISHED,RELATED -j ACCEPT
  72. $IPT -A OUTPUT -p udp –sport 53 -m state –state ESTABLISHED,RELATED -j ACCEPT
  73. $IPT -A INPUT -p tcp –destination-port 53 -m state –state NEW,ESTABLISHED,RELATED -j ACCEPT
  74. $IPT -A OUTPUT -p tcp –sport 53 -m state –state ESTABLISHED,RELATED -j ACCEPT
  75. # Open port 80
  76. $IPT -A INPUT -p tcp –destination-port 80 -j ACCEPT
  77. ##### Add your rules below ######
  78. ##### END your rules ############
  79. # Do not log smb/windows sharing packets – too much logging
  80. $IPT -A INPUT -p tcp -i eth0 –dport 137:139 -j REJECT
  81. $IPT -A INPUT -p udp -i eth0 –dport 137:139 -j REJECT
  82. # log everything else and drop
  83. $IPT -A INPUT -j LOG
  84. $IPT -A FORWARD -j LOG
  85. $IPT -A INPUT -j DROP
  86. exit 0

    How do I install and use this script?

    Type the following command as root server:
    # mkdir /root/scripts
    # cd /root/scripts
    # wget http://bash.cyberciti.biz/dl/381.sh.zip
    # wget http://bash.cyberciti.biz/dl/151.sh.zip
    # unzip 381.sh.zip
    # unzip 151.sh.zip
    # mv 381.sh start.fw
    # mv 151.sh stop.fw
    # chmod +x *.fw

    Now edit firewall as per your requirements:
    # vi /root/scripts/start.fw
    Install firewall:
    # echo '/root/scripts/start.fw' >> /etc/rc.local

    How do I start firewall from a shell prompt?

    # /root/scripts/start.fw

    How do I stop firewall from a shell prompt?

    # /root/scripts/stop.fw

About these ads

Gửi phản hồi

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Thay đổi )

Twitter picture

You are commenting using your Twitter account. Log Out / Thay đổi )

Facebook photo

You are commenting using your Facebook account. Log Out / Thay đổi )

Connecting to %s