Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->Linux技术 ->Linux安全 ->正文

网吧使用的Nat+Iptables+Squid的脚本

来源:赛迪网技术社区  作者:Webmaster 时间:2007-04-20 点击: [收藏] [投稿]

#!/bin/bash
  # 飘飘的风于2003年7月26日修改,端口影射成功。
  
  ###---------------------###
  #以下是定义变数
  ###--------------------###
  
  PATH=/sbin:/usr/sbin:/bin:/usr/bin
  RC_SQUID=/etc/rc.d/init.d/squid
  EXT_IF=eth1
  #外网接口,确定网卡,如果是拨号就用ppp0
  INT_IF=eth0
  LAN_IP_RANGE="192.168.0.0/24"
  STATIC_IP="80.234.71.88"
  TRUSTED_TCP_PORT="22 25 53 80 110 143 443 993 995 3389"
  TRUSTED_UDP_PORT="53 3389"
  ALLOWED_ICMP="0 3 3/4 4 11 12 14 16 18"
  
  ###--------------------------------------------------------------------###
  #确定iptables安装情况
  ###--------------------------------------------------------------------###
  
  which iptables &>/dev/null || {
  echo
  echo "$(basename $0): iptables程序没有找到"
  echo "请先安装好这个程序."
  echo
  exit 1
  }
  
  ###--------------------------------------------------------------------###
  #废掉ipchains,这是针对redhat以前的版本,新版已经把iptables嵌到内核里了
  ###--------------------------------------------------------------------###
  
  lsmod | grep ipchains &>/dev/null && {
  echo "正在废掉ipchains服务........."
  rmmod ipchains
  }
  
  ###--------------------------------------------------------------------###
  #装载模块modules
  ###--------------------------------------------------------------------###
  
  echo "模块正在载人......"
  modprobe ip_tables &>/dev/null || {
  echo -n "$(basename $0): ip_tables模块载人失败"
  echo "请检查"
  exit 3
  }
  for file in /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/ip_conntrack_*.o
  do
  module=$(basename $file)
  modprobe ${module%.*} &>/dev/null
  done
  for file in /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/ip_nat_*.o
  do
  module=$(basename $file)
  modprobe ${module%.*} &>/dev/null
  done
  
  # ------------- 端口开启 ------------
  echo "开启所要的端口...."
  iptables -N services
  for PORT in $TRUSTED_TCP_PORT; do
  iptables -A services -i $EXT_IF -p tcp --dport $PORT -j ACCEPT
  done
  for PORT in $TRUSTED_UDP_PORT; do
  iptables -A services -i $EXT_IF -p udp --dport $PORT -j ACCEPT
  done
  #----ipforwarding--------
  echo "打开foward功能"
  echo "1" > /proc/sys/net/ipv4/ip_forward
  
  #动态ip使用
  #
  #echo "1" > /proc/sys/net/ipv4/ip_dynaddr
  #这里是动态ip实现nat共享必改之处
  
  ###---------------------------------------------------###
  #清除先前的设定
  ###---------------------------------------------------###
  echo "正在清除先前的设定......."
  #清除预定表filter中,所有规则链中的规则
  iptables -F
  #清除预定表filter中,使用者自定链中的规则
  iptables -X
  
  #清除预定表mangle中,所有规则链中的规则
  iptables -F -t mangle
  #清除预定表mangle中,使用者自定链中的规则
  iptables -X -t mangle
  
  #清除nat表中的规则
  iptables -F -t nat
  iptables -X -t nat
  iptables -Z -t nat
  
  ###---------------------------------------------------###
  #设定预设规则
  ###---------------------------------------------------###
  #预设规则要么为全部丢弃,要么为全部接受
  #本列为全部丢弃,然后逐步开放,这是安全系数很高的设法
  #若目标为DROP,则policy设为ACCEPT;若目标为ACCEPT,则policy设为DROP
  
  iptables -P INPUT DROP
  iptables -P OUTPUT DROP
  iptables -P FORWARD DROP
  
  #TCP的设定
  #
  #我们丢弃坏的TCP包
  #
  iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j LOG --log-prefix "New not syn:"
  iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP
  
  #局域网共享的实现
  #iptables -t nat -A POSTROUTING -o $EXT_IF -s $LAN_IP_RANGE -j SNAT --to-source $STATIC_IP
  iptables -t nat -A POSTROUTING -o $EXT_IF -j MASQUERADE
  echo "局域网共享的已实现,请试用局域网机器"
  
  #这一步实现局域网内部机对外部网开放
  #凡对$STATIC_IP:80连线者,则转址到192.168.0.100:80
  iptables -t nat -A PREROUTING -d 80.234.71.88 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.100:80
  iptables -A FORWARD -p tcp -d 192.168.0.100 --dport 80 -j ACCEPT
  iptables -t nat -I POSTROUTING -s 192.168.0.0/255.255.255.0 -p tcp -d 192.168.0.100 --dport 80 -j SNAT --to 192.168.0.1
  #192.168.0.250装有win2003,提供远程桌面服务
  iptables -t nat -A PREROUTING -d 80.234.71.88 -p tcp --dport 3389 -j DNAT --to-destination 192.168.0.250:3389
  iptables -A FORWARD -p tcp -d 192.168.0.250 --dport 3389 -j ACCEPT
  #允许内网机使用外网机的IP访问内网机,把内网机的IP转换成网关IP
  iptables -t nat -I POSTROUTING -s 192.168.0.0/255.255.255.0 -p tcp -d 192.168.0.250 --dport 3389 -j SNAT --to 192.168.0.1
  
  #允许要转向的包
  iptables -A FORWARD -i $INT_IF -j ACCEPT

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:安全多方位 Linux系统守护进程详解   下一篇:搭建Linux下的Squid代理服务器(图)

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号