分类目录归档:Ubuntu

Stunnel构建加密隧道

最新版本可到:http://www.stunnel.org/downloads.html下载,Stunnel工作过程就是在客户端和服务端之间建立一条加密通道,所有Stunnel有两个工作模式,默认工作模式是服务端,如果需要作为客户端,那么就是需要使用client=yes来指定。客户端加密数据需要一个证书(可以自签发),服务端需要私钥,以解密数据,这个工作过程就是HTTPS的工作流程。

一般使用yum或者apt-get安装即可。

##############################################
###
apt-get update
apt-get install openssl

###
apt-get install stunnel

#开机启动,ENABLED改为1
vi /etc/default/stunnel4
ENABLED=1

#
cd /etc/stunnel
vi stunnel.conf

[squid]
accept = 4041 
connect = 127.0.0.1:4040
cert = /etc/stunnel/stunnel.pem

#产生证书 私钥 - 实际就是产生一对RSA秘钥,公钥在证书中
openssl genrsa -out key.pem 2048
openssl req -new -x509 -key key.pem -out cert.pem -days 3650
cat key.pem cert.pem >> /etc/stunnel/stunnel.pem

#启动
/etc/init.d/stunnel4 restart


##############################################
## 客户端
client = yes
[squid]
accept = 127.0.0.1:4444
connect = [服务端IP]:4041
cert = D:/stunnel.pem

添加监控脚本:

cat stunnel.sh 
#!/bin/bash

live=`ps -efH | grep '/usr/bin/stunnel' | grep -v 'grep' | wc -l`
if [ $live -eq 0 ]; then
    /usr/bin/stunnel 2>&1 >> /dev/null
fi

Windows下下载一个GUI工具:
stunnel

默认Stunnel以服务器为工作模式,所以在作为客户端时务必添加client = yes。

对于客户端,可以开启多个端口,分别指向多个代理:

client = yes
cert= E:/var/stunnel.pem

[fq1]
accept = 4441
connect = 47.90.x.43:4041

[fq2]
accept = 4442
connect = 47.90.x.152:4041

[fq3]
accept = 4443
connect = 47.90.x.140:4041

[fq4]
accept = 4444
connect = 47.90.x.215:4041

Ubuntu 软件安装

Ubuntu基于Debian发行版和GNOME桌面环境,而从11.04版起,Ubuntu发行版放弃了Gnome桌面环境,改为Unity,与Debian的不同在于它每6个月会发布一个新版本。

Ubuntu 12.04和14.04桌面版与服务器版都有5年支持周期。而之前的长期支持版本为桌面版3年,服务器版5年。

版本号
代号
发布时间
15.04 Vivid Vervet
14.10 Utopic Unicorn 2014/10/23
14.04 LTS Trusty Tahr 2014/04/18
13.10 Saucy Salamander 2013/10/17
13.04 Raring Ringtail 2013/04/25
12.10
Quantal Quetzal
2012/10/18
12.04 LTS
Precise Pangolin
2012/04/26
11.10
Oneiric Ocelot
2011/10/13
11.04(Unity成为默认桌面环境)
Natty Narwhal
2011/04/28
10.10
Maverick Meerkat
2010/10/10
10.04 LTS
Lucid Lynx
2010/04/29
9.10
Karmic Koala
2009/10/29
9.04
Jaunty Jackalope
2009/04/23
8.10
Intrepid Ibex
2008/10/30
8.04 LTS
Hardy Heron
2008/04/24
7.10
Gutsy Gibbon
2007/10/18
7.04
Feisty Fawn
2007/04/19
6.10
Edgy Eft
2006/10/26
6.06 LTS
Dapper Drake
2006/06/01
5.10
Breezy Badger
2005/10/13
5.04
Hoary Hedgehog
2005/04/08
4.10(初始发布版本)
Warty Warthog
2004/10/20
Ubuntu历史版本一览表

对于桌面应用,我们可以使用其最新的发布版本,但是对于服务器,我们主要关注LTS版本,目前(2016年)还被支持的LTS版本有12.04和14.04和最新发布的16.04, 12.04会在17年停止支持。按照惯例,LTS版本发布后,没过一段时间(大约周期视乎是6个月),会发布一个积累了之前更新的版本,命名格式为12.04.1(第二个点之后编号1,2,3….)。注意每个版本的发布,都有一个代号(以水果名称命名)。

官方发布:http://releases.ubuntu.com/
国内镜像:http://mirrors.aliyun.com/ubuntu-releases/
http://mirrors.163.com/ubuntu-releases/

系统离不开应用软件,Ubuntu提供了许多的软件包,它使得应用软件的安装非常便利。最常用的安装软件的工具是apt(Advanced Packaging Tool),它类似RedHead系列系统中的yum。apt使用/etc/apt/sources.list文件中定义的来源来安装软件,模板:

#14.04LTS trusty
deb http://mirrors.aliyun.com/ubuntu trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu trusty-backports main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu trusty-backports main restricted universe multiverse

