kk Blog —— 通用基础


date [-d @int|str] [+%s|"+%F %T"]
netstat -ltunp
sar -n DEV 1

httpd apache index 显示文件名长度

https://www.cnblogs.com/cnmumian/p/12177676.html

通常情况下,文件名过长,打开index后,过长的文件名会最后会显示..

在centos中文件所谓位置 /etc/httpd/conf.d/httpd-autoindex.conf

在配置文件httpd-autoindex.conf中的修改:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
IndexOptions FancyIndexing HTMLTable VersionSort NameWidth=* FoldersFirst Charset=UTF-8 SuppressDescription SuppressHTMLPreamble

其中

FancyIndexing 支持美化显示;

HTMLTable 允许底层代码把文件列表生成在一个table元素里面;

VersionSort 安装版本排序;

NameWidth=* 页面自动匹配文件名宽度;

FoldersFirst 安装文件夹优先排列;

Charset=UTF-8 支持中文显示;

SuppressDescription 不显示文件描述;

https传输过程及原理

https://blog.csdn.net/m0_67373568/article/details/125332615

一、HTTPS

HTTP协议:超文本传输协议,明文传输,客户端与Web服务器间的应用层通信协议。

HTTPS协议:HTTP+SSL/TLS,即HTTP下加入SSL层,使用SSL加密,用于安全的HTTP传输,https默认使用端口443。

SSL:安全套接字层,位于可靠的面向连接的网络层协议。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。具有数据加密和身份验证的功能。

TLS:安全传输层协议、对SSL扩展和优化,提供数据安全的同时,确保数据的完整性。

https流程:

https作为一种安全的应用层协议,使用了以下三种加密手段:

数据正文数据量较大,适用于对称加密,因为对称加密速度快,适用于大量数据加密,但是安全级别低,密钥在网络中传输的过程中容易被窃取,所以对这个密钥进行非对称加密。

最后由于非对称加密的公钥在网络中传输,保证接收方接收到正确的公钥,使用证书验证:

1、客户端发送HTTPS请求。

2、服务器收到请求后,返回数字证书(数字签名+公钥)。

3、客户端验证证书是否合法(用服务端的公钥验签),不合法则提示警告。

4、验证合法后,本地生成密钥(对称加密密钥)并用服务端的提供的公钥加密后发送给服务端。

5、服务端用自己的私钥对数据解密,得到客户端密钥(对称加密密钥),再用客户端密钥对要发送的数据进行加密后发给客户端。

总结:

发送https请求后,先验证CA证书是否和好,再生成本地密钥(对称密钥),使用服务端公钥加密对称密钥再发送服务端。服务端用自己的私钥解密后,取得对称密钥,此时就可以数据传输了,服务端用对称密钥对请求数据加密,发送给客户端,客户端收到后用对称密钥解密拿到明文。

用基于数字证书的非对称加密 加密 对称加密的密钥后 加密传输数据。

一、加密方式

1、对称加密:

私钥加密,信息的发送方和接收方使用同一个密钥加密和解密数据。

2、非对称加密:

生成两把密钥公钥和私钥。私钥自己保存,公钥用于公开。可以用公钥和私钥中任何一个进行加密,另一个解密。

具体有两种情形:

(1)对方用你的公钥加密信息,你收到后用私钥解开。

只有你有私钥,所以只有你能解开,换句话说,有私钥才能看到信息,很安全。

(2)你拿私钥加密信息,对方收到后用你的公钥解开。

公钥是公开的,所以其他人也可以看到你的信息,不保密。

私钥加密,只有对应公钥能解开。既然用你的公钥能解开,说明加密一定是你的私钥。私钥只有你有,所以一定是你发送的,你不可抵赖。

这里的私钥加密指的是私钥签名,公钥验签

但是这样存在一个问题,窃听者也可以冒充客户端Bob给服务器Alice送信,因为Alice的公钥是公开的,这样就无法分辨哪个是真Bob的送信。

3、数字签名:

为了表明信息没有伪造,确实是信息拥有者发出。可以使用数字签名。

客户端Bob生成一对私钥、公钥。用自己的私钥对消息加密作为签名,再与消息一起发送,接收者用Bob的公钥验签。

