linux服务安全与监控二

数据加密的最大特点是不可逆性
确保数据的机密性:
–对称加密:加密/解密用同一个密钥
–非对称加密:加密/解密用不同的密钥(公钥,私钥)

保护信息的完整性:
–信息摘要:基于输入的信息生成长度较端,位数固定的散列值

常见的加密算法:
对称加密:
–DES ,Data Encryption Standard
–AES , Advanced Encryption Standard

非对称加密:
–RSA,Rivest Shamish Adleman
–DSA,Digita Signature Algorithm

一 : 检查文件的MD5校验和

1 将etc目录下的配置文件加密后写入新的文件 a.md5

for i in `ls /etc/*.conf`
do
md5sum $i >>/a.md5
done

2 任意改动/etc/my.conf的内容:修改追加重定向的文件b.md5

for i in `ls /etc/*.conf`
do
md5sum $i >> /b.md5
done

3 利用diff查看文件的的md5校验码的区别

[root@room9pc01 ~]# diff /a.md5 /b.md5
1,2d0
< b244e3b37f10a5e9275303908d27d712  my.cnf

二 使用GPG对称加密方式保护文件,自身加密,自身解密
1 查看版本

[root@mysql11 ~]# gpg  --version
gpg (GnuPG) 2.0.22
libgcrypt 1.5.3
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Home: ~/.gnupg

支持的算法:
公钥:RSA, ?, ?, ELG, DSA
对称加密:IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256,
     TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256
散列:MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
压缩:不压缩, ZIP, ZLIB, BZIP2

2 定义一个文本文件

[root@mysql11 ~]# echo 123456 > w.txt

3 使用gpg对称加密

[root@mysql11 ~]# gpg -c w.txt       //在当前目录下生成w.txt.gpg文件

4 对gpg文件解密

[root@mysql11 ~]# gpg -d w.txt.gpg > w1.txt
gpg: 钥匙环‘/root/.gnupg/secring.gpg’已建立
gpg: CAST5 加密过的数据
gpg: 以 1 个密码加密
gpg: 警告:报文未受到完整的保护
[root@mysql11 ~]# cat w1.txt
123456

三 非对称密钥:私钥解密 公钥加密
步骤:
–UserA(生成一对密钥)
–UerA把公钥传给UserB
–UserB使用公钥加密数据,并把数据传给UserA
–UserA使用公钥解密

1 主机web33 192.168.4.33生成非对称密钥对

[root@web33 ~]# gpg --gen-key                           //创建密钥对
… …
请选择您要使用的密钥种类:

   (1) RSA and RSA (default)                            //默认算法为RSA
   (2) DSA and Elgamal
   (3) DSA (仅用于签名)
   (4) RSA (仅用于签名)
您的选择?                                              //直接回车默认(1)
RSA 密钥长度应在 1024 位与 4096 位之间。
您想要用多大的密钥尺寸?(2048)                              //接受默认2048位
您所要求的密钥尺寸是 2048 位
请设定这把密钥的有效期限。
         0 = 密钥永不过期
      <n>  = 密钥在 n 天后过期
      <n>w = 密钥在 n 周后过期
      <n>m = 密钥在 n 月后过期
      <n>y = 密钥在 n 年后过期
密钥的有效期限是?(0)                                          //接受默认永不过期
密钥永远不会过期
以上正确吗?(y/n)y                                          //输入y确

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"
真实姓名:liuqi
电子邮件地址:ww@qq.com
注释:this is key
您选定了这个用户标识:
    “liuqi (this is key) <ww@qq.com>”
    
 更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)?O
您需要一个密码来保护您的私钥。

您不想要有密码――这个想法实在是遭透了!
不过,我仍然会照您想的去做。您任何时候都可以变更您的密码,仅需要
再次执行这个程序,并且使用“--edit-key”选项即可。

我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动
鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。
我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动
鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。
gpg: /root/.gnupg/trustdb.gpg:建立了信任度数据库
gpg: 密钥 FA75B8F6 被标记为绝对信任
公钥和私钥已经生成并经签名。

gpg: 正在检查信任度数据库
gpg: 需要 3 份勉强信任和 1 份完全信任,PGP 信任模型
gpg: 深度:0 有效性:  1 已签名:  0 信任度:0-,0q,0n,0m,0f,1u
pub   2048R/FA75B8F6 2018-12-08
密钥指纹 = F3D3 39C9 0CF7 DD37 3CD0  78C6 B906 71C1 FA75 B8F6
uid                  liuqi (this is key) <ww@qq.com>
sub   2048R/336316F2 2018-12-08

