LinuxSir.cn,穿越时空的Linuxsir!

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

请大家一起帮忙改进优化iptables脚本

[复制链接]
发表于 2004-5-24 17:15:50 | 显示全部楼层 |阅读模式
  1. #!/bin/sh
  2. #

  3. ###############################################################################
  4. #
  5. # Local Settings
  6. #

  7. # IPTables Location - adjust if needed

  8. IPT="/sbin/iptables"

  9. # Internet Interface
  10. INET_IFACE="ppp0"

  11. # Local Interface Information
  12. LOCAL_IFACE="eth0"
  13. LOCAL_IP="172.18.123.5"
  14. LOCAL_NET="172.16.0.0/12"
  15. LOCAL_BCAST="172.18.123.255"

  16. # Localhost Interface

  17. LO_IFACE="lo"
  18. LO_IP="127.0.0.1"


  19. ###############################################################################
  20. #
  21. # Load Modules
  22. #

  23. echo "Loading kernel modules ..."

  24. /sbin/depmod -a

  25. /sbin/modprobe ip_tables
  26. /sbin/modprobe ip_conntrack
  27. /sbin/modprobe iptable_filter
  28. /sbin/modprobe iptable_nat
  29. /sbin/modprobe ipt_LOG
  30. /sbin/modprobe ipt_limit
  31. /sbin/modprobe ipt_MASQUERADE
  32. /sbin/modprobe ipt_REJECT
  33. /sbin/modprobe multiport
  34. /sbin/modprobe ipt_state
  35. /sbin/modprobe ip_nat_ftp
  36. /sbin/modprobe ip_conntrack_ftp

  37. ###############################################################################
  38. #
  39. # Kernel Parameter Configuration
  40. #

  41. echo "1" > /proc/sys/net/ipv4/ip_forward

  42. ###############################################################################
  43. #
  44. # Flush Any Existing Rules or Chains
  45. #

  46. echo "Flushing Tables ..."

  47. # Reset Default Policies
  48. $IPT -P INPUT ACCEPT
  49. $IPT -P FORWARD ACCEPT
  50. $IPT -P OUTPUT ACCEPT
  51. $IPT -t nat -P PREROUTING ACCEPT
  52. $IPT -t nat -P POSTROUTING ACCEPT
  53. $IPT -t nat -P OUTPUT ACCEPT
  54. $IPT -t mangle -P PREROUTING ACCEPT
  55. $IPT -t mangle -P OUTPUT ACCEPT

  56. # Flush all rules
  57. $IPT -F
  58. $IPT -t nat -F
  59. $IPT -t mangle -F

  60. # Erase all non-default chains
  61. $IPT -X
  62. $IPT -t nat -X
  63. $IPT -t mangle -X

  64. ###############################################################################
  65. #
  66. # Rules Configuration
  67. #

  68. ###############################################################################
  69. #
  70. # Filter Table
  71. #
  72. ###############################################################################

  73. # Set Policies

  74. $IPT -P INPUT DROP
  75. $IPT -P OUTPUT DROP
  76. $IPT -P FORWARD DROP

  77. ###############################################################################
  78. #
  79. # INPUT Chain
  80. #

  81. echo "Process INPUT chain ..."

  82. # Drop bad packets
  83. $IPT -A INPUT -p ALL -m state --state INVALID -j DROP
  84. $IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

  85. #------------------------------------------------------------------------------#
  86. # Syn-flood INPUT protection
  87. $IPT -A INPUT -i ppp0 -p tcp --syn -m limit --limit 10/h \
  88.       -j LOG --log-prefix 'Syn-flood INP attack??? '
  89. $IPT -A INPUT -i ppp0 -p tcp --syn -m limit --limit 1/s -j ACCEPT

  90. # Port Scanner INPUT protection
  91. $IPT -A INPUT -i ppp0 -p tcp --tcp-flags SYN,ACK,FIN,RST RST \
  92.    -m limit --limit 10/h -j LOG --log-prefix 'Port Scanner INP attack??? '
  93. $IPT -A INPUT -i ppp0 -p tcp --tcp-flags SYN,ACK,FIN,RST RST \
  94.    -m limit --limit 1/s -j ACCEPT

  95. # Pingu of Death INPUT protection
  96. $IPT -A INPUT -i ppp0 -p icmp --icmp-type echo-request \
  97.    -m limit --limit 10/h -j LOG --log-prefix 'Ping of Death INP attack??? '
  98. $IPT -A INPUT -i ppp0 -p icmp --icmp-type echo-request \
  99.    -m limit --limit 1/s -j ACCEPT
  100. #------------------------------------------------------------------------------#

  101. # Allow all on localhost interface
  102. $IPT -A INPUT -p ALL -i $LO_IFACE -j ACCEPT

  103. # Rules for the private network (accessing gateway system itself)
  104. $IPT -A INPUT -p ALL -i $LOCAL_IFACE -s $LOCAL_NET -j ACCEPT
  105. $IPT -A INPUT -p ALL -i $LOCAL_IFACE -d $LOCAL_BCAST -j ACCEPT
  106. $IPT -A INPUT -p TCP -i $LOCAL_IFACE -m multiport --dport 135,136,137,138,445 -j DROP

  107. # Inbound Internet Packet Rules

  108. # Accept Established Connections
  109. $IPT -A INPUT -p ALL -i $INET_IFACE -m state --state ESTABLISHED,RELATED \
  110.      -j ACCEPT
  111. $IPT -A INPUT -p TCP -i $INET_IFACE -m multiport --destination-port 80,25,110 -j ACCEPT
  112. $IPT -A INPUT -p TCP -i $INET_IFACE -j DROP
  113. $IPT -A INPUT -p UDP -i $INET_IFACE --destination-port 53 -j ACCEPT
  114. $IPT -A INPUT -p UDP -i $INET_IFACE -j DROP
  115. $IPT -A INPUT -p ICMP -s $LOCAL_NET --icmp-type 8 -j ACCEPT
  116. $IPT -A INPUT -p ICMP -s 0/0 -j DROP

  117. $IPT -A INPUT -p ALL -d 255.255.255.255 -j DROP

  118. # Log packets that still don't match
  119. $IPT -A INPUT -j LOG --log-prefix "fp=INPUT:99 a=DROP "

  120. ###############################################################################
  121. #
  122. # FORWARD Chain
  123. #

  124. echo "Process FORWARD chain ..."

  125. # Used if forwarding for a private network

  126. # Drop bad packets
  127. $IPT -A FORWARD -p ALL -m state --state INVALID -j DROP
  128. $IPT -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP

  129. #------------------------------------------------------------------------------#
  130. # Syn-flood FORWARDing protection
  131. $IPT -A FORWARD -p tcp --syn -m limit --limit 10/h \
  132.    -j LOG --log-prefix 'Syn-flood FWD attack??? '
  133. $IPT -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT

  134. # Port Scanner FORWARDing protection
  135. $IPT -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST \
  136.    -m limit --limit 10/h -j LOG --log-prefix 'Port Scanner FWD attack??? '
  137. $IPT -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST \
  138.    -m limit --limit 1/s -j ACCEPT

  139. # Ping of Death FORWARDing protection
  140. $IPT -A FORWARD -p icmp --icmp-type echo-request \
  141.    -m limit --limit 10/h -j LOG --log-prefix 'Ping of Death FWD attack??? '
  142. $IPT -A FORWARD -p icmp --icmp-type echo-request \
  143.    -m limit --limit 1/s -j ACCEPT
  144. #------------------------------------------------------------------------------#

  145. # If not blocked, accept any other packets from the internal interface
  146. $IPT -A FORWARD -p ALL -i $LOCAL_IFACE -j ACCEPT

  147. # Deal with responses from the internet
  148. $IPT -A FORWARD -i $INET_IFACE -m state --state ESTABLISHED,RELATED \
  149.      -j ACCEPT
  150. $IPT -A FORWARD -i $INET_IFACE -p tcp -m multiport --dport 20,21,22,23,69,135,136,137,138,139,445,593,4444 -j DROP
  151. $IPT -A FORWARD -i $INET_IFACE -p udp -m multiport --dport 20,21,22,23,69,135,136,137,138,139,445,593,4444 -j DROP
  152. $IPT -A FORWARD -p tcp -m multiport --dport 69,135,136,137,138,445,593,4444 -j DROP
  153. $IPT -A FORWARD -p udp -m multiport --dport 69,135,136,137,138,445,593,4444 -j DROP

  154. # Log packets that still don't match
  155. $IPT -A FORWARD -j LOG --log-prefix "fp=FORWARD:99 a=DROP "

  156. ###############################################################################
  157. #
  158. # OUTPUT Chain
  159. #

  160. echo "Process OUTPUT chain ..."

  161. # Generally trust the firewall on output

  162. # However, invalid icmp packets need to be dropped
  163. # to prevent a possible exploit.
  164. $IPT -A OUTPUT -m state -p ALL --state INVALID -j DROP

  165. # Localhost
  166. $IPT -A OUTPUT -p ALL -s $LO_IP -j ACCEPT
  167. $IPT -A OUTPUT -p ALL -o $LO_IFACE -j ACCEPT

  168. # To internal network
  169. $IPT -A OUTPUT -p ALL -s $LOCAL_IP -j ACCEPT
  170. $IPT -A OUTPUT -p ALL -o $LOCAL_IFACE -j ACCEPT
  171. $IPT -A OUTPUT -p tcp -o $LOCAL_IFACE -m multiport --dport 135,136,137,138,445 -j DROP
  172. $IPT -A OUTPUT -p udp -o $LOCAL_IFACE -m multiport --dport 135,136,137,138,445 -j DROP

  173. # To internet
  174. $IPT -A OUTPUT -p ALL -o $INET_IFACE -j ACCEPT


  175. # Log packets that still don't match
  176. $IPT -A OUTPUT -j LOG --log-prefix "fp=OUTPUT:99 a=DROP "

  177. ###############################################################################
  178. #
  179. # nat table
  180. #
  181. ###############################################################################

  182. echo "Load rules for nat table ..."

  183. ###############################################################################
  184. #
  185. # PREROUTING chain
  186. #
  187. #


  188. $IPT -t nat -A PREROUTING -i $INET_IFACE -s 192.168.0.0/16 -j DROP
  189. $IPT -t nat -A PREROUTING -i $INET_IFACE -s 10.0.0.0/8 -j DROP
  190. $IPT -t nat -A PREROUTING -i $INET_IFACE -s 172.16.0.0/12 -j DROP
  191. #allow internet
  192. $IPT -t nat -A PREROUTING -s 172.18.123.177 -d ! $LOCAL_NET -j ACCEPT

  193. $IPT -t nat -A PREROUTING -s $LOCAL_NET -d ! $LOCAL_NET -DROP

  194. $IPT -t nat -A POSTROUTING -s $LOCAL_NET -d ! $LOCAL_NET -j MASQUERADE


  195. ###############################################################################
  196. #
  197. # mangle table
  198. #
  199. ###############################################################################
复制代码

看看哪些地方多余了,哪些地方少了?

我自己想实现的功能就是只允许内部网浏览网页和收邮件,访问内部samba,ping,允许自己的IP(172.18.123.177)所有权限,阻止外面的任何有攻击企图的包和链接
谢谢了,m(_ _)m
发表于 2004-5-24 20:25:56 | 显示全部楼层
只能自己修改啦。有问题就提问,估计很少人会完全看完你的脚本的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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