Mac OS下免密碼SSH登錄遠程主機

使用密碼通過ssh登錄遠程主機既不安全也不方便,Mac OS下我們可以很方便地通過生成一對公私鑰來免密碼登錄遠程主機,首先在終端通過以下命令生成一對公私鑰:

ssh-keygen -t rsa

輸入命令後系統第一個問題是問密鑰的id,這裡要說明一下,一對公私鑰可以多個主機反覆使用,不需要重複生成,因此默認即可。接著系統會詢問輸入密碼,我們生成密鑰就是為了免密碼登錄,因此這裡直接回車,不要輸入密碼。執行完這個命令後在~/.ssh目錄下會生成id_rsa和id_rsa.pub兩個文件。

id_rsa是私鑰,id_rsa.pub是公鑰,公鑰我們需要上傳至目標服務器,通過scp命令上傳(假設遠程主機用戶名為:user,主機域名為:yourhost.com,下同):

scp ~/.ssh/id_rsa.pub user@yourhost.com:~/.ssh/

需要說明的是,通過哪個用戶登錄就得把公鑰上傳至該用戶的~/.ssh下,不可搞錯。如果因為遠程主機用戶名下沒有.ssh這個目錄,會提示上傳失敗,則需要先用密碼登錄遠程主機創建這個目錄:

mkdir ~/.ssh

接著,需要把公鑰寫入認證文件,在遠程主機中輸入以下命令:

touch ~/.ssh/authorized_keys
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

更改目錄權限,適當保護一下.ssh目錄和認證文件:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

接著我們需要修改ssh服務的配置文件:

vim /etc/ssh/sshd_config

插入下面這行代碼:

AuthorizedKeysFile ~user/.ssh/authorized_keys

保存,並重啓ssh服務:

/etc/init.d/ssh restart

接著試試登錄,應該無需密碼登錄遠程主機了。

為安全我們可以禁用密碼登錄遠程主機,在ssh的配置文件中增加這麼一行即可:

PasswordAuthentication no

此外,可以寫一個config文件,記錄ssh遠程服務器、用戶名和端口的信息,進一步減少“鍵入”的字符數:

vim ~/.ssh/config

這麼寫:

Host XXX
HostName IP or DOMAIN
Port 22
User root

然後登録只需要ssh XXX即可。

本文參考了「SSH 免密碼登入」一文,並且這篇文章詳述了公私鑰驗證與登錄的原理,推薦仔細閱讀。

Squid的配置文件

最近幾個星期一直在調試與優化squid,參看了很多資料,寫了三篇日誌備忘,總結如下:

1、從源代碼編譯Squid使之支持https代理

2、設置Squid的訪問密碼

3、Squid+Stunnel實現SSL加密代理

這三篇日誌都是根據自己服務器的情況來記錄的,所用的功能也只是squid的冰山一角,如果需要深入研究squid,推薦以下一些資源:

1、鳥哥的「區網控制者: Proxy 伺服器」,這篇文章可以作為squid的入門教材,筆者也是從這篇文章開始入手的,話說回來,鳥哥的站點絕對是Linux新手收藏夾內必備的網站。

2、Jeff Pang的「Squid中文權威指南」,這是Jeff Pang翻譯自Squid作者的英文原著,沒有出版發行過,很是可惜,E文不好,又想深入研究squid的必備資料。

以下是筆者自己使用的一份squid配置,測試了幾個星期,沒有發現什麼問題:

# 端口,這裡使用的是https_port端口,也可使用普通的http_port端口,根據實際情況調整
https_port 443 cert=/etc/squid/ssl.crt key=/etc/squid/ssl.key version=4
icp_port 0

# 客戶認證
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/password
auth_param basic children 5
auth_param basic realm 這裡寫登陸時顯示的信息
acl squid_user proxy_auth REQUIRED

