squid+iptables 做透明代理
=============================================================================================
内网设备:eth0   外网设备:eth1
=============================================================================================
设置防火墙规则
squid进程启动后,监听客户端http请求的端口是3128,而客户发起的http请求的端口是80,因此,需要利用

端口生定向将所有对80端口的请求,重定向到3128端口。如不考虑安全,对于squid代理服务器,只需要远行以下

两条规则即可。

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-ports 3128
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

=============下面在/etc/rc.d/init.d/目录中写代理的防火墙脚本squid_proxy_firewall==============

#!/bin/sh
exho "Starting squid proxy iptables rules..."
#开启IP包转发功能
echo 1 > /proc/sys/net/ipv4/ip_forware

#开启动态IP支持
echo 1 > /proc/sys/net/ipv4/ip dynaddr

#关闭 Explicit Congestion Notification
echo 0 > /proc/sys/net/ipv4/tcp_ecn

#开启syn泛洪***保护(syn cook flood)
#syn***利用tcp协议缺陷,发送大量伪造的tcp连接请求,使被***方资源耗尽,导致拒绝服务
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

#装载内核支持模块
/sbin/modprobe ip_tables
/sbin/modprobe iptable_nat
/sbin/modprobe iptable_filter
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ipt_MASQUERADE
/sbin/modprobe ipt_state
/sbin/modprobe ipt_multiport

#清除链的规则
/sbin/iptables -F
/sbin/iptables -t nat -F

#清除封包计数器
/sbin/iptables -Z
/sbin/iptables -t nat -Z

#设置默认策略
/sbin/iptables -P INPUT DROP
/sbin/iptables -P FORWARD DROP
/sbin/iptables -P OUTPUT DROP

#允许本地连接
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A OUTPUT -o lo -j ACCEPT

#禁止对135,137,138,139,445端口连接
/sbin/iptables -A FORWARD -p tcp -m multiport --dport 135,137,138,139,445 -j DROP

#允许squid进程向外发起对80端口代理的请求
/sbin/iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT

#允许接收squid进程对外请求的回应包
/sbin/iptables -A INPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

#允许dns查询
/sbin/iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
/sbin/iptables -A INPUT -p udp --sport 53 -m state --state ESTABLISHED -j ACCEPT

#允许ping代理
/sbin/iptables -A INPUT -p icmp --icmp-type echo-request m limit --limit l/s --limit-burst 10 -j

ACCEPT
/sbin/iptables -A OUTPUT -p icmp -m icmp --icmp-type echo-reply -j ACCEPT

#允许转发对已经建立的连接的回应,允许建立在连接基础上的新连接,如ftp-date
/sbin/iptables -A FORWARD -i eth1 -m sate --sate ESTABLISHED,RELATED -j ACCEPT

#允许转发由内向外的新连接
/sbin/iptables -A FORWARD -p tcp -i eth0 --syn -j ACCEPT
/sbin/iptables -A FORWARD -m state --state NEW -i eth0 -j ACCEPT

#允许ping开关(“1”禁止ping,“0”允许ping)
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
sysctl -w net.ipv4.icmp_echo_ignore_all=1

#将对80端口的请求重定向到代理监听的3128端口
/sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-ports 3128

#对非80端口的请求,利用IP伪装方式代理访问internet
/sbin/iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

============以下是除去注释行整理出的==============

#!/bin/sh
echo "Starting squid proxy iptables rules..."
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/ip_dynaddr
echo 0 > /proc/sys/net/ipv4/tcp_ecn
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
sysctl -w net.ipv4.icmp_echo_ignore_all=1
/sbin/modprobe ip_tables
/sbin/modprobe iptable_nat
/sbin/modprobe iptable_filter
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ipt_MASQUERADE
/sbin/modprobe ipt_state
/sbin/modprobe ipt_multiport
/sbin/iptables -F
/sbin/iptables -t nat -F
/sbin/iptables -Z
/sbin/iptables -t nat -Z
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A OUTPUT -o lo -j ACCEPT
/sbin/iptables -A FORWARD -p tcp -m multiport --dport 135,137,138,139,445 -j DROP
/sbin/iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
/sbin/iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
/sbin/iptables -A INPUT -p udp --sport 53 -m state --state ESTABLISHED -j ACCEPT
/sbin/iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 10 -j ACCEPT
/sbin/iptables -A OUTPUT -p icmp -m icmp --icmp-type echo-reply -j ACCEPT
/sbin/iptables -A FORWARD -i eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A FORWARD -p tcp -i eth0 --syn -j ACCEPT
/sbin/iptables -A FORWARD -m state --state NEW -i eth0 -j ACCEPT
/sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-ports 3128
/sbin/iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

########################映射电影服务器端口#################################

/sbin/iptables -t nat -A PREROUTING -p tcp -i eth0 -d 外网IP --dport 80 -j DNAT --to-destination 192.168.1.251:80
/sbin/iptables -t nat -A POSTROUTING -p tcp -o eth0 -s 192.168.1.251 --sport 80 -j SNAT --to-source 外网IP:80