ubuntu 搭建邮件服务器

自己有域名的话,就可以搭建自己的邮件服务器。当然,一般来说,许多人或者公司都会把邮件服务通过smtp代理解析的形式挂靠在163,126,网易,腾讯企业邮箱的服务器上,自己只需提供域名即可使用邮件服务.这样通常邮件收发的稳定性和一些功能,如账号管理,附件上传缓存等服务都有比较大的优势,缺点也很明显,可以使用的免费的邮箱账号通常很少,不超过50个,如果想要开设更多账号,则需要交纳一定费用

此教程在于搭建一个多域名隔离,虚拟用户的邮箱系统。

网上许多教程都说只搭建postfix和dovecot即可,但是事实上,如果只使用默认的postfix,dovecot的配置,是极其不方便的,一方面,邮箱用户严格和linux下的用户挂钩,想多创建用户,则需要不停的新建linux用户,维护成本极高,而且,用户和所有email域名关联,假如解析了2个mx域名到同一个服务器,则一个用户等于同时拥有2个域名的邮箱,且内部的存储空间共享,会导致邮件混作一团,不能有效区分隔离。

不多说,进入正题:

先安装lamp环境 sudo apt-get install php7.2 mysql apache2 libapache2-mod-php7(支持apache解析php的模块)

sudo service start apache2 mysql 启动apache,mysql(apache,mysql本地初始化配置自行百度)

sudo apt-get install postfix postfix-mysql dovecot-pop3d dovecot-imapd dovecot-mysql dovecot-core 安装postfix, dovecot

注意 postfix会让你选择邮件服务的类型,选择 internet site

说明:

No configuration 表示不要做任何配置;
Internet Site 表示直接使用本地SMTP服务器发送和接收邮件;
Internet with smarthost 表示使用本地SMTP服务器接收邮件,但发送邮件时不直接使用本地SMTP服务器,而是使用第三方smart host来转发邮件;
Local only 表示邮件只能在本机用户之间发送和接收。

一般ubuntu下可能会默认以sendmail作为邮件发送的内置服务,我们要用postfix代替它

netstat -tunlp | grep 25 查看25端口是否被sendmail占用,如果是,则kill掉,然后

sudo service start postfix ,dovecot分别启动postfix(占用25端口,用来发邮件),dovecot(占用110端口,用来收邮件)

安装 postfixadmin web管理工具

wget http://nchc.dl.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-2.93/postfixadmin-2.93.tar.gz

解压

tar -zxvf postfixadmin-2.93.tar.gz

然后移到

mv postfixadmin-2.93 /var/www/postfixadmin

配置apache

vim /etc/apache2/sites-enabled/000-default.conf

<VirtualHost *>
        ServerName postfix.你的域名
        ServerAlias  postfix.你的域名
        DocumentRoot /var/www/postfixadmin/
        Alias / /var/www/postfixadmin/
        <Directory "/var/www/postfixadmin/">
                RewriteEngine on
                RewriteCond %{REQUEST_FILENAME} !-f
                RewriteCond %{REQUEST_FILENAME} !-d
                RewriteRule . index.php
                Require all granted
        </Directory>
        ErrorLog /data/logs/apache/postfix.你的域名-error_log
</VirtualHost>

cd /var/www/postfixadmin/

vim config.inc.php 编辑

$CONF['configured'] = true; //已配置
$CONF['default_language'] = 'cn'; //语言
$CONF['database_type'] = 'mysql'; //数据库类型
$CONF['database_host'] = 'localhost'; //数据库地址
$CONF['database_user'] = 'postfix'; //数据库用户
$CONF['database_password'] = 'postfix'; //数据库密码
$CONF['database_name'] = 'postfix'; //数据表名
$CONF['encrypt'] = 'dovecot:CRAM-MD5'; //邮箱密码加密方式
$CONF['dovecotpw'] = "/usr/bin/doveadm pw"; //加密脚本路径
$CONF['domain_path'] = 'YES'; //域名路径
$CONF['domain_in_mailbox'] = 'NO';
$CONF['aliases'] = '1000'; // 别名数
$CONF['mailboxes'] = '1000';  // 邮箱数
$CONF['maxquota'] = '1000';  // 最大邮件空间容量
$CONF['fetchmail'] = 'NO';
$CONF['quota'] = 'YES';
$CONF['used_quotas'] = 'YES';
$CONF['new_quota_table'] = 'YES';