# 網絡控制,http_access是按順序執行的
# 如果是通過stunnel中轉監聽squid的端口,可以把localnet註釋掉
# 另外,本例中使用了用戶認證,並且"http_access allow squid_user"在localnet之前,也就是默認所有用戶都需要認證,因此也可以將localnet註釋掉,無需定義
acl all src all
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
# acl localnet src 10.0.0.0/8
# acl localnet src 172.16.0.0/12
# acl localnet src 192.168.0.0/16
acl manager proto cache_object
acl purge method PURGE
acl Safe_ports port 80 21 443 563 70 210 280 488 591 777 1025-65535
acl SSL_ports port 443
acl CONNECT method CONNECT

http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access allow squid_user
# http_access allow localnet
http_access deny all

# 匿名設置,隱藏自己的真實ip
# squid 3.0以上header_access改為request_header_access
header_access From deny all
header_access Server deny all
header_access Link deny all
header_access Via deny all
header_access X-Forwarded-For deny all

# 禁止緩存項目於緩存項目存在時間
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex -i cgi-bin .php$ .asp$ .shtml$ .cfm$ .cfml$ .phtml$ .php3$ localhost
cache deny QUERY
refresh_pattern ^ftp: 1440 20% 10080 reload-into-ims
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i .(gif|png|jp?g|ico|bmp|tiff?)$ 10080 95% 43200 override-expire override-lastmod reload-into-ims ignore-no-cache ignore-private
refresh_pattern -i .(rpm|cab|deb|exe|msi|msu|zip|tar|xz|bz|bz2|lzma|gz|tgz|rar|bin|7z|doc?|xls?|ppt?|pdf|nth|psd|sis)$ 10080 90% 43200 override-expire override-lastmod reload-into-ims ignore-no-cache ignore-private
refresh_pattern -i .(avi|iso|wav|mid|mp?|mpeg|mov|3gp|wm?|swf|flv|x-flv|axd)$ 43200 95% 432000 override-expire override-lastmod reload-into-ims ignore-no-cache ignore-private
refresh_pattern -i .(html|htm|css|js)$ 1440 75% 40320
refresh_pattern -i .index.(html|htm)$ 0 75% 10080
refresh_pattern . 1440 90% 10080

# 緩存內存值,根據實際情況調整,一般不要超過三分之一的總內存
cache_mem 128 MB
# 设置置換策略和缓存目录大小为5000MB,一级目录为16个,二级目录为256个,這裡的緩存儲存方式為aufs,默認為ufs
memory_replacement_policy heap GDSF
cache_replacement_policy heap LFUDA
cache_dir aufs /var/squid/cache 5000 16 256
coredump_dir /var/squid/cache

maximum_object_size_in_memory 32 KB
maximum_object_size 128000 KB
cache_swap_low 90
cache_swap_high 95

# 下面是关于日志文件的放置目录与文件名
access_log /var/squid/logs/access.log  
cache_log /var/squid/logs/cache.log  
cache_store_log /var/squid/logs/cache_store.log  
pid_filename  /var/squid/logs/squid.pid

# 主機名稱、管理員和squid用戶組,proxy是默認的用戶組
visible_hostname yourhostname
cache_mgr admin
cache_effective_user proxy
cache_effective_group proxy
httpd_suppress_version_string on

# DNS
dns_timeout 10 seconds
dns_nameservers 8.8.8.8 8.8.4.4

# IP緩存的設置值
ipcache_size 1024
ipcache_low 90
ipcache_high 95
fqdncache_size 1024

# 一些優化設置
half_closed_clients off
client_persistent_connections off

memory_pools off
client_db off
reload_into_ims on
coredump_dir /cache
pipeline_prefetch on
offline_mode off

forward_timeout 240 second
connect_timeout 30 second
peer_connect_timeout 5 second
read_timeout 600 second
request_timeout 60 second
shutdown_lifetime 10 second

這個配置綜合參考了以下兩個網頁提供的配置:

