我以为的远方是一回首就是故乡

作者:荒原之梦

当熟悉的场景出现在异乡陌生的梦里
一只小狗的命运主宰了整个剧情的发展

大地长出的浮雕
成了用于交易的创造
在那个光怪陆离的世界
当一条街道成了一个准则
一碗面条也成了一种象征

梦里的人啊
从未意识到自己就是那个世界的主宰
或许主宰从不属于他所主宰的世界
只有从梦中醒来
才会意识到梦的荒诞

一条路
两个方向
看啊
地球是那样优美的圆
上帝早已原谅了那些走错方向的你我
无论走向哪一个方向
都会回到故乡

000webhost虚拟主机绑定自定义二级域名

作者:荒原之梦

前言:

最近想给导航狗IT信息导航做一个文件服务器专门存放文件,以提供引用或下载。于是,我在000webhost上申请了一台免费虚拟主机,并给这个虚拟主机空间绑定了一个导航狗的二级域名 files.daohanggou.wang .
000webhost提供两种绑定域名的方式,分别是”Park domain”和”Point domain”. 根据000webhost官网的介绍,这两种设置自定义域名的方式适用的情景如下:
Park domain – Park domain to 000webhost nameservers. When you want to access your website without www (Recommended)
Point domain – Have a domain name, but do not want to change namservers. When you want to have full control of your DNS zone
经测试,Park domain的方式无法绑定二级域名,下面是使用Point domain的方式绑定自定义二级域名的过程。

前期准备:

1 拥有一个顶级域名

本文中使用的域名是在阿里云(万网)注册的。
阿里云网址:https://www.aliyun.com

2 拥有一台虚拟主机

本文中使用的是在000webhost注册的免费虚拟主机。
000webhost网址:https://www.000webhost.com

具体步骤如下:

1 设置解析

登陆阿里云,依次打开:
“控制台->域名与网站(万网)->域名”
找到我们要设置二级域名的顶级域名,点击“解析->添加解析”。
解析参数如下:

2 添加域名

登陆000webhost,点击”Set web address”
这时会弹出一个提示你购买域名的窗口,由于我们希望绑定自己已有的二级域名,所以点击”It’s OK, I don’t mind 000webhost branding”
之后,我们会看到”Own domain”和”Buy domain”两个按钮, 点击”Own domain”默认的是进行”Park Domain”操作,但是Park domain并不支持绑定二级域名,而且如果要绑定顶级域名还需要将域名的DNS服务器设置成000webhost提供的DNS服务器。所以,我们向下滚动页面,找到”Add domain”,点击打开,选中”Point domain”, 在”Domain”的输入框里填入第一步设置好解析的二级域名,例如:
点击”Save”
至此,自定义的二级域名已经绑定了虚拟主机,可以使用自定义二级域名访问了,例如:
文件服务器-导航狗IT信息导航:http://files.daohanggou.wang/

远程代码仓库URL地址变更后本地仓库的配置方法

作者:荒原之梦
今天修改了一个远程仓库的项目名称,导致Git仓库的地址发生了变化,Push代码时显示”Git仓库找不到“。
下面是远程仓库地址变更后本地仓库的配置方法:
进入本地仓库根目录,右键打开Git Bash,输入:
至此,本地仓库完成仓库地址配置更新。

Windows上使用Thunderbird与GPG发送和解密公钥加密的电子邮件

作者:荒原之梦

非对称加密的原理:

最先出现的加密方法是对称加密。在对称加密算法中是不区分公钥和私钥的,加密与解密使用的都是同一个密码。但是很显然,如果需要对信息进行加密与解密的不是同一个人,使用对称加密算法就存在密钥泄露的极大可能。因此,一种非对称加密的想法在1974年最先由Ralph C. Merkle提出。目前主要的非对称加密算法有:RSA、EIGamal、ECC、背包算法和D-H公钥加密算法等。

1.公钥加密信息的工作过程:

