linux 安全应用 2
一、selinux安全防护DAC 自主访问控制 (rwx/acl 用户自己可以修改)
MAC 强制访问控制 (管理员对所有的资源负责)
TCSEC标准定义的 MLS 多级安全
SELinux *
1.1 selinux介绍
美国国家安全局主导开发,
一套强化Linux安全的MAC扩展模块
集成到Linux内核(2.6及以上)
操作系统提供可定制的策略、管理工具
主要软件包:
selinux-policy
selinux-policy-targeted、
libselinux-utils、libselinux-utils、
coreutils、policycoreutils
SELINUXTYPE=targeted
推荐,仅保护最常见/关键的网络服务,其他不限制
SELINUXTYPE=mls
提供多层次、全面的安全防护策略
需扩展软件包:
selinux-policy-mls、mcstrans、
policycoreutils-newrole
启用selinux
vim /etc/sysconfig/selinux
SELINUX=enforcing
SELINUXTYPE=targeted
:wq
reboot
# sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
# getenforce
Enforcing
#
————————————————————————————————————————————————
上面的总结
————————————————————————————————————————————————
selinux是基于linux内核版本在2.6及以上的一种内核安全防护扩展模块,由美国国家安全局研发出来的.
# uname -r
2.6.32-573.el6.x86_64
MAC 强制访问控制(管理员管理资源)
DAC自主访问控制(用户管理资源)rwx/acl
# rpm -qa |grep -i selinux(查看系统是否有selinux安全防护)
1.3查看当前系统selinux状态
默认会有一个配置文件/etc/selinux/config,和链接/etc/sysconfig/selinux
6 SELINUX=permissive(一般都是设置成这种,宽松警告)
6 SELINUX=disabled
6 SELINUX=enforcing
10 SELINUXTYPE=strict
10 SELINUXTYPE=targeted(一般这种,仅保护最常见/关键的网络服务,其他不限制)
# getenforce
Permissive
# setenforce 1
# getenforce
Enforcing
# sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: permissive
Policy version: 24
Policy from config file: targeted
查看安全上下文
文件 ll -Z 文件名 ll -Z /etc/passwd
目录 ll-dZ目录名 ll -dZ /
进程 psaux-Z |grephttpd
# ls -Zd /root
dr-xr-x---. root root system_u:object_r:admin_home_t:s0 /root
# ls -Zd /var/www/html
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html
# ls -Zd /tmp
drwxrwxrwt. root root system_u:object_r:tmp_t:s0 /tmp
# ls -Zd /var/ftp/
drwxr-xr-x. root root system_u:object_r:public_content_t:s0 /var/ftp/
用户:角色:访问类型:选项...
system_u:object_r:root_t:s0
一般操作规律
移动的文件,原有的上下文属性不变
复制的文件,自动继承目标位置的上下文
创建继承上级目录属性
++创建继承上级目录属性++
# mkdir my
# touch 1.txt
# ll -Zd 1.txt
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 1.txt
# ll -Zd /root/my
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 /root/my
# ll -Zd /root/
dr-xr-x---. root root system_u:object_r:admin_home_t:s0 /root/
+++复制的文件,自动继承目标位置的上下文 (保持属性拷贝也没用 还是会继承目标的属性)+++
# cp /root/1.txt /tmp/
# cp -r /root/my /tmp/
# ll -Zd /tmp
drwxrwxrwt. root root system_u:object_r:tmp_t:s0 /tmp
# ll -Zd /tmp/1.txt
-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 /tmp/1.txt
# ll -Zd /tmp/my
drwxr-xr-x. root root unconfined_u:object_r:user_tmp_t:s0 /tmp/my
# rm -fr /tmp/1.txt
# cp -p /root/1.txt /tmp/
# ll -Zd /tmp/1.txt
-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 /tmp/1.txt
+++移动的文件目录,保持原来的上下文属性不变+++
# rm -fr /tmp/1.txt
# rm -fr /tmp/my
# mv /root/1.txt /tmp/
# mv /root/my /tmp/
# ll -Zd /tmp/1.txt
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 /tmp/1.txt
# ll -Zd /tmp/my
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 /tmp/my
# ll -Zd /tmp
drwxrwxrwt. root root system_u:object_r:tmp_t:s0 /tmp
————————————
# ll -Z /var/www/html
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 file.html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 link.html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 test.html
# firefox httpd:192.168.4.254:/test.html (能打开)
# firefox httpd:192.168.4.254:/file.html (不能打开) 不是网页内容属性文件
修改文件的安全上下文可以用chcon和restorecon 效果一样。
chcon 修改工具
# chcon -t httpd_sys_content_t /var/www/html/file.html
# ll -Z /var/www/html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 1.html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 a.txt
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 file.html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 link.php
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 test.php
restorecon 恢复工具
# ll -Z /var/www/html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 1.html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 a.txt
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 file.html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 link.php
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 pp.html
# cd /var/www/html/
# restorecon pp.html
# ll -Z /var/www/html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 pp.html
————————————————————————
修改文件的安全上下文
chcon 工具
-t,指定访问类型
-u、-r,分别用来指定用户、角色
-R,递归修改
chcon -t访问类型文件名 #修改某个文件的安全上下文
chcon-R -t访问类型目录名#批量修改安全上下文 (把目录下文件的都修改了上下文)
chcon-thttpd_sys_content_t/var/www/html/c2.html
恢复文件的安全上下文
restorecon 工具恢复为所在位置的默认上下文属性
-R,递归修改
restorecon d.html #把这个文件恢复成当前父目录的上下文属性
restorecon 目录名/d.html
————————————————————————————————————————————————
1.4SELinux布尔值 (功能开关)
getsebool -a #列出所有的bool值
修改布尔值
setsebool -P 选项 on #启用
setsebool -P 选项 off #关闭
setsebool -P 选项=1 #启用
setsebool -P 选项=0 #关闭
setsebool -P allow_ftpd_anon_writeon
setsebool -P allow_ftpd_full_access on
安装selinux排错工具
# yum-yinstallsetroubleshoot-server
setroubleshoot-pluginssetroubleshoot
# rpm-qa| grep setroubleshoot
setroubleshoot-server-3.0.47-9.1.el6.x86_64
setroubleshoot-3.0.47-9.1.el6.x86_64
setroubleshoot-plugins-3.0.40-2.el6.noarch
#
#reboot
调出图形工具抓取报错信息
应用程序->系统工具->selinx .....
sealter-b
查看日志 执行命令,获取错误信息
tail -f /var/log/message
Jun 29 09:51:57 room3pc31 setroubleshoot: SELinux is
preventing /usr/sbin/vsftpd from write access on the
directory pubdir. For complete SELinux messages. run
sealert -l 933b8efd-0743-48c3-b7b0-b95233747cbc
#sealert -l 933b8efd-0743-48c3-b7b0-
b95233747cbc
+++++++++++++++++++++++++++++++++++
二、加密、解密
2.1 为什么要给数据加密?(机密性 完整性)
(发送方)加密 明文-> 密文(加密就是把明文加密成密问)
(接收方)解密 密文-> 明文 (解密就是把密问解密成明文)
加密算法 明文 变成 密文的 转换规则
算法可以是 一种计算规则、指令或代码(加密算法:可以是指令也可以是代码)
2.2 加密方式
对称加密:加密/解密用同一个密钥 (对称:加解密使用相同的算法) 简单不安全
算法有:DES,Data Encryption Standard
AES,Advanced Encryption Standard
非对称加密加密/解密用不同的密钥(密钥对) (非对称加密:加解密使用不同算法 有密钥对)
公钥和私钥
加 解
算法:RSA,Rivest Shamirh Adleman
DSA,Digital Signature Algorithm
加解密工具:
gpg(开源的软件包 gnupg这个包提供) 对称加密解密非对称加解密数字签名
# which gpg
/usr/bin/gpg
# rpm -qf /usr/bin/gpg
gnupg2-2.0.14-8.el6.x86_64
# gpg --help查帮助(支持的算法选项)
————————
1.对称加密解密 (lucy和tom,都是真机上用户密码都是123, 切到lucy和tom时候只能ssh -X lucy@192.168.4.254不能su - tom,因为环境不对。)
————————
加密(发送方)lucy:
解密(接受方)tom:
# ssh -X lucy@"localhost"
lucy@localhost's password:
/usr/bin/xauth:creating new authority file /home/lucy/.Xauthority
$
$ pwd
/home/lucy
$ echo 123456 >lucy.txt
$ ls
lucy.txt
$ gpg -c lucy.txt
gpg: 已创建目录‘/home/lucy/.gnupg’
gpg: 新的配置文件‘/home/lucy/.gnupg/gpg.conf’已建立
gpg: 警告:在‘/home/lucy/.gnupg/gpg.conf’里的选项于此次运行期间未被使用
gpg: 钥匙环‘/home/lucy/.gnupg/pubring.gpg’已建立
can't connect to `/home/lucy/.gnupg/S.gpg-agent': 没有那个文件或目录
gpg-agent: 已创建目录‘/home/lucy/.gnupg/private-keys-v1.d’
$ ls
lucy.txtlucy.txt.gpg
$ cp lucy.txt.gpg/tmp/
# ssh -X tom@192.168.4.254
tom@192.168.4.254's password:
/usr/bin/xauth:creating new authority file /home/tom/.Xauthority
$
$ pwd
/home/tom
$ cd /tmp
$ ls
1.txt orbit-gdm
da orbit-root
evince-9817 pulse-2UwZ1k19YbcT
gedit.root.3964521678pulse-5sTJqfwYxhm6
keyring-rOpg63 user.txt
keyring-vP2cP1 virtual-root.lwcQAF
lu VMwareDnD
lucy.txt.gpg vmware-root
my wireshark_2_interfaces_20170226094957_f2G8IO
myvm.xml yum_save_tx-2017-03-07-11-11_INSzh.yumtx
$ gpg -d lucy.txt.gpg
gpg: 已创建目录‘/home/tom/.gnupg’
gpg: 新的配置文件‘/home/tom/.gnupg/gpg.conf’已建立
gpg: 警告:在‘/home/tom/.gnupg/gpg.conf’里的选项于此次运行期间未被使用
gpg: 钥匙环‘/home/tom/.gnupg/secring.gpg’已建立
gpg: 钥匙环‘/home/tom/.gnupg/pubring.gpg’已建立
gpg: 3DES 加密过的数据
can't connect to `/home/tom/.gnupg/S.gpg-agent': 没有那个文件或目录
gpg-agent: 已创建目录‘/home/tom/.gnupg/private-keys-v1.d’
gpg: 以 1 个密码加密
123456
gpg: 警告:报文未受到完整的保护
————————
2.非对称加解密:【(lucy和tom,都是真机上用户密码都是123, 切到lucy和tom时候只能ssh -X lucy@192.168.4.254不能su - tom,因为环境不对。)要图形界面】
————————
1)lucy
-传建密钥对
-导出公钥
2)tom
导入lucy的公钥
使用公钥加密发送文件
lucy使用私钥解密
实验:
$ rm -fr .gnupg/(有就一般都先删掉 等创建公钥时会自动生成)
$ gpg --gen-key
gpg: 钥匙环‘/home/lucy/.gnupg/secring.gpg’已建立
请选择您要使用的密钥种类:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (仅用于签名)
(4) RSA (仅用于签名)
您的选择?
.....(一路默认 名字那里做个区分写真实的,后面还会用到)
.....
真实姓名:panglj
电子邮件地址:plj
注释:O
您选定了这个用户标识:
“panglj (O) <plj@163>”
更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)?o
您需要一个密码来保护您的私钥。(输入密码,记住这个密码)等它生成
.................
密钥指纹 = 87F8 DE00 93C6 3D6A 6AF81B16 94CD FC50 73FA C552
uid panglj (O) <plj@163>
sub 2048R/86A8B557 2017-03-07
公钥和私钥已经生成并经签名。(生成)
$ pwd
/home/lucy/.gnupg
$ ls
gpg.conf pubring.gpg random_seedtrustdb.gpg
private-keys-v1.dpubring.gpg~secring.gpg
$ gpg -a --export>/tmp/lucy.pub (把公钥拷贝到公共目录。让tom拷贝)
$ rm -fr .gnupg/ (tom用户先把自己的这个目录删了,把lucy公钥拷贝到自己加下会自动生成该目录)
$ gpg --import/tmp/lucy.pub (拷贝lucy公钥)
.............
$ ls -a
. .bash_history.bash_profile.gnome2.mozilla
...bash_logout .bashrc .gnupg .Xauthority
$ cd .gnupg/
$ ls
gpg.confpubring.gpgpubring.gpg~secring.gpgtrustdb.gpg
$ echo "1234567890" >tom.txt(tom写一个文件)
$ gpg -e -r panglj tom.txt 把该文件加密(用户名是做密钥对时的留的用户名)
........................(输入yes 按提示)
$ ls
gpg.conf pubring.gpg~secring.gpgtom.txt.gpg
pubring.gpgrandom_seed tom.txt trustdb.gpg
$ cp tom.txt.gpg/tmp/ (将加密好的复制到公共目录下,让lucy读取)
$ gpg -d /tmp/tom.txt.gpg (在页面上显示解密后的内容,需要输做密钥时设的密码)
$ gpg -d /tmp/tom.txt.gpg >/home/lucy/t.txt (把解密后的内容定向到一个文件中再查看)
$ ls
lucy.txtlucy.txt.gpgt.txt
$ cat t.txt
1234567890
3.数字签名(私钥签名,公钥验证签名)
lucytom
lucy:
使用私钥对文件做数字签名
把签名文件和源文件发送给对方
tom
使用公钥验证签名文件
验证文件是否是声称持有者发送过来的
$ echo "1212" >lu.txt
$ gpg -b lu.txt (输入之前设置的密码做成签名)
您需要输入密码,才能解开这个用户的私钥:“panglj (O) <plj@163>”
2048 位的 RSA 密钥,钥匙号 73FAC552,建立于 2017-03-07
can't connect to `/home/lucy/.gnupg/S.gpg-agent': 没有那个文件或目录
$ ls
lucy.txtlucy.txt.gpglu.txtlu.txt.sigt.txt
$ cp lu.txt /tmp/(把文件和文件签名放到公共目录下)
$ cp lu.txt.sig /tmp
$ cat /tmp/lu.txt (tom可以看到文件内容和从文件签名看是否有损坏,内容是否有更改)
1212
$ gpg --verify /tmp/lu.txt.sig
gpg: 于 2017年03月07日 星期二 15时29分17秒 CST 创建的签名,使用 RSA,钥匙号 73FAC552
gpg: 完好的签名,来自于“panglj (O) <plj@163>”
gpg: 警告:这把密钥未经受信任的签名认证!
gpg: 没有证据表明这个签名属于它所声称的持有者。
主钥指纹: 87F8 DE00 93C6 3D6A 6AF81B16 94CD FC50 73FA C552
————————————————————————————————————————————
——————————————————————————————————————
使用md5sum校验工具验证文件完整性特点:当文件内容没变时md5生成的校验值一值保持同样长度不变,否则变化。(md5和gpg数字签名相比只能验证文件内容是否有更改,不能验证是谁发的)
# cat a.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
# md5sum a.txt
2acf01edaaee1079d83086a3ed3305a1a.txt
# md5sum a.txt
2acf01edaaee1079d83086a3ed3305a1a.txt
# echo "123" >>a.txt
# md5sum a.txt
4795332faee87af3d9685ac07b05bc56a.txt
# echo abc
abc
# echo abc |md5sum
0bee89b07a248e27c83fc3d5951213c1-
# echo abc |md5sum
0bee89b07a248e27c83fc3d5951213c1-
# echo abc |md5sum
0bee89b07a248e27c83fc3d5951213c1-
# echo abcd |md5sum
f5ac8127b3b6b85cdc13f237c6005d80-
保护信息的完整性
信息摘要:基于输入的信息生成长度较短、位数固定的散列值
Hash散列技术,用于信息摘要
MD5,Message Digest Algorithm 5
SHA,Secure Hash Algorithm
sha1suma.txt
md5suma.txt
gnupg介绍
GnuPG,GNU Privacy Guard
最流行的数据加密、数字签名工具软件
# which gpg
/usr/bin/gpg
# rpm -qf /usr/bin/gpg
gnupg2-2.0.14-8.el6.x86_64
#
gpg --help查帮助(支持的算法选项)
对称加/解密过程 (加/解密 使用相同密钥)
加密
head-2/etc/passwd > a.txt
gpg-ca.txt (提示输入密码)
lsa.txt.gpg加密后的文件
rm-rfa.txt
解密
gpg-da.txt.gpg >/tmp/user.txt (提示输入密码)
cat/tmp/user.txt
++++++++++++++++++++++++++++++
非对称加/解密过程 (公钥加密/私钥解密)
userB 要userA 使用非对称方式加密传输数据
1 userB 生成密钥对
gpg--gen-key (生成私钥时要求输入相关信息)
ls~/.gnupg/
ddif=/dev/zeroof=/dev/null bs=1M count=500
2 userB 导出自己的公钥
gpg-a--export > /tmp/UserB.pub
suerB 把 公钥 给userA(不同机器间传输数据)
3userA 导入userB的公钥
gpg--import/tmp/UserB.pub
ls~/.gnupg/
4 userA 使用公钥加密文件
echo12344555> /tmp/clear.txt
gpg-e-r真实姓名 /tmp/clear.txt
panglj
userA把加密文件传给userB (不同机器间传输数据)
5 userB 使用自己的私钥解密
gpg-d/tmp/clear.txt.gpg>dclear.txt
catdclear.txt
+++++++++++++++++++++++++++++++++++
GPG软件签名与验证
软件签名与验证过程
软件官方以私钥对软件包执行数字签名
用户下载软件包、软件官方的公钥
以官方公钥验证软件包签名,确保软件完整性
gpg-b 生成一份分离的签名
gpg--verify 验证签名
gpg --fingerprint 列出密钥和指纹
userB
head -3/etc/passwd > userb.txt
gpg-buserb.txt
lsuserb.txt.sig(签名文件)
mv userb.txtuserb.txt.sig /tmp/
userA
cd /tmp/
gpg--verify userb.txt.sig
$ gpg --verify user2.txt.sig
gpg: 于 2016年06月29日 星期三 14时59分43秒 PHT 创建的
签名,使用 RSA,钥匙号 A6D34AA0
gpg: 完好的签名,来自于“panglj (teacher)
<plj@tedu.cn>”
gpg: 警告:这把密钥未经受信任的签名认证!
gpg: 没有证据表明这个签名属于它所声称的持有者。
主钥指纹: 87AB 6994 3F35 E6EA 4EA7502B CCA6
5CA3 A6D3 4AA0
$
echoaaaa >>user2.txt
$ gpg --verify user2.txt.sig
gpg: 于 2016年06月29日 星期三 14时59分43秒 PHT 创建的
签名,使用 RSA,钥匙号 A6D34AA0
gpg: 已损坏的签名,来自于“panglj (teacher)
<plj@tedu.cn>”
$
$ gpg--fingerprint
/home/userB/.gnupg/pubring.gpg
------------------------------
pub 2048R/A6D34AA0 2016-06-29
密钥指纹 = 87AB 6994 3F35 E6EA 4EA7502B CCA6
5CA3 A6D3 4AA0
uid panglj (teacher) <plj@tedu.cn>
sub 2048R/6CD5F831 2016-06-29
$
主钥指纹: 87AB 6994 3F35 E6EA 4EA7502B CCA6
5CA3 A6D3 4AA0
密钥指纹 = 87AB 6994 3F35 E6EA 4EA7502B CCA6
5CA3 A6D3 4AA0
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++
搭建CA服务器
1 CA 介绍 (CA,Certificate Authority)
数字证书授权中心
被通信双方信任的、独立的第三方机构
负责证书颁发、验证、撤销等管理工作
国内常见的CA机构
中国金融认证中心(CFCA)
中国电信安全认证中心(CTCA)
北京数字证书认证中心(BJCA)
CA用来给服务器颁发数字证书
一般也可自己搭建一个私有CA服务器
openssl 加密工具
#opensslenc-des3-e-inf1.txt-outf1.txt.enc加密
# opensslenc-des3-d-inf1.txt.enc-outf1.txt解密
2CA做什么(发数字证书的机构)
PKI体系的基本组成
权威认证机构(CA)
数字证书库、密钥备份及恢复系统
证书作废系统、应用接口
对称加密
enc 算法-e-in输入文件-out输出文件
enc 算法-d-in输入文件-out输出文件
# opensslenc-des3-e-inf1.txt-out
f1.txt.enc
enter des-ede3-cbc encryption password:
//设置口令
Verifying - enter des-ede3-cbc encryption password:
# opensslenc-des3-d-inf1.txt.enc-
outf1.txt
enter des-ede3-cbc decryption password:
————————————————————————————————————————
————————————————————————————————————————
CA机构(CA服务器)是用来给公司服务器颁发数字证书的。有权威的也有私有自己搭建的。
使用IP地址是X.X.X.88主机做CA服务器
整体部署思路
第一步:配置CA签署环境(给客户端发证的默认配置)
/etc/pki/tls/openssl.cnf
第二步:为CA服务器生成私钥(创建密钥对)
第三步:为CA服务器创建根证书 (生成自己的根证书文件)
第四步:发布根证书文件(把自己的根证书共享给客户端)
第五步:客户端下载根证书
# man openssl
++++++++++++++++++++++++++++++++
1.部署签发环境:(做一个私有CA服务器用,来给别的公司服务器发数字证书)192.168.4.99
# ls /etc/pki/tls/openssl.cnf
/etc/pki/tls/openssl.cnf
# rpm -qf /etc/pki/tls/openssl.cnf
openssl-1.0.1e-42.el6.x86_64
# cd /etc/pki/CA/
# touchindex.txt (证书的内容保存文件)
# ls
certscrlindex.txtnewcertsprivate
# echo 01 > serial
# cat serial(创建一个文件用来记录证书的个数,做第二个证书的时候会自动加)
01
# ls
certscrlindex.txtnewcertsprivateserial
[ CA_default ]
41
42 dir = /etc/pki/CA # Where everything is kept
43 certs = $dir/certs # Where the issued certs are kept
44 crl_dir = $dir/crl # Where the issued crl are kept
45 database = $dir/index.txt # database index file.
48 new_certs_dir = $dir/newcerts # default place for new certs.
50 certificate = $dir/my-ca.crt # The CA certificate
51 serial = $dir/serial # The current serial number
52 crlnumber = $dir/crlnumber # the current crl number
54 crl = $dir/crl.pem # The current CRL
55 private_key = $dir/private/my-ca.key # The private key
56 RANDFILE = $dir/private/.rand # pri
130 countryName_default = CN
135 stateOrProvinceName_default = beijing
141 0.organizationName_default = tarena
148 organizationalUnitName_default= ope
2.创建私钥文件:/etc/pki/CA/private/my-ca.key
# pwd
/etc/pki/CA/private
# openssl genrsa -des3 2048 >my-ca.key(创建私钥,并导入到私钥文件,记住密码)
Generating RSA private key, 2048 bit long modulus
......................+++
..+++
e is 65537 (0x10001)
Enter pass phrase:
Verifying - Enter pass phrase:
3.使用私钥创建根证书文件
# cd /etc/pki/CA
# openssl req -new -x509 -key /etc/pki/CA/private/my-ca.key -days 365 > my-ca.crt (使用私钥创建根证书文件 -x509格式)
# ls
certscrlindex.txtmy-ca.crtnewcertsprivateserial
# cat my-ca.crt(证书生成)
-----BEGIN CERTIFICATE-----
MIID1zCCAr+gAwIBAgIJALAPCx/Wdm/lMA0GCSqGSIb3DQEBBQUAMIGBMQswCQYD
VQQGEwJDTjEQMA4GA1UECAwHYmVpa
-----END CERTIFICATE-----
4.把证书文件共享给客户端 (就是把CA私有机构给服务器做的根证书发给该服务 但这里CA服务器和认证的一台,效果是一样的把根证书文件共享到服务器的目录下)
# yum -y install httpd
# mkdir /var/www/html/ca
# cp my-ca.crt/var/www/html/ca/
# ls /var/www/html/ca/my-ca.crt
/var/www/html/ca/my-ca.crt
# ls /var/www/html/ca/my-ca.crt -l
-rw-r--r--. 1 root root 1391 3月 6 23:37 /var/www/html/ca/my-ca.crt
# service httpd start
# chkconfig httpd on
5.客户端下载根证书
$ ping 192.168.4.99
$ firefox http://192.168.4.99/ca
在打开的页面中 下载证书。
——————————————————————————————————————————————————————————————————————
___________________________________________________________________________________________________________________________________________________________
一 配置网站HTTP SSL (192.168.4.100)
网站服务器:
1.运行网站服务
# yum -y install httpd
# service httpd restart
# chkconfig httpd on
2.创建私钥文件
# cd /etc/pki/tls/private/
# openssl genrsa 2048 > www.key (生成私钥,什么服务私钥就起什么名好记,记住密码) 1生成密码字符最好是1024的整数倍
# ls
www.key
# cat www.key
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEApgz2xBeEs151p3dMGmj13pbicS5JGd1cMWiMryUjaRgJPRWF
..
3.创建证书请求文件
#cd /etc/pki/tls/private/
# openssl req -new -key www.key > /root/www.csr
.........
Common Name (eg, your name or your server's hostname) []:stu.tedu.cn(填的一定是公司服务器主机名 /etc/sysconfig/network 所对应的)
........
4.把证书请求文件上传给CA服务器
# scp /root/www.csr root@192.168.4.99:/root/
二.CA服务器:(192.168.4.99)
签收数据证书
# ls /root/www.csr
/root/www.csr
# cd /etc/pki/CA/
# ls
certscrlindex.txtmy-ca.crtnewcertsprivateserial
# cat index.txt
# cat serial
01
# cd certs/
# ls
# openssl ca -in /root/www.csr> www.crt(输入密码 按y)
# cat serial
02
# cat index.txt
V180306163836Z01unknown/C=CN/ST=beijing/O=tarena/OU=ope
# ls
www.csr
# cat www.crt
Certificate:
..............
三.把证书下发给web服务器(192.168.4.99)
# scp www.crt root@192.168.4.100:/root/
四.给网站加密:(web服务器192.168.4.100)
#netstat-utnalp| grep :443(此时没有443端口)
#rpm-qmod_ssl
#yum-yinstallmod_ssl
#vim /etc/httpd/conf.d/ssl.conf
18 Listen443
<VirtualHost_default _:443>
SSLEngine on
105 SSLCertificateFile /etc/pki/tls/certs/www.crt
112 SSLCertificateKeyFile /etc/pki/tls/private/www.key
</VirtualHost>
:wq
#mv /root/www.crt /etc/pki/tls/certs/
# service httpd stop
# service httpd stop
# service httpd start
#netstat-utnalp| grep :443 (能够查看到443端口)
#netstat-utnalp| grep :80 (能够查看到80端口)
# echo "123" >/var/www/html/test.html
五(客户机测试192.168.4.254)
# vim /etc/hosts
192.168.4.100stu.tedu.cn stud
# firefox http://stu.tedu.cn/test.html (能打开)
# firefox http://192.168.4.100/test.html (能打开)
# firefox https://stu.tedu.cn/test.html(能打开,让先下证书)
(生产工作中,客户访问web加密网站,下载根证书在CA下或在本地web下,是程序员在网页代码中写的,运维只需把服务搭出来。就像客户在淘宝支付时,需要下一个认证/插件,在哪个位置下一样,这是程序员指定的)
六.客户机测试 (192.168.4.254)
1 从CA下载根证书 (http://CA-ip/ca)
#firefox http://192.168.4.99/ca
2访问
# firefox https://stu.tedu.cn/test.html(不用再在这下载证书,直接打开,打开的是https)
# firefox http://stu.tedu.cn/test.html (也直接打开打开的是http)
{80 http://web-ip/test.html
443 https://web-ip/test.html}
七.地址重写:(web网站192.168.4.100)
配置网站服务器把接收到的访问80端口的请求自动重定向到443端口 (http---->https)
vim/etc/httpd/conf/httpd.conf (也可在 /etc/httpd/conf/ssl.conf写,都一样)
.....
<IfModule ssl_module>
SSLRandomSeedstartupbuiltin
SSLRandomSeedconnectbuiltin
</IfModule>
RewriteEngineon
RewriteCond%{SERVER_PORT}!^443$
RewriteRule(.*)https://%{SERVER_NAME}/$1
:wq
/etc/init.d/httpd restart
八.客户机测试 (192.168.4.254)
# firefox https://stu.tedu.cn/test.html(打开的是https)
# firefox http://stu.tedu.cn/test.html (打开的是http)
——————————————————————————————————————————————————————————————————————————————
2.邮件服务TLS/SSL (192.168.4.101)
邮件服务器的配置
2.1运行收邮件的服务 service dovecot start
2.2运行发邮件的服务 service postfix start
2.3测发能否收发本地域的邮件 localhost
jim@localhost 发件人
tom@localhost 收件人
2.4传建私钥文件 mail.key
#openssl genrsa 2048 > mail.key
2.5创建证书请求文件 mail.csr
2.6把证书请求文件上传给CA服务器
CA服务器的配置
1 签发数字证书 mail.crt
2 把证书下发给mail服务器
3 设置邮件服务器在运行时加载私钥文件和数字文件
3.1配置收邮件服务 110 143 995 993
pop3 imappop3s imaps
3.2配置发邮件服务 stmp25
3.3重启服务
4配置客户端
在客户端软件里配置连接邮件服务时,选择使用的端口号
+++++++++++++
实验:
# yum -y install postfix dovecot
# rpm -q postfix
postfix-2.6.6-6.el6_5.x86_64
# rpm -q dovecot
dovecot-2.0.9-19.el6.x86_64
# vim /etc/postfix/main.cf
419 home_mailbox = Maildir/
# pwd
/etc/dovecot/conf.d
# vim 10-mail.conf
24 mail_location = maildir:~/Maildir
# service postfix start
# service dovecot start
# netstat -anptu |grep :25
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1765/master
tcp 0 0 ::1:25 :::* LISTEN 1765/master
# netstat -anptu |grep dovecot
tcp 0 0 0.0.0.0:993 imaps(加密后) 0.0.0.0:* LISTEN 2872/dovecot
tcp 0 0 0.0.0.0:995 pop3s 0.0.0.0:* LISTEN 2872/dovecot
tcp 0 0 0.0.0.0:110 (pop3) 0.0.0.0:* LISTEN 2872/dovecot
tcp 0 0 0.0.0.0:143 (imap) 0.0.0.0:* LISTEN 2872/dovecot
tcp 0 0 :::993 :::* LISTEN 2872/dovecot
tcp 0 0 :::995 :::* LISTEN 2872/dovecot
tcp 0 0 :::110 :::* LISTEN 2872/dovecot
tcp 0 0 :::143 :::* LISTEN 2872/dovecot
# cd /etc/dovecot/
# cd conf.d/
# vim 10-mail.conf
# vim 10-ssl.conf
# sed -n '12,13p' 10-ssl.conf
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem
# ls /etc/pki/dovecot/certs/
dovecot.pem
# ls /etc/pki/dovecot/private/
dovecot.pem
# useradd tom
# useradd jim
# echo 123 |passwd --stdin tom
更改用户 tom 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
# echo 123 |passwd --stdin jim
更改用户 jim 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
# yum -y install telnet (下载连接邮件服务器工具)
# telnet localhost 25 (发邮件 jim)
Trying ::1...
Connected to localhost.
# telnet localhost 110 (接邮件 tom)
Trying ::1...
Connected to localhost.
Escape character is '^]'.
+OK Dovecot ready.
user tom
+OK
pass 123
+OK Logged in.
list
+OK 0 messages:
.
quit
# openssl genrsa 2048 > mail.key(传建私钥文件)
# openssl req -new -key mail.key > mail.csr (生成证书请求文件)
# cd /etc/pki/CA/
# cat serial
02
# openssl ca -in /root/mail.csr > mail.crt
# cat index.txt
V180306163836Z01unknown/C=CN/ST=beijing/O=tarena/OU=ope/CN=stu.tedu.cn/emailAddress=jing@tedu.cn
V180307190945Z02unknown/C=CN/ST=beijing/O=tarena/OU=ope/CN=stu.tedu.cn/emailAddress=yaya@tedu.cn
# cat serial
03
# scp mail.crt root@192.168.4.101:/root/ (把证书请求文件上传给CA服务器)
# vim /etc/dovecot/conf.d/10-ssl.conf
12 ssl_cert = </etc/pki/dovecot/certs/mail.crt
13 ssl_key = </etc/pki/dovecot/private/mail.key
# sed -n '12,13p' /etc/dovecot/conf.d/10-ssl.conf
ssl_cert = </etc/pki/dovecot/certs/mail.crt
ssl_key = </etc/pki/dovecot/private/mail.key
# cp /root/mail.key /etc/pki/dovecot/private/
# cp /root/mail.crt /etc/pki/dovecot/certs
# service dovecot restart
停止 Dovecot Imap: [确定]
正在启动 Dovecot Imap: [确定]
# netstat -anptu |grep dovecot
# postconf (查看帮助,配置项怎么写) 发信
# vim /etc/postfix/main.cf
675 readme_directory = /usr/share/doc/postfix-2.6.6/README_FILES
676
677 smtpd_use_tls = yes
678 smtpd_tls_key_file = /etc/pki/tls/private/mail.key
679 smtpd_tls_cert_file = /etc/pki/tls/certs/mail.crt
————————————————————————————————————————————————————
3扫描与抓包
3.1端口扫描(nmap)
3.2抓包(tcpdump)
3.3协议分析工具(wireshark)
扫描方式:scan主动探测 sniff被动监听capture 数据包抓包
1.常用格式:(扫描)
# yum -y install nmap
# which nmap
/usr/bin/nmap
# man nmap
# nmap -sP 172.40.55.244
Starting Nmap 5.51 ( http://nmap.org ) at 2017-03-08 14:22 CST
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn (检查这台主机是否在现,没有)
Nmap done: 1 IP address (0 hosts up) scanned in 0.44 seconds
# nmap -sP 172.40.55.127 (检查这台主机是否在现)
Starting Nmap 5.51 ( http://nmap.org ) at 2017-03-08 14:19 CST
Nmap scan report for 172.40.55.127
Host is up (0.00019s latency). (检查这台主机是否在现)
MAC Address: FC:AA:14:CD:F5:AC (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 0.06 seconds
# ping 172.40.55.127
PING 172.40.55.127 (172.40.55.127) 56(84) bytes of data.
64 bytes from 172.40.55.127: icmp_seq=1 ttl=64 time=0.928 ms
^C
--- 172.40.55.127 ping statistics ---
# nmap -A 172.40.55.127 (整台扫描)
# namp -sT -p 80 172.40.55.127 172.40.55.104
# nmap -sT -p 20-80,443 172.40.55.127 172.40.55.104
# nmap -sT -p 20-80,443172.40.55.104-110
# nmap -sU -p 20-80,443172.40.55.0/24
# nmap -sP 172.40.55.0/24
# nmap -sP -iL ip.txt (ip.txt 中先写入ip)
# nmap -sT -p 110-iL ip.txt
# nmap -sP 172.40.55.100-130 --exclude 172.40.55.103-105
# nmap -sT -p 80,110 172.40.55.100-130 --exclude 172.40.55.103-105
# nmap -sT -p 80,110 172.40.55.100-130 --excludefile ip.txt (不扫描这个文件中的)
# nmap -sT -p 80172.40.55.119 |grep open
80/tcp openhttp
ip地址172.40.55.$ip
重复执行的操作:
vim httpd.sh
#!/bin/bash
while :
do
x=0
for ip in 103 105 107 127 110 102
do
nmap -sT -p 80 172.40.55.$ip | grep -q open
if [ $? -eq 0 ];then
echo "172.40.55.$ip web is ok"
else
echo "172.40.55.$ip web is stop"
echo "172.40.55.$ip>> /tmp/ipdown.txt
let x++
fi
done
mail -s "weberror" root < /tmp/ipdown.txt
echo "web down host is $x"
sleep 600
done
chmod +x httpd.sh
httpd.sh &
+++++++++++++++++++++++++++
vim httpd.sh
#!/bin/bash
x=0
echo "web down is " > /tmp/ipdown.txt
for ip in 103 105 107 127 110 102
do
nmap -sT -p 80 172.40.55.$ip | grep -q open
if [ $? -eq 0 ];then
echo "172.40.55.$ip web is ok"
else
echo "172.40.55.$ip web is stop"
echo "172.40.55.$ip>> /tmp/ipdown.txt
let x++
fi
done
lines=`wc -l/tmp/ipdown.txt |awk '{print $1}' `
if [ $lines -gt 1 ];then
mail -s "weberror" root < /tmp/ipdown.txt
fi
echo "web down host is $x"
rm -rf /tmp/ipdown.txt
:wq
chmod +x httpd.sh
cron -e
*/10****/root/httpd.ssh
service crond restart
查看邮件:
# vim /etc/postfix/main.cf
419 home_mailbox = Maildir/
# mail -f /home/httpadmin/
.bash_logout .bashrc Maildir/
.bash_profile.gnome2/ .mozilla/
# mail -f /home/httpadmin/Maildir/
Heirloom Mail version 12.4 7/29/08.Type ? for help.
"/home/httpadmin/Maildir/": 1 message 1 new
>N1 root Wed Mar8 20:0020/589 "weberror"
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2.TCPDUMP抓包(tcpdump)
# which tcpdump
/usr/sbin/tcpdump
# rpm -qf /usr/sbin/tcpdump
tcpdump-4.0.0-5.20090921gitdf3cb4.2.el6.x86_64
# yun -y install tcpdump
# mantcpdump
# tcpdump(开始抓整个)
# tcpdump-A(抓的显示出屏幕上)
# tcpdump-A -w /tmp/a.cap(抓 w保存文件里)
# tcpdump-A -r /tmp/a.cap (r读出来)
-i -A -w -r
# tcpdump-A -w /tmp/1.txttcp port 110
# tcpdump-A -r /tmp/1.txt|grep -i--color user
# tcpdump-A -r /tmp/1.txt|grep -i--color pass
# tcpdump-A tcp portrange 20-21
# tcpdump-A tcp portrange 20-21 and host 192.168.4.101 (只抓101这台)
____________________________________________________________________________________________________________________________________________________________
————————————————————————————————————————————————————————————————————————
抓包实验,192.168.4.101开启抓包,让192.168.4.7访问它ftp抓把。保存在文件中。
# tcpdump -A -w /tmp/t.txt tcp portrange 20-21
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
^C36 packets captured
# ftp 192.168.4.101
Connected to 192.168.4.101 (192.168.4.101).
220 (vsFTPd 2.2.2)
Name (192.168.4.101:root): ftp
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,101,197,237).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 4 Mar 08 00:48 1.txt
drwxr-xr-x 2 0 0 4096 Mar 062015 pub
226 Directory send OK.
ftp> get 1.txt
local: 1.txt remote: 1.txt
227 Entering Passive Mode (192,168,4,101,106,217).
150 Opening BINARY mode data connection for 1.txt (4 bytes).
226 Transfer complete.
4 bytes received in 0.000489 secs (8.18 Kbytes/sec)
ftp> quit
221 Goodbye.
# tcpdump -A -w /tmp/t.txt tcp portrange 20-21
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
(按ctrl+c,保存退出)
^C36 packets captured
36 packets received by filter
0 packets dropped by kernel
# tcpdump -A -r /tmp/t.txt(把抓到的在屏幕中显示)
reading from file /tmp/t.txt, link-type EN10MB (Ethernet)
09:00:17.542583 IP 192.168.4.7.58623 > 192.168.4.101.ftp:
E..<.4@.@..........e.......?......9............
............
...........................................
# tcpdump -A -r /tmp/t.txt |grep -i --color pass(在抓包文件中检索密码)
reading from file /tmp/t.txt, link-type EN10MB (Ethernet)
.i......331 Please specify the password.
...0.i..PASS ftp
.i.....y227 Entering Passive Mode (192,168,4,101,197,237).
.i.D....227 Entering Passive Mode (192,168,4,101,106,217).
————————————————————————————————————————————————————————————————
____________________________________________________________________________________________________________________________________________________
网络中用来抓包,协议分析工具是用wireshark,俗称网络鲨鱼,装好后。在应用程序里可以把这个软件打开,是用图形界面显示的,所以装的时候要有图形。抓到包后,这图形上面显示抓到的包,下面显示这个包经过的物理层,数据链路层,网络层和传输层。最下面显示的是点开哪一层,都会详细信息。(公司生产环境中抓包,一般抓的是装防火墙的这台服务器。
3.3协议分析工具(wireshark)(网络鲨鱼)
# yum -y install wireshark wireshark-gnome
# rpm -qa |grep shark
wireshark-gnome-1.8.10-17.el6.x86_64
wireshark-1.8.10-17.el6.x86_64
osi(开放系统互联) 物理层(网卡) 数据链路层(交换) 网络层(路由,三层)传输层 (udp视频音频适合 tcp)会话 表示层应用 http ftp smtp
IP包里都包含哪些信息:目标地址 源地址 目标端口源端口
tcp标记位 : 建立连接SYN确认ACK 断开FIN发送数据PUSH 重新连接RST
tcp/ip 四层:
物理层(比特流)网络层(包)传输层(段) 应用层(协议层)
为什么给ip包分段:因为数据包可能比较大,路由过不去只能分段,每个数据包会有tcp标记,。
ftp(下载20 主动) ftp(访问21 被动)
CA机构(CA服务器)是用来给公司服务器颁发数字证书的。有权威的也有私有自己搭建的。
使用IP地址是X.X.X.88主机做CA服务器
整体部署思路
第一步:配置CA签署环境(给客户端发证的默认配置)
/etc/pki/tls/openssl.cnf
第二步:为CA服务器生成私钥(创建密钥对)
第三步:为CA服务器创建根证书 (生成自己的根证书文件)
第四步:发布根证书文件(把自己的根证书共享给客户端)
第五步:客户端下载根证书
1
# rpm -qf /etc/pki/tls/openssl.cnf
openssl-1.0.1e-42.el6.x86_64
#
vim /etc/pki/tls/openssl.cnf
40 [ CA_default ]
42 dir = /etc/pki/CA
43 certs = $dir/certs
45 database = $dir/index.txt
50 certificate = $dir/my-ca.crt
55 private_key = $dir/private/my-ca.key
84 [ policy_match ]
85 countryName = match
86 stateOrProvinceName = match
87 organizationName = match
88 organizationalUnitName= optional
89 commonName = supplied
90 emailAddress = optional
128 [ req_distinguished_name ]
130 countryName_default = CN
135 stateOrProvinceName_default = beijing
138 localityName_default = beijing
141 0.organizationName_default = tarena
148 organizationalUnitName_default= ope
:wq
touch/etc/pki/CA/index.txt
echo01>/etc/pki/CA/serial
2
cd/etc/pki/CA/private/
]# opensslgenrsa-des32048>my-ca.key
chmod600my-ca.key
3
cd /etc/pki/CA/private/
openssl req -new-x509-keymy-ca.key-days 365>
../my-ca.crt
# openssl req -new-x509-key
my-ca.key-days 365 > ../my-ca.crt
Enter pass phrase for my-ca.key:
You are about to be asked to enter information that will
be incorporated
into your certificate request.
What you are about to enter is what is called a
Distinguished Name or a DN.
There are quite a few fields but you can leave some
blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) :
State or Province Name (full name) :
Locality Name (eg, city) :
Organization Name (eg, company) :
Organizational Unit Name (eg, section) :
Common Name (eg, your name or your server's
hostname) []:ca.tedu.cn
Email Address []:plj@tedu.cn
#
# ls /etc/pki/CA/my-ca.crt
/etc/pki/CA/my-ca.crt
#
4
rpm-qhttpd||yum-yinstallhttpd
mkdir/var/www/html/certs/
cp/etc/pki/CA/my-ca.crt /var/www/html/certs/
service httpd start
页:
[1]