LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 634|回复: 2

我用哪个防火墙脚本比较好呢(有2个,大家帮我选选)

[复制链接]
发表于 2005-3-25 10:55:45 | 显示全部楼层 |阅读模式
有2个防火墙脚本...一个是一直用的,一个是最近找到的...

大家看看,我用那一个比较好呢??

以前一直用的脚本::
  1. #!/bin/sh
  2. #
  3. # firewall starting firewall
  4. #
  5. # chkconfig: 2345 98 01
  6. # description: setting firewall
  7. ##########################################################################
  8. # 设定参数
  9. ##########################################################################
  10. INNER_NET=192.168.0.0/24 # LAN 局域网 自由设定
  11. FWALL_IP=192.168.0.1 # 防火墙的IP 你的机器的真实IP
  12. INNER_PORT=eth1 # 局域网端IP
  13. OUTER_PORT=ppp0 # Wan端IP
  14. IPTABLES="/sbin/iptables" # iptables 命令
  15. MODPROBE="/sbin/modprobe" # modprobe 命令
  16. ##########################################################################
  17. # 模块的加载和设定为内核工作
  18. ##########################################################################
  19. $MODPROBE ip_tables
  20. $MODPROBE iptable_filter
  21. $MODPROBE ip_conntrack
  22. $MODPROBE iptable_nat
  23. $MODPROBE ip_nat_ftp
  24. $MODPROBE ip_conntrack_ftp
  25. $MODPROBE ipt_state
  26. $MODPROBE ipt_MASQUERADE
  27. $MODPROBE ipt_LOG
  28. $MODPROBE ipt_REJECT
  29. $MODPROBE ipt_limit
  30. # 允许IP masquerade(变换)
  31. echo 1 > /proc/sys/net/ipv4/ip_forward
  32. # 忽视ping的broadcast
  33. echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
  34. # 检查源IP
  35. for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 1 > $f; done
  36. # 记录不可能的(虚假)IP
  37. for f in /proc/sys/net/ipv4/conf/*/log_martians; do echo "1" > $f; done
  38. # 忽视ICMP redirect message
  39. for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do echo 1 > $f; done
  40. ##########################################################################
  41. # 初始化规则
  42. ##########################################################################
  43. $IPTABLES -P INPUT DROP # 清空INPUT原始定义
  44. $IPTABLES -P OUTPUT DROP # 清空OUPUT原始定义
  45. $IPTABLES -P FORWARD DROP # 清空FORWARD原始定义
  46. $IPTABLES -F # flash chain
  47. $IPTABLES -F -t nat
  48. $IPTABLES -X # 删除用户定义的Chain
  49. ##########################################################################
  50. # 用户定义的chain
  51. ##########################################################################
  52. #
  53. # 记录并丢弃非法的包
  54. #
  55. $IPTABLES -N DROPPACKET # DROPPACKT chain的生成
  56. $IPTABLES -A DROPPACKET -j LOG --log-prefix "INVALID_PACKET: " \
  57. --log-level=3 -m limit --limit 1/s --limit-burst 10
  58. $IPTABLES -A DROPPACKET -j DROP
  59. #
  60. # 检查SYNFlood攻击的chain
  61. #
  62. $IPTABLES -N SYNFLOOD # SYNFLOOD chain的生成
  63. # 没有超过限定值的话返回
  64. $IPTABLES -A SYNFLOOD -m limit --limit 10/s --limit-burst 20 -j RETURN
  65. # 超过限定值,就视为SYNFLOOD攻击,记录并丢弃
  66. $IPTABLES -A SYNFLOOD -m limit --limit 1/s --limit-burst 10 -j LOG \
  67. --log-level=1 --log-prefix "SYNFLOOD: "
  68. $IPTABLES -A SYNFLOOD -j DROP
  69. #
  70. # 记录非法的Flag TCP,并丢弃
  71. #
  72. $IPTABLES -N DROPFLAGS # DROPFLAGS chain的生成
  73. $IPTABLES -A DROPFLAGS -j LOG --log-prefix "INVALID_FLAGS: " \
  74. --log-level=3 -m limit --limit 1/s --limit-burst 10
  75. $IPTABLES -A DROPFLAGS -j DROP
  76. #
  77. # 检查TCP Flag的非法组合
  78. #
  79. $IPTABLES -N CHKFLAGS
  80. $IPTABLES -A CHKFLAGS -p tcp --tcp-flags ACK,FIN FIN -j DROPFLAGS
  81. $IPTABLES -A CHKFLAGS -p tcp --tcp-flags ACK,PSH PSH -j DROPFLAGS
  82. $IPTABLES -A CHKFLAGS -p tcp --tcp-flags ACK,URG URG -j DROPFLAGS
  83. $IPTABLES -A CHKFLAGS -p tcp --tcp-flags FIN,RST FIN,RST -j DROPFLAGS
  84. $IPTABLES -A CHKFLAGS -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROPFLAGS
  85. $IPTABLES -A CHKFLAGS -p tcp --tcp-flags SYN,RST SYN,RST -j DROPFLAGS
  86. $IPTABLES -A CHKFLAGS -p tcp --tcp-flags ALL ALL -j DROPFLAGS
  87. $IPTABLES -A CHKFLAGS -p tcp --tcp-flags ALL NONE -j DROPFLAGS
  88. $IPTABLES -A CHKFLAGS -p tcp --tcp-flags ALL FIN,PSH,URG -j DROPFLAGS
  89. $IPTABLES -A CHKFLAGS -p tcp --tcp-flags ALL SYN,FIN,PSH,URG -j DROPFLAGS
  90. $IPTABLES -A CHKFLAGS -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROPFLAGS
  91. #
  92. # 拒绝 Microsoft 网络相关的FORWARD
  93. #
  94. $IPTABLES -N CHKMSNET
  95. $IPTABLES -A CHKMSNET -p tcp --dport 42 -j DROP # wins dup
  96. $IPTABLES -A CHKMSNET -p tcp --dport 135 -j DROP # MS-RPC
  97. $IPTABLES -A CHKMSNET -p udp --dport 135 -j DROP # MS-RPC
  98. $IPTABLES -A CHKMSNET -p udp --dport 137:138 -j DROP # MS browse
  99. $IPTABLES -A CHKMSNET -p udp --dport 137:138 -j DROP # MS browse
  100. $IPTABLES -A CHKMSNET -p tcp --dport 139 -j DROP # SMB
  101. $IPTABLES -A CHKMSNET -p tcp --dport 445 -j DROP # DHSMB

  102. ##########################################################################
  103. # INPUT Chain
  104. ##########################################################################
  105. # Localhost的话,全部许可
  106. $IPTABLES -A INPUT -i lo -j ACCEPT
  107. # 检查包的正确性
  108. $IPTABLES -A INPUT -m state --state INVALID -j DROPPACKET
  109. # 检查包是否是SYN攻击
  110. $IPTABLES -A INPUT -p tcp --syn -j SYNFLOOD
  111. # TCP FLAG的检查
  112. $IPTABLES -A INPUT -p tcp -j CHKFLAGS
  113. # 许可LAN内的连接
  114. $IPTABLES -A INPUT -i $INNER_PORT -s $INNER_NET -j ACCEPT
  115. # 许可已经建立的连接
  116. $IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  117. # 检查是否是IP伪装
  118. $IPTABLES -A INPUT -i $OUTER_PORT -s $INNER_NET -j DROP
  119. #
  120. # 许可的服务(对外部公开的服务,在下面记述)
  121. #
  122. $IPTABLES -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT # SSH
  123. $IPTABLES -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT # HTTP
  124. $IPTABLES -A INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT # HTTPS
  125. $IPTABLES -A INPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT # DOMAIN(DNS)
  126. $IPTABLES -A INPUT -p udp --dport 53 -m state --state NEW -j ACCEPT # DOMAIN(DNS)
  127. $IPTABLES -A  INPUT -m state --state NEW -m tcp -p tcp --dport 20000:30000 -j ACCEPT # PASV_PORTS
  128. $IPTABLES -A INPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT     # FTP

  129. # 拒绝AUTH请求
  130. $IPTABLES -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset
  131. # icmp(IN)
  132. $IPTABLES -A INPUT -p icmp --icmp-type echo-request -s $INNER_NET -j ACCEPT
  133. $IPTABLES -A INPUT -p icmp --icmp-type echo-reply -s $INNER_NET -j ACCEPT
  134. $IPTABLES -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
  135. $IPTABLES -A INPUT -p icmp --icmp-type source-quench -j ACCEPT
  136. $IPTABLES -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
  137. $IPTABLES -A INPUT -p icmp --icmp-type parameter-problem -j ACCEPT
  138. # 除了上面以外所有的包,都记录下来,并通过Default Policy丢弃
  139. $IPTABLES -A INPUT -j LOG --log-prefix "UNDEFIND_INPUT: " \
  140. --log-level=3 -m limit --limit 1/s --limit-burst 10

  141. ##########################################################################
  142. # OUTPUT Chain
  143. ##########################################################################
  144. # 许可由localhost出来的包
  145. $IPTABLES -A OUTPUT -o lo -j ACCEPT
  146. # TCP FLAG的检查
  147. $IPTABLES -A OUTPUT -p tcp -j CHKFLAGS
  148. # 许可从服务器到Lan的连接
  149. $IPTABLES -A OUTPUT -o $INNER_PORT -s $FWALL_IP -j ACCEPT
  150. # 检查Microsoft网络
  151. $IPTABLES -A OUTPUT -j CHKMSNET
  152. # 许可已经连接的包
  153. $IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  154. # 许可由服务器到互联网的新加连接
  155. $IPTABLES -A OUTPUT -m state --state NEW -j ACCEPT
  156. # icmp(OUT)
  157. $IPTABLES -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
  158. $IPTABLES -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
  159. $IPTABLES -A OUTPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
  160. $IPTABLES -A OUTPUT -p icmp --icmp-type fragmentation-needed -j ACCEPT
  161. $IPTABLES -A OUTPUT -p icmp --icmp-type source-quench -j ACCEPT
  162. $IPTABLES -A OUTPUT -p icmp --icmp-type parameter-problem -j ACCEPT
  163. # 除了上面以外所有的包,都记录下来,并通过Default Policy丢弃
  164. $IPTABLES -A OUTPUT -j LOG --log-prefix "UNDEFIND_ICMP: " --log-level=3 \
  165. -m limit --limit 1/s --limit-burst 10

  166. ##########################################################################
  167. # IP变换
  168. ##########################################################################
  169. # 检查Microsoft网络
  170. $IPTABLES -A FORWARD -j CHKMSNET
  171. # 许可Lan内机器的IP变换
  172. $IPTABLES -t nat -A POSTROUTING -o $OUTER_PORT -s $INNER_NET -j MASQUERADE
  173. # 从外部到Lan的连接,许可已经连接的FROWARD
  174. $IPTABLES -A FORWARD -i $OUTER_PORT -o $INNER_PORT -d $INNER_NET -m state \
  175. --state ESTABLISHED,RELATED -j ACCEPT
  176. # 许可LAN到外部的连接
  177. $IPTABLES -A FORWARD -i $INNER_PORT -o $OUTER_PORT -s $INNER_NET -m state \
  178. --state NEW,ESTABLISHED,RELATED -j ACCEPT
  179. exit 0
复制代码


最近找的脚本(台湾鸟哥的脚本)

  1. #!/bin/bash
  2. #
  3. # ========================================================
  4. # 脚本说明:
  5. # 欢迎使用iptables.rule这个script来建立您的防火墙
  6. # 这个script还需要您自己根据您的环境设定后,方可工作
  7. # 基本规则定义为::[拒绝所有,开放特定]
  8. #
  9. # 强烈建议
  10. # 不了解Linux防火墙机制iptables的朋友使用这个script
  11. # 可能会不太了解每个命令的意义,如果这样
  12. # 欢迎您参考以下几个网页:
  13. # http://www.study-area.org/linux/servers/linux_nat.htm
  14. # http://linux.vbird.org/linux_server/0240network-secure-1.php
  15. # http://linux.vbird.org/linux_server/0250simple_firewall.php
  16. #
  17. # 使用说明
  18. # 请先将这个脚本权限更改为可执行:
  19. #        chmod 755 iptables.rule
  20. # 将此脚本放置在 /usr/local/virus/iptables 下
  21. #        mkdir -p /usr/local/virus/iptables
  22. #        mv /您的完整的路径/iptables.rule /usr/local/virus/iptables
  23. # 执行测试:
  24. #        /usr/local/virus/iptables/iptables.rule
  25. #        iptables -L -n   (这个动作检查防火墙规则)
  26. # 将下面一行加入 /etc/rc.d/rc.local 中
  27. #        /usr/local/virus/iptables/iptables.rule
  28. # 取消防火墙
  29. #        iptables -F
  30. #        iptables -X
  31. #        iptables -t nat -F
  32. #        iptables -t nat -X
  33. #
  34. # ========================================================
  35. # 版权提示:
  36. # 此脚本为 GPL 授权,任何人都可以使用
  37. # 使用此 scripts 发生任何问题时
  38. # 本人不负任何责任
  39. # VBird <vbird@tsai.adsldns.org>
  40. # ========================================================
  41. # 历史纪录:
  42. # 2002/08/20        VBird        首次
  43. # 2003/04/26        VBird        加入砍站软体的相关执行文件
  44. # 2003/08/25        VBird        修改 INPUT 的 Policy 为 DROP
  45. # ========================================================

  46. # 0.0 Please key in your parameters
  47. # 这个EXTIF后面接的为[对外的网卡"WAN"]
  48. # 一般来说,如果是ADSL/FTTH等,就是"ppp0"
  49. # 如果是固定IP,那么就是"eth0"
  50. # The interface that connect Internet
  51.   EXTIF="ppp0"

  52. # 下面的INIF为对内网卡(Lan)
  53. # 如果您的Linux没有对内网卡,请留空
  54. # INIF=""
  55. #
  56. # the inside interface. if you don't have this one
  57. # and you must let this be black ex> INIF=""
  58.   INIF="eth1"
  59.   INNET="192.168.1.0/24"        # This is for NAT's network

  60. # 1.0 测试您的Linux内核版本及防火墙模组
  61.   kver=`uname -r | cut -c 1-3`
  62.   if [ "$kver" != "2.4" ] && [ "$kver" != "2.5" ]; then
  63.         echo "Your Linux Kernel Version may not be suported by this script!"
  64.         echo "This scripts will not be runing"
  65.         exit
  66.   fi
  67.   ipchains=`lsmod | grep ipchains`
  68.   if [ "$ipchains" != "" ]; then
  69.         echo "unload ipchains in your system"
  70.         rmmod ipchains 2> /dev/null
  71.   fi

  72. # 2.0 载入模组
  73.   PATH=/sbin:/bin:/usr/sbin:/usr/bin
  74.   export PATH EXTIF INIF INNET
  75.   modprobe ip_tables                > /dev/null 2>&1
  76.   modprobe iptable_nat                > /dev/null 2>&1
  77.   modprobe ip_nat_ftp                > /dev/null 2>&1
  78.   modprobe ip_nat_irc                > /dev/null 2>&1
  79.   modprobe ip_conntrack                > /dev/null 2>&1
  80.   modprobe ip_conntrack_ftp        > /dev/null 2>&1
  81.   modprobe ip_conntrack_irc        > /dev/null 2>&1

  82. # 3.0 清除所有的防火墙规则
  83.   /sbin/iptables -F
  84.   /sbin/iptables -X
  85.   /sbin/iptables -Z
  86.   /sbin/iptables -F -t nat
  87.   /sbin/iptables -X -t nat
  88.   /sbin/iptables -Z -t nat
  89.   /sbin/iptables -P INPUT   DROP
  90.   /sbin/iptables -P OUTPUT  ACCEPT
  91.   /sbin/iptables -P FORWARD ACCEPT
  92.   /sbin/iptables -t nat -P PREROUTING  ACCEPT
  93.   /sbin/iptables -t nat -P POSTROUTING ACCEPT
  94.   /sbin/iptables -t nat -P OUTPUT      ACCEPT

  95. # 4.0 &#59267;先允许任何网络,包括lo这个界面
  96. #          以及刚才指定的内部界面(LAN)
  97. #          当然,重点是启动您的Linux为NAT服务器功能
  98.   /sbin/iptables -A INPUT -i lo          -j ACCEPT
  99.   if [ "$INIF" != "" ]; then
  100.         /sbin/iptables -A INPUT -i $INIF -j ACCEPT
  101.         echo "1" > /proc/sys/net/ipv4/ip_forward
  102.         /sbin/iptables -t nat -A POSTROUTING -s $INNET -o $EXTIF -j MASQUERADE
  103.   fi

  104. # 5.0 开始载入任何可以拒绝的网络设定的文件
  105. #     下面2个文件可以自行建立
  106.   if [ -f /usr/local/virus/iptables/iptables.deny ]; then
  107.         sh /usr/local/virus/iptables/iptables.deny
  108.   fi
  109.   if [ -f /usr/local/virus/iptables/iptables.allow ]; then
  110.         sh /usr/local/virus/iptables/iptables.allow
  111.   fi

  112. # 6.0 下面这个文件如果存在,则执行!!
  113. #       请注意::这个文件与防止砍站的软件有关
  114.   if [ -f /usr/local/virus/httpd-err/iptables.http ]; then
  115.         sh /usr/local/virus/httpd-err/iptables.http
  116.   fi
  117.   
  118. # 7.0 允许ICMP封包,允许已建立的连接通过
  119.   /sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  120.   AICMP="0 3 3/4 4 11 12 14 16 18"
  121.   for tyicmp in $AICMP
  122.   do
  123.         /sbin/iptables -A INPUT -i $EXTIF -p icmp --icmp-type $tyicmp -j ACCEPT
  124.   done

  125. # 8.0 Allow services,请关闭您的服务器没有开放的服务..在行前加"#"..
  126.   /sbin/iptables -A INPUT -p TCP -i $EXTIF --dport  22 -j ACCEPT        # SSH
  127.   /sbin/iptables -A INPUT -p TCP -i $EXTIF --dport  25 -j ACCEPT        # SMTP
  128.   /sbin/iptables -A INPUT -p UDP -i $EXTIF --dport  53 -j ACCEPT        # DNS
  129.   /sbin/iptables -A INPUT -p TCP -i $EXTIF --dport  53 -j ACCEPT        # DNS
  130.   /sbin/iptables -A INPUT -p TCP -i $EXTIF --dport  80 -j ACCEPT        # WWW
  131.   /sbin/iptables -A INPUT -p TCP -i $EXTIF --dport 110 -j ACCEPT        # POP3
  132.   /sbin/iptables -A INPUT -p TCP -i $EXTIF --dport 113 -j ACCEPT        # auth
  133.   /sbin/iptables -A INPUT -p tcp -i eth1 -s 192.168.1.0/24 --dport 137:139  -j ACCEPT  #SAMBA
  134.   /sbin/iptables -A INPUT -p udp -i eth1 -s 192.168.1.0/24 --dport 137:139  -j ACCEPT #Samba
复制代码
发表于 2005-3-25 14:28:41 | 显示全部楼层
从安全的角度来看。一般是先定义策略为Drop,以后要开什么服务就开什么。

另外,iptables -P INPUT DROP
        iptables -P OUTPUT DROP
        iptables -P FORWARD DROP
这些规则并不是清空。。。。。。。
回复 支持 反对

使用道具 举报

发表于 2005-3-26 16:32:06 | 显示全部楼层
第二个没贴完吧?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表