查看公钥环

[root@web33 ~]# gpg --list-keys   //查看公钥环
 /root/.gnupg/pubring.gpg
 pub   2048R/FA75B8F6 2018-12-08
 uid                  liuqi (this is key) <ww@qq.com>
 sub   2048R/336316F2 2018-12-08

//注意:这个公钥的对象可以用这些来表示:FA75B8F6 liuqi ww@qq.com 336316F2
//需要用的时候随意选择一个即可,只要不与其他公钥环的信息冲突

2 web33导出自己的公钥文件

[root@web33 ~]# gpg -a --export liuqi>liuqi.pub   

–导出到当前目录下,文件名自定义
–可以用之前定义密钥对的真实姓名或者邮箱作为导出对象
–当不加选项a时看到的liuqi.pub内容为乱码

3 传递密钥文件给web44 :192.168.4.44

[root@web33 ~]# scp liuqi.pub 192.168.4.44:/tmp/

4 web44导入接收的公钥信息

[root@web44 ~]# gpg --import /tmp/liuqi.pub 
gpg: 已创建目录‘/root/.gnupg’
gpg: 新的配置文件‘/root/.gnupg/gpg.conf’已建立
gpg: 警告:在‘/root/.gnupg/gpg.conf’里的选项于此次运行期间未被使用
gpg: 钥匙环‘/root/.gnupg/secring.gpg’已建立
gpg: 钥匙环‘/root/.gnupg/pubring.gpg’已建立
gpg: /root/.gnupg/trustdb.gpg:建立了信任度数据库
gpg: 密钥 FA75B8F6:公钥“liuqi (this is key) <ww@qq.com>”已导入
gpg: 合计被处理的数量:1
gpg:           已导入:1  (RSA: 1)

[root@web44 ~]# gpg --list-key         //查看公钥信息
/root/.gnupg/pubring.gpg
pub   2048R/FA75B8F6 2018-12-08
uid                  liuqi (this is key) <ww@qq.com>
sub   2048R/336316F2 2018-12-08

5 在web44上利用公钥将文件加密后传给web33

[root@web44 ~]# gpg -e -r ww@qq.com hello.txt    //-e选项是使用密钥加密数据 , -r选项后面跟的是密钥,说明使用哪个密钥对文件加密
gpg: 336316F2:没有证据表明这把密钥真的属于它所声称的持有者

pub  2048R/336316F2 2018-12-08 liuqi (this is key) <ww@qq.com>
 主钥指纹: F3D3 39C9 0CF7 DD37 3CD0  78C6 B906 71C1 FA75 B8F6
 子钥指纹: 682E 2A70 BBD5 E982 4D5C  0FF1 B8E9 0CC2 3363 16F2

这把密钥并不一定属于用户标识声称的那个人。如果您真的知道自
己在做什么,您可以在下一个问题回答 yes。

无论如何还是使用这把密钥吗?(y/N)y

[root@web44 ~]# ls
anaconda-ks.cfg  hello.txt.gpg 

[root@web44 ~]# scp hello.txt.gpg 192.168.4.33:/root            //加密的数据传给web33

6 web33以自己的私钥解密文件

[root@web33 ~]# gpg -d hello.txt.gpg > web33.txt
gpg: 由 2048 位的 RSA 密钥加密,钥匙号为 336316F2、生成于 2018-12-08
      “liuqi (this is key) <ww@qq.com>”

[root@web33 ~]# cat web33.txt 
hello world

四 非对称密钥 : 私钥(签名) 公钥(验证签名) //验证数据的来源与私钥签名
–使用私钥签名的文件,是可以使用对应的公钥验证签名的,只要验证成功,则说明这个文件一定是出自对应的私钥签名,除非私钥被盗,否则一定能证明这个文件来自于某个人!
1 建立测试软件包

[root@web33 ~]# tar -zcf log.tar /var/log

2 为软件包创建分离式签名

[root@web33 ~]# gpg -b log.tar
[root@web33 ~]# ls            //注意创建签名后生成的log.tar.sig为文件签名
anaconda-ks.cfg       liuqi.pub             log.tar      公共  图片  音乐
hello.txt.gpg         lnmp_soft             log.tar.sig

3 将文件和签名传送给web44 192.168.4.44

[root@web33 ~]# scp log.tar* 192.168.4.44:/root
root@192.168.4.44's password: 
log.tar                                       100%  568KB  11.4MB/s   00:00    
log.tar.sig   

4 web44验证数据的来源