在这个文件中,deb关键字用来定义已编译的软件包的来源,deb-src关键字用来定义源码包的来源:

deb(或deb-src)	网络地址	主版本代号 软件仓库1  软件仓库2 .....

如果不需要源码包,可以把deb-src的行注释。

Ubuntu的软件主版本代号trusty,trusty-security,trusty-updates,trusty-backports,这里的trusty对应的就是14.04 LTS,如果是12.04 LTS对应的就是Precise。

Ubuntu的软件仓库分为4个部分,分别是main restricted universe和multiverse。第一部分main的软件包是自由软件,Ubuntu提供完全支持。第二部分restricted的软件包,不是完全的自由软件,但是应为这些软件包被广泛使用,所以Ubuntu也提供支持。第三部分universe的软件包,Ubuntu官方不提供支持。最后一部分multiverse软件包,是非自由软件。

修改了sources.list文件,需要运行apt-get update才能使之生效。

如果在Precise下,安装的软件可能比较旧,可以修改sources.list文件,让其指定到更新的版本,比如trusty。如果这样做,那么很多依赖的软件包可能会被更新,而且某些软件无法安装到最新的版本。在某个版本下,为了可以安装到最新的某个软件包,可以使用Ubuntu提供的PPA。

Personal Package Archives,个人软件包档案,Ubuntu Launchpad网站提供的一项源服务,允许个人用户上传软件源代码,通过Launchpad进行编译并发布为2进制软件包,作为apt/新立得源供其他用户下载和更新。

安装使用PPA上的软件,过程:
1 首先到https://launchpad.net/+ppa搜索软件包(比如搜索PHP)
search_ppa_php
2 进入详细页,根据说明添加这个PPA源到系统
add_ppa_to
选择对应的版本,然后编辑source.list文件添加:

deb http://ppa.launchpad.net/ondrej/php5/ubuntu trusty main 
deb-src http://ppa.launchpad.net/ondrej/php5/ubuntu trusty main 

然后运行apt-get update就完成添加。也可以运行一条命令:

add-apt-repository ppa:ondrej/php5

这里的ppa:ondrej/php5就是这个PPA软件包的名称(冒号之后的名称)。这个名称一般在详情页面有详细说明。

add-apt-repository ppa:ondrej/php5
You are about to add the following PPA to your system:
 This PPA contains latest PHP 5.5 packaged for Ubuntu 14.04 LTS (Trusty).

You can get more information about the packages at https://deb.sury.org

If you need other PHP versions use:
  PHP 5.4: ppa:ondrej/php5-oldstable (Ubuntu 12.04 LTS)
  PHP 5.5: ppa:ondrej/php5 (Ubuntu 14.04 LTS)
  PHP 5.6: ppa:ondrej/php5-5.6 (Ubuntu 14.04 LTS - Ubuntu 16.04 LTS)
  PHP 5.6 and PHP 7.0: ppa:ondrej/php (Ubuntu 14.04 LTS - Ubuntu 16.04 LTS)

BUGS&FEATURES: This PPA now has a issue tracker: https://deb.sury.org/pages/bugreporting.html

PLEASE READ: If you like my work and want to give me a little motivation, please consider donating: https://deb.sury.org/pages/donate.html

WARNING: add-apt-repository is broken with non-UTF-8 locales, see https://github.com/oerdnj/deb.sury.org/issues/56 for workaround:

# apt-get install -y language-pack-en-base
# LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php5
 More info: https://launchpad.net/~ondrej/+archive/ubuntu/php5
Press [ENTER] to continue or ctrl-c to cancel adding it

gpg: keyring `/tmp/tmpXJxwwj/secring.gpg' created
gpg: keyring `/tmp/tmpXJxwwj/pubring.gpg' created
gpg: requesting key E5267A6C from hkp server keyserver.ubuntu.com
gpg: /tmp/tmpXJxwwj/trustdb.gpg: trustdb created
gpg: key E5267A6C: public key "Launchpad PPA for xx imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
OK

从这个输出来看,就仅导入了公钥。实际上它还往/etc/apt/sources.list.d里面写入了一个文件(ondrej-php5-precise.list):

vi ondrej-php5-precise.list
deb http://ppa.launchpad.net/ondrej/php5/ubuntu precise main
deb-src http://ppa.launchpad.net/ondrej/php5/ubuntu precise main

这些文件会和source.list文件进行合并。然后运行apt-get update之后就可以安装这个PPA软件了。相比CentOS下到处找第三方的YUM源相比,PPA提供了一个集中的方式,让我们可以更加容易的找到需要的软件包。

安装PHP实例:

#安装PHP源
add-apt-repository ppa:ondrej/php
apt-get update

#搜索
apt-cache search php
apt-cache search php5.6
apt-cache search php7

