免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4590 | 回复: 1
打印 上一主题 下一主题

[proxy] iptables+layer7+squid透明代理控制网络(转载) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-19 21:53 |只看该作者 |倒序浏览
如要转发请注明来源:中国千慧网
文章原文:http://www.chinaqianhui.com/plus/view.php?aid=231


为了实现这些功能也花费了我不少的时间和精力,也绕了不绕了不少的弯路,今天终于搭建成功了。特地写这边文章给大家参考。
  
  1、介绍一下我的搭建环境,
* 物理环境:Intel的服务器主板(型号不记得了,不过应该没什么影响),CPU:intel PD 3.4双核 硬盘:160G*2(SATA接口的硬盘) 内存:2G 显卡:集成
* 系统环境:centos 5.0 内核版本:linux-2.6.18-8.el5
  
2、需要的步骤:
(1)打内核补丁layer-7
(2)升级内核到linux-2.6.19.7
(3)升级iptables版本到iptables-1.3.7
(4)测试iptables
(5)安装squid2.6
适用环境:透过NAT共享上网的方式
  
3、下载所需的软件:
下载新版本的内核文件:linux-2.6.19.7.tar.bz2
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.19.7.tar.bz2
下载新版的iptables文件:iptables-1.3.7.tar.bz2
wget http://mirrors.evolva.ro/netfilter.org/iptables/iptables-1.3.7.tar.bz2
下载layer 7补丁和模块协议:
wget http://ie.archive.ubuntu.com/sourceforge/l/l7/l7-filter/l7-protocols-2007-01-14.tar.gz
wget http://ie.archive.ubuntu.com/sourceforge/l/l7/l7-filter/netfilter-layer7-v2.9.tar.gz
  
l7-protocols-2007-01-14.tar.gz
netfilter-layer7-v2.9.tar.gz
  
4、解压下载的软件包:
tar -jxvf linux-2.6.19.7.tar.bz2
tar -jxvf iptables-1.3.7.tar.bz2
tar -zxvf l7-protocols-2007-01-14.tar.gz
tar -zxvf netfilter-layer7-v2.9.tar.gz
5、给内核打l7补丁
cd /usr/src/linux-2.6.19.7
patch -p1 < /usr/src/netfilter-layer7-v2.9/kernel-2.6.18-2.6.19-layer7-2.9.patch
6、配置内核选项
将所有源码都放在/usr/src目录下
cd linux-2.6.19.7
make menuconfig

要把新的内核补丁选择上:
Networking  --->
  Networking options  --->
   Network packet filtering (replaces ipchains)  --->
     IP: Netfilter Configuration  --->
       <M>   Layer 7 match support (EXPERIMENTAL)
              Layer 7 debugging output


推荐将这选项下面的项全部选择:
  Networking  --->
  Networking options  --->
   Network packet filtering (replaces ipchains)  --->
     IP: Netfilter Configuration  --->
(内核配置参照2.6内核编译的说明文档,论坛很多的)

注意:
如果你的硬盘接口是SATA接口的硬盘的话,你一定要选择:
Device Drivers  --->   
  Serial ATA (prod) and Parallel ATA (experimental) drivers  --->
如果不清楚没项的含义的话建议把这个选项下的全部选择上,否则编译能通过,但是无法启动。
配置完内核选项之后就可以编译内核了
7、编译内核:
make
make modules_install
make install
reboot选2.6.19.7内核启动
如果想在启动时让计算机自动从linux-2.6.19.7内核启动的话要修改grub的配置文件
vi /boot/grub/grub.conf
default=1   #只要把这个值改为0就可以让计算机默认从2.6.19.7启动了
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.19.7)
        root (hd0,0)
        kernel /vmlinuz-2.6.19.7 ro root=/dev/VolGroup00/LogVol00
        initrd /initrd-2.6.19.7.img
title CentOS (2.6.18-8.el5xen)
        root (hd0,0)
        kernel /xen.gz-2.6.18-8.el5
        module /vmlinuz-2.6.18-8.el5xen ro root=/dev/VolGroup00/LogVol00
        module /initrd-2.6.18-8.el5xen.img