[1] Ubuntu Server Guide. How to Install and Configure Proxy Server with Squid3 on Ubuntu Server 12.04 LTS. http://ubuntuserverguide.com/2012/05/how-to-install-and-configure-proxy-server-with-squid3-on-ubuntu-server-12-04-lts.html
[2] Feiyang. Squid 优化简谈. http://blog.chinaunix.net/uid-21868571-id-159016.html

小內存VPS的幾個優化措施

1 Mysql

Mysql是消耗內存的大戶,輕輕鬆鬆可以上100M的內存,讓小內存VPS十分汗顏,編輯mysql的配置文件

vim /etc/mysql/my.cnf

更改以下幾項配置:

[mysqld]
key_buffer = 16K
max_allowed_packet = 1M
table_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 64K
default-storage-engine=MyISAM

不要簡單地複製粘貼,逐項找到配置修改,如原配置沒有則手動添加。

另外,如果mysql的數據庫服務僅僅本機使用,則可以註釋掉skip-external-locking這一項配置改成skip-networking,增加兼容性和安全性,改成這樣:

# skip-external-locking
skip-networking

此外,還可以在[mysqld]中添加這麼一條:

skip-innodb

不過個要注意的是,如果數據庫已經有存在並使用的數據庫添加skip-innodb之後可能會報錯,要將數據庫的表重建一下才可以。

最後重啓mysql:

/etc/init.d/mysql restart

2 Stack Size

在/etc/security/limits.conf裡加入這樣一行:

www-data        hard    stack            256

同時在/etc/pam.d/common-session裡面加入:

session required    pam_limits.so

這樣可以極大降低nginx栈的大小,這樣修改可能Wordpress的郵件系統會出問題,可以適當調整256這個值的大小,比如到1024。

最後重啓下服務器即可。

本文參考了以下網頁:

[1] Dave. Reducing memory usage. https://forum.ramhost.us/bbs/viewtopic.php?id=195
[2] Ramnet. MySQL – Reducing Memory Usage. https://forum.ramhost.us/bbs/viewtopic.php?id=19

從源代碼編譯Squid使之支持https代理

Debian系統下用aptitude安裝的預編譯的squid軟件包並不支持https代理,如需要使用SSL加密的https代理則需要通過stunnel來實現。其實squid很早就開始支持https加密代理了,只是一般預編譯的軟件包都沒有加入–enable-ssl這個參數。我們可以自己從源代碼編譯安裝squid,使之實現這一功能,這樣就不需要通過stunnel來中轉了。

1 編譯安裝squid

1.1 準備編譯環境

sudo aptitude install build-essential zlib1g-dev libssl-dev

因為編譯打開的選項比較多,可能還需要很多其他的依賴包,用這個命令一次搞定這些依賴包:

sudo aptitude build-dep squid

1.2 開始編譯

下載源代碼,squid3目前性能一般,我們還是編譯squid 2.7的穩定版:

cd /usr/src
wget http://www.squid-cache.org/Versions/v2/2.7/squid-2.7.STABLE9.tar.gz
tar zxvf squid-2.7.STABLE9.tar.gz
cd squid-2.7.STABLE9

root環境下,開始編譯源代碼:

./configure --prefix=/usr --exec_prefix=/usr --bindir=/usr/sbin --sbindir=/usr/sbin --libexecdir=/usr/lib/squid --sysconfdir=/etc/squid --localstatedir=/var/spool/squid --datadir=/usr/share/squid --enable-async-io --with-pthreads --enable-storeio=ufs,aufs,coss,diskd,null --enable-linux-netfilter --enable-arp-acl --enable-epoll --enable-removal-policies=lru,heap --enable-snmp --enable-delay-pools --enable-htcp --enable-cache-digests --enable-referer-log --enable-useragent-log --enable-auth=basic,digest,ntlm,negotiate --enable-negotiate-auth-helpers=squid_kerb_auth --enable-carp --enable-follow-x-forwarded-for --with-large-files --with-maxfd=65536 --enable-ssl --with-openssl

