日志安全
 存放目录: /var/log/
  btmp  <---lastb
  wtmp
  lastlog
  secure <---跟权限相关,帐号相关,pam相关的安全信息日志

 logwatch
  默认配置
  /usr/share/logwatch/default.conf/logwatch.conf
  日志分析脚本
  /usr/share/logwatch/scripts/services/
  
  # logwatch --detail High --Service ALL --range ALL --print
  # logwatch --detail High --Service sshd --range ALL --print
  # logwatch --detail High --Service sshd --range ALL --mailto admin@gmail.com

 nagios
  check_log
  check_file_content

 针对性的日志分析
  awstat : apache,squid,nginx <---一般使用combine
  google的web访问统计系统,51.la,中国站长网

 写脚本:
  专门去分析某个日志文件,然后关注模些关键字: error,warning
  
 值得关心的一些日志:
  无故的重启事件,登录失败,登录时间,不应该出现的登录帐号

查看当前tcp连接IP 

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
 

=====================================

Iptables
 filter 数据包过滤
  INPUT,OUTPUT,FORWARD
 nat 地址映射
  OUTPUT,POSTROUTING,PREROUTING
 mangle 数据包打标记
 raw 原始数据处理
 

本机:10.1.1.22,  222.33.44.88

sp:1028
dp:80
sip:10.1.1.88
dip:202.38.11.54
 
  
原地址映射:
 内 ----> 外
目标地址映射
 外 ----> 内
       ftp1
 Clients ---Internet--> eth0 [Router] eth1 -->  
       web1

route 表:
61.2.2.0        0.0.0.0    255.255.255.0   U     0      0        0 eth0 
10.1.1.0        0.0.0.0    255.255.255.0   U     0      0        0 eth1

 


client
 61.1.1.1
router
 eth0 61.2.2.2
 eth1 10.1.1.1

web1 
 10.1.1.22


http://61.2.2.2 <---- www.upl.com -->61.2.2.2

Clients:
sp:1028
dp:80  <----
sip:61.1.1.1
dip:61.2.2.2 <----

 iptables -t nat -A PREROUTING -p tcp --dport 80 -d 61.2.2.2 -i eth0 -j DNAT --to 10.1.1.22

Clients:
sp:1028
dp:80  <----
sip:61.1.1.1
dip:10.1.1.22

 

打开iptables的情况下,让各种服务正常通讯


必须规则:
 iptables -t filter -A INPUT -i lo -j ACCEPT
 iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 iptables -P INPUT DROP

具体服务器的规则:
 web:
 iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT

 mail:
 iptables -A INPUT -p tcp -m multiport --dports 25,110,995,465,143,993 -j ACCEPT

 DNS:
 iptables -A INPUT -p udp --dport 53 -j ACCEPT
 iptables -A INPUT -p tcp --dport 53 -j ACCEPT


samba
 iptables -A INPUT -p tcp -m multiports --dports 137,138,139,445 -j ACCEPT


nfs :
 
# vim /etc/sysconfig/nfs  <---找到PORT关键字,取消前面的#
RQUOTAD_PORT=875
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
STATD_PORT=662
STATD_OUTGOING_PORT=2020

# service portmap restart
# service nfs restart

# rpcinfo -p localhost
留意:111,2049端口

# iptables -A INPUT -p tcp -m multiport --dports 875,32803,32769,892,662,2020,111,2049 -j ACCEPT
# iptables -A INPUT -p udp -m multiport --dports 875,32803,32769,892,662,2020,111,2049 -j ACCEPT


ftp:
 为了支持被动模式ftp,需要加载:ip_conntrack_ftp

# vim /etc/sysconfig/iptables-config
IPTABLES_MODULES="ip_conntrack_netbios_ns ipt_connlimit ip_conntrack_ftp"

 

=================================

Selinux
 
 主体(Subject)  ----->  客体(Object)
 
 主体:进程
 客体:目录,文件,端口等

访问控制:
 DAC(自主访问控制):用户自己判断,决定文件的访问权限
  例子: A用户可以通过chmod指令把文件共享给用户B
  缺点: 如果错误授权,就会导致信息泄密。

 MAC(强制访问控制):通过严格的控制策略,实现多层安全级别数据访问,来控制对客体的访问。管理员无法干预这些策略。

 RBAC(基于角色的访问控制):结合MAC的安全策略控制,也实现了多层安全级别数据访问,但可以通过灵活的接口,允许管理员是修改策略。 通过安全上下文来实现这些功能。


安全上下文:
 描述计算上所有资源的属性。属性包括:用户,角色,类型/域

 用户:由selinux策略定义的用户。
 角色:根据用户的身份特征进行归类。
 类型/域: 针对文件,目录就称之类型,针对进程就称之为域。


 用户:小明 ,角色:男生 ----> 男厕所


工作原理:
 默认,selinux是阻止任何主体访问任意客体。如果需要允许某个主体访问某个客体,就需要相应的策略。