title CentOS-base (2.6.18-8.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-8.el5 ro root=/dev/VolGroup00/LogVol00
        initrd /initrd-2.6.18-8.el5.img
8、升级iptables:
cd /usr/src/iptables-1.3.7
#打上iptables的Layer7补丁
patch -p1 < ../netfilter-layer7-v2.9/iptables-layer7-2.9.patch
chmod +x extensions/.layer7-test
export KERNEL_DIR=/usr/src/linux-2.6.19.7
export IPTABLES_DIR=/usr/src/iptables-1.3.7

make BINDIR=/sbin LIBDIR=/lib MANDIR=/usr/share/man install
9、测试iptables
iptables -I FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
(1)用string模块封QQ的DNS:
#封tencent
iptables -I FORWARD -p udp --dport 53 -m string --string "tencent" --algo bm -j DROP
#封.qq.com,717103636F6D这段数据包特征可用嗅探器获取,
#如果直接用string封.qq.com,但是String模块不支持(估计是字符串匹配的问题)
#封qq的话很多wqq,qqxx这样的域名都不能用了所以封.qq.com是最佳做法
iptables -I FORWARD -p udp --dport 53 -m string --hex-string "|717103636F6D|" --algo bm -j DROP
此方法可以使用hosts文件和代理的方式绕过。
(2)彻底封杀QQ,分四步分别从udp,tcp,http代理,socks代理方式:
#用L7自带的QQ协议封杀通过TCP出去的QQ通信
iptables -I FORWARD -p tcp -m multiport --dport 80,443 -m layer7 --l7proto qq -j DROP
#封QQ的UDP 8000端口的通信
iptables -I FORWARD -p udp --dport 8000 -j DROP
#封Socks代理
iptables -I FORWARD -p tcp -m layer7 --l7proto socks -j DROP
#封QQ通过Http代理出去(网页代理功能正常):
#新增一个过滤CONNECT模式的L7协议:
cd /etc/l7-protocols/protocols
#新建一文件httpagent.pat,内容如下:
# The HttpAgent Connect Action
httpagent
^\x43\x4F\x4E\x4E.+\x0D\x0A$
iptables -I FORWARD -p tcp -m layer7 --l7proto httpagent -j DROP

(3)用L7封Msn:
#封MSN
iptables -I FORWARD -m layer7 --l7proto msnmessenger -j DROP

10、安装squid做透明代理
* 下载新版的squid代理软件:squid-2.6.STABLE20.tar.gz
http://www.squid-cache.org/Versions/v2/2.6/squid-2.6.STABLE20.tar.gz
* 解压文件:
tar -zxvf squid-2.6.STABLE20.tar.gz
* 编译并安装squid
cd squid-2.6.STABLE20
./configure \
--exec_prefix=/usr/local/squid \
--localstatedir=/var \
--sysconfdir=/etc/squid \
--datadir=/etc/squid/datadir \
--bindir=/usr/sbin \
--libexecdir=/usr/lib/squid \
--enable-poll \
--enable-icmp \
--enable-useragent-log \
--enable-snmp \
--enable-arp-acl \
--enable-err-language=Simplify_Chinese \
--enable-htcp \
--enable-carp \
--enable-ssl \
--enable-forw-via-db \
--enable-cache-digests \
--enable-storeio="aufs,coss,diskd,null,ufs" \
--enable-removal-policies="lru heap" \
--disable-ipf-transparent \
--enable-delay-pools \
--with-pthreads \
--enable-auth=yes \
--enable-x-accelerator-vary \
--enable-underscores \
--enable-auth-modules="LDAP,NCSA,PAM,SMB,MSNT" \
--enable-linux-netfilter
make
make install
* 安装完之后要给目录付权限:
chown -R squid:squid /var/logs/
chown -R squid:squid /var/cache/
chmod 777 /var/logs/
chmod 777/var/cache/
* 创建squid缓存目录
* 启动squid
/usr/local/squid/sbin/squid -NCd1
默认端口为3128,在ie里测试一下如果能看到拒绝提示,说明安装成功。
让squid在后台运行,/usr/local/squid/sbin/squid &
如果想让squid在开机时自动运行要将这条命令加入到启动脚本里面:
vi /etc/rc.d/rc.local
这样下次开机squid就能自动启动了。
* squid配置路径/etc/squid/squid.conf
squid.conf配置文件的简单配置:
#设置squid代理侦听的端口,另外一定要加transparent
http_port 8080 transparent
dns_nameservers 202.102.192.68
#测试拒绝访问163网站
acl badweb url_regex -i 163.com
http_access deny badweb
#允许所有ip访问
acl all src 0.0.0.0/0.0.0.0
http_access allow all

到此squid已经安装完毕,具体配置请根据自己的情况自己配置吧。
11、配置squid透明代理
* 启用路由转发功能
echo "1" > /proc/sys/net/ipv4/ip_forward
* 配置iptables伪装
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE

* 配置端口转发
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-ports 3128
注意:eth0为外网网卡,eth1为内网网卡
ok了,至此我们iptables+layer7+squid透明代理就完全配置完毕了,欢迎大家指正!
另外,提醒大家,每台服务器的环境未必完全相同,我的这个文档适合我的服务器环境,
但未必在你的服务器上适合,本文仅供参考,切勿照搬!
本文在是编写是参照一下文档编写:
RHEL4升级2.6.19内核+L7补丁彻底封QQ,MSN
http://www.chinaqianhui.com/plus/view.php?aid=228
SQUID编译安装
http://www.chinaqianhui.com/plus/view.php?aid=220

如要转发请注明来源:中国千慧网

[ 本帖最后由 hijoys 于 2008-9-19 21:55 编辑 ]

论坛徽章:
1
戌狗
日期:2014-02-14 15:56:39
2 [报告]
发表于 2008-09-25 14:19 |只看该作者
学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP