ubuntu安装squid做http代理服务器不成功求解答
如果你设置成功了,确定对应服务器地址加端口是可以直接在浏览器地址栏里面打开的话,那么你可能还在配置文件里面忘了加这条配置。
#指定squid查询网址对应ip的dnsdns_nameservers 114114114114
其次,你要确定http_access行是 allow all或者是allow了对应的设置网段。
403是互联网用户无访问权限,squid为缓存服务器,第一访问的内容是可访问的,第二是squid的http access是allow的,从这两个方面下手确定问题,说的太笼统不好明确那个方面有问题
squid配置详解是[root@linuxprobe~]#systemctl restart squid,[root@linuxprobe~]#systemctl enable squid,lns'/usr/lib/systemd/system/squidservice''/etc/systemd/system/multiusertargetwants/squidservice'。
Squid是一个缓存Internet数据的软件,其接收用户的下载申请,并自动处理所下载的数据。当一个用户想要下载一个主页时,可以向Squid发出一个申请,要Squid代替其进行下载,然后Squid连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份。
当别的用户申请同样的页面时,Squid把保存的备份立即传给用户,使用户觉得速度相当快。Squid可以代理HTTP、FTP、GOPHER、SSL和WAIS等协议并且Squid可以自动地进行处理,可以根据自己的需要设置Squid,使之过滤掉不想要的东西。
注意事项:
squid在诸多unix like系统上都有软件库的提供,比如在ubuntu可以使用apt install squid进行安装,也可以到squid的官网直接下载二进制的编译好的软件包。
用户要想使用Squid服务程序提供的标准正向代理模式服务就必须在浏览器中填写服务器的IP地址以及端口号信息,因此咱们还需要依次点击连接标签后点击局域网设置选项,如图16-5与图16-6所示填写服务器信息后保存退出配置向导。
用户只需要在浏览器中简单的填写配置信息就可以开始享用Squid服务程序提供的代理服务了,此时作为一个网卡为仅主机模式(Hostonly)的虚拟机,开始也奇迹般的能够上网浏览了。
代理提供两个方面的服务:一是让不能直接访问Internet的用户访问Internet,因为允许一台权限较大的计算机直接连接网络更安全也更易于管理;二是让那些已经能够访问Internet的用户可以更快或更广泛地访问,因为代理服务器可以将访问较为频繁的网页缓存到本地,当有人再次访问同一页面时,代理可以直接发送本地页面而无需浪费网络带宽。当然也可以二者兼而有之。
我们以应用最广泛的Squid为例,讨论Linux下的代理服务器。这里所指的仅仅是服务器端应用,不包括客户端配置。Squid的优点是功能强大、配置简单、文档丰富;缺点是目前支持的协议尚不够广泛,对超大型应用略感吃力,不过这些不足都在慢慢完善之中。对于初学者和普通的应用而言,Squid仍是最佳选择。
在此,我们要配置一个只对内部网络提供代理服务的Proxy Server。它将用户分为高级用户和普通用户两种,对高级用户采用网卡物理地址识别的方法,普通用户则需要输入用户名和口令才能正常使用。高级用户没有访问时间和文件类型的限制,而普通用户只在上班时可以访问以及一些其它的限制。
安装
可以从Squid站点wwwsquid-cacheorg获取该软件的源代码安装包,包括gz和bz2两种压缩方式。也可以使用Linux的发行版,如Red
Hat提供的RPM包。
RPM方式安装很简单,命令如下:
$ rpm -ivh Squid-2xSTALBxi386rpm
不过笔者认为,即便是系统中已经默认安装了Squid,也应当先删掉然后安装最新的源代码包。因为开源软件会不断修正问题、提供更新的功能,使用最新版本可以保证最高的性能及安全,而且源代码方式可以完全定制系统。不过STABLE稳定版、DEVEL版通常是提供给开发人员测试程序的,假定下载了最新的稳定版squid-25STABLE2targz,用以下命令解开压缩包:
$ tar xvfz squid-25STABLEtargz
用bz2方式压缩的包可能体积更小,相应的命令是:
$ tar xvfj squid-25STABLEtarbz2
然后,进入相应目录对源代码进行配置和编译,命令如下:
$ cd squid-25STABLE2
配置命令configure有很多选项,如果不清楚可先用“-help”查看。通常情况下,用到的选项有以下几个:
--prefix=/web/squid #指定Squid的安装位置,如果只指定这一选项,那么该目录下会有bin、sbin、man、conf等目录,而主要的配置文件此时在conf子目录中。为便于管理,最好用参数--sysconfdir=/etc把这个文件位置配置为/etc。
--enable-storeio=ufs,null #使用的文件系统通常是默认的ufs,不过如果想要做一个不缓存任何文件的代理服务器,就需要加上null文件系统。
--enable-arp-acl #这样可以在规则设置中直接通过客户端的MAC地址进行管理,防止客户使用IP欺骗。
--enable-err-languages="Simplify_Chinese" --enable-default-err-languages="Simplify_Chinese" #上面两个选项告诉Squid编入并使用简体中文错误信息。
--enable-linux-netfilter #允许使用Linux的透明代理功能。
--enable-underscore #允许解析的URL中出现下划线,因为默认情况下Squid会认为带下划线的URL是非法的,并拒绝访问该地址。
整个配置编译过程如下:
/configure --prefix=/var/squid --sysconfdir=/etc --enable-arp-acl --enable-linux-netfilter --enable-pthreads --enable-err-language="Simplify_Chinese" --enable-storeio=ufs,null --enable-default-err-language="Simplify_Chinese" --enable-auth="basic" --enable-baisc-auth-helpers="NCSA" --enable-underscore
其中一些选项有特殊作用,将在下面介绍它们。
最后执行make和make install两条命令,将源代码编译为可执行文件,并拷贝到指定位置。
基本配置
安装完成后,接下来要对Squid的运行进行配置(不是前面安装时的配置)。所有项目都在squidconf中完成。Squid自带的squidconf
包括非常详尽的说明,相当于一篇用户手册,对配置有任何疑问都可以参照解决。
在这个例子中,代理服务器同时也是网关,内部网络接口eth0的IP地址为19216801,外部网络接口eth1的IP地址为202103xx。
下面是一个基本的代理所需要配置选项: http_port 19216801:3128
默认端口是3128,当然也可以是任何其它端口,只要不与其它服务发生冲突即可。为了安全起见,在前面加上IP地址,Squid就不会监听外部的网络接口。
下面的配置选项是服务器管理者的电子邮件,当错误发生时,该地址会显示在错误页面上,便于用户联系:
cache_mgr netsnake@963net
以下这些参数告诉Squid缓存的文件系统、位置和缓存策略:
cache_dir ufs /var/squid cache_mem 32MB cache_swap_low 90 cache_swap_high 95
在这里,Squid会将/var/squid目录作为保存缓存数据的目录,每次处理的缓存大小是32兆字节,当缓存空间使用达到95%时,新的内容将取代旧的而不直接添加到目录中,直到空间又下降到90%才停止这一活动。如果不想Squid缓存任何文件,如某些存储空间有限的专有系统,可以使用null文件系统(这样不需要那些缓存策略): cache_dir null /tmp
下面的几个关于缓存的策略配置中,较主要的是第一行,即用户的访问记录,可以通过分析它来了解所有用户访问的详尽地址:
cache_access_log /var/squid/accesslog cache_log /var/squid/cachelog cache_store_log /var/squid/storelog
下面这行配置是在较新版本中出现的参数,告诉Squid在错误页面中显示的服务器名称:
visible_hostname No1proxy
以下配置告诉Squid如何处理用户,对每个请求的IP地址作为单独地址处理: client_mask 255255255255
如果是普通代理服务器,以上的配置已经足够。但是很多Squid都被用来做透明代理。所谓透明代理,就是客户端不知道有代理服务器的存在,当然也不需要进行任何与代理有关的设置,从而大大方便了系统管理员。相关的选项有以下几个:
httpd_accel_host virtual httpd_accel_port 80 httpd_accel_with_proxy on httpd_accel_user_host_header on
在Linux上,可以用iptables/ipchains直接将对Web端口80的请求直接转发到Squid端口3128,由Squid接手,而用户浏览器仍然认为它访问的是对方的80端口。例如以下这条命令:
iptables -t nat -A PREROUTING -s 1921680200/32 -p tcp --dport 80 -j REDIRECT 3128
就是将1921680200的所有针对80端口的访问重定向到3128端口。
所有设置完成后,关键且重要的任务是访问控制。Squid支持的管理方式很多,使用起来也非常简单(这也是有人宁愿使用不做任何缓存的Squid,也不愿意单独使用iptables的原因)。Squid可以通过IP地址、主机名、MAC地址、用户/密码认证等识别用户,也可以通过域名、域后缀、文件类型、IP地址、端口、URL匹配等控制用户的访问,还可以使用时间区间对用户进行管理,所以访问控制是Squid配置中的重点。Squid用ACL(Access Control List,访问控制列表)对访问类型进行划分,用http_access deny 或allow进行控制。根据需求首先定义两组用户advance和normal,还有代表所有未指明的用户组all及不允许上网的baduser,配置代码如下:
acl advance 19216802-192168010/32 acl normal src 192168011-1921680200/32 acl baduser src 1921680100/32 acl
baddst dst wwwsomebadsitecom acl all src 0000/0 http_access deny baduser http_access allow advance http_access allow normal
可以看出,ACL的基本格式如下: acl 列表名称 控制方式 控制目标
比如acl all src 0000/0,其名称是all,控制方式是src源IP地址,控制目标是0000/0的IP地址,即所有未定义的用户。出于安全考虑,总是在最后禁止这个列表。
下面这个列表代表高级用户,包括IP地址从19216802到192168010的所有计算机:
acl advance 19216802-192168020/32
下面这个baduser列表只包含一台计算机,其IP地址是1921680100: acl baduser 1921680100/32
ACL写完后,接下来要对它们分别进行管理,代码如下: http_access deny baduser http_access allow advance http_access allow normal
上面几行代码告诉Squid不允许baduser组访问Internet,但advance、normal组允许(此时还没有指定详细的权限)。由于Squid是按照顺序读取规则,会首先禁止baduser,然后允许normal。如果将两条规则顺序颠倒,由于baduser在normal范围中,Squid先允许了所有的normal,那么再禁止baduser就不会起作用。
特别要注意的是,Squid将使用allow-deny-allow-deny……这样的顺序套用规则。例如,当一个用户访问代理服务器时,Squid会顺序测试Squid中定义的所有规则列表,当所有规则都不匹配时,Squid会使用与最后一条相反的规则。就像上面这个例子,假设有一个用户的IP地址是1921680201,他试图通过这台代理服务器访问Internet,会发生什么情况呢?我们会发现,他能够正常访问,因为Squid找遍所有访问列表也没有和1921680201有关的定义,便开始应用规则,而最后一条是deny,那么Squid默认的下一条处理规则是allow,所以1921680201反而能够访问Internet了,这显然不是我们希望的。所以在所有squidconf中,最后一条规则永远是http_access deny all,而all就是前面定义的“src 0000”。
按照这个配置应该没有问题
你需要在squidconf文件中看下配置信息,首先你看下配置文件中是否有类似于:
cache_peer 588322031 parent 80 0 no-query originserver
这种配置信息的配置,这个主要是用于配置如果当前缓存中如果没有请求的内容,就去兄弟服务器或者父亲服务器或者源地址去取需要的内容。
如果没有,请配置。如果有,请查看是否有类似于
acl Purge method PURGE
http_access allow AdminBoxes Purge
http_access deny Purge
的配置信息,这个配置信息主要用于配置那些地址允许访问,那些地址不能访问。
有可能是源地址被禁止了。
希望可以帮到你
一、Squid入门
1.Squid是什么
Squid是一种用来缓冲Internet数据的软件。它是这样实现其功能的,接受来自人们需要下载的目标(object)的请求并适当地处理这些请求。也就是说,如果一个人想下载一web页面,他请求Squid为他取得这个页面。Squid随之连接到远程服务器(比如:http://squidnlanrnet/)并向这个页面发出请求。然后,Squid显式地聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时,Squid可以简单地从磁盘中读到它,那样数据迅即就会传输到客户机上。当前的Squid可以处理HTTP,FTP,GOPHER,SSL和WAIS等协议。但它不能处理如POP,NNTP,RealAudio以及其它类型的东西。
2.Internet缓冲的一些概念
你可能会想到一些问题:缓冲有多大的用处?什么时候目标(object)应该或者不应该被缓冲?例如,缓冲信用卡号码是完全不适合的,脚本文件的执行结果在远程服务器端,站点经常更新(象wwwcnncom)或者甚至站点不允许缓冲,这些情况也都是不适合缓冲的。
Squid处理各种情况是不错的(当然,这需要远程站点按标准形式工作)。
可执行的cgi-bin脚本文件不被缓冲,返回正确页眉的页面是在一段限制了的时间内被缓冲,而且你可以规定特殊的规则以确定什么是可以或不可以被缓冲的,还有缓冲的时间为多长。
谈到缓冲的用处有多大,这要看Internet的容量大小,各有不同。对于小型的缓冲区(几转磁盘空间)来说,返回值非常高(达到25%)。这个空间缓冲经常访问的站点,如netscape,cnn和其它一些类似情况的站点。如果你增加一倍缓冲的磁盘空间,但你不会成倍增加你的命中率。这是因为你开始缓冲网络中剩余部分时,这些通常时很大的而且很少被访问。一个非常大的高速缓冲区,有20转左右,可能返回值仍小于50%,除非你对保存数据的时间长短经常改变(一般地你不要分配20转的磁盘空间,因为页面很快就会过时,应该被删除掉)。
我们在这里说的目标(object)指的是可保存的web页面或其它类似的可下载页面(ftp文件或目录内容也称为目标(object))。
3.Squid运行在什么系统上?
Squid可运行在大多数Unix和OS/2版本的系统之上,已知的可工作的有:
AIX,Digital Unix,FreeBSD,HP-UX,Irix,Linux,NetBSD,Nextstep,SCO,Solaris
二、编译安装Squid
1.Squid的未编译版本
我不能保证你能发现所有的Squid的未编译版本。在ftp:squidnlanrnet上你可以找到一些未编译的版本,尽管它们可能不是最新的版本。
Squid一般很容易编译,这是因为它本身可以自动配置。唯一真正的问题是是否在你的机器上有一个编译器。这可能发生在:你购买了商业OS但是它未包括标准的开发选项。你可能考虑在这种情况下装一个GNU的编译器,如果你在/usr/include下有必需的文件的话。你另外一个选择可能是请求别人的帮助。你也许需要查看“tracker database”以找到在你附近运行Squid的某人。假定他们有适合的硬件,他们很可能会帮助你的。
1. 开始编译之前
运行Squid的最好方法(在我看来)是创建一个特定的用户和组来运行它。我用相同的名字创建了一个Squid用户和一个Squid组,并设置用户的home目录为/usr/local/squid。然后我用su 转到Squid用户,这样文件就都由Squid以及Squid组所有(Squid用户主组必须为Squid)。随后我下载Squid源文件到/usr/local/squid/src并解包。
这可能不是最好的安装Squid到你的系统上的方法,但是,如果多个用户将使用squid,你可以把他们都放在Squid组中。(当然,如果你不理解我所说的,尽可以用你自己的名义去安装,不要以root方式,否则,你将给你的机器带来安全上的危险。)
2. 获得源码
Squid的源始站点是squidnlanrnet。这里还有许多其它的镜像站点,你可以考虑从你本地的镜像站点获得它,或者在archie服务器上搜索。一旦你已经下载了(一般放在/usr/local/squid/src/下),你可以用以下命令解压:
gzip -cd squid-targz-fil | tar xv 或者 tar zxvf squid-targz-fil
这将创建类似于以下行的目录:/usr/local/squid/src/squid-1113/(依版本而定)。
3. 编译Squid
以下是编译Squid的一般指令。你可能还要做其它的事以编译Squid到你的系统上。通常你可以运行一个配置脚本文件,它指明了你的系统设置和你机器上的标题文件。这样,在解压和解包文件后。cd 到/usr/local/squid/src/squid-version/下并输入:
/configure
这里假定你准备安装Squid到/usr/local/squid下。你也可以用下面的方法修改你的安装目录:
/configure -prefix=/some/other/directory
然后你可能要敲入:make 以及 如果编译一切正常时,输入make install。这将生成在后面将要描述的目录并安装文件到目录下。
三、Squid的基本配置
1. 目录结构
Squid通常创建几个目录。它们一般如下:
/usr/local/squid
/bin
/cache
/etc
/logs/
/src (这是我们早些时候创建的)
/bin包括Squid本身的程序,以及其它程序如ftpget,它可以被Squid用来执行各种功能。
/cache/目录是实际缓冲数据的存放区。你可能要考虑把剩余缓冲放到不同分区去,或甚至是不同的磁盘。它包含的目录如以下行的形式:/00/ /01/ /02/ 和/03/ 这些又包括更多的子目录,最终是缓冲的实际数据。存储数据在多个目录下意味着从大的缓冲区取数据仍然很快,因为你的操作系统要读一个包含10000个文件的目录会需要很长的时间。
/etc/包含squidconf文件,它是唯一的Squid配置文件。
/logs/目录可能会很大,特别是如果你包含同属时,它们会查询你每一次连接,这可以使你的log文件双倍增加。注意在cache目录下也有一个/log/文件,但是你不能删除或移动它。它是上面讨论的/usr/local/squid/cache/目录的一个索引。(这与IE的cache有些相似。)
/src/一般包括你运行Squid版本的源文件。
2. 基本配置
所有的Squid配置集中到一个文件----squidconf。下面将详细讨论仅作为一个缓冲代理服务器的Squid的配置,而不是把它作为一个http加速器。
以下是一个最基本的配置文件:
#squidconf - a very basic config file for squid
#Turn logging to it's lowest level
debug_options ALL,1
#defines a group (or Access Control List) that includes all IP
#addresses
acl all src 0000/0000
#allow all sites to use connect to us via HTTP
http_access allow all
#allow all sites to use us as a sibling
icp_access allow all
#test the following sites to check that we are connected
dns_testnames internicnet uscedu cscoloradoedu mitedu yaleedu
#run as the squid user
cache_effective_user squid squid
#otherwise, you can uncomment the below line and comment the one out
# this will run as use "nobody" with the group "nogrtoup"
cache_effective_user nobody nogroup
这个配置允许所有的人访问缓冲区,并创建一个100M的缓冲区,使用8M的内存,保持最小型的logs,而且存储所有文件到默认区域,这一般指的是所有文件将以Squid用户,Squid组的名义存储到“/usr/local/squid/cache”中。所有客户请求将来自于3128端口,并且所有“内部缓冲(inter-cache)”流量将走UDP端口3130。注意这个配置文件允许所有人访问你的缓冲机器,这可能不是你所希望的,但是至少它可以正常工作。
3. 运行Squid
Squid由一个脚本正常运行,这个脚本在它的进程死掉后重启Squid。这里有脚本的两种版本:/usr/local/squid/bin/RunCache 和 /usr/local/squid/bin/RunAccel 。
RunCache脚本一般在前台运行,所以启动Squid,输入以下内容:
% /usr/local/squid/bin/RunCache %
然后用以下命令查看主Squid log文件/usr/local/squid/logs/cachelog
% more /usr/local/squid/logs/cachelog
你将看到Squid启动的相关信息,如下行所示:
97/02/24 19:34:52| Starting Squid Cache version 1110 for i586-pc-linux-gnu
97/02/24 19:34:52| With 256 file descriptors available
97/02/24 19:34:52| Initializing IP Cache
如果你没有看见任何关于FATAL错误的信息,Squid现在就可以很高兴地在你的机器上运行了。
下面将配置你的浏览器,你可以好好地试一下哦!
4. 客户端软件的基本配置
以下是针对浏览器的基本配置:
Netscape(45以上版本):
从Edit菜单项中选择Preferences项。在Advanced中Proxies页,点击按钮进入Proxy配置手册,然后再点击View按钮。对每项你的Squid服务器支持的协议项(默认有HTTP,FTP和gopher等)中填入Squid服务器的主机名或IP地址,同时在Port栏中填入Squid服务器的HTTP端口号(默认为3128)。对你的Squid不支持的协议,可以让这些栏空着。
IE(50以上中文版本):
在工具菜单项中选择Internet选项,然后点击连接页,再按局域网设置按钮选择使用代理服务器选项,进入高级项目编辑。然后可以看到与Netscape代理服务器设置类似的界面,按照前面所述的方法分别填入相应项即可。
一般Unix下配置:
如果你使用可以允许你访问web的Unix程序(包括wget,lynx和mosaic等),你可以设置shell变量,通过这些变量可以配置好代理。
如果你使用的shell是tcsh或csh,命令如下:
% setenv http_proxy http://mycacheexamplecom:3128/
% setenv gopher_proxy http://mycacheexamplecom:3128/
% setenv ftp_proxy http://mycacheexamplecom:3128/
现在你就可以使用你的浏览器与缓冲连接以下载页面了。为了检查通过缓冲是否工作正常,可以查看/usr/local/squid/logs/accesslog文件的内容,使用命令如下:more /usr/local/squid/logs/accesslog。你可以看到所有你进行的访问信息都显示在该文件中。
我们公司用的iptables+squid透明代理上网。
经同事反映发现,QQ离线文件无法下载,提示未知错误。
经实验,确定QQ离线文件是通过tcp80端口传输的。iptables会把80端口数据转到squid代理。
在squid里把自己IP加入最顶级通过策略也没法下载。
最后用wireshark抓包,记下QQ离线文件服务器地址。
在iptables里,nat表prerouting链,加入匹配TCP80端口,目标地址为QQ离线文件服务器地址段的策略。
使这些访问不通过squid。
不然就只有取消squid代理。
我还没找到更好的办法,不清楚squid什么原因导致了无法下载
如果只是想同一时间只用一台电脑上网的话:
拉好网线新建 “网络连接”就可以了
网络连接的建立方法:
1在桌面“右键”-“网上邻居”,选择菜单中的“属性”
2在网络连接的窗口右边栏中“单键”-“创建一个新的连接”
3在“新建连接向导”中选择“下一步”
选择“连接到Internet”-“下一步”
选择“手动设置我的连接”-“下一步”
选择“用要求用户名和密码的宽带连接来连接”-“下一步”
填入“ISP名称”(ISP名称是这个连接的名,什么名都可以)-“下一步”
填入宽带帐号密码再“下一步”就可以完成
0条评论