1、解决DOS攻击生产案例:根据web日志或者或者网络连接数,监控当某个IP 并发连接数或者短时内PV达到100,即调用防火墙命令封掉对应的IP,监控频率每隔5分钟。防火墙命令为:iptables -A INPUT -s IP -j REJECT
编辑/data/pvtest.sh脚本:
备注:ss命令要添加路径或者在脚本开头添加PATH变量设置,否则crontab无法识别执行。
#!/bin/bash
/usr/sbin/ss -nt | awk -F"[ :]+" 'BEGIN{NR!=1}END{ips[$(NF-2)]++; for(i in ips){if(ips[i]>=100){system("iptables -A INPUT -s "i" -j REJECT")}}}'
crontab -e创建定时监控:
*/5 * * * * bash /data/pvtest.sh
2、描述密钥交换的过程
迪菲-赫尔曼密钥交换(Diffie-Hellman key exchange,简写:D-H):让双方在没有预先信息的条件下通过不安全的信道创建一个密钥,该密钥可以后续用来作为对称密钥加密通讯内容。
1、该协议使用一个质数p和一个基数g。假设Alice和Bob约定使用 p=23,g=5。【p=23, g=5 为公开信息】
2、Alice选择一个秘密整数a=6,计算A=ga mod p=56 mod 23 = 8并发送给Bob。
3、Bob选择一个秘密整数b=15,计算B=gb mod p=515 mod 23 = 19并发送给Alice。
4、Alice计算共享密码:s= Ba mod p=196 mod 23=2 == Bob计算共享密码:s= Ab mod p=815 mod 23=2
注:Alice 和 Bob 最终得到了相同的值。 计算来源: (gb mod p)a mod p = gba mod p ; (ga mod p)b mod p = gab mod p 。在模p下gba 和gab相等。
注意:出于安全考虑,应用时必须使用非常大的a, b 以及 p。g则不需要很大,并且在一般的实践中通常是2或者5。
特点:迪菲-赫尔曼密钥交换本身并没有提供通讯双方的身份验证服务,因此它很容易受到中间人攻击。因此通常都需要一个能够验证通讯双方身份的机制来防止这类攻击。
3、https的通信过程
https通信结合了对称加密和非对称加密。https经http进行通信,利用SSL/TLS进行数据包加密。服务端在连接建立过程会将自身公钥发给客户端,客户端验证公钥后通过非对称加密将必要的随机数参数提供给服务端,至此双方协商出对称加密使用的对称密钥,后续双方http通信加密均使用该密钥进行加密和解密。
主要过程描述如下:
1、客户端发起通信请求连接到服务端的443端口。【先建立tcp连接】
2、客户端向服务端发出通信加密请求(称为ClientHello请求),主要向服务器提供如下信息:
- 支持的TLS版本信息
- 客户端支持的加密套件(cipher suites)列表信息:认证算法Au(身份认证)、密钥交换算法KeyExchange(密钥协商)、对称加密算法Enc(信息加密)和信息摘要Mac(完整性校验)
- 支持的压缩算法
- 随机数C,用于后续会话密钥的生成
- 扩展字段,协议与算法的相关参数和辅助信息。
3、服务器收到请求后向客户端发出加密回应(ServerHello),主要包括以下内容: - 选择的TLS协议版本
- 选择的加密套件
- 选择的压缩算法
- 产生随机数S给客户端,用于后续的密钥协商
- 服务器证书
- 通知客户端信息发送结束
4、客户端收到,首先验证服务器证书有效性,主要包括:机构是否合法可信、有效期、域名是否匹配。
5、服务器证书验证无误后客户端向服务端发送如下信息: - 从服务端证书取出公钥,将随机数Pre-master用公钥加密发给服务器(client key exchange)
- 编码改变通知,客户端通知服务端后续通信都采用协商的加密算法和密钥进行通信(change cipher spec)
- 客户算加密握手结束通知。将之前所有通信参数的hash1值采用协商的密钥和算法加密后发动给服务端校验(encrypted handshake message)。
6、服务器的最后加密握手回应:
首先根据客户端发送的第三个随机数Pre-master,结合之前的两个随机数C和S计算得到协商密钥ENC-KEY,计算之前通信参数的hash2值,解密客户端发送的encrypted handshake message,对比hash1和hash2,验证数据和密钥的正确性。然后向客户端发送信息: - 编码改变通知,告知客户端后续的通信都采用协商的密钥和算法来进行加密通信(change cipher spec)
- 服务器结束握手通知,结合当前的通信参数生成一段数据(含hash值)并采用协商密钥和算法加密发给客户端。(encrypted handshake message)
7、客户端计算所有接收参数的hash值,使用协商密钥解密服务器发送的信息后校验数据和hash值。验证一致后握手结束。
8、双方开始使用协商的密钥和算法来进行对称加密通信。
4、使用awk以冒号分隔获取/ettc/passwd文件第一列
[root@bupt70 ~]# awk -F: '{print $1}' /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
systemd-network
dbus
polkitd
sshd
postfix
thomas
[root@bupt70 ~]#