我见过的最详细的关于linux下的防火墙和网络安全..
时间:2005-07-28 来源:cauhacker
内容包括如下:
打造FC3下的snort+BASE中文入侵检测系统
数据库安全:如何安全的配置和应用MySQL数据库?
DNS配置全过程
Proxy Server
Linux下架设代理服务器
IPTABLES指南
Linux策略性路由应用及深入分析
PC SERVER的选型
LIDS入侵检测和防御系统安装与研究 (转贴)
Linux的用户和用户组管理
[转帖]打造FC3下的snort+BASE中文入侵检测系统
所需软件包:snort2-3.0.tar.gz
下载地址:http://www.snort.org
apache.xxx.tar.gz
php-4.x.x.tar.gz
mysql-4.x.x.tar.gz
pcre5.0.tar.gz
下载地址:http://sourceforge.net/project/showfiles.p...?group_id=10194
ADODB
http://sourceforge.net/project/showfiles.p...?group_id=42718
JPGraph
http://fresh.t-systems-sfr.com/unix/src/ww...aph-1.17.tar.gz
BASE
http://sourceforge.net/project/showfiles.p...ckage_id=128846
apache+php+mysql的安装就不介绍了,多的是
注意的是编译php要加上GD参数
我的安装方法:
mysql:
./configure --prefix=/usr/local/mysql
make
make install
apache:
./configure --enable-so
make
make install
php:
#./configure --with-mysql --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql --with-zlib --with-jpeg --with-gd --with-png
--enable-track-vars --enable-sockets --disable-debug ; make ; make install
安装完后在www目录用下面的test.php检测:
<? phpinfo();?>
看看有没有gd,mysql支持.
开始安装snort:
1.先安装pcre:
tar –xvzf pcre-5.0.tar.gz
cd pcre-5.0
./configure
make
make install
2.安装 snort-2.3.0.tar.gz
tar -xvzf snort-2.3.0.tar.gz
cd snort-2.3.0
./configure --with-mysql
make
make install
groupadd snort //建立snort用户组
useradd -g snort snort //增加snort用户,并加入snort组
mkdir /etc/snort //在etc下建立snort目录
mkdir /etc/snort/rules //在etc下建立snort规则目录
mkdir /var/log/snort //建立snort日志目录
cd rules
cp * /etc/snort/rules //拷贝规则到etc下
cd ../etc
cp * /etc/snort //拷贝配置文件到etc下
编辑/etc/snort.conf:
更改var HOME_NET 10.2.2.0/24 //为你工作的网段
更改“var RULE_PATH ../rules” to “var RULE_PATH /etc/snort/rules”
把下面一行前面的#去掉,并改为下面的样式:
output database: log, mysql, user=snort password=snort dbname=snort host=localhost //将snort日志写入mysql的数据库snort,用户
名和密码是snort,稍后在建立这些
保存退出
增加一行到 /etc/rc.local 下次可以自动启动snort
“/usr/local/bin/snort -c /etc/snort/snort.conf -i eth0 -g snort”
新建一个数据库snort,并建立用户名和密码snort:
mysql
mysql> SET PASSWORD FOR root@localhost=PASSWORD('xxx'); //改root密码
>Query OK, 0 rows affected (0.25 sec)
mysql> create database snort;
>Query OK, 1 row affected (0.01 sec)
mysql> grant INSERT,SELECT on root.* to snort@localhost;
>Query OK, 0 rows affected (0.02 sec)
mysql> SET PASSWORD FOR snort@localhost=PASSWORD('snort');
>Query OK, 0 rows affected (0.25 sec)
mysql> grant CREATE, INSERT, SELECT, DELETE, UPDATE on snort.* to snort@localhost;
>Query OK, 0 rows affected (0.02 sec)
mysql> grant CREATE, INSERT, SELECT, DELETE, UPDATE on snort.* to snort;
>Query OK, 0 rows affected (0.02 sec)
mysql> exit
>Bye
执行下面的命令:
mysql -u root -p < ~/snortinstall/snort-2.3.0/schemas/create_mysql snort //为snort建立数据表
Enter password: //输入root的密码
检查数据库和数据结构:
mysql -p
>Enter password:
mysql> SHOW DATABASES;
(You should see the following)
+------------+
| Database
+------------+
| mysql
| Snort
| test
+------------+
3 rows in set (0.00 sec)
mysql> use snort
>Database changed
mysql> SHOW TABLES;
+------------------+
| Tables_in_snort
+------------------+
| data
| detail
| encoding
| event
| icmphdr
| iphdr
| opt
| reference
| reference_system
| schema
| sensor
| sig_class
| sig_reference
| signature
| tcphdr
| udphdr
+------------------+
16 rows in set (0.00 sec)
exit;
看到上面的表就成功了.
安装BASE部分:
1.先安装JPGraph:
cp jpgraph-1.17.tar.gz /var/www/html //拷贝到你的www目录
cd /var/www/html
tar –xvzf jpgraph-1.17.tar.gz
rm –rf jpgraph-1.17.tar.gz
cd jpgraph-1.17
rm -rf README
rm -rf QPL.txt
2.安装ADODB:
cp adodb460.tgz /var/www/html/
cd /var/www/html
tar -xvzf adodb460.tgz
rm –rf adodb460.tgz
3.安装 BASE:
cp base-1.0.2.tar.gz /var/www/html/ //拷贝到你的www目录
cd /var/www/html
tar –xvzf base-1.0.2.tar.gz
rm –rf base-1.0.2.tar.gz
mv base-1.0.2 base //目录改个名字
cd /var/www/html/base/
cp base_conf.php.dist base_conf.php
4.启动你的apache
登陆
http://localhost/base/
第一次进入时需要输入一些相关参数,如mysql的一些连接参数,要输入刚刚建立的snort,密码snort
还可以选择预言,最后修改数据库接口,成功.
建议现将/var/www/html/base改成可写,因为稍后base要把你输入的一些信息写入base_conf.php
查看的时候,需要现运行snort把数据写入mysql:
snort -c /etc/snort/snort.conf -g snort
然后在看base就可以看到我那个画面了,应该会有数据了.
have fun...
附带图片
screen.width-300)this.width = (screen.width-300) }" border="0" /> |
17:42 | 评论 (0)
2005年3月8日 #
数据库安全:如何安全的配置和应用MySQL数据库?
MySQL已经成为当前网络中使用最多的数据库之一,特别是在Web应用上,它占据了中小型应用的绝对优势。这一切都源于它的小巧易用、安全有效、开放式许可和多平台,更主要的是它与三大Web语言之一——PHP的完美结合。 但不幸的是,一个缺省安全的MySQL,会因为root密码为空及程序漏洞导致被溢出,使得安装MySQL的服务器成为被经常攻击的对象。更严重的是,被攻击之后数据库往往遭破坏,易造成灾难性的后果。下面将进入为了保护数据而进行的保卫战中。 环境要求 1.系统环境 有一台Red Hat Linux 9.0自定义安装的服务器,系统安装了GCC及一些软件包,比如Apache、PHP等。安装完系统后的第一件事就是升级系统的软件包。作为Web服务器,系统接受PHP脚本的请求,PHP则使用下面将要安装的MySQL数据库作为动态发布的接触。 分区情况的要求和一般系统差不多,惟一不同之处在于后面建立的/chroot与/tmp要求在同一个分区上。 2.安全要求 (1)MySQL运行在一个独立的(Chroot)环境下;(2)mysqld进程运行于一个独立的用户/用户组下,此用户和用户组没有根目录,没有Shell,也不能用于其它程序;(3)修改MySQL的root账号,并使用一个复杂的密码;(4)只允许本地连接MySQL,启动MySQL时网络连接被禁止掉;(5)保证连接MySQL的nobody账号登录被禁止;(6)删除test数据库。 安装MySQL 1.安装准备 安装MySQL之前,按照上述安全要求需要创建一个用于启动MySQL的用户和组。 #groupadd mysql #useradd mysql -c "start mysqld's account" -d /dev/null -g mysql -s /sbin/nologin 2.编译和安装 下载MySQL源代码包: #wget http://mysql.he.net/Downloads/MySQL-4.0/mysql-4.0.16.tar.gz 解压缩: #tar -zxvf mysql-4.0.16.tar.gz 一般把MySQL安装在/usr/local/mysql下,如果有特殊要求,也可自行调整。不过这样做意义不大,因为后面将Chrooting,到时只是使用这里的客户工具而已,比如mysql,mysqladmin,mysqldump等。下面就开始编译安装吧。 #./configure --prefix=/usr/local/mysql --with-mysqld-user=mysql --with-unix-socket-path=/tmp/mysql.sock --with-mysqld-ldflags=-all-static #make && make install #strip /usr/local/mysql/libexec/mysqld #scripts/mysql_install_db #chown -R root /usr/local/mysql #chown -R mysql /usr/local/mysql/var #chgrp -R mysql /usr/local/mysql 上面各步骤的具体作用在MySQL手册里已有介绍,惟一需要解释、和一般步骤不同的地方在于--with-mysqld-ldflags=-all-static。因为需要用到Chroot环境,而MySQL本身连接成静态后就无需再创建一些库环境了。 3.配置与启动 MySQL的配置文件需要手工选择、拷贝几个模板文件中的一个到/etc下,这几个模板文件位于源文件的support-files目录,一共有4个:small、medium、large、huge。 #cp support-files/my-medium.cnf /etc/my.cnf #chown root:sys /etc/my.cnf #chmod 644 /etc/my.cnf 启动MySQL,注意使用用户为mysql: #/usr/local/mysq/bin/mysqld_safe --user=mysql & 4.测试 为了测试安装的程序是否正确及MySQL是否已经正常启动,最好的办法就是用MySQL客户端来连接数据库。 #/usr/local/mysql/bin/mysql [root@ftp bin]# mysql Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 687 to server version: 3.23.58 Type 'help;' or 'h' for help. Type 'c' to clear the buffer. mysql> mysql> show databases; +--------------+ | Database | +--------------+ | mysql | | test | +--------------+ 2 rows in set (0.00 sec) mysql>quit 连接成功,可以关闭数据库: #/usr/local/mysql/bin/mysqladmin -uroot shutdown 如果连接失败则需要仔细分析出错原因: #more /usr/local/mysql/var/`hostname`.err Chrooting 1.Chrooting环境 Chroot是Unix/类Unix的一种手段,它的建立会将其与主系统几乎完全隔离。也就是说,一旦遭到什么问题,也不会危及到正在运行的主系统。这是一个非常有效的办法,特别是在配置网络服务程序的时候。 2.Chroot的准备工作 首先,应当建立如图1示目录结构: #mkdir -p /chroot/mysql/dev #mkdir -p /chroot/mysql/etc #mkdir -p /chroot/mysql/tmp #mkdir -p /chroot/mysql/var/tmp #mkdir -p /chroot/mysql/usr/local/mysql/libexec #mkdir -p /chroot/mysql/usr/local/mysql/share/mysql/english 图1 目录结构 然后设定目录权限: #chown -R root:sys /chroot/mysql #chmod -R 755 /chroot/mysql #chmod 1777 /chroot/mysql/tmp 3.拷贝mysql下的程序和文件到chroot下 #cp -p /usr/local/mysql/libexec/mysqld /chroot/mysql/usr/local/mysql/libexec/ #cp -p /usr/local/mysql/share/mysql/english/errmsg.sys /chroot/mysql/usr/local/mysql/share/mysql/english/ #cp -p /etc/hosts /chroot/mysql/etc/ #cp -p /etc/host.conf /chroot/mysql/etc/ #cp -p /etc/resolv.conf /chroot/mysql/etc/ #cp -p /etc/group /chroot/mysql/etc/ #cp -p /etc/passwd /chroot/mysql/etc/passwd #cp -p /etc/my.cnf /chroot/mysql/etc/ 4.编辑chroot下的passwd文件和group文件 #vi /chroot/etc/passwd 如上命令打开passwd文件,请删除除了mysql、root、sys的所有行。 #vi /chroot/etc/group 如上命令打开group文件,请删除除了mysql、root的所有行。 5.创建特殊的设备文件/dev/null 参照系统的样子做即可: #ls -al /dev/null crw-rw-rw- 1 root root 1, 3 Jan 30 2003 /dev/null #mknod /chroot/mysql/dev/null c 1 3 #chown root:root /chroot/mysql/dev/null #chmod 666 /chroot/mysql/dev/null 6.拷贝mysql的数据库文件到chroot下 #cp -R /usr/local/mysql/var/ /chroot/mysql/usr/local/mysql/var #chown -R mysql:mysql /chroot/mysql/usr/local/mysql/var 7.安装chrootuid程序 下载chrootuid,然后RPM安装即可。 http://rpm.pbone.net/index.php3/stat/4/idpl/355932/com/chrootuid-1.3-alt2.i586.rpm.html 8.测试Chroot环境下的MySQL配置 #chrootuid /chroot/mysql mysql /usr/local/mysql/libexec/mysqld & 如果失败请注意chroot目录下面的权限问题。 9.测试连接chroot下的MySQL #/usr/local/mysql/bin/mysql --socket=/chroot/mysql/tmp/mysql.sock ....... mysql>show databases; mysql>create database wgh; mysql>quit; #ls -al /chroot/mysql/var/ ....... 配置服务器 为了更加安全地使用MySQL,需要对MySQL的数据库进行安全配置。由于Chroot的原因,配置文件也会有所不同。 1.关闭远程连接 首先,应该关闭3306端口,这是MySQL的默认监听端口。由于此处MySQL只服务于本地脚本,所以不需要远程连接。尽管MySQL内建的安全机制很严格,但监听一个TCP端口仍然是危险的行为,因为如果MySQL程序本身有问题,那么未授权的访问完全可以绕过MySQL的内建安全机制。关闭网络监听的方法很简单,在/chroot/mysql/etc/my.cnf文件中的[mysqld]部分,去掉#skip-networking前面的 “#”即可。 关闭了网络,本地程序如何连接MySQL数据库呢?本地程序可以通过mysql.sock来连接,速度比网络连接更快。后文将提到关于mysql.sock的具体情况。 MySQL的备份通常使用SSH来执行。 2.禁止MySQL导入本地文件 下面将禁止MySQL中用“LOAD DATA LOCAL INFILE”命令。这个命令会利用MySQL把本地文件读到数据库中,然后用户就可以非法获取敏感信息了。 为了禁止上述命令,在/chroot/mysql/etc/my.cnf文件的[mysqld]部分加入下面语句: set-variable=local-infile=0 为了管理方便,一般在系统中的MySQL管理命令如mysql、mysqladmin、mysqldump等,使用的都是系统的 /etc/my.cnf文件。如果要连接,它会寻找/tmp/mysql.sock文件来试图连接MySQL服务器,但是这里要连接的是chroot下的 MySQL服务器。解决办法有两个:一个是在管理命令后面加入--socket=/chroot/mysql/tmp/mysql.sock。例如: #/usr/local/mysql/bin/mysql -root -p --socket=/chroot/mysql/tmp/mysql.sock 另一个就是在/etc/my.cnf的[client]部分加入socket=/chroot/mysql/tmp/mysql.sock。显然,第二种方法方便多了。 3.修改MySQL的root用户ID和密码 #chrootuid /chroot/mysql mysql /usr/local/mysql/libexec/mysqld & #/usr/local/mysql/bin/mysql -uroot ....... mysql>SET PASSWORD FOR root@localhost=PASSWORD('new_password'); 要尽量养成在mysql下输入密码的习惯,因为Shell下面输入的时候可能会被其它人看见。 mysql>use mysql; mysql>update user set user="wghgreat" where user="root"; mysql>select Host,User,Password,Select_priv,Grant_priv from user; mysql>delete from user where user=''; mysql>delete from user where password=''; mysql>delete from user where host='%'; mysql>drop database test; 修改为一个不容易猜的ID: mysql>flush privileges; mysql>quit; 4.删除历史命令记录 这些历史文件包括~/.bash_history、~/.mysql_history等。如果打开它们,你会大吃一惊,怎么居然有一些明文的密码在这里?! #cat /dev/null > ~/.bash_history #cat /dev/null > ~/.mysql_history PHP和MySQL通信 默认情况下,PHP会通过/tmp/mysql.sock来和MySQL通信,但这里的一个大问题是MySQL生成的根本不是它,而是/chroot/mysql/tmp/mysql.sock。解决的办法就是做一个连接: #ln /chroot/mysql/tmp/mysql.sock /tmp/mysql.sock 注意:由于hard links不能在文件系统的分区之间做,所以该处的连接必须位于同一分区内部。 自启动配置 自启动配置前先提示一点,用于PHP的数据库需要用一个新建的账号,其上有数据库权限设置,比如FILE、GRANT、ACTER、SHOW DATABASE、RELOAD、SHUTDOWN、PROCESS、SUPER等。 自启动脚本示例: #!/bin/sh CHROOT_MYSQL=/chroot/mysql SOCKET=/tmp/mysql.sock MYSQLD=/usr/local/mysql/libexec/mysqld PIDFILE=/usr/local/mysql/var/`hostname`.pid CHROOTUID=/usr/bin/chrootuid echo -n " mysql" case "$1" in start) rm -rf ${SOCKET} nohup ${CHROOTUID} ${CHROOT_MYSQL} mysql ${MYSQLD} >/dev/null 2>&1 & sleep 5 && ln ${CHROOT_MYSQL}/${SOCKET} ${SOCKET} ;; stop) kill `cat ${CHROOT_MYSQL}/${PIDFILE}` rm -rf ${CHROOT_MYSQL}/${SOCKET} ;; *) echo "" echo "Usage: `basename $0` {start|stop}" >&2 exit 64 ;; esac exit 0 文件位于/etc/rc.d/init.d下,名为mysqld,注意要可执行。 #chmod +x /etc/rc.d/init.d/mysqld #ln -s /etc/rc.d/init.d/mysql /etc/rc3.d/S90mysql #ln -s /etc/rc.d/init.d/mysql /etc/rc0.d/K20mysql 尽管不能做到100%的安全,但是这些措施可以保护我们的系统更加安全。15:23 | 评论 (0)
2005年2月25日 #
DNS配置全过程
先从 http://www.isc.org/products/BIND/ 下载bind,我下载的是bind-9.3.1rc1.tar.gz我下载的文件放在/root目录下
进入目录解压缩
[root@linux root]#tar xfz bind-9.3.1rc1.tar.gz
进如刚解压出来的目录
[root@linux root]# cd bind-9.3.1rc1
编译配置
[root@linux bind-9.3.1rc1]#./configure --prefix=/usr/local/named --enable-threads #--enable-threads开启多线程处理能力
[root@linux bind-9.3.1rc1]#make
[root@linux bind-9.3.1rc1]#make install
进入/usr/local/named 建立etc目录
[root@linux bind-9.3.1rc1]#cd /usr/local/named
[root@linux named]# mkdir etc
生成rndc控制命令的key文件
[root@linux named]# sbin/rndc-confgen > etc/rndc.conf
从rndc.conf文件中提取named.conf用的key
root@linux named]# cd etc
[root@linux etc]# tail -10 rndc.conf | head -9 | sed s/# //g > named.conf
自动在/usr/local/named/etc 生成named,conf文件
建立区文件目录
[root@linux etc]# mkdir /var/named
进入/var/named
[root@linux etc]# cd /var/named
建立localhost.zone文件
[root@linux named]#vi localhost.zone
$TTL 86400
$ORIGIN localhost.
@ 1D IN SOA @ root (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
1D IN NS @
1D IN A 127.0.0.1
建立named.local文件
[root@linux named]#vi named.local
$TTL 86400
@ IN SOA localhost. root.localhost. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS localhost.
1 IN PTR localhost.
dig命令直接生成named.root文件
[root@linux named]#dig > named.root
建立test.com域名正向解析文件
[root@linux named]#vi test.zone
$ttl 1D
@ IN SOA test.com. root.test.com. (
1053891162
3H
15M
1W
1D )
IN NS test.com.
IN MX 5 test.com.
www IN A 220.202.19.82
建立test.com域名反向解析文件
[root@linux named]#vi test.local
$TTL 86400
@ IN SOA test.com. root.test.com.(
20031001;
7200;
3600;
43200;
86400);
@ IN NS test.com.
82.19.202.220.in-addr.arpa. IN PTR dns.test.com.
配置named.conf加如以下代码
[root@linux etc]# vi named.conf
options {
directory "/var/named"; #named区文件目录
pid-file "named.pid"; #进程id文件名
};
controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};
zone "." IN {
type hint;
file "named.root";
};
zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
allow-update { none; };
};
zone "test.com" IN {
type master;
file "test.zone";
allow-update { none; };
};
zone "82.19.202.220.in-addr.arpa" IN {
type master;
file "test.local";
allow-update { none; };
};
现在配置完了可以启动BIND了
/usr/local/named/sbin/named -c /usr/local/named/etc/named.conf &
只要显示
runing表示运行成功
测试DNS
[root@linux etc]# host 220202.19.82
89.19.202.220.in-addr.arpa domain name pointer dns.test.com.
如上显示表示DNS反向解析正常
[root@linux etc]# ping www.test.com
PING www.test.com (220.202.19.82) 56(84) bytes of data.
如上显示表示正向解析正常
DNS配置完成。
0:24 | 评论 (1)
2005年2月16日 #
情人节
我们在一起过的第四个情人节,也是我们在一起三周年纪念日。13日这天我去订了去横店影视城的“情人节二日游”的团,晚上特地去定了11朵粉色玫瑰给女朋友,11朵玫瑰的意义应该是“一心一意”。14日,也就是情人节这天,我们随旅游团去了横店,来到了传说中的东方“好来屋”,但是这两天天气一直是阴雨蒙蒙的,是我最不喜欢的天气;因为有雨,所以也没有几个剧组在这里拍摄,有的几个剧组也都撤退了,没有看到电影的拍摄现场也给此行添了些许遗憾......14日这天我们游玩了“广州街”和“香港街”,晚上因为白天玩得太累就没有去团里安排的“江南水乡”的活动了;15日玩了“清明上河图”和“明清宫”,今天的天气稍微比昨天好,出了点太阳...
0:01 | 评论 (0)
2005年2月11日 #
过年第三天
过大年第三天了,吃吃喝喝的第三天。
大年三十晚上看春晚看到1点多,感觉这春晚的质量一年不如一年了,节目内容离群众生活有点远了,相声小品连“一笑而过”效果都没了,更别说“意义深远”了。不过“千手观音”这个节目还不错,舞台灯光把这个舞蹈的艺术效果发挥到了及至。
大年初一,下午和朋友打牌、搓麻将,晚饭和初中几个同学在大酒店喝酒。长大了,不象小的时候,聚会一次都不容易,大家都工作生活在不同的地方,平时也都不怎么回老家,也就过年的时候大家都回家过年的时候才能碰到,所以大家一聚首都能聊很多东西。晚上和另外一帮子朋友打牌,玩了一通宵的牌...有点累。
大年初二,白天一直睡觉,晚上家庭聚会,还有一个朋友订婚请酒,刚好在同一家酒店里,所以晚上我楼上楼下跑,一直喝到晚上12点,酒也喝了十几瓶,喝吐了好几次(哎,喝起来就不要命了)。。。醉了。。
大年初三,今天。要到乡下外公家拜年,又要喝酒了。。。
11:25 | 评论 (0)
2005年1月28日 #
XXXXX
有些人毕生追求的东西,有些人与生俱来;
有些人得到了毕生追求的东西,有些人失去了与生俱来的东西;
看了上面的话,我颇有感触。我不知道我毕生追求的是什么样的生活,而我与生俱来的东西也越来越陌生。。。
10:21 | 评论 (0)
2005年1月24日 #
今天试装了Debian。。
今天在渺波(一个好同志啊)的介绍下,试安装了一下Debian系统。。一下子被它方便的包管理工具atp-get给征服了,它强大的升级管理会自动寻找需要的升级包并很简单地帮你安装上,不用再像使用RH时到处地寻找所需要的包了,怪不得在中文界面下输入“atp --help”时,atp帮助的最后一行说atp很“牛力”,哈哈!!
19:31 | 评论 (1)
Proxy Server
纪增雄 来自:http://www.cnlinux.net转载请保留此信息,谢谢!
一、什么是Proxy Server(代理服务器),Proxy的作用。
在真实世界中我们常常会去帮人家办一些事情,例如帮人家交电费什么的,在这种情况下你不是电表的主人,而是代办者(代理者)的身份。在网络世界中Proxy就是相当于那个帮人家交电费的人了,当我们发出连接请求的时候,就会通过Proxy去帮我们直接与目标服务器沟通,帮我们取得资料。
通常我们所说的高速缓存代理,就是以空间换时间,就如下图那样。
400)this.width=400;if(this.height>450)this.height=450 }" border="0" />
client通过Proxy Server上网的步骤如下:
①client端向Server发出请求。
②Server收到请求后比较判断Cache中时候存在client想要的资料,如果没有则向远程Server发送数据请求。
③将请求回来的资料先存放到Cache中,再将资料传送给client端。
④当client发出的请求中所需要的资料在Cache中有,则将Cache中的资料直接传送给client端。
虽然当第一访问这向Proxy请求的数据Cache中没有时,Proxy抓取数据后会先保存在Cache中,这样访问速度变慢了,可是第二个访问者以及后来的访问者需要该资料的时候,proxy都不要想远程服务器请求,直接将cache中的资料发送给后来的请求者就行了,这样就减少了连接远程服务器的流量,另外由于proxy是在本地的,所以传输速度也更快。
二、使用Squid在构建Proxy Server
本文中笔者所使用的环境是:
操作系统: Redhat 9.0,内核:2.4.20-31.9,其他系统套件已经通过apt更新到最新了
1.编译安装Squid
由于Squid对系统硬件要求比较高,所以我们安装的时候应尽量优化。
代码: |
#groupadd squid #useradd squid |
添加suqid用户和用户组
代码: |
#export CFLAGES='-O2 -mcpu=pentium4 -march=pentium4 -mmmx -msse -msse2' |
可以根据你的CPU选择相应的参数
GCC-3.1以上可針對CPU最佳化:
代码: |
Pentium2: -O2 -mcpu=i686 -march=i686 -mmmx Pentium3: -O2 -mcpu=pentium3 -march=pentium3 -mmmx -msse Pentium4: -O2 -mcpu=pentium4 -march=pentium4 -mmmx -msse -msse2 #./configure --prefix=/usr/local/squid --enable-gnuregex --enable-async-io=80 --enable-icmp --enable-kill-parent-hack --enable-snmp --disable-ident-lookups --enable-cahce-digests --enable-arp-acl --enable-err-language="Simplify_Chinese" --enable-default-err-languages="Simplify_Chinese" --enable-poll --enable-linux-netfilter --enable-underscore #make #make install |
我个人安装软件都比较喜欢用源码包自己编译,觉得这样知道你自己在做什么,用rpm包好像不知道做什么的就安装好了。下面我们对各个编译参数进行解释,当然你可以通过./configure --help来查看其他的参数,以及各个参数的英文解释。
--prefix=/usr/local/squid :指定软件的安装路径
--enable-gnuregex :由于Squid大量使用字符串处理做各种判断,加入此项能更好的处理。
--enable-async-io=80 :这个主要是设置async模式来运行squid,我的理解是设置用线程来运行squid,如果服务器配置很不错,有1G以上内存,cpu使用SMP的方式的话可以考虑设成160或者更高。如果服务器比较糟糕就根据实际情况设了。另外此项还另cache文件支持aufs
--enable-icmp :加入icmp支持
--enable-kill-parent-hack :关掉suqid的时候,要不要连同父进程一起关掉,这个当然要啦
--enable-snmp :此选项可以让MRTG使用SNMP协议对服务器的流量状态进行监测,因此必须选择此项,使Squid支持SNMP接口。
--disable-ident-lookups :防止系统使用RFC931规定的身份识别方法。
--enable-cahce-digests :加快请求时,检索缓存内容的速度。
--enable-arp-acl :可以在规则设置中直接通过客户端的MAC地址进行管理,防止客户使用IP欺骗。
--enable-err-language="Simplify_Chinese" 和
--enable-default-err-languages="Simplify_Chinese" :指定出错是显示的错误页面为简体中文
--enable-poll :应启用Poll()函数而不是select()函数,通常而言poll(轮询)比select要好,但configure(脚本程序)已知Poll在某些平台下失效, 若你认为你比configure编译配置脚本程序要聪明的话,可以用这个选项启用Poll。总之就是用这个可以提升性能就是啦。
--enable-linux-netfilter :可以支持透明代理
--enable-underscore :允许解析的URL中出现下划先,因为默认squid会认为带下划线的URL地址是非法的,并拒绝访问该地址。
这里我们就安装好了,接下来就是修改配置文件了。
2.修改定义配置参数
下面是我的squid.conf文件
代码: |
# NETWORK OPTIONS(有关的网络选项) # ----------------------------------------------------------------------------- http_port 3128 #代理端口 icp_port 3130 #icp端口 # OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM(作用于邻居选择算法的有关选项) #----------------------------------------------------------------------------- #禁止缓存 hierarchy_stoplist cgi-bin ? hierarchy_stoplist -i ^https:\ ? acl QUERY urlpath_regex -i cgi-bin ? .asp .php .jsp .cgi acl denyssl urlpath_regex -i ^https:\ no_cache deny QUERY no_cache deny denyssl #上面几个就是说遇到URL中有包含cgi-bin和以https:\开头的都不要缓存, #还有asp、cgi、php等动态脚本也不要缓存, #因为这些脚本通常都是动态更新的,这样数据不同步。 #还有https://开通的不缓存是因为一般我们进行电子商务交易, #例如银行付款等都是采用这个的,如果把信用卡号什么缓存那不是很危险。 # OPTIONS WHICH AFFECT THE CACHE SIZE(定义cache大小的选项) # ----------------------------------------------------------------------------- cache_mem 8 MB #额外使用内存量,可根据你的系统内存在设定,一般为实际内存的1/3 cache_swap_low 90 #最低缓存百分比 cache_swap_high 95 ##最高缓存百分比,就是上面那个额外内存的使用百分比 maximum_object_size 4096 KB #单个文件最大缓存大小,超过这个大小将不缓存 maximum_object_size_in_memory 8 KB #在内存中单个文件最大缓存大小,超过这个大小将不缓存到内存中 #有DNS正反解所得到的IP存在缓存区的大小,这样可以加快解析速度 ipcache_size 1024 ipcache_low 90 ipcache_high 95 fqdncache_size 1024 # LOGFILE PATHNAMES AND CACHE DIRECTORIES(定义日志文件的路径及cache的目录) # ----------------------------------------------------------------------------- # <cache_dir> <aufs|ufs> <目录所在> <MBytes大小> <dir1> <dir2> # 那个 aufs 只有在编译的时候加入 --enable-async-io 那个选项才有支持, # 至于目录所在地与所占用的磁盘大小则请视您的主机情况而定, # 而后面 dir1, dir2 则是两个次目录的大小,通常 16 256 或 64 64 皆可, # 一般来说,数字最好是 16 的倍数,据说性能会比较好啦! cache_dir aufs /Cache1 100 16 256 cache_dir aufs /Cache2 100 16 256 #日志存放位置 cache_access_log /usr/local/squid/var/logs/access.log cache_log /usr/local/squid/var/logs/cache.log # TAG: cache_store_log cache_store_log /usr/local/squid/var/logs/store.log # TAG: pid_filename pid_filename /usr/local/squid/var/logs/squid.pid # OPTIONS FOR EXTERNAL SUPPORT PROGRAMS(外部支持程序选项) # ----------------------------------------------------------------------------- #用代理登陆匿名ftp服务选项 # TAG: ftp_user ftp_user Squid@ #用户名 ftp_passive on #被动模式 #认证 #auth_param basic children 5 #auth_param basic realm Squid proxy-caching web server #auth_param basic credentialsttl 2 hours #auth_param basic casesensitive off # OPTIONS FOR TUNING THE CACHE(调整cache的选项) # ----------------------------------------------------------------------------- # TAG: refresh_pattern Cache更新时间设置 #<refresh_pattern> <regex> <最小时间> <百分比> <最大时间> refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern . 0 20% 4320 #上面第一行如果网址开头是 ftp 的话,那么在一天(1440分钟)后, #如果proxy 再次取用这个档案时,则 cache 内的数据会被更新! # TIMEOUTS (超时) # ----------------------------------------------------------------------------- #连接到其他机器的最大尝试时间 connect_timeout 1 minute #连接到上层代理的超时时间 peer_connect_timeout 30 seconds #返回超时 request_timeout 2 minutes #持续连接时间 persistent_request_timeout 1 minute # ACCESS CONTROLS(访问控制) # ----------------------------------------------------------------------------- # TAG: acl #Examples: #acl myexample dst_as 1241 #acl password proxy_auth REQUIRED #acl fileupload req_mime_type -i ^multipart/form-data$ #acl javascript rep_mime_type -i ^application/x-javascript$ # #Recommended minimum configuration: acl all src 0.0.0.0/0.0.0.0 acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl to_localhost dst 127.0.0.0/8 acl SSL_ports port 443 563 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 563 # https, snews acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl CONNECT method CONNECT acl inside src 192.168.1.0/24 #内部网IP段 acl localmac arp "/usr/local/squid/localmac" #mac地址文件 # TAG: http_access http_access allow inside #允许inside规则通过 http_access allow localmac #允许localmac里面有登记的mac地址通过 # #Recommended minimum configuration: # # Only allow cachemgr access from localhost http_access allow manager localhost http_access deny manager # Deny requests to unknown ports http_access deny !Safe_ports # Deny CONNECT to other than SSL ports http_access deny CONNECT !SSL_ports # #http_access deny to_localhost # # And finally deny all other access to this proxy http_access deny all # TAG: http_reply_access http_reply_access allow all # TAG: icp_access #icp_access allow all # TAG: cache_peer_access # ADMINISTRATIVE PARAMETERS(管理参数) # ----------------------------------------------------------------------------- # TAG: cache_mgr cache_mgr webmaster@localhost #管理员信箱 # TAG: cache_effective_user cache_effective_user squid #运行squid时的用户 cache_effective_group squid #运行squid时的组 # TAG: visible_hostname visible_hostname ProxyServer #代理服务器名称 # OPTIONS FOR THE CACHE REGISTRATION SERVICE(cache注册服务选项) # ----------------------------------------------------------------------------- # HTTPD-ACCELERATOR OPTIONS(HTTPD加速选项) # ----------------------------------------------------------------------------- #设定透明代理 httpd_accel_host ProxyServer #主机名 httpd_accel_port 80 #透明代理端口 httpd_accel_with_proxy on httpd_accel_uses_host_header on # MISCELLANEOUS(杂项) # ----------------------------------------------------------------------------- # TAG: logfile_rotate #squid会定期的将日志文件更名并打包。 #比如正在使用的日志文件为access.log,squid会将其更名并打包为 access.log.1.gz; #过了一定时间后,squid又会将access.log.1.gz更名为access.log.2.gz #并将当前的日志文件更名并打包为access.log.1.gz,以此循环。 #logfile_rotate指定的数字即为打包并备份的文件的数量,当达到这一数目时, #squid将删除最老的备份文件。默认值为1 0。如果想手动来进行这些操作, #可以用logfile_rotate 0来取消自动操作。 logfile_rotate 4 # TAG: forwarded_for on|off #关闭此项将在访问某些论坛时显示的IP是unknown, #如果打开则显示的是你client的内网IP forwarded_for off #图标文件目录 # icon_directory /usr/local/squid/share/icons #错误提示文件目录 # error_directory /usr/local/squid/share/errors/Simplify_Chinese # TAG: snmp_port # Squid can now serve statistics and status information via SNMP. # By default it listens to port 3401 on the machine. If you don't # wish to use SNMP, set this to "0". # #Default: # snmp_port 3401 # TAG: snmp_access # Allowing or denying access to the SNMP port. # # All access to the agent is denied by default. # usage: # # snmp_access allow|deny [!]aclname ... # #Example: # snmp_access allow snmppublic localhost # snmp_access deny all # #Default: # snmp_access deny all # DELAY POOL PARAMETERS (all require DELAY_POOLS compilation option)(延时池参数) # ----------------------------------------------------------------------------- # TAG: coredump_dir #当squid突然挂掉的时候,或者突然出现什么故障的时候,将squid在内存中的资料写到硬盘中 coredump_dir /usr/local/squid/var/cache |
3.设置iptables支持透明代理
设置squid+iptables支持透明代理前请先设置好NAT,可以使用下面的简单语句
代码: |
echo "1" > /proc/sys/net/ipv4/ip_forward #设置转发 /sbin/iptables -t nat -A POSTROUTING -j MASQUERADE #设置nat功能 iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.0/24 --dport 80 -j REDIRECT --to-ports 3128 #将所有80端口的请求都转发到suqid的3128端口上 |
其中192.168.1.0/24表示192.168.1.1-254这个网段通过squid和nat做透明代理。
这样,当用户访问www服务的时候可以使用cache作为高速代理,减少流量,而其他服务则通过nat转发。
4.使用上层代理
当你访问国外网站比较慢的时候,可以通过设置代理访问,那么我们自己的代理服务器能否也设置别人的代理来访问国外的网站呢?答案是肯定的。
例如有代理proxy1.cnlinux.net能以较快的速度访问国外,且我们访问它也比较快,所以我们用它来作为我们访问国外网站的上层代理。
我们需要在squid.conf中添加如下参数:
代码: |
<cache_peer> <主机名称/地址> <类别> <http端口> <icp端口> <其他参数> |
类别主要有上层的parent和同一层的sibling两种,我们这里主要介绍的是上层代理,就是parent,如果你需要架设代理服务器集群的话可以采用sibling,这里我们就不做讨论了。
其他参数有:
代码: |
proxy-only :只向上层代理要资料,自己不缓存到本地proxy中。 weight=n :比重,当我们设置多台上层代理的时候,这几台代理的功能都相同的,可以通过设置此项来决定那台上层代理比较重要,n越大表示越重要。 no-query :当使用sibling类别的时候,向同一层的proxy索要资料的时候就会向其送出icp请求,可以使用no-query来取消icp请求,一般我们向上层proxy请求资料的时候可以不需要发送icp包,以降低流量。 default :表示将这台proxy设置为默认proxy no-netdb-exchange :表示不向proxy送出imcp包的请求。 no-digest :表示不纪录向上层proxy提交的请求。 #上层proxy设置 cache_peer proxy1.cnlinux.net parent 3128 3130 no-digest no-netdb-exchange #设置访问规则,可以用域名,也可以用IP acl usa dstdomain .com.us #美国.com.us的网站 acl usaip dst 18.0.0.0/8 #美国的部分IP段 #放行禁止规则 cache_peer_access proxy1.cnlinux.net allow usa #允许usa规则使用此上层proxy cache_peer_access proxy1.cnlinux.net deny !usa #禁止所有非usa规则使用此上层proxy cache_peer_access proxy1.cnlinux.net allow usaip cache_peer_access proxy1.cnlinux.net deny !usaip |
5.启动,关闭squid
a.将cache目录的所有者更改为squid
代码: |
#chown -R squid:squid /Cache1 #chown -R squid:squid /Cache2 |
b.对cache目录进行初始化
代码: |
#/usr/local/squid/sbin/squid -z 2004/11/01 23:06:29| Creating Swap Directories FATAL: Failed to make swap directory /Cache1/00: (13) Permission denied Squid Cache (Version 2.5.STABLE7): Terminated abnormally. CPU Usage: 0.000 seconds = 0.000 user + 0.000 sys Maximum Resident Size: 0 KB Page faults with physical i/o: 10 |
如果出现上面这样的错误信息,表示你/Cache1目录权限错误,请检查/Cache1目录所有者是否为squid用户所有。
c.启动squid
代码: |
#su squid -c "/usr/local/squid/bin/RunCache &" |
d.关闭squid
代码: |
#/usr/local/squid/sbin/squid -k shutdown 要执行两次才能正常关闭suqid |
e.重新读取squid.conf文件
代码: |
#/usr/local/squid/sbin/squid -k reconfigure 需要执行两次才能重新读取squid.conf文件 |
6.日志分析
Proxy服务器安装好后,我们当然要对服务器进行监控,通过日志分析,我们可以知道那些用户上了那些网站,用了多少流量等,下面为大家介绍sarg这个日志分析工具,在squid的官方网站还推介了其他几种日志分析工具,大家有兴趣的话可以上去看看。
a.安装
代码: |
#./configure --prefix=/usr/local/sarg --enable-bindir=/usr/local/sarg/bin #make && make install |
b.设置sarg.conf文件
代码: |
#vi /usr/local/sarg/sarg.conf language language English #由于官方网站还没有发布中文版,所以我们就使用英文好了,那位有兴趣可以自己翻译一下 access_log /usr/local/squid/var/logs/access.log.0 #squid日志文件存放位置 title "Squid 使用报告" #标题 temporary_dir /tmp #临时目录 output_dir /var/www/html/sarg #生成后的html存放到那里,设置到你的网站目录下,以便浏览 overwrite_report no #是否覆盖报告,当那个日期的报告已经存在时是否覆盖掉 mail_utility mail topsites_num 100 exclude_codes /usr/local/sarg/exclude_codes max_elapsed 28800000 charset GB2312 #字符集 |
c.生成报告
设置好sarg.conf文件后,执行
代码: |
#/usr/local/sarg/bin/sarg 将提示:SARG: Successful report generated on /usr/local/apache/htdocs/sarg/2004Oct31-2004Nov01 |
表示报告生成成功,还有报告存放位置,可以马上打开您的浏览器查看报告了。
三、关于Cache目录的建议
由于cache目录是经常的读写,所以最好硬盘能用SCSI的,速度比较快而且稳定。如果我们的cache大概需要40G的大小,那么我们尽量使用多硬盘,不要当纯用一个40G的硬盘,可以使用4个10G的硬盘,这样,对于cache的速度更快。比如,当你有10M的东西要写到cache中,如果是只是用一个硬盘的话,虽然可能你已经将4个cache目录分别放在4个分区,可是你只有一个硬盘,同时只有一个在写入,可是当你有4个硬盘的时候,你每个硬盘就只要写入2.5M的东西,那样是不是更快呢?
还有,建议将每个cache目录单独存放在一个分区中,分区不要划分太大,一般2至4G就行,这样proxy搜索资料的时候不用耗费太多的时间。
本文参考了各位前辈的文章,如有冒犯请多多包涵!
|
|
|
0:49 | 评论 (0)
Linux下架设代理服务器
再次感谢,本文的作者bye2000。Linux下架设代理服务器
作者:bye2000
一、代理服务器概述
1.1什么是代理服务器
在TCP/IP网络中,传统的通信过程是这样的:客户端向服务器请求数据,服务器响应该请求,将数据传送给客户端。在引入了代理服务器以后,这一过程变成了这样:客户端向服务器发起请求,该请求被送到代理服务器;代理服务器分析该请求,先查看自己缓存中是否有请求数据,如果有就直接传送给客户端,如果没有就代替客户端向该服务器发出请求。服务器响应以后,代理服务器将响应的数据传送给客户端,同时在自己的缓存中保留一份该数据的拷贝。这样,再有客户端请求相同的数据时,代理服务器就可以直接将数据传送给客户端,而不需要再向该服务器发起请求。
1.2 代理服务器的功能
一般说来,代理服务器具有以下的功能:
1.通过缓存增加访问速度
随着Internet的迅猛发展,网络带宽变得越来越珍贵。所以为了提高访问速度,好多ISP都提供代理服务器,通过代理服务器的缓存功能来加快网络的访问速度。一般说来,大多数的代理服务器都支持HTTP缓存,但是,有的代理服务器也支持FTP缓存。在选择代理服务器时,对于大多数的组织,只需要HTTP缓存功能就足够了。
通常,缓存有主动缓存被动缓存之分。所谓被动缓存,指的是代理服务器只在客户端请求数据时才将服务器返回的数据进行缓存,如果数据过期了,又有客户端请求相同数据时,代理服务器又必须重新发起新的数据请求,在将响应数据传送给客户端时又进行新的缓存。所谓主动缓存,就是代理服务器不断地检查缓存中的数据,一旦有数据过期,则代理服务器主动发起新的数据请求来更新数据。这样,当有客户端请求该数据时就会大大缩短响应时间。还需要说明的是,对于数据中的认证信息,大多数的代理服务器都不会进行缓存的。
2.提供用私有IP访问Internet的方法
IP地址是不可再生的宝贵资源,假如你只有有限的IP地址,但是需要提供整个组织的Internet访问能力,那么,你可以通过使用代理服务器来实现这一点。
3.提高网络的安全性
这一点是很明显的,如果内部用户访问Internet都是通过代理服务器,那么,代理服务器就成为进入Internet的唯一通道;反过来说,代理服务器也是Internet访问内部网的唯一通道,如果你没有做反向代理,则对于Internet上的主机来说,你的整个内部网只有代理服务器是可见的,从而大大增强了网络的安全性。
1.3 代理服务器的分类及特点
通常的代理服务器分类方法,是从实现的机理分为线路层代理、应用层代理、智能线路层代理等等。在这里,我想从另外一个角度出发,把代理服务器分为传统代理服务器和透明代理服务器。
我认为有必要好好搞清楚两者的区别,只有真正明白了内在地机理,才能在遇到问题时,有章可循,才不会一头雾水,不知从何解决问题。因此,下面我们就通过具体的实例来说明。本章的写作思路来源于Paul Russell所写的IPCHAINS-HOWTO。下面所举的例子也来源于该文章,我觉得我读该文的最大收获在于对内部网访问外部网以及外部网访问内部网的实现手段有了一个清晰的认识。当然,这里所谓的内部网是指使用私有IP的内部网络。
我们的例子都基于以下假设:
你的域名为sample.com,你的内部网(192.168.1.*)用户通过proxy.sample.com(外部接口 eth0:1.2.3.4;内部接口 eth1:192.168.1.1)的代理服务器访问Internet,换句话说,该代理服务器是唯一一台直接与Internet和内部网相连的机器。并假该设代理服务器上运行着某种代理服务器软件(如squid)。假设内部网中某一客户机为client.sample.com(192.168.1.100)。
+-------------------+
|内部网(192.168.1.*)| eth1+--------+eth0 DDN
| +------------| proxy |<===============>Internet
|client198.168.1.100| +--------+
+-------------------+
eth0: 1.2.3.4
eth1: 198.168.1.1
1.3.1传统代理
在以上基础上我们做以下工作:
1.代理服务软件被绑定到代理服务器的8080端口。
2.客户端浏览器被配置使用代理服务器的8080端口。
3.客户端不需要配置DNS。
4.代理服务器上需要配置代理服务器。
5.客户端不需要配置缺省路由。
当我们在客户端浏览器中打开一个web请求,比如“http://www.linuxaid.com.cn”,这时将陆续发生以下事件:
1.客户端使用某一端口(比如1025)连接代理服务器8080端口,请求web页面“http://www.linuxaid.com.cn”
2.代理服务器向DNS请求“www.linuxaid.com.cn”,得到相应的IP地址202.99.11.120。然后,代理服务器使用某一端口(比如1037)向该IP地址的80端口发起web连接请求,请求web页面。
3.收到响应的web页面后,代理服务器把该数据传送给客户端。
4.客户端浏览器显示该页面。
从www.linuxaid.com.cn的角度看来,连接是在1.2.3.4地1037端口和202.99.11.120的80端口之间建立的。从client的角度看来,连接是在192.168.1.100的1025端口和1.2.3.4的8080端口之间建立的。
1.3.2 透明代理
透明代理的意思是客户端根本不需要知道有代理服务器的存在。
在以上基础上我们做以下工作:
1.配置透明代理服务器软件运行在代理服务器的8080端口。
2.配置代理服务器将所有对80端口的连接重定向到8080端口。
3.配置客户端浏览器直接连解到Internet。
4.在客户端配置好DNS.
5.配置客户端的缺省网关为192.168.1.1.
当我们在客户端浏览器中打开一个web请求,比如“http://www.linuxaid.com.cn”,这时将陆续发生以下事件:
1.客户端向DNS请求“www.linuxaid.com.cn”,得到相应的IP地址202.99.11.120。然后,客户端使用某一端口(比如1066)向该IP地址的80端口发起web连接请求,请求web页面。
2.当该请求包通过透明代理服务器时,被重定向到代理服务器的绑定端口8080。于是,透明代理服务器用某一端口(比如1088)向202.99.11.120的80端口发起web连接请求,请求web页面。
3.收到响应的web页面后,代理服务器把该数据传送给客户端。
4.客户端浏览器显示该页面。
从www.linuxaid.com.cn的角度看来,连接是在1.2.3.4地1088端口和202.99.11.120的80端口之间建立的。从client的角度看来,连接是在192.168.1.100的1066端口和202.99.11.120的80端口之间建立的。
以上就是传统代理服务器和透明代理服务器的区别所在。
二、各种代理服务器的比较
linux下的代理服务器软件很多,我从www.freshmeat.com(一个著名的linux软件站点)查看了一下,足有六十多个。但是被广泛应用的只有Apache、socks、squid等几个实践证明是高性能的代理软件。下面我们分别来比较一下这几个软件:
2.1 Apache
Apache是世界上用的最广泛的HTTP服务器,之所以用的最广泛,是因为它强大的功能、高效率、安全性和速度。从1.1.x版本开始,Apache开始包含了一个代理模块。用Apache作代理服务器的性能优势并不明显,不建议使用。
2.2 Socks
Socks是一种网络代理协议,该协议可以让客户机通过Socks服务器获得对Internet的完全访问能力。Scoks在服务器和客户端之间建立一个安全的代理数据通道,从客户的角度看来,Scoks是透明的;从服务器的角度看来,Socks就是客户端。客户端不需要具有对Internet的直接访问能力(也就是说,可以使用私有IP地址),因为Socks服务器能够把来自于客户端的连接请求重定向到Internet。此外,Socks服务器可以对用户连接请求进行认证,允许合法用户建立代理连接。同理,Socks也能防止非授权的Internet用户访问及的内部网络。所以常常把Socks当作防火墙来使用。
常见的浏览器如netscape、IE等可以直接使用Socks, 并且我们也可以使用socsk5的所带的client来使那些不直接支持socks的internet软件使用Socks。
更多的资料可以参考Socks官方站点http://www.socks.nec.com。
2.3 Squid
对于web用户来说,Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher和HTTP协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。
Squid将数据元缓存在内存中,同时也缓存DNS查询的结果,除此之外,它还支持非模块化的DNS查询,对失败的请求进行消极缓存。Squid支持SSL,支持访问控制。由于使用了ICP(轻量Internet缓存协议),Squid能够实现层叠的代理阵列,从而最大限度地节约带宽。
Squid由一个主要的服务程序squid,一个DNS查询程序dnsserver,几个重写请求和执行认证的程序,以及几个管理工具组成。当Squid启动以后,它可以派生出预先指定数目的dnsserver进程,而每一个dnsserver进程都可以执行单独的DNS查询,这样一来就大大减少了服务器等待DNS查询的时间。
2.4 选择
从上面的比较可以看出,Apache主要功能是web服务器,代理功能只不过是其一个模块而已,Socks虽然强大,但有欠灵活,因此我们着重推荐你使用Squid。下面的章节我们就一起来学习Squid激动人心的特性及相关的安装与配置。
三、安装Squid Proxy Server
3.1获取软件
你可以通过以下途径获取该软件:
1.从Squid的官方站点http://www.squid-cache.org下载该软件;
2.从你的linux发行版本中获取该软件;
通常,Squid软件包有两种:一种是源代码,下载后需要自己重新编译;可执行文件,下载后只需解压就可以使用;另一种是就是RedHat所使用的rpm包。下面我们分别讲讲这两种软件包的安装方法。
3.2安装软件
我们以目前最新的稳定版本squid-2.3.STABLEX为例。
3.2.1rpm包的安装
1.进入/mnt/cdrom/RedHat/RPMS
2.执行rpm -ivh squid-2.2.STABLE4-8.i386.rpm。
当然,我们也可以在开始安装系统的过程中安装该软件。
3.2.2 源代码包的安装
1.从http://www.squid-cache.org下载squid-2.3.STABLE2-src.tar.gz。
2.将该文件拷贝到/usr/local目录。
3.解开该文件 tar xvzf squid-2.3.STABLE2-src.tar.gz。
4.解开后,在/usr/local生成一个新的目录squid-2.3.STABLE2,为了方便用mv命令将 该目录重命名为squid mv squid-2.3.STABLE2 squid;
5.进入squid cd squid
6.执行./configure 可以用./confgure --prefix=/directory/you/want指定安装目录
系统缺省安装目录为/usr/local/squid。
7.执行 make all
8.执行 make install
9.安装结束后,squid的可执行文件在安装目录的bin子目录下,配置文件在etc子目录下。
四、配置squid基础篇——让代理服务器跑起来
由于RedHat各方面的优势(包括易用性,稳定性等等),全世界范围内使用该发行版的用户比较多,所以,我们下面的说明都是以RedHat6.1环境下squid-2.2.STABLE4-8版本为主。从我的使用经验看来,该版本的squid要比其他版本稳定的多,以前的1.1.22版本也比较稳定,但是在功能及灵活性方面有所欠缺。
squid有一个主要的配置文件squid.conf,在RedHat环境下所有squid的配置文件位于/etc/squid子目录下。
4.1常用的配置选项
因为缺省的配置文件有问题,所以我们必须首先修改该配置文件的有关内容,以便让squid跑起来。
下面我们来看一看squid.conf文件的结构以及一些常用的选项:
squid.conf配置文件的可以分为十三个部分,这十三个部分分别是:
1.NETWORK OPTIONS (有关的网络选项)
2.OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM (作用于邻居选择算 法的有关选项)
3.OPTIONS WHICH AFFECT THE CACHE SIZE (定义cache大小的有关选项)
4.LOGFILE PATHNAMES AND CACHE DIRECTORIES (定义日志文件的路径及cache的目录)
5.OPTIONS FOR EXTERNAL SUPPORT PROGRAMS (外部支持程序选项)
6.OPTIONS FOR TUNING THE CACHE (调整cache的选项)
7.TIMEOUTS (超时)
8.ACCESS CONTROLS (访问控制)
9.ADMINISTRATIVE PARAMETERS (管理参数)
10.OPTIONS FOR THE CACHE REGISTRATION SERVICE (cache注册服务选项)
11.HTTPD-ACCELERATOR OPTIONS (HTTPD加速选项)
12.MISCELLANEOUS (杂项)
13.DELAY POOL PARAMETERS (延时池参数)
虽然squid的配置文件很庞大,但是如果你只是为一个中小型网络提供代理服务,并且只准备使用一台服务器,那么,你只需要修改配置文件中的几个选项。这些几个常用选项分别是:
1.http_port
说明:定义squid监听HTTP客户连接请求的端口。缺省是3128,如果使用HTTPD加速模式 则为80。你可以指定多个端口,但是所有指定的端口都必须在一条命令行上。
2.cache_mem (bytes)
说明:该选项用于指定squid可以使用的内存的理想值。这部分内存被用来存储以下对象 :
In-Transit objects (传入的对象)
Hot Objects (热对象,即用户常访问的对象)
Negative-Cached objects (消极存储的对象)
需襖