[root@web44 ~]# gpg --verify log.tar.sig log.tar
gpg: 于 2018年12月08日 星期六 11时40分47秒 CST 创建的签名,使用 RSA,钥匙号 FA75B8F6
gpg: 完好的签名,来自于“liuqi (this is key) <ww@qq.com>”
gpg: 警告:这把密钥未经受信任的签名认证!
gpg:       没有证据表明这个签名属于它所声称的持有者。
主钥指纹: F3D3 39C9 0CF7 DD37 3CD0  78C6 B906 71C1 FA75 B8F

// 注意log.tar.sig log.tar两个文件的顺序 如果写反了会验证失败,如下

[root@web44 ~]# gpg --verify log.tar log.tar.sig

gpg: 找不到有效的 OpenPGP 数据。
gpg: 签名无法被验证。
请记住签名文件(.sig或.asc)
应该是在命令行中给定的第一个文件

五 使用AIDE做入侵检测
–Aide通过检查数据文件的权限、时间、大小、哈希值等,校验数据的完整性。
–使用Aide需要在数据没有被破坏前,对数据完成初始化校验,生成校验数据库文件,在被攻击后,可以使用数据库文件,快速定位被人篡改的文件。
1 安装软件包

[root@web44 ~]# yum -y install aide

2 修改配置文件:

[root@web44 ~]# vim /etc/aide.conf
@@define DBDIR /var/lib/aide                            //数据库目录
@@define LOGDIR /var/log/aide                            //日志目录
database_out=file:@@{DBDIR}/aide.db.new.gz                //数据库文件名

//以下内容为可以检查的项目(权限,用户,组,大小,哈希值等)
#p:      permissions
#i:      inode:
#n:      number of links
#u:      user
#g:      group
#s:      size
#md5:    md5 checksum
#sha1:   sha1 checksum
#sha256:        sha256 checksum
DATAONLY =  p+n+u+g+s+acl+selinux+xattrs+sha256
//以下内容设置需要对哪些数据进行入侵校验检查
//注意:为了校验的效率,这里将所有默认的校验目录与文件都注释
//仅保留/root目录,其他目录都注释掉
/root   DATAONLY
#/boot   NORMAL                                    //对哪些目录进行什么校验
#/bin    NORMAL
#/sbin   NORMAL
#/lib    NORMAL
#/lib64  NORMAL
#/opt    NORMAL
#/usr    NORMAL
#!/usr/src                                        //使用[!],设置不校验的目录
#!/usr/tmp

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
注意:一般在文件内容不做修改的情况下对其进行检测,校验

3 侵前对数据进行校验,生成初始化数据库

[root@web44 ~]# aide --init
AIDE, version 0.15.1
AIDE database at /var/lib/aide/aide.db.new.gz initialized.
//生成校验数据库,数据保存在/var/lib/aide/aide.db.new.g

4 备份数据库,将数据库文件拷贝到U盘(非必须的操作)

[root@web44 ~]# cp /var/lib/aide/aide.db.new.gz   /media/

5 对root目录进行改动,再进行对比检测

[root@web44 ~]# aide --check
   AIDE 0.15.1 found differences between database and filesystem!!
   Start timestamp: 2018-12-08 14:28:46
        



Summary:
   Total number of files:	932
   Added files:			1
   Removed files:		1
   Changed files:		1
    
---------------------------------------------------
Added files:
---------------------------------------------------

added: /root/er.txt

---------------------------------------------------
Removed files:
---------------------------------------------------

removed: /root/hello.txt

---------------------------------------------------
Changed files:
---------------------------------------------------

changed: /root/a.txt

---------------------------------------------------
Detailed information about changes:
---------------------------------------------------


File: /root/a.txt
 Size     : 0                                , 4
 SHA256   : 47DEQpj8HBSa+/TImW+5JCeuQeRkm5NM , GBIQ+PnHecJtodmyB1veAScwLuDj/K

六 扫描与抓包分析
1 使用NMAP扫描来获取指定主机/网段的相关信息

[root@web44 ~]# yum -y install nmap

//基本用法:
 nmap  [扫描类型]  [选项]  <扫描目标 ...>
//常用的扫描类型
// -sS,TCP SYN扫描(半开)
// -sT,TCP 连接扫描(全开)
// -sU,UDP扫描
// -sP,ICMP扫描
// -A,目标系统全面分析

2 检查192.168.4.100主机是否可以ping通

[root@web44 ~]# nmap -n -sP 192.168.4.100          //-n代表不进行DNS解析
[root@web44 ~]# nmap -n -sP 192.168.4.0/24        