如何启用selinux
# vim /etc/sysconfig/selinux
SELINUX=Enforcing  <--运行模式
SELINUXTYPE=targeted


相关的包:
selinux-policy-strict


查看当前的selinux模式
# getenforce
Permissive

# setenforce  1

# getenforce
Enforcing


为了保证selinux以及一些相关工具正常的使用,确保以下服务运行:
auditd
messagebus
setroubleshoot

 

# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=root:system_r:unconfined_t:s0-s0:c0.c1023


context=用户:角色:类型/域:级别:分类

# ls -lZ /etc/fstab 
-rw-r--r--  root root system_u:object_r:etc_t:s0       /etc/fstab

 

例子1:修改rpm包的http的网站根目录。

默认:/var/www/html
修改: /web/wwwroot

 

# service httpd restart
报错

查看日志
# sealert -a /var/log/audit/audit.log
或者
# sealert -b /var/log/audit/audit.log

找到原因:错误的用户角色访问不该访问类型的文件

解决:通过对比,找到如何修改
# ll -dZ /var/www/html
drwxr-xr-x  root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html
     ^^^^^^^^^^^
# ls -ldZ /web
drwxr-xr-x  root root root:object_r:default_t:s0       /web

更改新的网站根目录的安全上下文中的类型
# chcon -R  -t httpd_sys_content_t /web/

# setenforce 1

# service httpd restart

 


=======================
加密技术:
硬盘加密
 cryptsetup

数字证书和数字签名的概念

open***

 


查看审计日志---》修改安全上下文,或者涉及到的安全策略(取消对客体的保护)---》程序工作正常


chcon
 -R
 -t  修改类型
 -u  修改用户
 -r  修改角色

查看策略
# getsebool -a
# getsebool -a | grep ftp

修改策略
# setsebool -P allow_ftpd_anon_write=1  《--1=on  , 0=off


# system-config-selinux


例子2:在开启selinux情况下,允许ftp匿名上传文件。

匿名帐号的目录是/ftproot

1)ftp服务本身要允许匿名上传

anon_root=/ftproot
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_upload_enable=YES
anon_world_readable_only=NO

2)系统权限(匿名帐号ftp要对上传文件保存的目录有写的权限)
# mkdir /ftproot/pub -P
# chmod 777 /ftproot/pub


3)selinux策略允许,涉及的目录安全上下文要满足
# man ftpd_selinux

对比法
# chcon -t public_content_t /ftproot/
# chcon -t public_content_rw_t /ftproot/pub

# setsebool -P allow_ftpd_anon_write=1

======================================


数据加密
 对称加密
  加密,解密使用完全相同的key
  安全性决定于密码的复杂度
  常见的加密算法:DES,DES3,RC4

 非对称加密
  通信双方有不同的钥匙,对数据进行加密。钥匙分公钥和私钥。
  安全性决定于私钥的保护
  加密是用公钥加密,解密只能用私钥,相反同理。
  常见的加密算法:RSA,DSA,DH


 何为数字证书,数字签名?
  数字签名--使用私钥对数据进行加密
  数字证书--经过ca用私钥加密之后的文件


 Openssl

# man openssl
# man ca
# openssl help


创建rsa私钥
# openssl genrsa -out tanpao.key 1024
# cat tanpao.key
查看rsa私信息
# openssl rsa -noout -text -in tanpao.key

创建对应的rsa公钥
# openssl rsa -in tanpao.key -out tanpao.pubkey -pubout
# cat tanpao.pubkey

查看rsa公钥信
# openssl rsa -noout -text -in tanpao.pubkey -pubin

生成rsa签名证书
# openssl req -new -x509 -days 3650 -key tanpao.key -out tanpao.crt

查看证书的内容
# openssl x509 -noout -text -in tanpao.crt

 


使用对称加密技术加密数据
 加密速度快,支持大文件的加密
# openssl enc -e -rc4 -in /etc/hosts -out ./hosts.enc
enter rc4 encryption password:
Verifying - enter rc4 encryption password:

# openssl enc -d -rc4 -in ./hosts.enc -out ./hosts.de
enter rc4 decryption password:


非对称加密
 加密效率慢,支持小文件

 private key: tanpao.key
 public key:  tanpao.pubkey

使用公钥对数据进行加密
# openssl rsautl -in ./secret.txt -out ./secret.txt.rsa -pubin -inkey tanpao.pubkey -encrypt

使用私钥对数据进行解密
# openssl rsautl -in ./secret.txt.rsa -out ./secret.txt.de  -inkey tanpao.key -decrypt


计算文件的HASH(生成摘要)
# openssl md5 < /etc/hosts
2a1f49b7dacc175270c935356167545f
# openssl sha1 < /etc/hosts
427e562d09a5d368972273d32137a91051c2ffa5

# openssl dgst -md5 /etc/hosts
MD5(/etc/hosts)= 2a1f49b7dacc175270c935356167545f
# openssl dgst -sha1 /etc/hosts
SHA1(/etc/hosts)= 427e562d09a5d368972273d32137a91051c2ffa5