<img preview="http://pic.pdowncc.com/uploadimg/ico/2025/0523/1747993424374100.png" width="32" height="32" src="http://pic.pdowncc.com/uploadimg/ico/2025/0523/1747993424374100.png" alt="弓箭勇者最新版" />
飞行射击 下载
<img preview="http://pic.pdowncc.com/uploadimg/ico/2025/0523/1747993424374100.png" width="32" height="32" src="http://pic.pdowncc.com/uploadimg/ico/2025/0523/1747993424374100.png" alt="弓箭勇者最新版" />
飞行射击 下载
<img preview="http://pic.pdowncc.com/uploadimg/ico/2025/0523/1747993424374100.png" width="32" height="32" src="http://pic.pdowncc.com/uploadimg/ico/2025/0523/1747993424374100.png" alt="弓箭勇者最新版" />
飞行射击 下载- 4 <img preview="http://pic.pdowncc.com/uploadimg/ico/2025/0523/1747993424374100.png" width="32" height="32" src="http://pic.pdowncc.com/uploadimg/ico/2025/0523/1747993424374100.png" alt="弓箭勇者最新版" />下载73.78MB · 96℃
1970-01-01
- 5 <img preview="http://pic.pdowncc.com/uploadimg/ico/2025/0523/1747993424374100.png" width="32" height="32" src="http://pic.pdowncc.com/uploadimg/ico/2025/0523/1747993424374100.png" alt="弓箭勇者最新版" />下载43.7 MB · 97℃
1970-01-01
- 6 <img preview="http://pic.pdowncc.com/uploadimg/ico/2025/0523/1747993424374100.png" width="32" height="32" src="http://pic.pdowncc.com/uploadimg/ico/2025/0523/1747993424374100.png" alt="弓箭勇者最新版" />下载110.69MB · 95℃
1970-01-01