LinuxSir.cn,穿越时空的Linuxsir!

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

!!!急!!!大家帮我看一下这个关于IPTABLES的防火墙配置

[复制链接]
发表于 2005-1-2 02:16:03 | 显示全部楼层 |阅读模式

  1. #本脚本环境为eth0外网,eth1内网;
  2. #!/bin/sh
  3. #外网网卡
  4. EXT_IF="eth0"
  5. FW_IP="XX.XX.XX.XX"
  6. #内网网卡
  7. INT_IF="eth1"
  8. LAN_IP="192.168.0.1"
  9. LAN_IP_RANGE="192.168.0.0/255.255.255.0"
  10. #加阅模块,一般已内建
  11. #Module loading.
  12. #echo "modprobe modules"
  13. #modprode ip_tables
  14. #modprode ip_nat_ftpiptables -P INPUT DROP
  15. iptables -P FORWARD DROP
  16. iptables -P OUTPUT DROP

  17. ###-----------------------------------------------------------------###
  18. #过虑蠕虫病毒
  19. #444/445/69/135/139
  20. ###-----------------------------------------------------------------###
  21. iptables -A FORWARD -p tcp --dport 4444 -j DROP
  22. iptables -A FORWARD -p udp --dport 4444 -j DROP

  23. iptables -A FORWARD -p tcp --dport 445 -j DROP
  24. iptables -A FORWARD -p udp --dport 445 -j DROP

  25. iptables -A FORWARD -p tcp --dport 69 -j DROP
  26. iptables -A FORWARD -p udp --dport 69 -j DROP

  27. iptables -A FORWARD -p tcp --dport 135 -j DROP
  28. iptables -A FORWARD -p udp --dport 135 -j DROP

  29. iptables -A FORWARD -p tcp --dport 139 -j DROP
  30. iptables -A FORWARD -p udp --dport 139 -j DROP


  31. #允许ping localhost,ping 192.168.0.1/2
  32. #allow loopback access
  33. iptables -A INPUT -p icmp -i lo -j ACCEPT
  34. iptables -A OUTPUT -p icmp -o lo -j ACCEPT
  35. #打开内对内连接
  36. #iptables -A INPUT -i lo -j ACCEPT
  37. #允许代理和内网客户机相互传输数据(包括ping)
  38. #allow ping LAN
  39. iptables -A INPUT -p ALL -i $INT_IF -s $LAN_IP_RANGE -j ACCEPT
  40. iptables -A OUTPUT -p ALL -o $INT_IF -d $LAN_IP_RANGE -j ACCEPT
  41. #允许外网的网卡与内网相互通讯.接受数据只接受响应封包,否则不予放行.发送数据没有限制.
  42. iptables -A INPUT -p ALL -i $INT_IF -s $LAN_IP_RANGE -j ACCEPT
  43. iptables -A INPUT -p ALL -i $INT_IF -s $LAN_IP_RANGE -j ACCEPT
  44. #拒绝外部使用内网进行欺骗
  45. #deny local cheat
  46. iptables -A INPUT -i $EXT_IF -s 192.168.0.0/16 -j DROP
  47. iptables -A INPUT -i $EXT_IF -s 10.0.0.0/8 -j DROP
  48. iptables -A INPUT -i $EXT_IF -s 172.16.0.0/12 -j DROP
  49. iptables -A INPUT -i $EXT_IF -s 127.0.0.0/8 -j DROP
  50. #从LAN进入防火墙主机的dhcp封包,不于放行,只有防火墙担任DHCP时才放行
  51. #deny DHCP_packets from LAN
  52. iptables -A INPUT -p udp -i $INT_IF --dport 67 --sport 68 -j DROP
  53. ###-----------------------------------------------------------------------------------###
  54. #配置向外方向的TCP规则,其中,--state ESTABLISHED ,NEW参数指定要检查哪个状态.
  55. #ESTABLISHED标志匹配属于已有的TCP连接的封包.
  56. #NEW标志指定试图创建一条新的TCP连接的第一个封包,这条规则指明属于新建的和已建立的
  57. #TCP连接的封包将会通过eth0端口向外发送.
  58. ###-----------------------------------------------------------------------------------###

  59. iptables -A OUTPUT -o $EXT_IF -p tcp -m state --state ESTABLISHED,NEW -j ACCEPT

  60. ###----------------------------------------------------------------------------------###
  61. #配置封包从一个端口转发到另一个端口
  62. ###----------------------------------------------------------------------------------###

  63. iptables -A FORWARD -i $INT_IF   -j ACCEPT
  64. # same to above 和上面的规则功能相同
  65. #iptables -A FORWARD -i $EXT_IF -m state --state ESTABLISHED,RELATED  -j ACCEPT

  66. ###-------------------------------------------------------------------------------------###
  67. #检查到达外部网络接口的封包状态.属于已有TCP连接的封包都允许通过
  68. # 从WAN到LAN的封包仅放行回应封包
  69. ###-------------------------------------------------------------------------------------###
  70. iptables -A INPUT -i $EXT_IF -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT


  71. # 限制过滤规则的比对频率为每分钟平均流量三个封包(超过上限的封包将暂停比对),
  72. #并将瞬间流量设定为一次最多处理三个封包(超过上限的封包将丢弃不予处理),
  73. #这类封包通常是黑客用来进行阻断式攻击
  74. iptables -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level INFO --log-prefix "IPT INPUT packets died:"

  75. ###-------------------------------------------------------------------------###
  76. #不管来自哪里的ip碎片都进行控制,允许每秒通过100个碎片
  77. ###-------------------------------------------------------------------------###
  78. iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT

  79. ###-------------------------------------------------------------------------###
  80. #icmp包通过的控制,防止icmp黑客攻击
  81. ###-------------------------------------------------------------------------###
  82. iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT

  83. ###-------------------------------------------------------------------------###
  84. # 防止DDOS
  85. ###-------------------------------------------------------------------------###
  86. #iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

  87. ###-------------------------------------------------------------------------###
  88. # UDP包一律放行
  89. # allow UDP
  90. ###-------------------------------------------------------------------------###
  91. iptables -A FORWARD -p udp -d $LAN_IP_RANGE -i $EXT_IF -j ACCEPT

  92. ###-------------------------------------------------------------------------###
  93. #根据mac屏蔽主机上网
  94. ###-------------------------------------------------------------------------###
  95. #iptables -t nat -I PREROUTING -m mac --mac-source 4C:00:10:D8:57:F3 -j DROP

  96. #modprode ip_conntrack
  97. #modprobe ip_conntrack_ftp
  98. #启用转发(forward)功能
  99. echo "enabling IP FORWARDING......"
  100. echo "1" > /proc/sys/net/ipv4/ip_forward
  101. #规则初始化,设置默认都为drop
  102. echo "enabling iptables rules"
  103. #reset the default policies in the tables
  104. iptables -F
  105. iptables -X
  106. iptables -F -t mangle
  107. iptables -X -t mangle
  108. iptables -F -t nat
  109. iptables -X -t nat
  110. iptables -Z -t nat
  111. #set policies

  112. ###-----------------------------------------------------###
  113. # 开放内部主机可以telnet至外部主 telnet port 23
  114. ###-----------------------------------------------------###
  115. #没必要打开23端口
  116. #iptables -A OUTPUT -o $EXT_IF -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 23 -j ACCEPT
  117. #iptables -A INPUT  -i $EXT_IF -p tcp ! --syn -s any/0 --sport 23 -d $FW_IP --dport 1024:65535 -j ACCEPT

  118. ###-----------------------------------------------------###
  119. # 开放邮包转送通道 open SMTP port 25
  120. ###-----------------------------------------------------###

  121. #以下是别人可以送信给你
  122. iptables -A INPUT  -i $EXT_IF -p tcp -s any/0 --sport 1024:65535 -d $FW_IP --dport 25 -j ACCEPT
  123. iptables -A OUTPUT -o $EXT_IF -p tcp ! --syn -s $FW_IP --sport 25 -d any/0 --dport 1024:65535 -j ACCEPT

  124. #以下是你可以送信给别人
  125. iptables -A OUTPUT -o $EXT_IF -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 25 -j ACCEPT
  126. iptables -A INPUT  -i $EXT_IF -p tcp ! --syn -s any/0 --sport 25 -d $FW_IP --dport 1024:65525 -j ACCEPT

  127. ###-----------------------------------------------------###
  128. # 开放对外离线下载信件的通道 POP3 port 110
  129. ###-----------------------------------------------------###

  130. iptables -A OUTPUT -o $EXT_IF -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 110 -j ACCEPT
  131. iptables -A INPUT  -i $EXT_IF -p tcp ! --syn -s any/0 --sport 110 -d $FW_IP --dport 1024:65535 -j ACCEPT

  132. ###-----------------------------------------------------###
  133. # 开放浏览网页的通道 http port 80
  134. ###-----------------------------------------------------###

  135. iptables -A OUTPUT -o $EXT_IF -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 80 -j ACCEPT
  136. iptables -A INPUT  -i $EXT_IF -p tcp ! --syn -s any/0 --sport 80 -d $FW_IP --dport 1024:65535 -j ACCEPT

  137. ###-----------------------------------------------------###
  138. # 开放查询外部网络的DNS主机 DNS port:53
  139. ###-----------------------------------------------------###

  140. #第一次会用udp封包来查询
  141. iptables -A OUTPUT -o $EXT_IF -p udp -s $FW_IP --sport 1024:65535 -d any/0 --dport 53 -j ACCEPT
  142. iptables -A INPUT  -i $EXT_IF -p udp -s any/0 --sport 53 -d $FW_IP --dport 1024:65535 -j ACCEPT

  143. #若有错误,会改用tcp包来查询
  144. iptables -A OUTPUT -o $EXT_IF -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 53 -j ACCEPT
  145. iptables -A INPUT  -i $EXT_IF -p tcp ! --syn -s any/0 --sport 53 -d $FW_IP --dport 1024:65535 -j ACCEPT
  146. #开放这台主机上的DNS和外部的DNS主机互动查询:使用udp
  147. iptables -A OUTPUT -o $EXT_IF -p udp -s $FW_IP --sport 53 -d any/0 --dport 53 -j ACCEPT
  148. iptables -A INPUT  -i $EXT_IF -p udp -s any/0 --sport 53 -d $FW_IP --dport 53 -j ACCEPT
  149. #开放这台主机上的DNS和外部的DNS主机互动查询:使用udp
  150. iptables -A OUTPUT -o EXT_IF -p tcp -s $FW_IP --sport 53 -d any/0 --dport 53 -j ACCEPT
  151. iptables -A INPUT  -i EXT_IF -p tcp ! --syn -s any/0 --sport 53 -d $FW_IP --dport 53 -j ACCEPT

  152. ###------------------------------------------------------------------------###
  153. #开放内部主机可以SSH至外部的主机 SSH port:22
  154. ###------------------------------------------------------------------------###

  155. iptables -A OUTPUT -o $EXT_IF -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 22 -j ACCEPT
  156. iptables -A INPUT  -i $EXT_IF -p tcp ! --syn -s any/0 --sport 22 -d $FW_IP --dport 1024:65535 -j ACCEPT

  157. #以下是SSH protocol比较不同的地方
  158. iptables -A OUTPUT -o $EXT_IF -p tcp -s $FW_IP --sport 1020:1023 -d any/0 --dport 22 -j ACCEPT
  159. iptables -A INPUT  -i $EXT_IF -p tcp ! --syn -s any/0 --sport 22 -d $FW_IP --dport 1020:1023 -j ACCEPT

  160. ###------------------------------------------------------------------------###
  161. ###开放内部网络,可以ftp至外部主机
  162. ###------------------------------------------------------------------------###

  163. #以下是打开命令 channel 21
  164. iptables -A OUTPUT -o $EXT_IF -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 21 -j ACCEPT
  165. iptables -A INPUT  -i $EXT_IF -p tcp ! --syn  -s any/0 --sport 21 -d $FW_IP  --dport 1024:65535 -j ACCEPT

  166. #以下是打开资料 channel 20
  167. iptables -A INPUT -i $EXT_IF -p tcp -s any/0  --sport 20 -d $FW_IP  --dport 1024:65535  -j ACCEPT
  168. iptables -A OUTPUT -o $EXT_IF -p tcp ! --syn -s $FW_IP --sport 1024:65535 -d any/0 --dport 20 -j ACCEPT

  169. #以下是打开 passive mode FTP 资料通道
  170. iptables -A OUTPUT -o $EXT_IF -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 1024:65535 -j ACCEPT
  171. iptables -A INPUT  -i $EXT_IF -p tcp ! --syn -s any/0 --sport 1024:65535 -d $FW_IP --dport 1024:65535 -j ACCEPT

  172. #-------------------------------------NAT------------------------------------------------
  173. #透明代理设定:将WWW服务转向squid
  174. iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
  175. ###-------------------------------------------------------------------------###
  176. #启动内部对外部转址:源网络地址转换SNAT
  177. ###-------------------------------------------------------------------------###

  178. iptables -t nat -A POSTROUTING -o $EXT_IF -s $LAN_IP_RANGE  -j SNAT --to $FW_IP

  179. ###-------------------------------------------------------------------------###
  180. #启动外部对内部转址(设置内网WWWW服务器映射)DNAT
  181. ###-------------------------------------------------------------------------###

  182. iptables -t nat -A PREROUTING  -i $EXT_IF -p tcp -d $FW_IP --dport 80  -j DNAT --to 192.168.0.16:80
