当前位置:操作系统 > Unix/Linux >>

squid+iptables建立internet网关

系统环境:

  RedHat 7.2

  squid (http://squid-cache.org/)

  1. 系统设置:

  运行:setup

  选择server

  默认情况下iptables 和 ipchains都已经被选择了。请把ipchains去掉,只让iptables运行

  2. 安装squid

  建议从RedHat的安装光盘上安装

  mount /mnt/cdrom

  cd /mnt/cdrom/RedHat/RPMS/

  rpm -ivh squid-2.4.2.STABLE2-8.i386.rpm

  启动squid:/etc/rc.d/init.d/squid start

  ***一般情况下默认安装的squid不用更改squid.conf文件就可以工作。

  3. 为配合iptables做透明网关更改squid.conf文件

  vi /etc/squid/squid.conf

  更改以下行:

  http_port 3128

  httpd_accel_host virtual

  httpd_accel_port 80

  httpd_accel_with_proxy on

  httpd_accel_uses_host_header on

  4. iptables设置:

  建议从这个脚本设置iptables规则。见附件。

  ./iptables

  然后执行:

  service iptables save

  这样系统就会把刚才执行脚本的命令保存在 /etc/sysconfig/iptables里。下次系统就会

  自动加载这些规则

  如果你用这个脚本在你的系统上无法执行,可能是文件没有执行权限。

  chmod a+x iptables使之可执行。(不要把这个文件拷贝到/etc/rc.d/init.d/下执行。)

  #!/bin/sh

  INET_IP="222.222.222.1" #代理服务器的internet ip地址

  INET_IFACE="eth0" #代理服务的网卡设备

  LAN_IP="192.168.100.4" #代理服务器的内部地址

  LAN_IP_RANGE="192.168.100.0/16" #局域网的ip网段

  LAN_BCAST_ADRESS="192.168.100.255" #局域网的广播地址

  LAN_IFACE="eth1" 代理服务器内部网卡设备

  LO_IFACE="lo"

  LO_IP="127.0.0.1"

  #

  # IPTables Configuration.

  #

  IPTABLES="/sbin/iptables"

  ###########################################################################

  #

  # 2. Module loading.

  #

  #

  # Needed to initially load modules

  #

  /sbin/depmod -a

  #

  # 2.1 Required modules

  #加载需要的模块

  /sbin/modprobe ip_tables

  /sbin/modprobe ip_conntrack

  /sbin/modprobe iptable_filter

  /sbin/modprobe iptable_mangle

  /sbin/modprobe iptable_nat

  /sbin/modprobe ipt_LOG

  /sbin/modprobe ipt_limit

  /sbin/modprobe ipt_state

  #

  # 2.2 Non-Required modules

  #

  #/sbin/modprobe ipt_owner

  #/sbin/modprobe ipt_REJECT

  #/sbin/modprobe ipt_MASQUERADE

  #/sbin/modprobe ip_conntrack_ftp

  #/sbin/modprobe ip_conntrack_irc

  ###########################################################################

  #

  # 3. /proc set up.

  #

  #

  # 3.1 Required proc configuration

  #设置ip forward

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

  #

  # 3.2 Non-Required proc configuration

  #

  echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter

  #echo "1" > /proc/sys/net/ipv4/conf/all/proxy_arp

  #echo "1" > /proc/sys/net/ipv4/ip_dynaddr

  ###########################################################################

  #

  # 4. rules set up.

  #

  ######

  # 4.1 Filter table

  #

  #

  # 4.1.1 Set policies

  #

  $IPTABLES -P INPUT DROP

  $IPTABLES -P OUTPUT DROP

  $IPTABLES -P FORWARD DROP

  #

  # 4.1.2 Create userspecified chains

  #

  #

  # Create chain for bad tcp packets

  #

  $IPTABLES -N bad_tcp_packets

  #

  # Create separate chains for ICMP, TCP and UDP to traverse

  #

  $IPTABLES -N allowed

  $IPTABLES -N icmp_packets

  $IPTABLES -N tcp_packets

  $IPTABLES -N udpincoming_packets

  #

  # 4.1.3 Create content in userspecified chains

  #

  #

  # bad_tcp_packets chain

  #

  $IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG

  --log-prefix "New not syn:"

  $IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP

  #

  # allowed chain

  #

  $IPTABLES -A allowed -p TCP --syn -j ACCEPT

  $IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT

  $IPTABLES -A allowed -p TCP -j DROP

  #

  # ICMP rules

  #

  # Changed rules totally

  $IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT

  $IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT

  #

  # TCP rules

  #

  $IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 21 -j allowed

  $IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 22 -j allowed

  $IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 80 -j allowed

  $IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 113 -j allowed

  #

  # UDP ports

  #

  # nondocumented commenting out of these rules

  $IPTABLES -A udpincoming_packets -p UDP -s 0/0 --source-port 53 -j ACCEPT

  #$IPTABLES -A udpincoming_packets -p UDP -s 0/0 --source-port 123 -j ACCEPT

  $IPTABLES -A udpincoming_packets -p UDP -s 0/0 --source-port 2074 -j ACCEPT

  $IPTABLES -A udpincoming_packets -p UDP -s 0/0 --source-port 4000 -j DROP #禁止客户使用OICQ

  #

  # 4.1.4 INPUT chain

  #

  #

  # Bad TCP packets we don't want.

  #

  $IPTABLES -A INPUT -p tcp -j bad_tcp_packets

  #

  # Rules for incoming packets from the internet.

  #

  $IPTABLES -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets

  $IPTABLES -A INPUT -p TCP -i $INET_IFACE -j tcp_packets

  $IPTABLES -A INPUT -p UDP -i $INET_IFACE -j udpincoming_packets

  #

  # Rules for special networks not part of the Internet

  #

  $IPTABLES -A INPUT -p ALL -i $LAN_IFACE -d $LAN_BCAST_ADRESS -j ACCEPT

  $IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LO_IP -j ACCEPT

  $IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LAN_IP -j ACCEPT

  $IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $INET_IP -j ACCEPT

  $IPTABLES -A INPUT -p ALL -i $LAN_IFACE -s $LAN_IP_RANGE -j ACCEPT

  $IPTABLES -A INPUT -p ALL -d $INET_IP -m state --state ESTABLISHED,RELATED

  -j ACCEPT

  #

  # Log weird packets that don't match the above.

  #

  $IPTABLES -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG

  --log-level DEBUG --log-prefix "IPT INPUT packet died: "

  #

  # 4.1.5 FORWARD chain

  #

  #

  # Bad TCP packets we don't want

  #

  $IPTABLES -A FORWARD -p tcp -j bad_tcp_packets

  #

  # Accept the packets we actually want to forward

  #

  $IPTABLES -A FORWARD -i $LAN_IFACE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,