7.1
网络封包联机进入主机的流程
7.1.1
封包进入主机的流程
-------------------------------------------------------------------------
Internet
|
第一层防火墙:iptables(netfilter)
|
第二层防火墙:TCP_Wrapper
|
--------
服务器设定值:http,ftp,samba...
——>| 登 |
|
| 录 |
权限的细部设定:SELinux
——>| 档 |
|
--------
档案权限的设定(r, w, x)
----------------------------------------------------------------------------------
1. 经过防火墙的分析
(1).
封包过滤防火墙:IP Filtering或 Net Filter
软件:
iptables(netfilter)
----分析TCP/IP的封包表头来进行过滤
OSI:
二、三、四
封包阶段:
MAC、IP、ICMP、TCP/UDP的端口与状态(SYN、ACK)
(2).
第二层防火墙:TCP Wrappers
/etc/hosts.allow
/etc/hosts.deny
2. 服务(daemon)的基本功能
httpd.conf
----通过这个配置文件规范某些IP开源不能使用httpd这个服务
3. SELinux对网络服务的细部权限控制
注意:比如说通过SELinux将httpd程序的权限控制在啊/var/www/html中
4. 使用主机的文件系统资源
7.1.2
常见的攻击手法与相关保护:猜密码,漏洞,社交工程,程序误用,rootkit,DDoS
1.
取得账户信息后猜密码
应对:
(1)减少信息的曝光机会:Email Address不要随便用
(2)建立较严格的密码设定规则:chattr限制账号文档的更改
(3)完善权限限定
2.
利用系统的程序漏洞主动攻击
应对:
(1)关闭不需要的网络服务:开的端口越少越好
(2)随时保持更新
(3)关闭不需要的软件:比如SSH
3.
利用社交工程作欺骗
(1)追踪对谈者
(2)不要随意透露账号/密码信息
4.
利用程序功能的被动攻击
应对:
(1)随时更新主机上的所有软件
(2)弱化软件的功能
(3)不要连接到不明的主机
5.
蠕虫或木马的rootkit
(1)不要随意安装不明来源的档案或者不明当那数据
(2)不要让系统有太多危险的指令:例如SUID/SGID的程序
(3)可以以rkhunter之类的软件来追查:有个网站提供rootkit程序的检查,可以分析你的主机
6.
DDoS攻击法(Distributed Denial of Service: 分布式阻断服务攻击)
注意:比如常见的SYN
Flood攻击,就是透过分散在各地的僵尸计算机发送大量SYN封包,如果client端在发送SYN的封包后,却将来子鸡server端的确认封包丢弃,这样server端就会一直空等,如果在你短时间内持续发送这样的SYN封包,那么server就会持续不断发送确认封包。
7.
其它高大上的攻击方法
(1)设定规则完善的防火墙
(2)核心功能
(3)登录文件与系统监控(使用MRTG之类的监控软件)
7.1.3
主机能作的保护:软件更新、减少网络服务、启动SELinux
1.
软件更新的重要性
2.
认识系统服务的重要性
3.
权限与SELinux的辅助
7.2
网络自动升级软件
7.2.1
如何进行软件升级
(1)升级到较新的版本
(2)利用tarball来字型升级核心与软件
7.2.2
CentOS的yum软件更新、映象站使用的原理
-------------------------------------------------------------------------------------------------------
取得清单列表
YUM服务器
<——————>
Linux用户端
容器资料清单:/path/repodata
实际安装
清单记录:/var/cache/yum/
实际软件目录:FTP/http均可
<——————>
-------------------------------------------------------------------------------------------------------
1. 先由配置文件判断yum
server所在的IP地址、
2. 连接到yum
server后,先下载新的RPM档案的表头数据
3.
分析比较使用者所欲安装/升级德尔档案,并提供使用者确认
4.
下载用户选择的档案到系统中的/var/cache/yum,并进行实际安装
7.2.3
yum的使用:安装,软件群组,全系统更新
yum [option] [查询的工作项目]
[相关参数]
-----------------------------------------------------------------------------------------------------------
|option:
|
-y: 当yum询问使用者的意见时,主动回答yes而不需要由键盘输入
|查询的工作项目:
|
install: 安装指定的软件,后面跟软件名称
|
update: 进行整体升级的行为;也可以仅升级一个软件,后面接某个软件
|
remove: 移除某个软件,后面跟软件名称
|
search: 搜寻某个软件或者是重要关键字
|
list: 列出目前yum所管理的所有软件的名称与版本,有点类似rpm -qa
|
info: 同上,不过有点类似于rpm -qai
|
clean:下载的档案被放到/var/cache/yum,可使用cclean将它移除,可清楚的项目:packages|headers|metadata|cache等
|
grouplist: 列出所有可以使用的软件群组
|
groupinfo:
后面接group_name,则可了解该group内含的所有软件名;
|
groupinstall:
可以安装一整组软件;常与--installroot=some/path共享来安装新系统
|
groupremove: 移除某个软件群组
--------------------------------------------------------------------------------------------------
1. 利用yum安装
# yum search raid
----查找CentOS官网提供的软件名称和RAID有关的软件
# yum info madam
----查看madam功能为何
# yum install madam
----安装madam
# yum list javacc*
# vim /etc/yum.conf
----yum预设会将下载的RPM档案安装完毕后予以删除,通过修改配置文件予以保留
[main]
cachedir=/var/cache/yum/$basearch/$releaserver
----RPM下载的目录
keepcache=1
----默认不删除
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
# rpm -Fvh*.rpm
----将所有下载好的RPM档案安装
2. yum安装软件群组
# LANG=C
yum grouplist ----查询系统有的软件群组有多少个
Installed
Group: ----已经安装的软件群组
Additional Development
...
Available
Group: --------尚可安装的软件群组
...
# yum
groupinfo "Desktop Platform" ----查看Desktop
Platform内含有多少个RPM软件呢
Group: 桌面环境平台
Description: 受支援的CentOS Linux桌面平台函式库
Mandatory Packages:
----主要的会被安装的软件有这些
Optional Packages:
----额外可选择的软件
#
yum groupindtsll "Desktop Platform"
3.
全系统更新
#
vim /etc/crontab
40
5 * * * root yum -y update $$ yum clean packages
----每天5:40自动更新
7.2.4
挑选特定的映象站:修改yum配置文件与清除yum快取
注意:网址下包含repodata目录则说明这个网址可以作为yum的容器配置文件
1. 修改yum配置文件
方式一:修改系统的默认配置文件(使用特定映象站)
#
vim /etc/yum.repos.d/CentOS-Base.repo
----容器的配置文件
#下面仅列出base这个容器
[base]
----容器的名字(一定要有中括号,名字不能重复)
name=CentOS-$releaseerver -
Base ----说明容器的意义
gpgcheck=1
----指定是否需要查阅RPM档案内的数字签名
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
----数字签名的公钥文件所在位置
# yum
clean all
----清除已有的清单
# yum
repolist all
----列出目前yum server所使用的容器,enabled才是启动了的
方式二:在.etc.yum.repos.d/下新建档案,扩展名为.repo(为其他软件提供容器)
2. 清除yum缓存
注意:如果修改指定的网址却没有修改容器名称,会造成本机的列表与yum服务器不同步,进而无法步
# yum
clean [packages|headers|all]
-----------------------------------------------------
|选项与参数:
| packages:
将已经下载的软件档案清除
| headers:
将下载的软件文件头删除
| all:
将所有容器数据删除
-----------------------------------------------------
# yum
clean all
----删除已经下载的所有容器的相关数据(含软件本身与列表)
范例一:提供一个包含自由软件的网址,配置好yum容器
# vim
/etc/yum.repos.d/drbl.repo
[drbl]
name=This is DBRL
site.
----解释
enable=1
----激活这个容器
gpgcheck=0
----不进行签名检验
# yum repolist all
----观察所有的容器,看看有没有新增drbl
7.3
限制联机端口
7.3.1
什么是port
1. 服务器启动的监听端口所对应的服务是固定的
2.
客户端启动端口时,随机启动一个大于1024以上的端口
3. 一部服务器可以同时提供多种服务
4. 共65536(2^16)个端口
只有root才能启动保留的端口;
大于1024用于clent端的端口;
5. 是否需要三次握手
6. 通讯协议可以启动在非正规的端口
7. 所谓端口的安全性
7.3.2
端口的观察:netstat,nmap
1. netstat
在本机上面以自己的程序检测自己的端口
# netstat
-tunl
----列出在监听的网络服务
# netstat
-tun
----列出已联机的网络联机状态
# netstat
-tunp
----观察联机服务的PID并删除之
# kill -9
1342
----建设监理的联机的PID为1342
2. nmap
透过网络侦测软件辅助,可侦测非本机上的其它网络主机,担忧违法之虞
nmap
[扫描类型] [扫描参数] [hosts地址与范围]
------------------------------------------------------------------------------------
|扫描类型:
| -sT:
扫描TCP封包已建立的联机
| -sS:
扫描TCP封包带有SYN卷标的数据
| -sP:
以ping的方式进行扫描
| -sU:
以UDP的封包格式进行扫描
| -sO:
以IP的协议进行主机的扫描
|扫描参数:
| -PT:
使用TCP里头的ping的方式进行扫描,可以获知目前有几部计算机存活(较常用)
| -Pl:
使用实际的ping(带有ICMP封包)来进行扫描
| -p: 这个port
range,例如1024-,80-1023,30000-60000等等的使用方式
|Hosts地址与范围:
| 192.168.1.100
----直接写入HOST IP而已,仅检查一部
| 192.168.1.0/24
----为C Class的形态
| 192.168.*.*
----B Class的形态,扫描的范围变广了
|
192.168.1.0-50,60-100,103,200
----这种事变形的主机范围
---------------------------------------------------------------------------------------------------
范例一:使用预设参数扫描本机所启用的port(只会扫描TCP)
# yum
install nmap
----安装nmap
# nmap localhost
----扫描本机所有端口,预设仅扫描TCP协议
范例二:同事扫描本机的TCP/UDP端口
# namp -sTU localhost
范例三:透过ICMP封包的检测,分析区网内有几部主机是启动的
# namp
-sP 192.168.1.0/24
----启动的主机的IP对应的MAC也会被记录下来
范例四:将各个主机的启动的端口都作一番侦测
# nmap 192.168.1.0/24
3. 预设启动的服务
服务名称 |
服务内容 |
acpid |
新版的电源管理模块地,通常仓建议开启,不过某系而笔记本如果不支持就得关闭 |
std |
在管理单一预约命令执行的服务,需要启动 |
crond |
管理工作排程的重要服务 |
haldaemon |
作系统硬件变更侦测的服务,务必启动 |
iptables |
linux内建的防火墙软件 |
network |
网络服务 |
postfix |
系统内部邮件传递服务 |
rsyslog |
系统的登录文件服务 |
sshd |
远程以文字终端登陆 |
xinetd |
就是super daemon,要启动 |
7.3.3
端口与服务的启动/关闭及开机时状态设定:服务类型,开机启动
7.3.3.1
服务类型
1. Stand alone
2. Super daemon
7.3.3.2
范例
范例一:找到系统上面开启111端口的程序并将其关闭
# netstat
-tnlp | grep 111
----找到程序名
# which
rpcbind
----利用程序名找到实际对应的档案
# rpm -qf
/sbin/rpcbind
----找到这个档案对应的程序的完整名称
# rpm -qc
rpcbind | grep init
----找到启动这支程序的执行文件
#
/etc/init.d/rpcbind stop
----关掉它
范例二:启动telnet(super daemon控管)
# rpm -qa
| grep telnet-server
----看看有没有安装telnet
# yum
install telnet-server
----安装telnet
# vim
/etc/xinetd/telnet
----编辑telnet在super
daemon,控管下的配置文件
disable=no
#
/etc/init.d/xinetd restart
----重新启动super daemon
# netstat
-tnlp
----观察23端口是否启动
7.3.4
安全性考虑-关闭网络断端口
范例一:找出目前系统上面正在运作中的服务,并找到相对应的启动脚本(/etc/init.d/)
# netstat
-tlunp
# vim
rpc.stated
----在这个脚本中写入想要关闭的服务
# rpm -qc
$(rpm -qf $(which rpc.stated)) | grep init
----查找对应的启动脚本
# vim
/bin/closedaemon.sh
----编写关闭一系列服务的脚本
for
daemon in nfslock rpcgssd rpcidmapd rpcsvcgssd xinetd rpcbind
do
chkconfig $daemon off
/etc/init.d/$daemon stop
done
# sh
/bin/closedaemon.sh
----启动关闭服务的脚本
# netstat
-tlunp
----看看还剩下哪些服务在开启
7.4
SELinux管理原则
7.4.1
SELinux的运作模式:安全性文本,domain/type
范例一:httpd和/var/www/html的安全性本文
# ll -Zd
/usr/sbin/httpd /var/www/html
-rwxr-xr-x. root root system_u:object_r:httpd_exec_t:s0
/usr/sbin/httpd
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0
/var/www/html
SELinux工作流程:
1.
首先,触发/usr/sbin/httpd这个档案,档案类型为httpd_exec_t;
2.
这个档案产生的主体程序具有httpd这个领域(domain),我们的政策针对这个领域已经制定了许多规则,其中包括这个领域可以读取的目标资源类型;
3.
由于httpd
domain被设定为可以读取httpd_sys_content_t这个类型的目标档案(Object),因此你的网页放置到/var/www/html目录下,就能够被htttpd那支程序所读取了;
4.
但最终能不能读到正确地资料,还要看rwx是否符合Linux权限的规范!
7.4.2
SELinux的启动、关闭与观察:gentenforce, setenforce
1. SELinux的观察
#
getenforce
----显示目前SELinux所处在的模式
Enforcing
----强制模式,表示已经在运作中,且已经正确地开始限制domain/type
# vim
/etc/selinux/config
SELINUX=enforcing
----调整enforcing|disabled|permissive
SELINUXTYPE=targeted
----目前仅有targeted与mls
2. SELinux的启动与关闭
注意:从disabled转到启动SELinux模式时,由于系统必须要针对档案写入安全性文本的信息,因此开机过程会花不少时间等待写入,而且完成之后还要再次重启。
Enforcing
^
<--------->
不需要 |
需要重启
Disabled
v
<--------->
Permissive
setenforce [0|1]
在Enforcing与permition之间进行模式的转换,无法在Disabled模式下进行模式的切换
------------------------------------
| 0:转成permissive宽容模式
| 1:转成Enforcing强制模式
-------------------------------------
范例一:将SELinux在Enforcing与permission之间切换与观察
# setenfoerce 0
----Enforcing-->permission
# getenforce
----查看状态改变了没有
# setenforce 1
范例二:Disabled切换为Enforcing之后,一堆服务无法启动,但切换为permision后正常
# setenforcing 0
----可能是因为重新写入SELinux
type出错,先切换为permission
# restorecon -Rv /
----重新还原所有SELinux的类型
# setenforcing 1
----再转为Enforcing,然后启动执勤啊出错的服务试试
7.4.3
SELinux type的修改:chcon,restorecon,semanage
注意:复制时,SELinux的type字段会继承目标目录的,移动时SELinux的类型也会被移动过去
范例一:复制,并观察相关的SELinux类型变化
# cp
/etc/hosts /root
# ls -dZ
/etc/hosts /root/host /root
----发现/root/host继承了/root的类型
范例二:移动,并观察SElinux的类型
# mv
/root/hosts /tmp
# ls -dZ
/tmp /tmp/hosts
----/tmp和/tmp/hosts类型不相同,也就是说/tmp/hosts保持了原来的类型没
chcon [-R] [-t
type] [-u user] [-r role] 档案
chcon [-R]
--reference=范例文件 档案
------------------------------------------------------------
|选项与参数:
| -R:
联通该目录下的次目录也同时修改
| -t:
后面接安全性本文的类型字段,比如https_sys_content_t
| -u:
后面接身份识别,例如system_u
| -r:
后面接角色,例如system_r
| --reference=范例文件:
拿某个档案当范例来修改后面接的档案的类型
-------------------------------------------------------------
范例一:将刚刚的/tmp/hosts类型改为net_conf_t的类型
# chcon -t net_conf_t
/tmp/hosts
# ll -dZ
/tmp/hosts
----观察类型是否改变
范例二:以/var/spool/mail为依据,将/tmp/hosts修改成为该类型
# ll -dZ
/var/sspool/mail
----看看它一开始的类型
# chcon --reference=/var/spool/mail
/tmp/hosts
----修改类型
# ll -Z /tmp/hosts
restorecon
[-Rv] 档案或目录 恢复为预设的设定
-----------------------------------------------
|选项与参数:
| -R: 连同次目录一起修改
| -v: 将过程显示到屏幕上
-----------------------------------------------
范例一:将刚刚的/tmp/hosts移动至/root并以预设的安全性本文改正过来
# mv /tmp/hosts /root
# ll -Z /root/hosts
# restorecon -Rv /root
semanage
[login|user|port|interface|fcontext|translation]
默认目录的安全性本文查询与修改
semanage fcontext -[a|d|m] [-first]
file_spec
主要用在安全性本文方面的用途(/etc/selinux/targeted/context)
-------------------------------------------------
|选项与参数:
| fontext:
主要用在安全性本文方面的用途
| -l: 查询的意思
| -a:
增加一些目录的默认安全性本文类型设定
| -m: 修改的意思
| -d: 删除的意思
---------------------------------------------------
范例一:查询一下/var/www/的预设安全性本文设定为何
# yum install
policycoreutils-python
#
semanage fcontext -l | grep ‘/var/www‘
范例二:利用semanage设定/srv/vbird目录的默认安全性本文为public_content_t
# mkdir /srv/vbird
# ll -Zd /srv/vbird
----预设的情况为var_t
# semanage fcontext -a -t
public_content_t "/srv/vbird(/.*)?"
----将/srv/vbird/底下所有的目录递归地修改为public_content_t
# semanaeg fcontext -l | grep
‘/srv‘
----查看/src目录的安全性本文
# semanage fontext -a -t public_content_t
‘/ssrv/vbird(/.*)?‘
----增加安全性本文类型
# semanage fcontext -l | grep
‘/src/vbird‘ /srv/vbird(/.*)?
----再次查看/srv/vbird及其子文件夹的安全性文本类型
# cat
/etc/selinux/targeted/contexts/files/file_context.local
----看看增加新的安全性文本类型对这个文本造成的更改
/srv/vbird(/.*)?
system_u:object_r:public_content_t:s0
----前面的动作就是写入这个内容
# restorecon -Rv
/srv/vbird*
----尝试恢复默认值
# ll -Zd /srv/vbird
----看看新的默认值有没有生效
7.4.4
SELinux政策内的规则布尔值修订:seinfo,sesearch,getsebool,setsebool
1. 政策查询
# yum install
setools-console
seinfo [-Atrub]
查询政策提供的相关规则
---------------------------------------------------------------------
| -A:
列出SELinux的状态、规则布尔值、身份识别、角色、类别等所有信息
| -t:
列出SELinux的所有类型(type)种类
| -r:
列出SELinux的所有角色(role)种类
| -u:
列出SELinux的所有身份识别
| -b:
列出所有规则的种类(boolean)
------------------------------------------------------------------------
范例一:列出SELinux在此政策下的统计状态(targeted的type有3076中,针对网络服务的Booleans有73个)
# seinfo
范例二:列出与httpd有关的规则
# seinfo -b | grep
httpd
----没有规则的详细信息
sesearch [--all] [-s 主体类别] [-t 目标类别] [-b
布尔值]
-------------------------------------------------------------------------------
|选项与参数:
| --all:
列出该类别或布尔值的所有相关信息
| -t: 后面接类别,例如-t
httpd_t
| -b: 后面还要接布尔值的规则例如-b
httpd_enable_ftp_server
-------------------------------------------------------------------------------
范例一:找出目标档案资源类别为httpd_sys_content_t的有关信息
# sesearch --all -t
httpd_sya_content_t
----【allow 主题程序安全性本文类别
目标资源安全性本文类别】,这样可以查看某个主体程序可以读取的目标资源档案
范例二:我知道有个布尔值为httpd_enable_homedirs,请问该布尔值规范多少规则?
# sesearch -b httpd_enable_homedirs
--all
2. 布尔值的查询与修改
注意:布尔值决定了一系列的规则的启动与关闭
getsebool [-a]
[布尔值条款] 查询布尔值状态
-----------------------------------------------------------------------------
|
-a: 列出目前系统上面所有的布尔值条款设定为开启或关闭状态
-----------------------------------------------------------------------------
范例一:查询本系统内所有的布尔值设定状况
#
getsebool -a
setsebool [-P]
布尔值=[0|1] 关闭或启动布尔值
-----------------------------------------------------------------
|选项与参数:
|
-P: 直接将设定值写入配置文件,该设定数据未来会生效
-----------------------------------------------------------------
范例一:查询httpd_enable_homedirs是否为on,若不为on请启动他
#
getsebool http_enable_hoomedirs
----未开启
#
setsebool -P httpd_enable_homedirs=1
----启动这个布尔值,记得一定要加-P选项
# getsebool
http_enable_hoomedirs
----已开启
7.4.5
SELinux登记文件记录所需服务-以httpd为范例:setroubleshoot, sealert
1.setroubleshoot
将错误信息写入/var/log/messages和/var/log/setroubleshoot/*
注意:setroubleshoot需要安装两个软件setroubleshoot和setroubleshoot-server
# yum
install setroubleshoot setroubleshoot-server
----安装两套软件
#
/etc/init.d/auditd restart
----整合到auditd当中
(1)先由auditd去呼叫audispd服务
(2)然后audispd服务去启动sedispatch程序
(3)sedispatch再将原来的auditd讯息转成setroubleshoot的讯息,进一步储存下来
范例一:使用httpd这支程序产生的错误来说明。WWW是由htttpd这支服务提供的,因此你必须要安装且启动它才行
# /et/init.d/httpd
start
---- 开启WWW服务
# netstat -tlnp | grep
http
----看看80端口是否已经启动
tcp
0 0
:::80 :::*
LISTEN 2218/httpd
# echo "My first selinux check" >
index.html
----写一个简单的网页
# ll index.html
----看看权限有没有什么问题
# mv index.html
/var/www/html
----将其复制到WWW服务器的文件夹中
# links
http://localhost/index.html
----文字接口打开网页试试,权限不对劲
# cat /var/log/messages | grep
setroubleshoot
----看看有说呢么错误记录信息,有的话会看到错误代码
# sealert -l
6c927892-2469-4fcc-8568-949da0b4cf8d
----查阅完整的数据
2.
用email或在指令列上面直接提供setroubleshoot错误讯息
# vim
/etc/setroublrshoot/setroubleshoot.cfg
----修改setroubleshoot的配置文件让setroubleshoot主动发送信息到自己的email
recipients_filepath=/var/lib/setroubleshoot/email_alert_recipients
(81)----这行必须要存在
console=True
(147)----将原来的False修改成True
# vim
/var/lib/setroubleshoot/email_alert_recipients
----填写邮件地址
root@localhost
your@email.adderss
#
/etc/init.d/auditd restart
----重启auditd
3. SELinux错误克服的总结
1.
在服务与rwx权限都没有问题,却无法成功的使用网络服务时;
2. #
setenforce 0
----先设定为宽容模式
3.
再次使用该网络服务,如果这样能用表示确实是SELinux的问题
4.
分析/var/log/messages内的信息,然后用sealert -l处理
5.
找到AlloowAccess的关键词。照里面的动作进行SELinux的错误克服
6. # setenforce 1
----再次测试网络服务
7.5
被攻击后的主机修复工作
7.5.1
网管人员应该具备的技能
1. 了解什么是需要保护的内容
2. 预防黑客的入侵
3. 主机环境安全化
4. 防火墙规则的设定
5. 实时维护你的主机:log
file、portsentry
6. 良好的教育训练课程
7.
完善的备份计划: rsync工具
7.5.2
主机受攻击或复原工作流程
1. 立即拔出网络线
2. 分析登陆文件信息,搜寻可能的入侵途径
分析登录档;
检查主机开放的服务;
查询Internet上面的安全通报。
3. 重要数据备份
4. 重新全新安装
5. 软件的漏洞修补
6. 关闭或 移除不需要的服务
7. 数据恢复与恢复服务设定
8. 连上Internet
7.6
重点回顾
7.7 本章习题
网络安全与主机基本防护-linux鸟哥的私房菜服务器篇07(阅读笔记)
原文:http://www.cnblogs.com/eli01/p/3559621.html