复制代码
发表于 2005-1-2 06:30:31 | 显示全部楼层
你想要说明什么啊?
发表于 2005-1-2 12:09:01 | 显示全部楼层
iptables -A FORWARD -p tcp --dport 4444 -j DROP
iptables -t filter -A FORWARD -p tcp --dport 444 -j DROP
下次记住了要加-t filter

不过你的脚本还是有几个值得借鉴的地方我就是把蠕虫那段加到我的防火墙里边了,
做事要细心一点
 楼主| 发表于 2005-1-4 09:58:12 | 显示全部楼层
不用加-t filter可以 应该默认的就是filter就可以了
发表于 2005-1-4 10:19:46 | 显示全部楼层
你加上试一下
发表于 2005-1-4 10:53:50 | 显示全部楼层
默认的,加不加都没有关系啊?
发表于 2005-1-4 16:55:08 | 显示全部楼层
写的真的很不错呀!
学习中。。。。。。。。。。
发表于 2005-1-5 09:39:10 | 显示全部楼层
写得真好,可读性也很好
发表于 2005-1-5 10:19:07 | 显示全部楼层
#允许代理和内网客户机相互传输数据(包括ping)
#allow ping LAN
iptables -A INPUT -p ALL -i $INT_IF -s $LAN_IP_RANGE -j ACCEPT
iptables -A OUTPUT -p ALL -o $INT_IF -d $LAN_IP_RANGE -j ACCEPT
#允许外网的网卡与内网相互通讯.接受数据只接受响应封包,否则不予放行.发送数据没有限制.
iptables -A INPUT -p ALL -i $INT_IF -s $LAN_IP_RANGE -j ACCEPT
iptables -A INPUT -p ALL -i $INT_IF -s $LAN_IP_RANGE -j ACCEPT

  iptables -A INPUT -p ALL -i $INT_IF -s $LAN_IP_RANGE -j ACCEPT
是不是多余了????
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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