A使用公钥加密算法创建一个自己的公钥A-1和私钥A-2。私钥A-2由A自己保管,不对外公开。公钥A-1则通过一些可信的渠道公布出去,例如使用了HTTPS的网页(这里之所以强调“HTTPS”是因为HTTPS协议对传输的信息做了加密,如果将公钥放在使用HTTP协议的网页上,由于HTTP是明文传输网页数据的,因此在传输的过程中有可能因为遭遇中间人攻击等而出现公钥被修改的可能。前文提到“可信的渠道”也是出于此原因。)、公钥服务器或者面对面传递公钥。B在拿到A的公钥A-1后,如果B想给A发送加密信息就可以使用公钥A-1进行加密后再发送给AA收到加密信息后使用自己知道的,与公钥A-1对应的私钥A-2解密B发来的加密信息。

上述信息加密过程的一个应用就是本文接下来要介绍的发送使用公钥加密的电子邮件并用对应的私钥解密该邮件。公钥加密算法还有一个应用就是用于身份认证,即数字签名技术。

 

2.数字签名的工作过程:

传统的签名可以通过签字人笔迹的唯一性确定信息的所有者。在计算机系统中,我们使用公钥加密算法进行数字签名。首先,仍然是生成一对公钥和私钥,公钥公布,私钥私有,但是这一次私钥不是用来解密的,而是用于加密的。由于私钥的与公钥具有数学上的关联性(虽然公钥与私钥具有相关性,但是使用目前主流的非对称加密算法并且在密钥长度足够复杂的情况下还没有找到破解这种关联性的有效的方法。20180210日注),即一个公钥只对应一个私钥,只要一份文件可以通过一个公钥解密,那么在一般情况这份文件就是由这个公钥所对应的私钥的持有者加密的。这样就可以进行身份认证。

总结一下:

信息加密中,公钥加密,私钥解密;

数字签名中,私钥加密,公钥解密;

无论信息加密还是数字签名都是:公钥公开,私钥保密。

 

前期准备:

  1. 下载和安装Thunderbird。

Thunderbird下载地址:https://www.mozilla.org/en-US/thunderbird/

  1. Thunderbird上登陆一个电子邮件帐号。
  2. 如果想对电子邮件加密技术有一个大致的了解,可以参考我的这篇博文:电子邮件加密技术初探

本文要用到的工具的介绍:

1.Thunderbird

这是一个邮件客户端,有很多插件可以使用,支持WindowsLinuxmacOS.

2.GPG

GPGGnuPG,是由自由软件基金会Free Software Foundation 开发的用于替代商业软件PGP的一款免费软件,可以用来加密数据以及进行数字签名。PGP中使用了具有专利的算法,不能免费使用,而GPG中则没有使用具有专利的算法,可以免费使用。

3.Enigmail
EnigmailThunderbird的一个插件,可以对将要发送的邮件进行GPG公钥加密或对收到的使用GPG加密的邮件进行解密。

发送公钥加密的电子邮件的过程如下:

1.下载安装GPG并创建密钥对
GPG
官网下载地址:https://www.gnupg.org/download/index.html

或者也可以使用Gpg4winGpg4win官网:https://www.gpg4win.org/index.html

本文中使用的是Gpg4win.

Gpg4win安装完成后在默认情况下会打开Kleopatra,点击“创建密钥对”。

输入名字和邮箱,依次点击:下一步>创建

创建的过程中会要求设置一个密码以保护将要生成的私钥,这样可以防止私钥被越权使用。
稍等一会我们就可以看到“密钥对已成功创建”的窗口提示。在该窗口里我们还可以看到密钥指纹(密钥指纹可以用来验证密钥在传输的过程中是否被修改。指纹的另一个重要用途就是,由于公钥服务器并不会对上传的公钥进行身份验证,因此任何人都可以以你的名义上传公钥,为了防止这种情况发生,你可以在你的个人主页上公布自己的密钥指纹,以提供给下载了你的公钥的人用于验证公钥的真伪。)以及“生成您的密钥对副本”、“通过电子邮件发送公钥”和“将公钥上传到目录服务”(如果将公钥上传到了公钥服务器,不同的公钥服务器之间会相互交换公钥,最终你上传到一台公钥服务器上的公钥会遍布全网所有公钥服务器。之后,任何人都可通过该公钥对应的电子邮件地址或者密钥ID查找对应的公钥,从而向我们发送加密信息)这三个选项。

