 开启NAT转发功能(透明代理需要开启内核的路由转发功能,普通代理则不需要)
方法一:修改/proc下内核参数文件内容
直接修改内核参数ip_forward对应在/proc下的文件/proc/sys/net/ipv4/ip_forward,该文件默认值是0是禁止IP转发,修改为1即开启IP转发功能。修改命令如下:
#echo 1 > /proc/sys/net/ipv4/ip_forward
修改后就马上生效,即内核已经打开IP转发功能。但如果系统重启后则双恢复为默认值0,如果想永久打开需要通过修改/etc/sysctl.conf文件的内容来实现。
  方法二:修改/etc/sysctl.conf文件
   默认sysctl.conf文件中有一个变量是
   net.ipv4.ip_forward = 0
  将后面的值改为1,然后保存文件。因为每次系统启动时,初始化脚本/etc/rc.d/rc.sysinit会读取/etc/sysctl.conf文件的内容,所以修改后每次系统启动时都会开启IP转发功能。但只是修改sysctl文件不会马上生效,如果想使修改马上生效可以执行下面的命令:
   #sysctl –p
 

在进入etc目录,把squid.conf 这个 mv squid.conf squid.conf.bak 移走
 

然后vi squid.conf 自己写一个吧

http_port 192.168.1.250:8080
cache_mem 64 MB
cache_dir ufs /var/spool/squid 4096 16 256
cache_effective_user squid
cache_effective_group squid
dns_nameservers 192.168.1.4
cache_access_log /var/logs/access.log
cache_log /var/logs/cache.log
cache_store_log /var/logs/store.log
visible_hostname 192.168.1.250
cache_mgr [email protected]

acl all src 0.0.0.0/0.0.0.0
http_access allow all

这里的参数解释为:
http_port 192.168.1.250:8080  设置监听的IP和端口。双网卡的时候要注意监听的是哪个网卡。

cache_mem 64 MB 设置缓冲区内存大小,这里注意如果这个服务器只做代理那么可以设置到物理内存的2分之1,如果还有别的服务
  千万不要设置超过3分之1。

cache_dir ufs /var/spool/squid 4096 16 256  设置缓冲区大小,这里ufs是存储类型。4096是4096MB,16是缓冲区下的1级子目录数量。
         256是没个1级子目录下边有多少个2级目录。

cache_effective_user squid
cache_effective_group squid     查找是否有这个用户和组,如果没有会自动添加。

dns_nameservers 192.168.1.4  dns服务器地址,我这里是1.4

cache_access_log /var/logs/access.log 设置访问日志。

cache_log /var/logs/caces.log 设置缓存日志。

cache_store_log /var/logs/store.log  设置网页缓存日志。

visible_hostname 192.168.1.250 设置运行squid的主机名称。

cache_mgr [email protected] 设置管理员联系EMAil

acl all src 0.0.0.0/0.0.0.0  设置acl控制列表,
http_access allow all 设置拒绝还是允许,这2句是分不开的。这里的参数有很多比如allow|deny ,all是上边社顶的名称。

这里说下 acl 这个主要的 控制方式:

acl的类型,

src  源IP
dst  目标ip
srcdomain  源客户端所属的域。
dstdomain  目标所属的域。
time 一天的中时刻和一周内的一天
url_regex  url 规则表式匹配
urlpath_regex:URL-path  略去协议和主机名的URL规则表式配置
proxy_auth   通过外部程序进行用户认证
maxcom 单一IP最大连接数
time 时间段:语法为: 星期  时间段。
   星期可以是M(Monday) , T (Tuesday), W(Wednesday),H(Thursday),F(Friday),A(Saturday),S(Sunday)
   时间段为:可以表示10:00-20:00
-i 选项:表示忽略列表值的大小写,否则Squid是区分大小写的。
这里举例ACL:

acl all src 0.0.0.0/0.0.0.0
http_access deny all 全部源地址禁止访问http。

acl badclientip1 src 192.168.1.200
http_access deny badclientip1 禁止192.168.1.200这个IP上网。

acl badclient src 192.168.1.0/255.255.255.0
http_access deny badalient 禁止整个192.168.1.0 网络上网。

acl badclientip dst 21.210.25.23
http_access deny badclientip  禁止访问21.210.25.23这个站点。

