日志安全
存放目录: /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@
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 <---- -->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
数字证书和数字签名的概念
openvpn
查看审计日志---》修改安全上下文,或者涉及到的安全策略(取消对客体的保护)---》程序工作正常
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 ./ -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网络
Vpn_serv
eth0 2.2.2.2 vmnet2网络
eth1 3.3.3.253 vmnet3网络
gw: 2.2.2.253
准备:根据上表给各个机器配置好IP,网关
FQDN主机名,绑定hosts
一、配置vpn_serv
常见vpn技术:IPsec, PPTP, PPP over SSH, SSL ×××
SSL ×××: openvpn
1、安装lzo-2.03.tar.gz
# ./configure && make && make install
2、安装openvpn服务端
# ./configure && make && make install
3、配置openvpn
# mkdir -p /etc/openvpn/keys
# cd /etc/openvpn/
# cp -r /usr/src/openvpn-2.0.2/easy-rsa/* /etc/openvpn/
# 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) []:vpn1
生成服务端使用的证书
# ./build-key-server vpn1
....
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/
vpn1.crt vpn1.key
生成DH密钥,DH专门用于密钥交换的,保证密钥在不安全的网络中能够安全交换。
# ./build-dh
# ls keys/dh1024.pem
生成其中一个客户端的证书
# ./build-key client1
生成服务端使用的证书步骤一样
修改openvpn主配置文件:
# cp /usr/src/openvpn-2.0.2/sample-config-files/server.conf /etc/openvpn/server.conf
# vim !$
port 1194
proto udp
dev tun
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/vpn1.crt
key /etc/openvpn/keys/vpn1.key
dh /etc/openvpn/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/openvpn-2.0.2/sample-scripts/openvpn.init /etc/rc.d/init.d/openvpn
# chmod 755 !$
# service openvpn start
# ifconfig tun0
# lsof -i:1194
注意:服务端和客户端的时间一定要非常接近
二、配置路由器
1、打开路由转发
2、配置好正确IP
三、配置客户端
1、配置好IP 和 网关
2、安装openvpn的客户端
openvpn-2.0.9-gui-1.0.3-install.exe
3、把上面生成的客户端的证书和ca证书拷贝到客户端
ca.crt client1.crt client1.key
拷贝到这个目录
C:\Program Files\Open×××\config
建立拨号配置文件client1.ovpn
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

