密钥对创建完成后,我们可以在Kleopatra中看到刚才创建的项目,选中该项目可以导出“.asc”格式的公钥,右键可以进行“更改到期日期”等更多操作。

2.在Thunderbird中搜索安装插件Enigmail并配置密钥文件
关于在Thunderbird中安装插件的步骤,可以参考我的这篇文章Windows上设置Mozilla Thunderbird邮件客户端后台运行

 

打开Thunderbird的设置,依次找到 Enigmail->Key Management->File->Import Keys from File 可以导入某个邮箱地址的公钥文件或者在搜索框中通过输入邮箱地址或密钥ID在公钥服务器上搜索对应的公钥。如果已使用GPG创建密钥对的电子邮件地址已经登陆了Thunderbird可以直接在Key Management里看到相关信息,不需要进行密钥文件配置。

安装Enigmail后,如果我们的Thunderbird上的一个邮箱账户没有设置GPG公钥,当我们使用该账户发信时就会弹出如下的警报:

这种情况下,除非对该账号设置GPG公钥或者卸载Enigmail,否则就无法在发送邮件时解除该警报,也无法在Thunderbird上使用该账号发送邮件。

3.发送加密电子邮件
假设我们需要向AAA@AAA.AAA这个电子邮件地址发送GPG加密邮件,首先应该使用第二步介绍的方法导入AAA@AAA.AAA对应的公钥文件(该文件将用于加密邮件),或者通过邮件地址AAA@AAA.AAA或对方的密钥ID在公钥服务器上搜索其公钥,搜索到的公钥需要进行指纹验证以确保该公钥不是伪造的。
当我们第一次使用一个已经设置
GPG公钥的电子邮件地址向另外一个具有GPG公钥的电子邮件地址发送邮件时会弹出确认提示:

点击 Configure ,选中 Enable OpenPGP support (Enigmail) for this identity ,点击 OK . 之后会弹出窗口询问我们是想使用GPG进行加密还是进行身份认证以及使用哪种GPG加密方式:

这里我们选择 Encrypt Message  Use PGP/MIME ,点击 OK .

在发送邮件之前,我们可以通过点击工具栏上的小锁在加密与不加密之间切换。

 

4.解密收到的加密电子邮件

假设我们的一个邮箱地址BBB@BBB.BBB接收到一封GPG加密的电子邮件(该邮件使用的是BBB@BBB.BBB的公钥进行的加密),那么,我们就可以在安装有GPG软件的电脑上(且该电脑上存储有BBB@BBB.BBB的私钥)使用邮件客户端,通过输入BBB@BBB.BBB的私钥加密密码的方式解密该邮件。在网页端登陆邮箱,需要配合插件来解密GPG加密的邮件。

1:前面设置密钥对时设置的密码并不是私钥,而是加密私钥的密码,仅仅使用该密码是不可以解密邮件的,必须配合私钥文件一起才能解密。

2GPG加密的邮件并不会加密邮件地址和标题。

Git Push:error: Couldn’t set refs/remotes/origin/master;error: update_ref failed for ref ‘refs/remotes/origin/master’:

作者:荒原之梦

今天使用Git Push代码时产生错误:

输入 y 还会重复出现上述提示,输入 n 则会出现下面的错误提示:
error: Couldn't set refs/remotes/origin/master error: update_ref failed for ref 'refs/remotes/origin/master':
不过,虽然出现了如上错误提示,但是代码是可以正确Push到远程仓库的。

问题解决过程:

进入 .git/refs/remotes/origin 目录:
发现并没有 master.lock 这个文件,所以想到是否可以通过创建 master.lock 这个文件解决问题,输入:
创建 master.lock .
经测试,问题解决。

RedHat 7.0及CentOS 7.0禁止Ping的三种方法(附:ICMP数值类型与功能表)

作者:荒原之梦
前言:
“Ping”属于ICMP协议(即“Internet控制报文协议”),而ICMP协议是TCP/IP协议的一个子协议,工作在网际层。ICMP协议主要用于传输网络是否连通、主机是否可达以及路由是否可用等控制信息。Ping可以回显TTL生存时间,网络延迟等信息,而且响应Ping请求也会消耗服务器资源。因此,在服务器上禁用ICMP响应可以尽可能的隐藏服务器在Internet上的踪迹,降低受攻击面。本文介绍三种方法禁用(或启用)ICMP响应,即禁止(或允许)Ping.