其中“–with-openssl=/usr/include/openssl”是openssl的安裝位置,根據實際情況作調整。另外,本次編譯所打開的選項與安裝位置跟debian官方源中的squid包一致,只是增加了SSL加密的功能,因此編譯安裝後的目錄與操作跟從官方源安裝的squid一樣。

如果沒有報錯,編譯後安裝即可:

make
make install

使用SSL加密代理,squid的配置文件中这么设置:

https_port 443 cert=/etc/squid/ssl.crt key=/etc/squid/ssl.key

“cert=”, “key=”的位置填入證書的實際位置即可。其他配置可以參看這篇日誌:Squid的配置說明

1.3 编译ncsa_auth

如需要使用squid的ncsa_auth認證功能,還需要編譯ncsa_auth程序

cd helpers/basic_auth/NCSA
make
cp ncsa_auth /usr/lib/squid

具體認證方式可以參看這篇日誌:設置squid的訪問密碼

2 Squid的自動啟動腳本

從源代碼編譯的squid在系統重新啓動後不會自動啓動,我們需要編輯一個自動啟動腳本,同樣是root環境下:

vim /etc/init.d/squid

插入以下配置:

#! /bin/sh
#
# squid		Startup script for the SQUID HTTP proxy-cache.
#
#
### BEGIN INIT INFO
# Provides:          squid
# Required-Start:    $network $remote_fs $syslog
# Required-Stop:     $network $remote_fs $syslog
# Should-Start:      $named
# Should-Stop:       $named
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Squid HTTP Proxy
### END INIT INFO

NAME=squid
DAEMON=/usr/sbin/squid
LIB=/usr/lib/squid
PIDFILE=/var/run/$NAME.pid
SQUID_ARGS="-D -YC"

[ ! -f /etc/default/squid ] || . /etc/default/squid

. /lib/lsb/init-functions

PATH=/bin:/usr/bin:/sbin:/usr/sbin

[ -x $DAEMON ] || exit 0

grepconf () {
	w=" 	" # space tab
	sq=/etc/squid/squid.conf
	# sed is cool.
	res=`sed -ne '
		s/^'$1'['"$w"']\+\([^'"$w"']\+\).*$/\1/p;
		t end;
		d;
		:end q' < $sq`
	[ -n "$res" ] || res=$2
	echo "$res"
}

grepconf2 () {
	w=" 	" # space tab
	sq=/etc/squid/$NAME.conf
	# sed is cool.
	res=`sed -ne '
		s/^'$1'['"$w"']\+[^'"$w"']\+['"$w"']\+\([^'"$w"']\+\).*$/\1/p;
		t end;
		d;
		:end q' < $sq`
	[ -n "$res" ] || res=$2
	echo "$res"
}

#
#	Try to increase the # of filedescriptors we can open.
#
maxfds () {
	[ -n "$SQUID_MAXFD" ] || return
	[ -f /proc/sys/fs/file-max ] || return 0
	global_file_max=`cat /proc/sys/fs/file-max`
	minimal_file_max=$(($SQUID_MAXFD + 4096))
	if [ "$global_file_max" -lt $minimal_file_max ]
	then
		echo $minimal_file_max > /proc/sys/fs/file-max
	fi
	ulimit -n $SQUID_MAXFD
}

start () {
	cdr=`grepconf2 cache_dir /var/spool/$NAME`
	ctp=`grepconf cache_dir ufs`

	case "$cdr" in
		[0-9]*)
			log_failure_msg "squid: squid.conf contains 2.2.5 syntax - not starting!"
			log_end_msg 1
			exit 1
			;;
	esac

	#
    # Create spool dirs if they don't exist.
    #
	if [ -d "$cdr" -a ! -d "$cdr/00" ] || [ "$ctp" = "coss" -a ! -w "$cdr" ]
	then
		log_warning_msg "Creating squid cache structure"
		$DAEMON $SQUID_ARGS -z
	fi

	if [ "$CHUID" = "" ]; then
		CHUID=root
	fi

	maxfds
	umask 027
	start-stop-daemon --quiet --start \
		--pidfile $PIDFILE \
		--chuid $CHUID \
		--exec $DAEMON -- $SQUID_ARGS < /dev/null
	return $?
}