acl badclientip -i www.163.com
http_access deny badclientip 禁止访问www.163.com.

acl badurl1 url_regex -i 163.com
http_access deny bsdurl1 禁止访问包含有163.com的域。

acl badurl2 url_regex -i sex
http_access deny badusr2 禁止访问带有关键字sex的站点。

acl clientip src 192.168.1.25
acl conn5 maxconn 5
http_access deny clientip cinn5  限制192.168.1.25 最大连接数是5。这里注意要2条ACL

acl clientnet1 src 192.168.1.0/255.255.255.0
acl worktime time MTWHF 9:00-18:00
http_access deny clientnet1 worktime 禁止周一到周五的9:00到18:00上网在192.168.1.0这个网络里

acl badfile1 urlpath_refex -i \.mp3$\.exe$\.rar$
http_access deny badrile1 禁止下载mp3 exe rar  文件

acl qq url_regex -i tencent.com
http_access deny qq 禁止QQ通过Squid 上网。

然后启动下实验下,
我是在/usr/local/squid/sbin/squid -z 先执行这个,来创建初始化缓冲区目录。
/usr/local/squid/sbin/squid start|stop|restart|reload  来启动停止,重新启动.重新载入配置。

这里如果启动不起来记得多看看/var/log/messages下边的日志提示。

如果你的提示是英文的,可以设置提示为中文。在目录下边有个share里边有选择的。


透明代理:


http_port 192.168.1.250:8080
cache_mem 64 MB
cache_dir ufs /var/spool/squid 4096 16 256
cache_effective_user squid
cache_effective_group squid
dns_nameservers 192.168.1.4
cache_access_log /var/logs/access.log
cache_log /var/logs/cache.log
cache_store_log /var/logs/store.log
visible_hostname 192.168.1.250
cache_mgr [email protected]


下边这4句是最关键的
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

 

acl all src 0.0.0.0/0.0.0.0
http_access allow all


这里的 httpd_accel_host virtual
       httpd_accel_port 80   这2个本来是定义squid加速模式的,在这里用Virtual来指定为虚拟主机模式。80为要加速请求的端口。采用
       这个模式的时候就取消了缓存ICP模式。如果开这个功能就必须设置:httpd_accel_with_proxy on 这个
       httpd_accel_with_proxy on 这个是的时候,就是squid的对web请求加速。又是缓存代理。
       httpd_accel_uses_host_header 定义为ON 以后,在透明代理下代理服务器


这里是2.5的通明代理方式,在新的2.6的下面这样写会出先错误,
再2.6下面只要写成

http_port 192.168.1.250:8080 transparent
只要这一句就好了。,

至于防火墙 写成,

iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRETC --to-ports 8080

 


代理服务器的认证方式:
本身的squid不自带任何人证方式,但是可以通过外部认证来实现对用户的人证,一般有ncsa,pam,ldap,smb,sasl.这些外部的认证程序放在
/usr/lib/squid/  这个目录下边。(要做通明代理,不能使用任何人证。)

修改文件,/usr/local/squid/etc/squid.conf

http_port 192.168.1.250:8080
cache_mem 64 MB<
br />cache_dir ufs /var/spool/squid 4096 16 256
cache_effective_user squid
cache_effective_group squid
dns_nameservers 192.168.1.4
cache_access_log /var/logs/access.log
cache_log /var/logs/cache.log
cache_store_log /var/logs/store.log
visible_hostname 192.168.1.250

cache_mgr [email protected]

###################################################################
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd    //定义认证方式使用basic,和人证程序的路径以及文件位置
auth_param basic children 5                                            //认证程序进程数 这里是5个
auth_param basic credentialsttl 2 hours           //认证有效时间
auth_param basic realm Example.com's squid proxy_caching               //认证领域的内容
acl auth_user proxy_auth REQUIRED     //acl列表,允许使用认证!
http_access allow auth_user
###################################################################

acl all src 0.0.0.0/0.0.0.0
http_access allow all


这里的认证我用的是htpasswd 这个来生成的,
htpasswd -c /etc/passwd (your name)
 这里的/etc/passwd 对应上边的auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd 的这个目录
(如果第一次生成,那么使用-C,以后在添加用户就不需要使用-C 了)

Last modification:July 14, 2020
如果觉得我的文章对你有用,请随意赞赏