:wq 保存

mkdir templates_c # 创建缓存目录 chown -R apache:apache templates_c 如果有了,则忽略此步骤

sudo service apache2 restart 重启apache

然后chrome访问 postfix.你的域名/setup 进入初始化安装目录

安装页
设置setup的密码

如果出错了,请查看apache error log,排查问题原因,如权限,配置问题

设置管理员密码

添加域名

新增域名

添加邮箱地址

新增邮箱地址

到这里,postfix admin就配置好了

注意: 以上创建域 和 用户 等 其实都是存储在数据库当中,并非真是存在的用户。 所以我们需要通过配置postfix 和 dovecot 通过读取数据库中的信息来完成配置。

由于dns解析我直接使用的阿里云,则无需搭建dns域名解析服务器。配置一个a 记录来解析 mail 前缀到你的服务器ip,然后配置一个mx记录解析到 mail.你的域名 即可,不懂可以自行百度

配置postfix

必须要有一个linux用户来作为邮件用户,且uid,gid 必须大于等于1000.

  • groupadd -o -g 1000 vmail
  • useradd -r -u 1000 -g 1000 -d /var/spool/mail/vmail -c “Virtual mail user” vmail

配置/etc/postfix/main.cf

queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
# 配置主机名等信息
myhostname = mail.你的域名
mydomain = 你的域名
myorigin = $mydomain
# 配置监听端口
inet_interfaces = all
inet_protocols = ipv4
# 配置接受的域列表。 注意这里绝对不能添加与虚拟域相同的域名。否则会导致邮件无法发送。
# mydestination = $myhostname, localhost.$mydomain, localhost 这个需要注释掉,否则无法支持虚拟用户
unknown_local_recipient_reject_code = 550 # 拦截邮件的返回状态码
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
home_mailbox = Maildir/
smtpd_banner = $myhostname ESMTP $mail_name
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.10.1/samples
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES
# 以下是虚拟用户配置
# 设置postfix 读取和写入是的uid 和 gid
virtual_gid_maps = static:1000
virtual_uid_maps = static:1000
# 虚拟域, 这里配置通过mysql来实现。 这里指定的文件 后面就会创建
virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf
# 虚拟域中,的别名设置
virtual_alias_maps =
proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf,
proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf,
proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
# 虚拟域中,用户邮箱设置
virtual_mailbox_maps =
proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf,
proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
# 设置基本路径。 上面查询到的邮箱地址是相对的。所以需要设置基本路径来确认邮箱位置。
virtual_mailbox_base = /var/mail/vmail
# 以上的这些虚拟化配置其实还可以简化为如下。同样可以使用,但是缺少了别名的功能
#virtual_gid_maps = static:1000
#virtual_uid_maps = static:1000
#virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf
#virtual_mailbox_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf
#virtual_mailbox_base = /var/mail/vmail

# 用户认证配置。 smtp 可以不用设置用户认证。也能使用
# 拒绝非正常的客户端
broken_sasl_auth_clients = yes
# 启用sasl认证
smtpd_sasl_auth_enable = yes
# 配置认证方式为dovecot
smtpd_sasl_type = dovecot
# 配置认证套接字的相对路径
smtpd_sasl_path = private/auth
# 配置拒绝规则
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination,reject_unknown_sender_domain
# permit_mynetworks 允许本地网络发送邮件
# permit_sasl_authenticated 允许通过认证的用户发送邮件
# reject_unauth_destination 拒绝不是发往本地的邮件
# reject_unknown_sender_domain 拒绝未知发件域名

然后我们通过postfixadmin提供的脚本生成以上虚拟域所需要的文件
切换到postfix的安装目录,执行如下命令

sudo -s

/bin/bash -c ‘bash POSTFIX_CONF.txt’

会有提示 输入信息,如数据库,用户名,密码,输入后会生成配置文件,在/tmp/下 ,如/tmp/postfixadmin-D4SIxG

将配置文件拷贝到postfix安装目录下

mkdir -p /etc/postfix/sql