stop () {
	PID=`cat $PIDFILE 2>/dev/null`
	start-stop-daemon --stop --quiet --pidfile $PIDFILE --name squid
	#
	#	Now we have to wait until squid has _really_ stopped.
	#
	sleep 2
	if test -n "$PID" && kill -0 $PID 2>/dev/null
	then
		log_action_begin_msg " Waiting"
		cnt=0
		while kill -0 $PID 2>/dev/null
		do
			cnt=`expr $cnt + 1`
			if [ $cnt -gt 24 ]
			then
				log_action_end_msg 1
				return 1
			fi
			sleep 5
			log_action_cont_msg ""
		done
		log_action_end_msg 0
		return 0
	else
		return 0
	fi
}

case "$1" in
    start)
	log_daemon_msg "Starting Squid HTTP proxy" "squid"
	if start ; then
		log_end_msg $?
	else
		log_end_msg $?
	fi
	;;
    stop)
	log_daemon_msg "Stopping Squid HTTP proxy" "squid"
	if stop ; then
		log_end_msg $?
	else
		log_end_msg $?
	fi
	;;
    reload|force-reload)
	log_action_msg "Reloading Squid configuration files"
	$DAEMON -k reconfigure
	log_action_end_msg 0
	;;
    restart)
	log_daemon_msg "Restarting Squid HTTP proxy" "squid"
	stop
	if start ; then
		log_end_msg $?
	else
		log_end_msg $?
	fi
	;;
    status)
	status_of_proc -p "$PIDFILE" "$DAEMON" squid && exit 0 || exit $?
	;;
    *)
	echo "Usage: /etc/init.d/$NAME {start|stop|reload|force-reload|restart|status}"
	exit 3
	;;
esac

exit 0

更改權限,加入系統自動啟動服務:

chmod 755 /etc/init.d/squid
insserv -v -d /etc/init.d/squid

更新:

1、如果是在ubuntu 12.04等openssl版本為1.0以上的系統中編譯會出錯,因為openssl 1.0開始已經不支持SSLv2,可以手動安裝0.98版本的libssl-dev和libssl包,詳情看這篇日誌:「Squid編譯過程中關於SSLv2出错的問題

本文參考了以下網頁:

[1] squid-cache.org. Squid configuration directive https_port. http://www.squid-cache.org/Doc/config/https_port/
[2] squid-cache wiki. Compiling Squid. http://wiki.squid-cache.org/SquidFaq/CompilingSquid

設置Squid的訪問密碼

為Squid設置訪問密碼需要用到兩個組件,一個是squid自帶的ncsa_auth,一個是apache的htpasswd。如果是在debian下用aptitude安裝的squid 2.7版ncsa_auth的位置是/usr/lib/squid/ncsa_auth,如果是源代碼編譯安裝的squid需要自己編譯這個程序。

如果服務器上已經安裝了apache,那已經可以使用htpasswd了,如果沒有,則安裝apache2-utils這個包即可:

sudo aptitude install apache2-utils

安裝apache2-utils之後,即可使用htpasswd來生成用戶名密碼:

htpasswd -c /etc/squid/password user

輸入密碼,這樣便新建了user這個用戶了。用戶名和密碼信息保存在/etc/squid/password,再創建新的用戶的時候就不需要再使用-c 這個參數了。

然後在squid的配置文件加入以下配置信息:

auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/password
auth_param basic children 5
auth_param basic realm Hello!# 這裡輸入squid登陸框的歡迎信息

acl squid_user proxy_auth REQUIRED
http_access allow squid_user

最後重啓squid即可。

Debian上架設Spdy Proxy代理服務

1 安裝Node.js

debian上安裝node.js的穩定版需要從源代碼編譯,root環境下,先安裝編譯所必要的軟件包