3 检查目标主机所开启的TCP服务

[root@web44 ~]# nmap -sT 192.168.4.30             //sT 和 sS 的区别 : sT 为tcp三次握手  sS为tcp前两次握手(速度相对要块,半开)
 Starting Nmap 6.40 ( http://nmap.org ) at 2018-12-08 15:12 CST
mass_dns: warning: Unable to determine any DNS servers. Reverse DNS is disabled. Try using --system-dns or specify valid servers with --dns-servers
Nmap scan report for 192.168.4.30
Host is up (0.00050s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
111/tcp  open  rpcbind
2049/tcp open  nfs
MAC Address: 52:54:00:73:86:D9 (QEMU Virtual NIC)

4 检查目标主机所开启的UDP服务(注意 ,检测UDP的速度非常的慢,10分钟以上)

[root@web44 ~]#  nmap   -sU  192.168.4.0/24

5 全面分析目标主机192.168.4.100和192.168.4.5的操作系统信息

    [root@web33 ~]# nmap -A 192.168.4.254  //
    Starting Nmap 6.40 ( http://nmap.org ) at 2018-12-08 15:24 CST
    mass_dns: warning: Unable to determine any DNS servers. Reverse DNS is disabled. Try using --system-dns or specify valid servers with --dns-servers
    Nmap done: 2 IP addresses (0 hosts up) scanned in 0.87 seconds
    [root@web33 ~]# nmap -A 192.168.4.254

Starting Nmap 6.40 ( http://nmap.org ) at 2018-12-08 15:24 CST
mass_dns: warning: Unable to determine any DNS servers. Reverse DNS is disabled. Try using --system-dns or specify valid servers with --dns-servers
Nmap scan report for 192.168.4.254
Host is up (0.00032s latency).
Not shown: 993 closed ports
PORT     STATE SERVICE VERSION
21/tcp   open  ftp     vsftpd 3.0.2
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| drwxr-xr-x    2 0        0            4096 Oct 23 13:59 centos
| drwxr-xr-x    2 0        0            4096 Nov 13 02:17 ceph
| -rw-r--r--    1 0        0           74692 Nov 21 08:57 libev-4.15-1.el6.rf.x86_64.rpm
| -rw-r--r--    1 0        0           86564 Nov 21 08:57 libevent-devel-2.0.21-4.el7.x86_64.rpm
| -rw-r--r--    1 0        0         7688608 Nov 21 00:59 percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm
| drwxr-xr-x    3 0        0            4096 Dec 06 00:28 pub
| dr-xr-xr-x    9 0        0            4096 Jul 11  2017 rhel7
|_drwxrwxrwx    2 0        0            4096 Apr 26  2018 share [NSE: writeable]
22/tcp   open  ssh     OpenSSH 7.4 (protocol 2.0)
| ssh-hostkey: 2048 37:af:35:48:2a:ed:f7:b9:c2:6b:d8:fe:fa:6c:7b:02 (RSA)
|_256 dc:95:db:de:7e:c3:7d:34:ff:41:d4:e5:bb:97:5f:e9 (ECDSA)
53/tcp   open  domain  dnsmasq 2.76
| dns-nsid: 
|_  bind.version: dnsmasq-2.76
80/tcp   open  http    Apache httpd 2.4.6 ((CentOS))
| http-methods: Potentially risky methods: TRACE
|_See http://nmap.org/nsedoc/scripts/http-methods.html

TRACEROUTE
HOP RTT     ADDRESS
1   0.31 ms 192.168.4.254

OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 20.41 seconds

6 检查192.168.4.0/24网段内哪些主机开启了FTP、SSH服务

[root@web33 ~]#  nmap -p 21-22 192.168.4.0/24
PORT   STATE  SERVICE
21/tcp closed ftp
22/tcp open   ssh
MAC Address: 52:54:00:29:CA:6E (QEMU Virtual NIC)

七 使用tcpdump分析FTP访问中的明文交换信息
nmap是扫描工具
tcpdump抓包工具+其他(IP地址欺骗/DHCP欺骗)
1 环境准备web44做ftp服务端

[root@web44 ~]# yum -y install vsftpd
[root@web44 ~]# useradd tom
[root@web44 ~]# echo 123456 | passwd --stdin tom

更改用户 tom 的密码 。
passwd:所有的身份验证令牌已经成功更新。

[root@web44 ~]# echo wwwwwwww > /home/tom/nb.txt
[root@web44 ~]# systemctl restart vsftpd
[root@web44 ~]# systemctl enable vsftpd

2 环境准备web33做ftp客户端

[root@web33 ~]# yum -y install ftp
[root@web33 ~]# ftp 192.168.4.44
Connected to 192.168.4.44 (192.168.4.44).
220 (vsFTPd 3.0.2)
Name (192.168.4.44:root): tom             //输入用户名
331 Please specify the password.
Password:                                 //输入密码
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,4,44,193,174).
150 Here comes the directory listing.
-rw-r--r--    1 0        0               9 Dec 08 08:15 nb.txt         //服务端共享的文件
226 Directory send OK.
ftp> 

3 启用tcpdump命令行抓包
执行tcpdump命令行,添加适当的过滤条件,只抓取访问主机192.168.4.5的21端口的数据通信 ,并转换为ASCII码格式的易读文本。
这里假设,192.168.4.5主机有vsftpd服务,如果没有需要提前安装并启动服务!!!

[root@proxy ~]# tcpdump -A host 192.168.4.5 and tcp port 21
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
.. ..                                            //进入等待捕获数据包的状态

//监控选项如下:
// -i,指定监控的网络接口(默认监听第一个网卡)
// -A,转换为 ACSII 码,以方便阅读
// -w,将数据包信息保存到指定文件
// -r,从指定文件读取数据包信息
//tcpdump的过滤条件:
// 类型:host、net、port、portrange 主机/ net/端口/端口范围
// 方向:src、dst 源/目标
// 协议:tcp、udp、ip、wlan、arp、……
// 多个条件组合:and、or、not

4 web33执行ftp访问,在21端口产生数据

[root@web33 ~]# ftp 192.168.4.44
Connected to 192.168.4.44 (192.168.4.44).
220 (vsFTPd 3.0.2)
Name (192.168.4.44:root): tom
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 

5 观察抓包的结果(回到web44主机观察tcpdump抓包的结果)

[root@web44 ~]# tcpdump -A tcp port 21 and host 192.168.4.33
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes

16:36:56.824253 IP 192.168.4.33.60104 > web44.ftp: Flags [P.], seq 1:11, ack 21, win 229, options [nop,nop,TS val 196470329 ecr 196460149], length 10: FTP: USER tom
E..>..@.@......!...,.........g.!...........
...9...uUSER tom

16:37:00.200125 IP 192.168.4.33.60104 > web44.ftp: Flags [P.], seq 11:24, ack 55, win 229, options [nop,nop,TS val 196473705 ecr 196462879], length 13: FTP: PASS 123456
E..A.	@.@......!...,.........g.C...........

...i....PASS 123456
……………………

6 再次使用tcpdump抓包,使用-w选项可以将抓取的数据包另存为文件,方便后期慢慢分析

[root@web44 ~]# tcpdump -A tcp port 21 and host 192.168.4.33 -w ftp.txt

7 tcpdump命令的-r选项,可以去读之前抓取的历史数据文件

[root@web44 ~]# tcpdump -A -r ftp.txt | egrep '(USER|PASS)'

八 使用tcpdump分析Nginx的明文账户认证信息信息
1 在主机(192.168.4.33)准备一台需要用户认证的Nginx服务器

[root@web33 ~]# cd /usr/local/nginx/conf/
[root@web33 ~]# cp nginx.conf.default  nginx.conf      //还原配置文件
[root@web33 ~]# vim /usr/local/nginx/conf/nginx.conf
server {



 listen 80;
  server_name localhost;
auth_basic "xx";
auth_basic_user_file "/usr/local/nignx/pass";
… …



[root@web33 ~]# htpasswd -c /usr/local/nginx/pass jerry   //创建账户文件
New password:123456                  //输入密码
Re-type new password:123456         //确认密码
[root@web33 ~]# nginx -s reload

2 在33主机使用tcpdump命令抓包

[root@web33 ~]# tcpdump  -A  host 192.168.4.5  and  tcp  port  80

3 在客户端192.168.4.254使用火狐浏览器访问192.168.4.33

[root@pc001 ~]# firefox  http://192.168.4.33       //根据提示输入用户名与密码

4 回到33主机查看抓包的数据结果

[root@web33 ~]# tcpdump -A host 192.168.4.33 and tcp port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
… …
Authorization: Basic dG9tOjEyMzQ1Ng==
… …

5 查看base64编码内容

[root@web33 ~]# echo "dG9tOjEyMzQ1Ng==" | base64 -d
tom:123456
[root@web33 ~]# printf "tom:123456" | base64                    //注意,因为echo有回车功能,在这里如果还是用echo就会出错。
dG9tOjEyMzQ1Ng==
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值