cp /tm/postfixadmin-D4SIxG/* /etc/postfix/sql/

配置dovecot

postfixadmin 也提供了的 dovecot的配置方法:DOCUMENTS/DOVECOT.txt 如果我的配置没有看懂可以选择查看

先配置第一个文件dovecot.conf

protocols = pop3 imap # 开启pop3 和 imap 服务
listen = * # 监听ipv4端口
然后配置第二个文件conf.d/10-auth.conf

disable_plaintext_auth = no # 设置关闭强制加密认证
auth_mechanisms = plain login # 设置认证方法
#!include auth-system.conf.ext # 注释使用auth-system的认证方式
!include auth-sql.conf.ext # 使用auth-sql的认证方式
配置第三个文件conf.d/10-mail.conf

mail_location = maildir:/var/mail/vmail/%d/%n # 设置邮箱格式
first_valid_uid = 2000 # 设置读取和写入的uid 下面使gid
first_valid_gid = 2000
配置第三个文件conf.d/10-ssl.conf

ssl = no # 取消ssl加密 注释下面内容
#ssl_cert = #ssl_key = 配置第四个文件conf.d/10-master.conf

unix_listener /var/spool/postfix/private/auth { # 为postfix 提供认证服务套接字
mode = 0666 # 设置权限
user = postfix # 设置属主
group = postfix # 设置属组
}
配置第五个文件dovecot-sql.conf.ext

driver = mysql # 设置驱动为mysql
default_pass_scheme = MD5-CRYPT # 设置加密方法为MD5
connect = host=localhost dbname=postfix user=postfix password=postfixadmin # 设置连接参数
password_query = SELECT username AS user,password FROM mailbox WHERE username = ‘%u’ AND active=’1′ # 设置查询密码的sql语句
user_query = SELECT CONCAT(‘/var/mail/vmail/’, maildir) AS home, 1000 AS uid, 1000 AS gid, CONCAT(‘*:bytes=’, quota) AS quota_rule FROM mailbox WHERE username = ‘%u’ AND active=’1′ # 设置查询用户和邮箱的sql语句

重启postfix,dovecot,如果没成功,则sudo tail -f /var/log/mail.err mail.log 查看报错信息。排除错误即可

常见的错误:

1, /etc/postfix/mian.cf 里面有重复配置的属性,需要去掉多余的 重启postfix

2,warning:hash:/etc/aliases is unavailable.open database /etc/aliases.db:NO such file or directory.

则 vim /etc/aliases 添加一行abc:ABC 保存,然后执行newaliases,就会生成/etc/aliases.db 这个文件,重启postfix

3,error: unsupported dictionary type: mysql ,需要安装postfix-mysql sudo apt-get install postfix-mysql 即可

4,can’t encrypt password with dovecotpw, see error log for details,安装dovecot-mysql dovecot-core, 则/usr/bin/doveadm 可执行文件就会存在了,路径要写对

5,fatal: bind 0.0.0.0 port 25: Address already in use 因为sendmail占用了25端口,杀掉sendmail的进程即可

通过分析mysql中postfix库的结构,发现只要往表mailbox插入记录,就相当于后台添加邮箱,所有insert into 批量插入即可。

收件箱的邮件默认存储在服务器的 /var/mail/vmail/email.域名/邮箱名/ 下

使用自己的邮箱发送1条邮件到postfix邮箱,然后 sudo cat /var/mail/vmail/email.域名/邮箱名/new/时间戳-jalfhlah 就能看到邮件内容

几乎白捡的vps

之前瞎几把逛github的时候

某个开源项目下面看到了一行字,说有1美刀一个月的vps

厂家:virmach.com(号称价格屠夫)

据说最便宜的2.5美刀/年,找了一下,没找到,就算有,估计很快也会被秒完

下面的目前都能买(已成功上车7美刀/年,没看错,是每年!!!,约46软妹币/年,真香)

相对于vultr3.5美刀/月,搬瓦工46美刀/年,已经实属美帝良心

内存CPUSSD流量价格购买
512M1核15G500G/月$7/年链接
768M1核20G750G/月$10/年链接
1G1核30G1T/月$14/年链接
2G2核50G2T/月$21/年链接
3G2核75G3T/月$28/年链接
4G2核100G4T/月$35/年链接
  • 网络测试:
  • 纽约市:http://lg.nyc.colocrossing.com/1000MB.test
  • 洛杉矶:http://lg.la.colocrossing.com/1000MB.test
  • 水牛城:http://lg.buf.colocrossing.com/1000MB.test
  • 芝加哥:http://lg.chi.colocrossing.com/1000MB.test
  • 达拉斯:http://lg.dal.colocrossing.com/1000MB.test
  • 圣何塞:http://lg.sj.colocrossing.com/1000MB.test(据说此节点最好,不过卖完了)
  • 西雅图:http://lg.sea.colocrossing.com/1000MB.test
  • 凤凰城:http://phx.lg.virmach.com/100MB.test
  • 亚特兰大:http://lg.atl.colocrossing.com/1000MB.test
  • 法兰克福:http://ffm.lg.virmach.com/1000MB.test
  • 阿姆斯特丹:http://ams.lg.virmach.com/100MB.tes

不过如果用ubuntu来装v2ray,要安装16.04的,(v2ray脚本最低支持16.04),系统安装版如果选错了,需要手动升级release,稍微麻烦了点罢了

手慢无

PS:后续发现这个vps做翻墙,偶尔会触发google机器验证,算是美中不足吧

常见后端开发规范(PHP)

今天主管要求我们每个人都上交一份代码开发规范,我百度了一下,很多说的都不是特别好,要么就太基础,不符合实际的开发过程,所以下面结合我这几年的开发感悟,写一点,如有错误,请指正,一定虚心接受:

代码:

  1. 变量定义:小写,采用蛇形命名法,简明达意,避开系统关键词
  2. 方法名:小写,采用蛇形命名法,简明达意,避开系统函数
  3. 类名:首字母大写,采用蛇形命名法(或命名空间),避开系统类名
  4. Oop编程,少堆无脑传参func, 多写注释,避免过度优化和冗余
  5. 编码基本规则遵循psr1~4即可
  6. 遵循基本设计模式,逻辑向上(历史)兼容性
  7. 工具类统一封装,如curl,excel,qrcode等,方便他人
  8. 数据库常量定义:区分类型(sql,nosql),主从,读写,缓存,使用类型等
  9. 尽量使用composer管理包文件
  10. Web请求禁止循环查询,禁止无法命中主要索引的大表关联查询,禁止使用sql处理主要代码逻辑
  11. 注意安全性问题,如注入,提权,流量攻击等
  12. 数据结构
    1. 对外接口
      1. 基本输出格式json:【‘data’,‘msg’,‘code’】
      2. 文档:定义必要请求字段,类型及说明,请求头header,请求方式post/get,返回字段,类型,说明
      3. 可能需要定义:版本号,加密方式(jwt),签名等
    2. 对内部数据提供
      1. 语言内,框架内:方法调用
      2. 跨语言/框架:rpc调用(如使用hprose)
      3. 所有请求走内网,禁止数据公网裸奔
  13. 命令行脚本查询需评估查询sql效率与资源占用,酌情考虑执行时间,单次查询命中数据过多需分页处理
  14. 注意缓存,异步,队列等中间件的使用,提高系统健壮性
  15. 使用git,切分支协作开发和版本管理
  16. 开发需注意上线时依次考虑: 合并分支,解决冲突,生产建表/增改字段,常量增/改,脚本执行,依赖安装,常驻服务(重新)启动,最后才能发布新代码
  17. 尽量保持一致的开发风格,让任何人都能快速接手,定位,处理其他人的代码

数据库设计:

  1. 库名:小写,项目名_db结尾,如shop_db
  2. 表名:小写,tb_表名(蛇形命名),如tb_user_guest
  3. 字段名:小写,尽量两个单词组合使用(蛇形命名),避开系统关键字,函数
  4. 除主键,添加/更新时间等常用字段外,其余字段必须设置注释(comment)
  5. 单表字段尽量不超过30个,并根据业务给予适当的类型和长度
  6. 唯一性高,常用查询字段(=)需设置索引(一般单表设置不超过5个索引),联合索引遵循最左原则
  7. 部分危险操作前需备份数据库/表(如脚本,sql批量刷新数据库/表内容)
  8. Nosql,空间换时间,搜索服务处理mysql无法处理的问题
  9. 隔离权限,禁止生产和测试环境数据服务器可互访问,避免产生脏数据

服务器:

  1. 主机名:遵循 功能-区域-编号 命名规则
    1. 功能:app-线上环境,dev-开发环境,qa-测试环境,beta-预发布环境,cache-缓存,bi-服务数据,cdn-内容分发,vpn-代理网关,db-数据,lb-负载均衡,dns-域名解析等
    2. 区域:上海-01,北京-02,杭州-03等
    3. 编号:一号机-001,二号机-002
    4. 示例:app-03-001代表:生产环境-杭州-一号机,vpn-02-005,代表:代理服务器-北京-五号机
  2. 域名、二级域名设计
    1. 简明达意,参考1-1如业务型shop.shuidi.cn,系统型bi.shuidi.cn
    2. 区分公/内网,如公网shop.shuidi.cn,内网shop.i.shuidi.cn 多了一个i,内部请求走内网域名
    3. 区分功能,如shop.dev.shuidi.cn, 同理qa-测试,beta-预发,生产环境一般不做特别声明
  3. 规范软件安装目录,版本,用户,权限(755,644或特别提出需要的权限足以,一般不给777和root)
  4. 谨慎处理服务器版本/软件版本升级,防止出现兼容性问题
  5. 开启服务器定期自动备份
  6. 定期清除非必要的垃圾日志,文件,缓存内容
  7. 开发需通过vpn才能访问服务器,设置复杂密码
  8. 公网端口按需开放,不需要的禁用
  9. 离职人员回收权限

Bug/log track:

  1. 规范服务器日志输出目录,日志结构,保存时长
  2. 规范业务日志的基本输出内容,如ip,from,keyword,type,content等
  3. Bug report 影响级别:b0,b1,b2 ,响应级别:p0,p1,p2
  4. 软件开发,测试,发布流程,版本和周期

白嫖免费的通配符ssl域名证书

let’encrypt 免费的ssl通配符证书提供服务商,致力于推广网络安全。

众所周知,没有ssl证书的网站,所有数据传输在网上都是明文的,相当于裸奔,容易被一些恶意的程序劫持,比如连接了不安全的wifi,从而造成个人密码,信息的泄漏。

如果从事后端开发,或者运维服务的同学都知道,一般云服务商都提供一些代理ssl证书购买服务,实际的证书提供商如赛门铁克,dc等等,证书从单域名到通配符域名,价格不等,通常单域名证书稍微便宜些,大约一年几百上千的样子,通配符证书一年要上万左右,而且通常需要技术人员手动一年一换,并不方便。同时,也有一些会提免费一年的单域名证书,但是出了问题的话并不理赔(与付费证书的区别)

首先说明单域名证书与通配符证书的区别:

单域名证书,顾名思义,只适用于单个二级域名,假设通常我们购买域名为:abc.com(姑且称其为一级域名,但并不准确,此处不讨论),然后通过域名解析,将blog.abc.com解析到了服务器地址,则blog.abc.com就是一个单域名,同理shop.abc.com也是一个单域名,都是二级域名,而所有的二级域名合在一起,就用*(通配符)来代替,blog和shop都属于*,所以单域名证书只对申请时指定的那个域名有效,而通配符证书,则对所有的二级域名生效。

举个例子:现在我申请了一个单域名证书blog.abc.com,那么,这个证书只能配置给blog.abc.com用,而如果给shop.abc.com使用,则浏览器会提示不安全,证书无效。但是,如果我申请了*.abc.com这个通配符证书,则都可以给blog.abc.com,shop.abc.com使用,一个搞定所有(能不能给123.blog.abc.com使用?似乎不行,这已经是三级域名了,域名分级以.为分隔,*只能管到下一级,不能管下下级,如果想管,同理申请*.blog.abc.com,反正阿里云的证书是这样)

安装 git clone https://github.com/letsencrypt/letsencrypt

下载完后,最好将此文件夹移到类似/usr/local/bin之类的系统文件夹,并给与高级权限,否则下面的命令可能无法执行成功

./certbot-auto certonly  -d *.你的域名 --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory

如果上面报错

OSError: Command /opt/eff.org/certbot/venv/bin/python2.7 - setuptools pip wheel failed with error code 1

解决问题

卸载virtualenv: pip  uninstall  virtualenv

再安装virtualenv : pip  install  virtualenv==15.1.0

输出

ackage gcc-4.8.5-36.el7_6.2.x86_64 already installed and latest version
Package augeas-libs-1.4.0-6.el7_6.1.x86_64 already installed and latest version
Package 1:openssl-1.0.2k-16.el7_6.1.x86_64 already installed and latest version
Package 1:openssl-devel-1.0.2k-16.el7_6.1.x86_64 already installed and latest version
Package libffi-devel-3.0.13-18.el7.x86_64 already installed and latest version
Package redhat-rpm-config-9.1.0-87.el7.centos.noarch already installed and latest version
Package ca-certificates-2018.2.22-70.0.el7_5.noarch already installed and latest version
Package python-devel-2.7.5-77.el7_6.x86_64 already installed and latest version
Package python-virtualenv-15.1.0-2.el7.noarch already installed and latest version
Package python-tools-2.7.5-77.el7_6.x86_64 already installed and latest version
Package python2-pip-8.1.2-8.el7.noarch already installed and latest version
Nothing to do
Creating virtual environment...
Installing Python packages...
Installation succeeded.
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): 531833XXX@qq.com

Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory

是否通用协议,选择是,那就是’A’

A

Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.

是否分享你的邮箱,否

N

NOTE: The IP of this machine will be publicly logged as having requested this
certificate. If you're running certbot in manual mode on a machine that is not
your server, please ensure you're okay with that.

询问是否对域名和机器(IP)进行绑定=>需要同意

Y

证书续签

注:证书在到期前30天才会续签成功,但为了确保证书在运行过程中不过期,官方建议每天自动执行续签两次;
使用crontab自动续期
···
crontab -e // 编辑定时任务
0 */12 * * * certbot renew –quiet –renew-hook “/etc/init.d/nginx reload”