aptitude install python g++ make

然後下載源代碼並編譯:

cd /usr/src
mkdir ./nodejs && cd $_
wget -N http://nodejs.org/dist/node-latest.tar.gz
tar xzvf node-latest.tar.gz && cd `ls -rd node-v*`
./configure
make install

ubuntu下安裝node.js則相對簡單,無需編譯,添加一個源並安裝即可,同樣是root環境:

aptitude install python-software-properties
add-apt-repository ppa:chris-lea/node<b>.</b>js
aptitude update
aptitude install nodejs npm

2 安裝spdy proxy

安裝好node.js之後,安裝spdy proxy只需一個命令就可以了

npm install -g spdyproxy

然後就是準備證書了,還是推薦startssl.com申請免費的ssl證書,啟動使用如下命令:

spdyproxy -k ssl.key -c ssl.crt -p 44300 -U username -P password
# -k 後是私鈅,-c 簽署好的證書,用絕對路徑,防止出錯
# -p 後是端口,-U -P分別是用戶名和密碼

如果需要後台運行可以用nohup來實現:

nohup spdyproxy -k ssl.key -c ssl.crt -p 44300 -U username -P password &

如需指定日誌的輸出位置則:

nohup spdyproxy -k ssl.key -c ssl.crt -p 44300 -U username -P password > spdy.log 2>&1 &

這樣就有了一個端口為44300的SSL加密代理了,國內推薦用Chrome+SwitchySharpWhtielist PAC使用。

已知問題:

1、貌似spdy proxy執行效率不高,訪問vimeo.com的時候經常會卡頓,此時服務器對其他請求的響應也會非常緩慢,換了幾個vps都這樣(包括內存比較大的kvm vps)。因此還是推薦squid+stunnel的方式。

本文參考了以下網頁:

[1] Joyent. Installing Node.js via package manager. https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager
[2] Ilya Grigorik. node-spdyproxy. https://github.com/igrigorik/node-spdyproxy

Squid+Stunnel實現SSL加密代理

服務器環境是ramhost LA機房,kvm,debian 6.0,内存较小,256MB

1 squid的安裝與配置

1.1 安裝squid

sudo aptitude install squid

debian下使用上述命令安裝的squid是2.7版本,ubuntu下則是的squid3,debian如果需要安裝squid3,則需用下面的命令安裝,兩者配置可能不同。

sudo aptitude install squid3

squid的默認配置文件註釋非常豐富,有幾千行,有需要可以仔細閱讀,備份保存,並修改權限予以保護,方便日後查閱:

sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.old
sudo chmod a-w /etc/squid/squid.conf.old

1.2 squid的配置

下面是一個簡單的squid configuration的配置文件,因為主要是用來結合stunnel實現加密代理,遠程不直接連接squid的http代理,所以只保留本機連接。

vim /etc/squid/squid.conf

輸入以下配置:

# 端口
http_port 3128

# 網絡控制
acl all src 0/0
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl Safe_ports port 80 21 443 563 70 210 280 488 591 777 1025-65535
acl SSL_ports port 443
acl CONNECT method CONNECT

http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all

hierarchy_stoplist cgi-bin ?

# 緩存內存值
cache_mem 64 MB

# 允許最小文件請求  
minimum_object_size 0 KB
# 允許最大文件請求  
maximum_object_size 4096 KB
cache_swap_low 90
cache_swap_high 95

# 設置緩存目錄大小為2048MB,根據實際情況設定,一般來說,每GB緩存需要消耗10MB內存。squid本身還要消耗約15MB內存,加上前面配置的內存緩存,在本例中大約需要10*2+15+64=99MB的內存。squid標准配置推薦服務器本身的內存至少是這個總消耗內存的一倍。
cache_dir ufs /var/squid/cache 2048 16 256
coredump_dir /var/squid/cache

# 相關日誌
access_log /var/squid/logs/access.log
cache_log /var/squid/logs/cache.log
cache_store_log /var/squid/logs/cache_store.log
pid_filename  /var/squid/logs/squid.pid