窃听者窃取冒充Bob的签名篡改内容也没用,因为内容发生改变时,对应的签名也要重新计算,签名的生成必须使用私钥,只要私钥不泄露,签名就不会被冒充。

但是数字签名只是能验证发送方身份,未对报文进行加密。窃听者截取到密文并指定发送者的身份时,可通过查阅手册即可获得发送者的公钥PKA,就可以窃听报文的内容。

4、数字证书(公钥的数字签名):

发送方可以去证书中心CA为公钥做认证,证书中心用自己的私钥,对需要加密的公钥和一些相关信息一起加密,生成"数字证书"。

这样接收方就可以防止收到假的公钥,接收方收到带有数字证书的消息后,用CA的公钥先解开数字证书,就可以拿到发送方真实的公钥了。

5、非对称算法的数字签名:

即实现数字签名又加密传输,就可以使用A私钥签名B公钥加密的方法。

发送者使用自己的私钥对消息加密作为签名,再使用接收方的公钥对消息进行加密,接收方使用自己的私钥进行解密后,再对签名进行验签。

6、hash算法的数字签名(摘要+数字签名):

一般而言,不会直接对数据本身计算数字签名,因为数字签名属于非对称加密,非对称加密依赖于复杂的数学运算,耗时久。所以使用摘要,并且摘要最好是不可逆转的,一般使用开头MD5作为Hash函数,MD5输出的结果固定位128位。

并且要对数据的「摘要」进行签名,这样,窃听者就算解开签名,拿到的也是「摘要」,如果摘要是不可逆转的,也就是无法从摘要反推出原文,也就达到了保密的作用。

首先将原数据进行Hash计算,得到摘要,再对摘要私钥加密生成数字签名。再与原文件一起发送。接收方收到后先用A的公钥对数字签名解密得到摘要1,证明确实是A发送,再对原文进行相同的hash计算得到摘要2,再进行比较,一致则证明消息未被篡改过。

但是若是窃听者将自己的公钥换走了发送方的公钥,再冒充发送方给B发送消息,用自己的私钥做成假的签名,此时接收方无法判断哪个是真正的消息。

总结:

对称加密:同一个密码加密解密。

非对称加密:私钥加密,公钥解密或者私钥加密,公钥解密。

摘要:对消息hash计算生成摘要。

数字签名:私钥加密消息作为签名,再与源文件一起发送。

数字证书:证书中心对验签的公钥进行加密,生成数字证书。用CA的公钥解密得到加密的公钥。

hash算法的数字签名:对消息hash计算后再私钥加密生成数字签名。数字签名+原文件一起发送。接收方再进行比较。

非对称加密的数字签名:发送用私钥加密得到数字签名,再使用接收方的公钥加密原文,一起发送,接收方使用发送方的公钥验签,证明是本人发送,再使用私钥解密原文,进行比较。一致则未被篡改。

strongswan ipsec 配置

安装

1
2
3
4
setenforce 0

vim /etc/sysconfig/selinux
SELINUX=enforcing       =>      SELINUX=disabled

https://koji.fedoraproject.org/koji/packageinfo?buildStart=0&packageID=13302&buildOrder=-completion_time&tagOrder=name&tagStart=0#buildlist

ubuntu

sudo apt-get install strongswan-swanctl

vim /etc/swanctl/swanctl.conf

centos

yum install epel-release -y

yum install strongswan

vim /etc/strongswan/swanctl/swanctl.conf

版本

1、通用的配置文件为strongswan.conf,及strongswan.d目录下文件;

2、Used by swanctl and the preferred vici plugin: //推荐使用

需要配置swanctl目录下的文件。主要是swanctl目录下的swanctl.conf文件,如果你保持安装状态的swanctl.conf文件,则需要在swanctl/conf.d目录下增加新的配置文件,默认的swanctl/swanctl.conf文件会包含你新增的配置文件。

3、Used by starter and the deprecated stroke plugin: //过期,不推荐

3.1)配置ipsec.conf。

3.2)配置ipsec.secrets。

3.3)配置ipsec.d下的配置文件。