#列表
php7.0-common - documentation, examples and common module for PHP
php7.0-cgi - server-side, HTML-embedded scripting language (CGI binary)
php7.0-cli - command-line interpreter for the PHP scripting language
php7.0-fpm - server-side, HTML-embedded scripting language (FPM-CGI binary)
php7.0-dev - Files for PHP7.0 module development
php7.0-curl - CURL module for PHP
php7.0-enchant - Enchant module for PHP
php7.0-gd - GD module for PHP
php7.0-gmp - GMP module for PHP
php7.0-imap - IMAP module for PHP
php7.0-interbase - Interbase module for PHP
php7.0-intl - Internationalisation module for PHP
php7.0-ldap - LDAP module for PHP
php7.0-mcrypt - libmcrypt module for PHP
php7.0-readline - readline module for PHP
php7.0-odbc - ODBC module for PHP
php7.0-pgsql - PostgreSQL module for PHP
php7.0-pspell - pspell module for PHP
php7.0-recode - recode module for PHP
php7.0-snmp - SNMP module for PHP
php7.0-tidy - tidy module for PHP
php7.0-xmlrpc - XMLRPC-EPI module for PHP
php7.0-xsl - XSL module for PHP (dummy)
php7.0-json - JSON module for PHP
php7.0-sybase - Sybase module for PHP
php7.0-sqlite3 - SQLite3 module for PHP
php7.0-mysql - MySQL module for PHP
php7.0-opcache - Zend OpCache module for PHP
php7.0-bz2 - bzip2 module for PHP
php7.0-bcmath - Bcmath module for PHP
php7.0-mbstring - MBSTRING module for PHP
php7.0-soap - SOAP module for PHP
php7.0-xml - DOM, SimpleXML, WDDX, XML, and XSL module for PHP
php7.0-zip - Zip module for PHP
php7.0-dba - DBA module for PHP

#确认安装的软件包
dpkg -l | grep php
CentOS
Ubuntu
软件包后缀 *.rpm *.deb
软件源配置文件 /etc/yum.conf /etc/apt/sources.list
更新软件包列表 每次yun时自动执行 apt-get update
从软件仓库中安装软件 yum install package apt-get install package
安装一个已下载的软件 yum install pkg.rpm
rpm -i pkg.rpm
dpkg -i pkg.deb
删除软件包
rpm -e package
apt-get remove package
软件包升级检查
yum check-update
apt-get -s upgrade
升级软件包
yum update
apt-get upgrade
升级整个系统
yum upgrade
apt-get dist-upgrade
获取某软件包的信息(搜索)
yum search package
apt-cache show package
apt-cache search package
获取所有软件包的信息
yum list available
apt-cache dumpavail
显示所有已安装的软件
yum list installed
rpm -qa
dpkg -l
dpkg –list
获取某个已安装软件信息
yum info package
rpm -qi package
dpkg –status packages
获取文件列表
rpm -ql package
dpkg –listfile package
dpkg -L package
显示依赖列表
rpm -qR package
apt-cache depends package
显示反向依赖(被依赖)
rpm -q -whatrequires [args]
apt-cache rdeprends package
搜索文件有哪个软件包提供
rpm -qf /file/name
dpkg -S /file/name
dpkg –search /file/name
Ubuntu CentO 对照表

关于自动启动:
Ubuntu控制软件启动的方式,就是SystemV哪套,所有系统服务都保存在/etc/init.d下面,这里面的实际就是一个个Shell脚本。Ubuntu默认运行级别是2,在/etc/rcN.d中(N代表运行级别,比如2,就是rc2.d),如果在这个级别需要启动就会对应一个软连接到/etc/init.d下的脚本,格式是SxxName(xx表示顺序);如果需要关闭就会对应一个软连接到/etc/init.d下的脚本,格式是KxxName(xx表示顺序)。由此可见,服务的启动关闭是顺序执行的。

由于顺序执行的缺陷,Ubuntu自己搞了一套基于事件驱动的服务启动方式,所有需要开机启动的服务,都会放入到/etc/init下,格式xxx.conf。查看一个例子:

cat ssh.conf 
# ssh - OpenBSD Secure Shell server
#
# The OpenSSH server provides secure shell access to the system.

description	"OpenSSH server"

start on runlevel [2345]
stop on runlevel [!2345]

respawn
respawn limit 10 5
umask 022

env SSH_SIGSTOP=1
expect stop

# 'sshd -D' leaks stderr and confuses things in conjunction with 'console log'
console none

pre-start script
    test -x /usr/sbin/sshd || { stop; exit 0; }
    test -e /etc/ssh/sshd_not_to_be_run && { stop; exit 0; }

    mkdir -p -m0755 /var/run/sshd
end script

# if you used to set SSHD_OPTS in /etc/default/ssh, you can change the
# 'exec' line here instead
exec /usr/sbin/sshd -D

这个配置里面,明确了这个服务需要运行的级别。另外,可以在/etc/default/xxx中放入一些所谓的默认值。大概就是这么个意思了。

由于有两套方式,所以Ubuntu是兼容这两套方式的,A没有就检查B。

很不幸的是,在Ubuntu16.04中,Ubuntu放弃了自己的那套事件驱动的服务启动方式,开始使用Systemd(CentOS7 中也使用它)。