# 哪些不缓存  
acl QUERY urlpath_regex cgi-bin .php .cgi  
cache deny QUERY

# 主機名稱
visible_hostname yourhostname

# IP緩存的設置值
ipcache_size 1024
ipcache_low 90
ipcache_high 95

1.3 配置squid的緩存目錄並啟動

新建squid的緩存目錄、日誌目錄,這兩個目錄可以根據實際情況設置,但需於上述配置文件匹配。

sudo mkdir /var/squid
cd /var/squid
sudo mkdir cache logs

squid默認的用戶組是proxy,更改目錄歸屬使squid進程可以讀取寫入:

chown -R proxy:proxy /var/squid

檢查配置文件是否有錯:

sudo squid -k parse

如果沒有任何提示的話,則配置文件正確,如有提示出錯,則做相應調整。

初始化cache目錄,並啟動squid服務

sudo squid -z
sudo squid

2 stunnel的安裝、配置

利用stunnel實現ssl加密需要有相關證書,可以在startssl.com申請免費證書,也可以自己製作,自己製作的證書本地也需要倒入相關證書。

2.1 安裝stunnel

sudo aptitude install stunnel

stunnel是通過/etc/init.d/stunnel4來啟動的,修改stunnel4配置文件,允許stunnel自動啟動

sudo vim /etc/default/stunnel4

將ENABLED=0後的值改為1,保存退出:

ENABLED=1

2.2 配置stunnel並啟動

sudo vim /etc/stunnel/stunnel.conf

將配置文件改成:

; 在這裡配置證書和私鈅的位置,如果證書和私鈅已經合成一個文件則將key那一行註釋掉
cert = /etc/stunnel/ssl.crt
key = /etc/stunnel/ssl.key

; 加密方式 (all, SSLv2, SSLv3, TLSv1)
sslVersion = SSLv3

chroot = /var/lib/stunnel4/
setuid = stunnel4
setgid = stunnel4
pid = /stunnel4.pid

socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
socket = l:SO_LINGER=1:1
socket = r:SO_LINGER=1:1
compression = zlib

client = no ;作為服務端,如果是客戶端則為yes

[squid]
accept = 443 ;stunnel的連接端口,不要於本機其他進程使用的端口衝突
connect = 3128 ;squid的端口,於squid的配置匹配
TIMEOUTclose = 0 ;這條很重要,如沒有,有些頁面響應會非常慢

配置文件中其他諸如[pop3s]等不需要的連接方式可以全部註釋掉,保存退出,並啟動服務:

sudo /etc/init.d/stunnel4 restart

至此利用ssl加密的https代理服務器就假設好了。

3 如何使用SSL加密代理

3.1 WebVPN方式

比較推薦這種方式,因為目前我們的網絡生活90%以上在瀏覽器中,尤其推薦Chrome瀏覽器。

Chrome很早開始就支持https proxy了,利用Chrome + SwitchySharp + WhiteList最為方便。具體方法不在此敘述,可以參看以下幾個網頁:

White List:https://github.com/n0wa11/gfw_whitelist

WebVPN比較詳細的一個介紹:http://n0wa11.github.com/blog/Using-Chrome-and-WebVPN-to-Learn-Scaling-GFW-in-5-Minutes.html

3.2 解密stunnel,轉化為本地代理

MAC系統可以使用GoAgentX,下載地址:https://github.com/ohdarling/GoAgentX/wiki

GoAgentX是一個很棒的軟件。項目主頁在此:https://github.com/ohdarling/GoAgentX

本文參考了以下網頁:

[1] 鳥哥. 區網控制者:Proxy 伺服器. http://linux.vbird.org/linux_server/0420squid.php
[2] Paveo. 用 Stunnel 保护隐私. https://w3.owind.com/pub/%E7%94%A8-stunnel-%E4%BF%9D%E6%8A%A4%E9%9A%90%E7%A7%81/