操作环境:

RedHat 7.0(CentOS 7.0的操作方法与此一致)

方法一 临时禁用ICMP协议

修改文件 /proc/sys/net/ipv4/icmp_echo_ignore_all 的值。
切换到root,输入命令:
这样就将 /proc/sys/net/ipv4/icmp_echo_ignore_all 文件里面的 0 临时改为了 1 ,从而实现禁止ICMP报文的所有请求,达到禁止Ping的效果,网络中的其他主机Ping该主机时会显示“请求超时”,但该服务器此时是可以Ping其他主机的。
如果想启用ICMP响应,则输入:

 

注0:由于 /proc/sys/net/ipv4/icmp_echo_ignore_all 这个文件是只读的,即使我们使用root用户登陆,vim打开 /proc/sys/net/ipv4/icmp_echo_ignore_all ,将里面的 0 该为 1 之后使用 qw! 强制保存也无法完成修改。因此上面这个方法只是临时的,一旦服务器重启就又会回到默认的 0 状态(假设修改前 /proc/sys/net/ipv4/icmp_echo_ignore_all 里面的值就是 0 )。如果想永久修改(当然也可以改回来,只是不再受服务器关机或重启的影响)请使用方法二或方法三。

方法二 永久禁用ICMP协议:

禁用ICMP协议,输入:

 

添加一条信息:
保存并退出。
输入:
使配置生效。
启用ICMP协议,输入:

 

将:

 

修改为:

 

如果没有 net.ipv4.icmp_echo_ignore_all = 1 就添加:
保存并退出。
输入:
使配置生效。
注1:如果想启用ICMP响应,不能直接在 /etc/sysctl.conf 里删除 net.ipv4.icmp_echo_ignore_all = 1 之后 sysctl -p . 这样做仍然是禁止Ping的状态,此时使用命令: vim /proc/sys/net/ipv4/icmp_echo_ignore_all 查看发现其值仍然是 1 , 即仍处于拒绝ICMP响应的状态。

方法三 配置IPTABLES防火墙

Iptables防火墙是集成于Linux内核的IP信息包过滤系统。方法三不能和上面的方法一和方法二组合使用。即,在使用方法三时不能已经使用方法一或方法二禁止了Ping.
禁止Ping,输入:

 

停止禁用Ping,输入:

 

上面两条命令的简要解释:


 

注2:由于方法三是对防火墙进行的设置,所以使用方法三禁止Ping后只会阻止来自外网的Ping请求,内网主机的Ping请求仍然会正常响应。使用方法一和方法二禁止Ping后不仅会阻止外网的Ping请求也会阻止内网的Ping请求。
注3:ICMP数值类型与功能表
Type
Code
Description
Query
Error
0
0
Echo Reply
x
3
0
Network Unreachable
x
3
1
Host Unreachable
x
3
2
Protocol Unreachable
x
3
3
Port Unreachable
x
3
4
Fragmentation needed but no frag. bit set
x
3
5
Source routing failed
x
3
6
Destination network unknown
x
3
7
Destination host unknown
x
3
8
Source host isolated (obsolete)
x
3
9
Destination network administratively prohibited
x
3
10
Destination host administratively prohibited
x
3
11
Network unreachable for TOS
x
3
12
Host unreachable for TOS
x
3
13
Communication administratively prohibited by filtering
x
3
14
Host precedence violation
x
3
15
Precedence cutoff in effect
x
4
0
Source quench
5
0
Redirect for network
5
1
Redirect for host
5
2
Redirect for TOS and network
5
3
Redirect for TOS and host
8
0
Echo request
x
9
0
Router advertisement
10
0
Route solicitation
11
0
TTL equals 0 during transit
x
11
1
TTL equals 0 during reassembly
x
12
0
IP header bad (catchall error)
x
12
1
Required options missing
x
13
0
Timestamp request (obsolete)
x
14
Timestamp reply (obsolete)
x
15
0
Information request (obsolete)
x
16
0
Information reply (obsolete)
x
17
0
Address mask request
x
18
0
Address mask reply