(说明:–renew-hook是指,如果更新成功的回调,则重启nginx服务,因为替换证书需要重启服务后才生效,所以,如果使用了像apache,tomcat之类的服务,就改成对应的服务重启命令)

证书保存的路径[配置nginx需要用到的]

/etc/letsencrypt/live/you.cn/fullchain.pem
/etc/letsencrypt/live/you.cn/privkey.pem

取消证书

可以使用一下命令取消刚刚生成的密匙,也就是以上的反操作:

certbot revoke --cert-path /etc/letsencrypt/live/you.cn/cert.pem
certbot delete --cert-name you.cn

如果自动续签失败,可能是无法验证域名所有者的问题,需要添加dns验证记录,但是手动的话很麻烦,以下提供云服务商自动添加的机制

https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au

具体看readme

过了一段时间,证书又没更新= =,然后手动执行,发现爆如下错误:

Couldn’t download https://raw.githubusercontent.com/certbot/certbot/v1.11.0/letsencrypt-auto-source/letsencrypt-auto. <urlopen error [Errno 104] Connection reset by peer>

好吧gfw发威了

修改/etc/hosts

添加 199.232.4.133 raw.githubusercontent.com 即可

2021-1-7 发现,证书虽然是有效的,但是浏览器仍然提示不安全,即使重启nginx,依然不行,包括手机端访问也是如此,淦!