特别说明:当使用swanctl和starter工具时,需要的配置文件是完全不同的。 1的配置是必须,而2和3的配置你可以选择其中之一。

本文后述的配置均基于swanctl工具。

基本命令

1
2
3
4
5
6
7
8
9
10
echo 1 > /proc/sys/net/ipv4/ip_forward
ethtool -K eth0 gro off gso off tso off

service strongswan restart

swanctl --load-all
swanctl --list-conns
swanctl --list-sas

swanctl --initiate --child test_child
1
2
3
4
5
6
在执行 sudo swanctl --load-all 时,遇到
connecting to 'unix:///var/run/charon.vici' failed: Connection refused
Error: connecting to 'default' URI failed: Connection refused

择需要先执行
service strongswan restart

服务端转发上网

1
iptables -t nat -A POSTROUTING -s 100.64.0.0/24 -o eth0 -j MASQUERADE

官方配置样例

https://www.strongswan.org/testing/testresults/

网络拓扑

aliyun 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
include conf.d/*.conf

connections {
	# 防火墙主动连接aliyun可行
	# TODO aliyun主动连接防火墙失败???
	test {
		version = 2
		proposals = default
		local_addrs = 192.168.0.47
		remote_addrs = 2.2.2.2

		local {
			auth = psk
			id = 192.168.0.48
		}
		remote {
			auth = psk
			id = 2.2.2.2
		}
		children {
			test_child {
				local_ts = 172.17.0.0/24
				remote_ts = 192.168.120.0/24
				esp_proposals = default
			}
		}
	}

	# aliyun主动连接服务器,服务器需要改端口,不然和防火墙冲突,防火墙对端口做DNAT
	test178 {
		version = 2
		proposals = default
		local_addrs = 192.168.0.47
		local_port = 4500
		remote_addrs = 2.2.2.2
		remote_port = 4501

		local {
			auth = psk
			id = 119.23.222.240
		}
		remote {
			auth = psk
			id = 2.2.2.2
		}
		children {
			test178_child {
				local_ts = 172.17.0.0/24
				remote_ts = 192.168.100.0/24
				esp_proposals = default
			}
		}
	}

	# 家连接aliyun
	testh {
		version = 2
		proposals = default
		local_addrs = 192.168.0.47

		local {
			auth = psk
			id = 119.23.222.240
		}
		remote {
			auth = psk
			id = 192.168.0.105
		}
		children {
			testh_child {
				local_ts = 172.17.0.0/24
				remote_ts = 10.0.0.0/24
				esp_proposals = default
			}
		}
	}

	# 手机用 IPSEC IKEv2 PSK 连接aliyun
	tests7 {
		version = 2
		proposals = default
		local_addrs = 192.168.0.47
		pools = pool1

		local {
			auth = psk
			id = 119.23.222.240
		}
		remote {
			auth = psk
			id = 100.64.0.111
		}
		children {
			tests7_child {
				local_ts = 172.17.0.0/24
				#remote_ts = 100.64.0.0/24
				esp_proposals = default
			}
		}
	}

	# 失败。 手机用 IPSEC Xauth PSK 连接aliyun,手机的DH-group是modp1024, strongswan 从5.6.1开始取消了modp1024。。。
	# https://wiki.strongswan.org/versions/67
	tests77 {
		version = 1
		aggressive = yes
		proposals = default
		local_addrs = 192.168.0.47
		pools = pool1

		local {
			auth = psk
			id = 119.23.222.240
		}
		remote {
			auth = psk
			id = 100.64.0.111
		}
		remote-xauth {
			auth = xauth
		}
		children {
			tests77_child {
				local_ts = 172.17.0.0/24
				remote_ts = 100.64.0.0/24
				esp_proposals = default
			}
		}
	}

	# cp www.abcxyzkk.xyz_apache/root_bundle.crt /etc/strongswan/swanctl/x509ca/
	# cp www.abcxyzkk.xyz_apache/www.abcxyzkk.xyz.crt /etc/strongswan/swanctl/x509/
	# cp www.abcxyzkk.xyz_apache/www.abcxyzkk.xyz.key /etc/strongswan/swanctl/private/
	# EAP android 客户端 https://download.strongswan.org/Android/
	# EAP android 客户端 https://raw.githubusercontent.com/abcdxyzk/abcdxyzk.github.io_files/master/tools/vpn/strongSwan-2.3.3.apk
	# EAP 服务端转发上网 iptables -t nat -A POSTROUTING -s 100.64.0.0/24 -o eth0 -j MASQUERADE
	# echo 1 > /proc/sys/net/ipv4/ip_forward
	testEAP {
		version = 2
		proposals = default
		local_addrs = 192.168.0.47
		pools = pool1

		local {
			certs = www.abcxyzkk.xyz.crt
			id = www.abcxyzkk.xyz
		}
		remote {
			auth = eap-mschapv2
			id = %any
		}
		children {
			testEAP_child {
				#local_ts = 172.17.0.0/24
				local_ts = 0.0.0.0/0
				#remote_ts = 100.64.0.0/24
				esp_proposals = default
			}
		}
	}

	# window 用 SHREW IPSec VPN 客户端,https://www.shrew.net/download/vpn/vpn-client-2.2.2-release.exe
	# 只能用 ikev1,  https://raw.githubusercontent.com/abcdxyzk/abcdxyzk.github.io_files/master/tools/vpn/vpn-client-2.2.2-release.exe
	# 公司和阿里云可以连接,但是用手机热点不能连
	# 使用野蛮模式aggressive = yes 需要配置 vim /etc/strongswan/strongswan.d/charon.conf
	# i_dont_care_about_security_and_use_aggressive_mode_psk = yes
	test_window {
		version = 1
		# aggressive = yes
		proposals = default
		local_addrs = 192.168.0.47
		pools = pool1

		local {
			auth = psk
			id = 192.168.0.48
		}
		remote {
			auth = psk
			id = 220.160.201.164
		}
		children {
			test_child {
				# local_ts = 192.168.100.0/24
				local_ts = 0.0.0.0/0
				# remote_ts = 100.64.0.0/24
				esp_proposals = default
			}
		}
	}

}

secrets {
	ike-testh {
		id-vir = 192.168.0.105
		secret = abc123
	}
	ike-tests7 {
		id-vir = 100.64.0.111
		secret = abc123
	}
	ike-test {
		id-vir = 2.2.2.2
		secret = abc123
	}

	xauth-kk1 {
		id = kk1
		secret = 123
	}
	xauth-kk2 {
		id = kk2
		secret = 123
	}

	private-www {
		file = www.abcxyzkk.xyz.key
	}
	eap-user {
		id = kk3
		secret = 123
	}
}

pools {
	pool1 {
		addrs = 100.64.0.0/24
	}
}

TODO 连接防火墙不成功

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
include conf.d/*.conf

connections {

	# 家连接防火墙
	test {
		version = 2
		proposals = default
		local_addrs = 192.168.0.105
		remote_addrs = 119.23.222.240

		local {
			auth = psk
			id = 192.168.0.105
		}
		remote {
			auth = psk
			id = 119.23.222.240
		}
		children {
			test_child {
				local_ts = 10.0.0.0/24
				remote_ts = 172.17.0.0/24
				esp_proposals = default
			}
		}
	}

	# 家连接服务器
	testh {
		version = 2
		proposals = default
		local_addrs = 192.168.0.105
		local_port = 4500
		remote_addrs = 2.2.2.2
		remote_port = 4501

		local {
			auth = psk
			id = 192.168.0.105
		}
		remote {
			auth = psk
			id = 2.2.2.2
		}
		children {
			testh_child {
				local_ts = 10.0.0.0/24
				remote_ts = 192.168.100.0/24
				esp_proposals = default
			}
		}
	}
}

secrets {
	ike-test {
		id-vir = 119.23.222.240
		secret = abc123
	}
	ike-test2 {
		id-vir = 2.2.2.2
		secret = abc123
	}
}

用win7自带客户端连接aliyun EAP

https://wiki.strongswan.org/projects/strongswan/wiki/WindowsClients/65

win7 默认DH-group 是 modp1024,strongswan已经不在支持

修改 win7 配置 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters\

增加 NegotiateDH2048_AES256 DWORD 1

window 用 SHREW IPSec VPN 客户端

http://www.easynetworks.com.cn/forum/faq/detail/id/24

window 用 SHREW IPSec VPN 客户端,https://www.shrew.net/download/vpn/vpn-client-2.2.2-release.exe

只能用 ikev1, https://raw.githubusercontent.com/abcdxyzk/abcdxyzk.github.io_files/master/tools/vpn/vpn-client-2.2.2-release.exe

公司和阿里云可以连接,但是用手机热点不能连

使用野蛮模式aggressive = yes 需要配置 vim /etc/strongswan/strongswan.d/charon.conf i_dont_care_about_security_and_use_aggressive_mode_psk = yes

服务器

TODO 应为改了端口,不好用手机连服务器

/etc/strongswan/strongswan.d/charon.conf

1
2
3
4
5
6
7
# port = 500
port = 501



# port_nat_t = 4500
port_nat_t = 4501

/etc/strongswan/swanctl/swanctl.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
include conf.d/*.conf

connections {
	# aliyun 连服务器
	test {
		version = 2
		proposals = default
		local_addrs = 192.168.100.178
		# local_port = 4501
		# remote_addrs = 119.23.222.240
		remote_port = 4500

		local {
			auth = psk
			id = 2.2.2.2
		}
		remote {
			auth = psk
			id = 119.23.222.240
		}
		children {
			test_child {
				local_ts = 192.168.100.0/24
				remote_ts = 172.17.0.0/24
				esp_proposals = default
			}
		}
	}

	# 家连接服务器
	testhome {
		version = 2
		proposals = default
		local_addrs = 192.168.100.178
		# local_port = 4501
		# remote_addrs = 119.23.222.240
		remote_port = 4500

		local {
			auth = psk
			id = 2.2.2.2
		}
		remote {
			auth = psk
			id = 192.168.0.105
		}

		children {
			test_child {
				local_ts = 192.168.100.0/24
				remote_ts = 10.0.0.0/24
				esp_proposals = default
			}
		}
	}

	# cp ~/www.npcable.cn_apache/root_bundle.crt /etc/strongswan/swanctl/x509ca/
	# cp ~/www.npcable.cn_apache/www.npcable.cn.crt /etc/strongswan/swanctl/x509/
	# cp ~/www.npcable.cn_apache/www.npcable.cn.key /etc/strongswan/swanctl/private/
	# EAP 服务端转发上网 iptables -t nat -A POSTROUTING -s 100.64.0.0/24 -o eth0 -j MASQUERADE
	# echo 1 > /proc/sys/net/ipv4/ip_forward
	testEAP {
		version = 2
		proposals = default
		local_addrs = 192.168.100.178
		pools = pool1

		local {
			certs = www.npcable.cn.crt
			id = www.npcable.cn
		}
		remote {
			auth = eap-mschapv2
			id = %any
		}
		children {
			testEAP_child {
				local_ts = 192.168.100.0/24,192.168.200.0/24,192.168.120.0/24
				#local_ts = 0.0.0.0/0
				#remote_ts = 100.64.0.0/24
				esp_proposals = default
			}
		}
	}
}

secrets {
	ike-test {
		id-vir = 119.23.222.240
		secret = abc123
	}
	ike-testhome {
		id-vir = 192.168.0.105
		secret = abc123
	}
	private-www {
		file = www.npcable.cn.key
	}
	eap-user {
		id = kk3
		secret = abc123
	}
}

pools {
	pool1 {
		addrs = 100.64.0.0/24
	}
}

手机配置

to aliyun ikev2

to aliyun xauth

失败。 手机用 IPSEC Xauth PSK 连接aliyun,手机的DH-group是modp1024, strongswan 从5.6.1开始取消了modp1024。。。

to firewall 不成功

EAP

防火墙配置

DH-group 要改成 group14 及以上,太低strongswan不认

参考

https://help.aliyun.com/document_detail/110816.html

https://blog.csdn.net/weixin_43190642/article/details/122080246

https://www.cnblogs.com/shaoyangz/p/10345698.html

https://blog.csdn.net/qq_42760638/article/details/122042536

https://www.likecs.com/show-204025603.html