LinuxSir.cn,穿越时空的Linuxsir!

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

【求助】一个iptables脚本,做ftp端口映射,请大家帮忙看看!

[复制链接]
发表于 2003-12-12 15:24:17 | 显示全部楼层 |阅读模式
这个脚本做ftp端口影射之后,内网那台提供ftp服务的机器,看到的IP都是网关上的内网IP,这样一旦做了IP线程设置之后,就麻烦了,每个外部连接,对这台ftp服务器而言都看成了同一个IP(内网网关的IP),这个脚本怎么回事?先谢谢了。。。


  1. SYSCTL="/sbin/sysctl -w"

  2. IPT="/sbin/iptables"
  3. IPTS="/sbin/iptables-save"
  4. IPTR="/sbin/iptables-restore"

  5. INET_IFACE="eth1"
  6. INET_ADDRESS="61.xxx.xxx.xxx"

  7. LOCAL_IFACE="eth0"
  8. LOCAL_IP="172.16.1.2"
  9. LOCAL_NET="172.16.1.0/24"
  10. LOCAL_BCAST="172.16.1.255"

  11. LO_IFACE="lo"
  12. LO_IP="127.0.0.1"

  13. if [ "$1" = "save" ]
  14. then
  15. echo -n "Saving firewall to /etc/sysconfig/iptables ... "
  16. $IPTS > /etc/sysconfig/iptables
  17. echo "done"
  18. exit 0
  19. elif [ "$1" = "restore" ]
  20. then
  21. echo -n "Restoring firewall from /etc/sysconfig/iptables ... "
  22. $IPTR < /etc/sysconfig/iptables
  23. echo "done"
  24. exit 0
  25. fi

  26. echo "Loading kernel modules ..."

  27. /sbin/modprobe ip_tables

  28. /sbin/modprobe ip_conntrack fxp=1

  29. /sbin/modprobe ipt_MASQUERADE

  30. /sbin/modprobe ip_nat_ftp

  31. /sbin/modprobe iptable_nat

  32. #allow poptop vpn clien in modules ^_^
  33. /sbin/modprobe ppp_mppe

  34. /sbin/modprobe ip_conntrack_ftp

  35. /sbin/modprobe ip_conntrack_irc

  36. if [ "$SYSCTL" = "" ]
  37. then
  38. echo "1" > /proc/sys/net/ipv4/ip_forward
  39. else
  40. $SYSCTL net.ipv4.ip_forward="1"
  41. fi

  42. if [ "$SYSCTL" = "" ]
  43. then
  44. echo "1" > /proc/sys/net/ipv4/tcp_syncookies
  45. else
  46. $SYSCTL net.ipv4.tcp_syncookies="1"
  47. fi

  48. if [ "$SYSCTL" = "" ]
  49. then
  50. echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
  51. else
  52. $SYSCTL net.ipv4.conf.all.rp_filter="1"
  53. fi

  54. if [ "$SYSCTL" = "" ]
  55. then
  56. echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
  57. else
  58. $SYSCTL net.ipv4.icmp_echo_ignore_broadcasts="1"
  59. fi

  60. if [ "$SYSCTL" = "" ]
  61. then
  62. echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route
  63. else
  64. $SYSCTL net.ipv4.conf.all.accept_source_route="0"
  65. fi

  66. if [ "$SYSCTL" = "" ]
  67. then
  68. echo "1" > /proc/sys/net/ipv4/conf/all/secure_redirects
  69. else
  70. $SYSCTL net.ipv4.conf.all.secure_redirects="1"
  71. fi

  72. if [ "$SYSCTL" = "" ]
  73. then
  74. echo "1" > /proc/sys/net/ipv4/conf/all/log_martians
  75. else
  76. $SYSCTL net.ipv4.conf.all.log_martians="1"
  77. fi


  78. echo "Flushing Tables ..."

  79. $IPT -P INPUT ACCEPT
  80. $IPT -P FORWARD ACCEPT
  81. $IPT -P OUTPUT ACCEPT
  82. $IPT -t nat -P PREROUTING ACCEPT
  83. $IPT -t nat -P POSTROUTING ACCEPT
  84. $IPT -t nat -P OUTPUT ACCEPT
  85. $IPT -t mangle -P PREROUTING ACCEPT
  86. $IPT -t mangle -P OUTPUT ACCEPT

  87. $IPT -F
  88. $IPT -t nat -F
  89. $IPT -t mangle -F

  90. $IPT -X
  91. $IPT -t nat -X
  92. $IPT -t mangle -X

  93. if [ "$1" = "stop" ]
  94. then
  95. echo "Firewall completely flushed! Now running with no firewall."
  96. exit 0
  97. fi

  98. $IPT -P OUTPUT DROP
  99. $IPT -P FORWARD DROP

  100. echo "Create and populate custom rule chains ..."

  101. $IPT -N bad_packets

  102. $IPT -N bad_tcp_packets

  103. $IPT -N icmp_packets

  104. $IPT -N udp_inbound

  105. $IPT -N udp_outbound

  106. $IPT -N tcp_inbound

  107. $IPT -N tcp_outbound


  108. $IPT -A bad_packets -p ALL -m state --state INVALID -j LOG \
  109. --log-prefix "fp=bad_packets:1 a=DROP "

  110. $IPT -A bad_packets -p ALL -m state --state INVALID -j DROP

  111. $IPT -A bad_packets -p tcp -j bad_tcp_packets

  112. $IPT -A bad_packets -p ALL -j RETURN

  113. $IPT -A bad_tcp_packets -p tcp -i $LOCAL_IFACE -j RETURN

  114. $IPT -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG \
  115. --log-prefix "fp=bad_tcp_packets:1 a=DROP "
  116. $IPT -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP

  117. $IPT -A bad_tcp_packets -p tcp -j RETURN

  118. $IPT -A icmp_packets --fragment -p ICMP -j LOG \
  119. --log-prefix "fp=icmp_packets:1 a=DROP "
  120. $IPT -A icmp_packets --fragment -p ICMP -j DROP

  121. $IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT

  122. $IPT -A icmp_packets -p ICMP -j RETURN

  123. $IPT -A udp_inbound -p UDP -s 0/0 --destination-port 137 -j DROP
  124. $IPT -A udp_inbound -p UDP -s 0/0 --destination-port 138 -j DROP

  125. $IPT -A udp_inbound -p UDP -s 0/0 --destination-port 113 -j REJECT

  126. $IPT -A udp_inbound -p UDP -s 0/0 --destination-port 53 -j ACCEPT

  127. $IPT -A udp_inbound -p UDP -s 0/0 --source-port 67 --destination-port 68 \
  128. -j ACCEPT

  129. $IPT -A udp_inbound -p UDP -j RETURN

  130. $IPT -A udp_outbound -p UDP -s 0/0 -j ACCEPT

  131. $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 113 -j REJECT

  132. $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 80 -j ACCEPT
  133. $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 8080 -j ACCEPT

  134. [color=red]$IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 21 -j ACCEPT[/color]

  135. $IPT -A tcp_inbound -p TCP -s 0/0 --source-port 20 -j ACCEPT

  136. $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 62000:64000 -j ACCEPT

  137. $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 25 -j ACCEPT

  138. $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 110 -j ACCEPT

  139. $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 143 -j ACCEPT

  140. $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 22 -j ACCEPT


  141. $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 5000:5100 -j ACCEPT

  142. $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 6891:6900 -j ACCEPT

  143. $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 1723 -j ACCEPT

  144. $IPT -A tcp_inbound -p TCP -j RETURN

  145. $IPT -A tcp_outbound -p TCP -s 0/0 -j ACCEPT

  146. echo "Process INPUT chain ..."

  147. $IPT -A INPUT -p ALL -i $LO_IFACE -j ACCEPT

  148. $IPT -A INPUT -p ALL -j bad_packets

  149. $IPT -A INPUT -p ALL -d 224.0.0.1 -j DROP

  150. $IPT -A INPUT -p ALL -i $LOCAL_IFACE -s $LOCAL_NET -j ACCEPT
  151. $IPT -A INPUT -p ALL -i $LOCAL_IFACE -d $LOCAL_BCAST -j ACCEPT

  152. $IPT -A INPUT -p UDP -i $LOCAL_IFACE --source-port 68 --destination-port 67 \
  153. -j ACCEPT


  154. $IPT -A INPUT -p ALL -i $INET_IFACE -m state --state ESTABLISHED,RELATED \
  155. -j ACCEPT

  156. $IPT -A INPUT -p TCP -i $INET_IFACE -j tcp_inbound
  157. $IPT -A INPUT -p UDP -i $INET_IFACE -j udp_inbound
  158. $IPT -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets

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

  160. $IPT -A INPUT -j LOG --log-prefix "fp=INPUT:99 a=DROP "


  161. echo "Process FORWARD chain ..."


  162. $IPT -A FORWARD -p ALL -j bad_packets

  163. $IPT -A FORWARD -p tcp -i $LOCAL_IFACE -j tcp_outbound

  164. $IPT -A FORWARD -p udp -i $LOCAL_IFACE -j udp_outbound

  165. $IPT -A FORWARD -p ALL -i $LOCAL_IFACE -j ACCEPT

  166. $IPT -A FORWARD -i $INET_IFACE -m state --state ESTABLISHED,RELATED \
  167. -j ACCEPT

  168. [color=red]$IPT -A FORWARD -p tcp -i $INET_IFACE --destination-port 21 \
  169. --destination 172.16.1.52 -j ACCEPT[/color]

  170. $IPT -A FORWARD -j LOG --log-prefix "fp=FORWARD:99 a=DROP "


  171. echo "Process OUTPUT chain ..."


  172. $IPT -A OUTPUT -m state -p icmp --state INVALID -j DROP

  173. $IPT -A OUTPUT -p ALL -s $LO_IP -j ACCEPT
  174. $IPT -A OUTPUT -p ALL -o $LO_IFACE -j ACCEPT

  175. $IPT -A OUTPUT -p ALL -s $LOCAL_IP -j ACCEPT
  176. $IPT -A OUTPUT -p ALL -o $LOCAL_IFACE -j ACCEPT

  177. $IPT -A OUTPUT -p ALL -o $INET_IFACE -j ACCEPT

  178. $IPT -A OUTPUT -j LOG --log-prefix "fp=OUTPUT:99 a=DROP "



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


  180. [color=red]$IPT -t nat -A PREROUTING -p tcp -i $INET_IFACE --destination-port 21 \
  181. -j DNAT --to-destination 172.16.1.52:21[/color]

  182. $IPT -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE
  183. $IPT -t nat -A POSTROUTING -o $LOCAL_IFACE -j MASQUERADE

  184. #allow poptop vpn
  185. iptables -A INPUT -i ppp+ -j ACCEPT
  186. iptables -A FORWARD -i ppp+ -j ACCEPT

  187. echo "Load rules for mangle table ..."
复制代码
发表于 2003-12-12 16:16:00 | 显示全部楼层
用 shorewall 吧,可以很好的解决你的问题。
http://www.linuxsir.cn/forum.php?mod=viewthread&tid=78668
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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