公司的OA等系统只允许内部使用,在web上做了IP限制(而且这样做,安全些也强一些,避免外部人员攻击,嘿嘿)。不过后来,公司又搞了一个分公司,分公司的人是用asdl上网的,没有固定公网IP,导致他们每次变更IP都要在nginx上进行修改,很麻烦。由于公司的网关是一台废弃的确台机装的linux改的(iptables+tc实现),所以决定在这台网关上做一个代理,让分公司的人能通过代理连接公司内部上网。这里用的就是kingate --我在 鸡肋的linux正向代理 中有提到 。

一、概述

  1. kingate是一个代理服务器,能代理多种协议,包 括:http,https,socks,ftp,pop3,smtp,telnet,dns。能运行在linux,freebsd,…及其它类 unix,还有windows(最新版本要求nt 4.0以上)操作系统上。其具有如下特点:
  2. kingate是一个多线程的程序(采用线程池的方式),所以短时间内大量的连接请求,kingate还能保持很高的性能。
  3. kingate还支持tcp端口映射,可以实现别人访问你的内网主机。
  4. kingate有强大的规则控制,包括源IP地址,目的IP地址,目的端口,及采用的代理协议。
  5. kingate也支持时间控制。即可以设置什么时间内,所设置的规则才有效。
  6. kingate内置了用户认证,以及记录用户的使用情况,包括用户的使用时间,接收和发送的数据量,可以很容易实现对用户的记费。
  7. kingate采用http来进行管理,使得管理kingate及查看运行信息变得一件很轻松的事情,也可以远程管理。
  8. kingate还支持内存及硬盘共二级缓存(仅限http代理).

最新版本的kingate还可以用来加速web服务器(采用缓存原理)。提升你的web服务器的性能。kingate还是一款国人开发的代理服务器。

二、安装与配置

kingate项目托管在sourceforge上。其主页为:http://sourceforge.net/projects/kingate/ ,目前最新版本是2.2 。具体安装方法如下:

1wget http://softlayer.dl.sourceforge.net/project/kingate/kingate/2.2/kingate-2.2.tar.gz
2tar xzf kingate-2.2.tar.gz
3cd kingate-2.2/
4./configure --prefix=/usr/local/kingate
5make && make install

kingate安装完成后默认有二个配置文件kingate.conf 、access.conf,在修改用户信息后,还会生成第三个配置文件kingate.user。

最主要的配置为kingate.conf ,其内容如下:

 1[root@gataway etc]# cat kingate.conf
 2http on
 3ftp on
 4pop3 off
 5smtp off
 6telnet off
 7socks off
 8mms off
 9rtsp off
10manage on
11max 2000
12max_per_ip 0
13min_free_thread 3
14http_port 8082
15http_accelerate off
16x_forwarded_for on
17http_time_out 30
18ftp_port 2121
19ftp_time_out 300
20pop3_port 1100
21pop3_time_out 300
22smtp_port 2525
23smtp_time_out 300
24telnet_port 2323
25telnet_time_out 300
26socks_port 1082
27socks_time_out 300
28socks5_user off
29mms_port 1755
30mms_time_out 300
31rtsp_port 5540
32rtsp_time_out 300
33manage_port 2222
34manage_time_out 300
35log_model user
36log_level 2
37log_rotate {0 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 * * * }
38log_close_msg off
39mem_min_cache 50m
40mem_max_cache 12m
41disk_min_cache 20m
42disk_max_cache 30m
43use_disk_cache off
44refresh never
45refresh_time 300
46user_time_out 0
47mem_cache 50m
48disk_cache 100m
49max_deny_per_ip 0
50max_queue_thread 15
51min_limit_speed_size 1m
52limit_speed 20k
53max_request 50
54total_seconds 10
55bind_addr
56run_user
57insert_via off

以上配置中,http on 表示启用http代理(也可以根据你自己的需求开启其他类型的代理),http_port 8082 表示http代理的端口。manage on 为启用http管理,manage_port 2222 为http管理的端口 (出于安全考虑也可以进行修改)。

access.conf的内容如下:

1first deny
2model deny
3model allow
4{ * * * * }

以上表示先进行deny规则匹配,再进行allow规则匹配,deny内容为空,allow规则下的几个*分别代表如下

kingate

关于kingate.user的内容不再介绍,因为kingate 的mangage设计的非常好,简洁实用,所有的配置项都可以在mangage页里配置。manager管理界面的默认用户名为root,密码为kingate 。

kingate2

三、kinagate的自启动及其他

kingate默认不带自启动脚本,不过写其来很简单,如下:

 1#!/bin/bash
 2#
 3# chkconfig: 2345 85 15
 4# description: kingate is an proxy server daemon
 5# processname: kingate
 6## BEGIN INIT INFO
 7# Provides:          kingate
 8# Required-Start:    $all
 9# Required-Stop:     $all
10# Default-Start:     2 3 4 5
11# Default-Stop:      0 1 6
12# Short-Description: starts kingate proxy server
13# Description:       starts kingate porxy server
14## END INIT INFO
15# Author:   licess
16# website:  http://www.vpser.net
17prog="kingate"
18kingate="/usr/local/kingate/bin/kingate"
19start() {
20        echo -n $"Starting $prog: "
21        $kingate
22}
23stop() {
24        echo -n $"Stopping $prog: "
25        $kingate -q
26}
27restart(){
28        echo -n $"Restarting $prog: "
29        stop
30        start
31}
32case "$1" in
33  start)
34        start
35        ;;
36  stop)
37        stop
38        ;;
39  restart)
40        restart
41        ;;
42  *)
43        echo $"Usage: kingate {start|stop|restart}"
44        RETVAL=1
45esac
46exit $RETVA

在进行访问控制时,假有人配置了你设置的IP和端口访问不允许的站点时,在访问页面的左下角会有kingate的版本提示为: Generated by kingate(2.2)这样的信息提示 。其nginx apache squid等软件一样,不想让他提示该信息,可以修改src/run_client.cpp文件的1303行,将其改为你想提示的内容。