然后提示

Your system is not supported by certbot-auto anymore.

Certbot will no longer receive updates.

Please visit https://certbot.eff.org/ to check for other alternatives.

Saving debug log to /var/log/letsencrypt/letsencrypt.log

好吧,下载的certbot-auto已经不再支持我的系统(Ubuntu18.04 lts),让我访问https://certbot.eff.org/这个网站解决问题

第一步选择自己的webserver和系统,我选的nginx和Ubuntu18.04 lts

第二步,往下翻,按步骤的命令一步一步往下安装

即可

ubuntu 安装 shadowsocks

由于众所周知的原因,我们无法访问外网。so,当我们需要查阅一些资料(比如访问github,stackoverflow)时,就需要一些梯子

解决方法

一)使用第三方的工具

比如蓝灯什么的,啥也不需要操心,只要氪金就行了,缺点就是可能有流量限制,需要充值,偶尔有些不太靠谱的第三方服务随时可能不可用,甚至跑路。

二)做一个手艺人

去买个vps(一般不需要翻墙,最好选择支持支付宝和微信支付的),比如搬瓦工,vultr等

然后去控制台,选择安装ubuntu的linux发行版

ssh连接上以后

sudo apt-get install shadowsocks

vim /etc/shadowsocks/config.json

配置文件怎么弄网上一大堆

/etc/init.d/shadowsocks restart 启动服务

最后自己弄个什么客户端,比如andr,ios,macOs的客户端配置好,连接即可

最后。国外的vps实在是太容易被封了,也别买包年的,封了不划算的(别问我为啥这么说,痛的领悟你懂的),可以尝试买买阿里云的香港服务器,包月。

三)新一代FQ工具v2ray

首先得有一台vps,最好还有一个域名(无所谓备不备案,可以拯救已经被墙的vps)。

详细教程:https://iketao.cn/2020/02/06/1301/