思考:如何巧妙的使用openssl加密大文件,然后安全的进行传输呢?

bigfile.txt

 生成摘要
 使用摘要作为对称加密的key,对大文件进行加密 bigfile.txt.enc
 使用非对称公钥对key(摘要)进行加密 hash.dgst
  --》 把加密后的key 和 加密后的数据一起发送到对方

 接受方:
  使用私钥解密hash.dgst,得到一个摘要(对称加密的key)
  使用该摘要作为key,解密大文件bigfile.txt.enc

 


例子:实现https服务器

1、生成rsa的私钥

2、生成私钥对应的证书

3、设定http,让其支持https
# yum install opensll mod_ssl -y

 
# vim /etc/httpd/conf.d/ssl.conf

DocumentRoot "/share/08"
ServerName 10.1.1.22:443

SSLCertificateFile /share/08/sec_03/tanpao.crt
SSLCertificateKeyFile /share/08/sec_03/tanpao.key

# service httpd restart

 

思考:
 如何搭建pop3s服务器。
 

=========================================

***
 Virtual Private Network 虚拟私有网络
       内部私有网络
       10.1.1.0/24
       /  serv1
Client1 <-----***--Internet-----> eth0[***-server]eth1 --  serv2
61.1.2.3   202.3.4.5  \  serv3

 tun0    tun0
 10.8.0.2   10.8.0.1


DNAT  : 
 dip:eth0

***:
 ping 10.1.8.1  -->
  数据包:
   icmp数据包:
    sip:10.1.8.2
    dip:10.1.8.1
    数据:icmp数据

       /---node1
client <----> eth0[router]eth1 <---> eth0[***_serv]eth1 --
       \---node2

 

client
 eth0 1.1.1.2  vmnet1网络
 gw: 1.1.1.253

router
 eth0 1.1.1.253 vmnet1网络

 eth1 2.2.2.253 vmnet2网络

***_serv
 eth0 2.2.2.2  vmnet2网络
 
 eth1 3.3.3.253 vmnet3网络

 gw: 2.2.2.253

 

准备:根据上表给各个机器配置好IP,网关
 FQDN主机名,绑定hosts

 

 

一、配置***_serv
常见***技术:IPsec, PPTP, PPP over SSH, SSL ***

SSL ***: open***

1、安装lzo-2.03.tar.gz
# ./configure  && make && make install

2、安装open***服务端
# ./configure  && make && make install

3、配置open***

# mkdir -p /etc/open***/keys
# cd /etc/open***/
# cp -r /usr/src/open***-2.0.2/easy-rsa/* /etc/open***/

# vim vars

export KEY_COUNTRY=CN
export KEY_PROVINCE=GD
export KEY_CITY=SHENZHEN
export KEY_ORG="UPLOOKING"
export KEY_EMAIL="im@tanpao.com"

# . vars
# ./clean-all

 

生成ca证书
# ./build-ca
Common Name (eg, your name or your server's hostname) []:***1

生成服务端使用的证书
# ./build-key-server ***1 
....
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated  <----生成成功

# ls keys/
***1.crt  ***1.key

 

生成DH密钥,DH专门用于密钥交换的,保证密钥在不安全的网络中能够安全交换。

# ./build-dh

# ls keys/dh1024.pem

 

生成其中一个客户端的证书

# ./build-key client1
 生成服务端使用的证书步骤一样

 

修改open***主配置文件:
# cp /usr/src/open***-2.0.2/sample-config-files/server.conf /etc/open***/server.conf

# vim !$

port 1194
proto udp
dev tun

ca /etc/open***/keys/ca.crt
cert /etc/open***/keys/***1.crt
key /etc/open***/keys/***1.key

dh /etc/open***/keys/dh1024.pem
server 10.8.0.0 255.255.255.0

push "route 3.3.3.0 255.255.255.0"  <--客户端拨号之后,为她添加一个默认路由条目
client-to-client
comp-lzo
verb 3


# cp /usr/src/open***-2.0.2/sample-scripts/open***.init  /etc/rc.d/init.d/open***
# chmod 755 !$
# service open*** start


# ifconfig tun0
# lsof -i:1194


注意:服务端和客户端的时间一定要非常接近

 

二、配置路由器

1、打开路由转发

2、配置好正确IP


三、配置客户端

1、配置好IP 和 网关

2、安装open***的客户端
open***-2.0.9-gui-1.0.3-install.exe

3、把上面生成的客户端的证书和ca证书拷贝到客户端
ca.crt client1.crt client1.key

拷贝到这个目录
C:\Program Files\Open***\config

建立拨号配置文件client1.o***
client
dev tun
proto udp
remote 2.2.2.2 1194   <----根据实际情况修改
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
comp-lzo
verb 3


拨号成功之后
 ipconfig
 ping 10.8.0.1