您的位置:首页 > 理论基础 > 计算机网络

【鸟哥的linux私房菜-学习笔记】网络安全与主机基本防护

2015-11-23 22:42 666 查看

一.网络封包联机进入主机的流程

1.封包进入主机的流程



经过防火墙的分析:

Linux 系统有内建的防火墙机制,预设的 Linux 防火墙就有两个机制,这两个机制都是独立存在的。第一层是封包过滤式的 netfilter 防火墙, 另一个则是透过软件控管的 TCP Wrappers 防火墙。

封包过滤防火墙:IP Filtering 或 Net Filter

要进入 Linux 本机的封包都会先通过 Linux 核心的预设防火墙,就是称为 netfilter 的咚咚,简单的说,就是 iptables 这个软件所提供的防火墙功能。为何称为封包过滤呢?因为他主要是分析 TCP/IP 的封包表头来进行过滤的机制,主要分析的是 OSI 的第二、三、四层,主要控制的就是 MAC, IP, ICMP, TCP 与 UDP 的埠口与状态 (SYN, ACK…) 等。

第二层防火墙:TCP Wrappers

通过 netfilter 之后,网络封包会开始接受 Super daemons 及 TCP_Wrappers 的检验,那个是什么呢? 说穿了就是 /etc/hosts.allow 与 /etc/hosts.deny 的配置文件功能。 这个功能也是针对 TCP 的 Header 进行再次的分析,同样你可以设定一些机制来抵制某些 IP 或 Port ,好让来源端的封包被丢弃或通过检验;

服务 (daemon) 的基本功能:

举例来说,你可以在 httpd.conf 这个配置文件之内规范某些 IP 来源不能使用 httpd 这个服务来取得主机的数据, 那么即使该 IP 通过前面两层的过滤,他依旧无法取得主机的资源。

SELinux 对网络服务的细部权限控制:

简单的说,SELinux 可以针对网络服务的权限来设定一些规则 (policy) ,让程序能够进行的功能有限, 因此即使使用者的档案权限设定错误,以及程序有问题时,该程序能够进行的动作还是被限制的,即使该程序使用的是 root 的权限也一样。举例来说,前一个步骤的 httpd 真的被 cracker 攻击而让对方取得 root 的使用权,由于 httpd 已经被 SELinux 控制在 /var/www/html 里面,且能够进行的功能已经被规范住了,因此 cracker 就无法使用该程序来进行系统的进一步破坏。

使用主机的文件系统资源

文件权限。

2.主机防护的一些建议

建立完善的登入密码规则限制;

完善的主机权限设定;

设定自动升级与修补软件漏洞、及移除危险软件;

在每项系统服务的设定当中,强化安全设定的项目;

利用 iptables, TCP_Wrappers 强化网络防火墙;

利用主机监控软件如 MRTG 与 logwatch 来分析主机状况与登录文件;

3.主机能作的保护: 软件更新、减少网络服务、启动 SELinux

二.限制联机端口 (port)

1.端口的观察: netstat, nmap

netstat:在本机上面以自己的程序监测自己的 port;

nmap:透过网络的侦测软件辅助,可侦测非本机上的其他网络主机,但有违法之嫌。(很多 cracker 会直接以他来侦测别人的主机,这个时候就可能造成违法)

列出在监听的网络服务:

[root@www ~]# netstat -tunl
ctive Internet connections (only servers)
Proto Recv-Q Send-Q Local Address    Foreign Address    State
tcp        0      0 0.0.0.0:111      0.0.0.0:*          LISTEN
tcp        0      0 0.0.0.0:22       0.0.0.0:*          LISTEN
tcp        0      0 127.0.0.1:25     0.0.0.0:*          LISTEN
....(底下省略)....


列出已联机的网络联机状态:

[root@www ~]# netstat -tun
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address       Foreign Address     State
tcp        0     52 192.168.1.100:22    192.168.1.101:2162  ESTABLISHED


删除已建立或在监听当中的联机:
[root@www ~]# netstat -tunp
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address    Foreign Address     State       PID/P name
tcp        0     52 192.168.1.100:22 192.168.1.101:2162  ESTABLISHED 1342/0

[root@www ~]# kill -9 1342


nmap 的软件说明之名称为:『Network exploration tool and security / port scanner』,顾名思义, 这个东西是被系统管理员用来管理系统安全性查核的工具。

[root@www ~]# nmap [扫瞄类型] [扫瞄参数] [hosts 地址与范围]
选项与参数:
[扫瞄类型]:主要的扫瞄类型有底下几种:
-sT:扫瞄 TCP 封包已建立的联机 connect() !
-sS:扫瞄 TCP 封包带有 SYN 卷标的数据
-sP:以 ping 的方式进行扫瞄
-sU:以 UDP 的封包格式进行扫瞄
-sO:以 IP 的协议 (protocol) 进行主机的扫瞄
[扫瞄参数]:主要的扫瞄参数有几种:
-PT:使用 TCP 里头的 ping 的方式来进行扫瞄,可以获知目前有几部计算机存活(较常用)
-PI:使用实际的 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)
[root@www ~]# yum install nmap
[root@www ~]# nmap localhost
PORT    STATE SERVICE
22/tcp  open  ssh
25/tcp  open  smtp
111/tcp open  rpcbind
# 在预设的情况下,nmap 仅会扫瞄 TCP 的协议!


# 范例二:同时扫瞄本机的 TCP/UDP 埠口
[root@www ~]# nmap -sTU localhost
PORT    STATE SERVICE
22/tcp  open  ssh
25/tcp  open  smtp
111/tcp open  rpcbind
111/udp open  rpcbind  <==会多出 UDP 的通讯协议埠口!


# 范例三:透过 ICMP 封包的检测,分析区网内有几部主机是启动的
[root@www ~]# nmap -sP 192.168.1.0/24
Starting Nmap 5.21 ( http://nmap.org ) at 2011-07-20 17:05 CST
Nmap scan report for www.centos.vbird (192.168.1.100)
Host is up.
Nmap scan report for 192.168.1.101 <==这三行讲的是 192.168.101 的范例!
Host is up (0.00024s latency).
MAC Address: 00:1B:FC:58:9A:BB (Asustek Computer)
Nmap scan report for 192.168.1.254
Host is up (0.00026s latency).
MAC Address: 00:0C:6E:85:D5:69 (Asustek Computer)
Nmap done: 256 IP addresses (3 hosts up) scanned in 3.81 seconds


2. 端口与服务的启动/关闭及开机时状态设定

其实 port 是由执行某些软件之后被软件激活的,所以要关闭某些 port 时,那就直接将某个程序给他关闭,虽然可以用kill,但是这不是正常的关闭,想要正常关闭,我们可以使用系统提供的script。

回顾:stand alone 与 super daemon

Stand alone

顾名思义,stand alone 就是直接执行该服务的执行档,让该执行文件直接加载到内存当中运作, 用这种方式来启动可以让该服务具有较快速响应的优点。一般来说,这种服务的启动 script 都会放置到 /etc/init.d/ 这个目录底下,所以你通常可以使用:『 /etc/init.d/sshd restart 』之类的方式来重新启动这种服务;

Super daemon

用一个超级服务作为总管,来统一管理某些特殊的服务。在 CentOS 6.x 里面使用的则是 xinetd 这个 super daemon 啊!这种方式启动的网络服务虽然在响应上速度会比较慢, 不过,可以透过 super daemon 额外提供一些控管,例如控制何时启动、何时可以进行联机、 那个 IP 可以连进来、是否允许同时联机等等。通常个别服务的配置文件放置在 /etc/xinetd.d/ 当中,但设定完毕后需要重新以『 /etc/init.d/xinetd restart 』重新来启动才行!

例子:关闭111端口

[root@www ~]# netstat -tnlp | grep 111
tcp        0      0 0.0.0.0:111    0.0.0.0:*       LISTEN  990/rpcbind
tcp        0      0 :::111         :::*            LISTEN  990/rpcbind
# 原来用的是 rpcbind 这个服务程序!

[root@www ~]# which rpcbind
/sbin/rpcbind
# 找到档案后,再以 rpm 处理处理

[root@www ~]# rpm -qf /sbin/rpcbind
rpcbind-0.2.0-8.el6.x86_64
# 找到了!就是这个软件!所以将他关闭的方法可能就是:

[root@www ~]# rpm -qc rpcbind | grep init
/etc/rc.d/init.d/rpcbind
[root@www ~]# /etc/init.d/rpcbind stop


一些必要的服务,不要关闭!

服务名称服务内容
acpid新版的电源管理模块,通常建议开启,不过,某些笔记本电脑可能不支持此项服务,那就得关闭
atd在管理单一预约命令执行的服务,应该要启动的
crond在管理工作排程的重要服务,请务必要启动啊!
haldaemon作系统硬件变更侦测的服务,与 USB 设备关系很大
iptablesLinux 内建的防火墙软件,这个也可以启动啦!
network这个重要了吧?要网络就要有他啊!
postfix系统内部邮件传递服务,不要随便关闭他!
rsyslog系统的登录文件记录,很重要的,务必启动啊!
sshd这是系统默认会启动的,可以让你在远程以文字型态的终端机登入喔!
xinetd就是那个 super daemon,所以也要启动!
关闭服务相关指令:chkconfig

三.SELinux 管理原则

SELinux 使用所谓的委任式访问控制 (Mandatory Access Control, MAC) ,他可以针对特定的程序与特定的档案资源来进行权限的控管! 也就是说,即使你是 root ,那么在使用不同的程序时,你所能取得的权限并不一定是 root ,而得要看当时该程序的设定而定。 如此一来,我们针对控制的『主体』变成了『程序』而不是『使用者』。

1.SELinux 的运作模式

主体 (Subject):

SELinux 主要想要管理的就是程序,因此你可以将『主体』跟process 划上等号;

目标 (Object):

主体程序能否存取的『目标资源』一般就是文件系统。因此这个目标项目可以等文件系统划上等号;

政策 (Policy):

由于程序与档案数量庞大,因此 SELinux 会依据某些服务来制订基本的存取安全性政策。这些政策内还会有详细的规则 (rule) 来指定不同的服务开放某些资源的存取与否。在目前的 CentOS 6.x 里面仅有提供两个主要的政策如下,一般来说,使用预设的 target 政策即可。

targeted:针对网络服务限制较多,针对本机限制较少,是预设的政策;
mls:完整的 SELinux 限制,限制方面较为严格。


安全性本文 (security context):

我们刚刚谈到了主体、目标与政策,但是主体能不能存取目标除了要符合政策指定之外,主体与目标的安全性本文必须一致才能够顺利存取。 这个安全性本文 (security context) 有点类似文件系统的 rwx !安全性本文的内容与设定是非常重要的! 如果设定错误,你的某些服务(主体程序)就无法存取文件系统(目标资源),当然就会一直出现『权限不符』的错误讯息了!



安全性本文 (Security Context):可以将他想成 SELinux 内必备的 rwx。安全性本文是放置到档案的 inode 内的,因此主体程序想要读取目标档案资源时,同样需要读取 inode , 这 inode 内就可以比对安全性本文以及 rwx 等权限值是否正确,而给予适当的读取权限依据。

观察安全性本文可使用『 ls -Z 』去观察如下:

[root@www ~]# ls -Z
-rw-------. root  root  system_u:object_r:admin_home_t:s0     anaconda-ks.cfg
drwxr-xr-x. root  root  unconfined_u:object_r:admin_home_t:s0 bin
-rw-r--r--. root  root  system_u:object_r:admin_home_t:s0     install.log
-rw-r--r--. root  root  system_u:object_r:admin_home_t:s0     install.log.syslog


安全性本文主要用冒号分为三个字段 (最后一个字段先略过不看),这三个字段的意义为:

Identify:role:type
身份识别:角色:类型


身份识别 (Identify): 相当于账号方面的身份识别!主要的身份识别则有底下三种常见的类型:

root:表示 root 的账号身份,如同上面的表格显示的是 root 家目录下的数据!

system_u:表示系统程序方面的识别,通常就是程序;

user_u:代表的是一般使用者账号相关的身份。

角色 (Role): 透过角色字段,我们可以知道这个数据是属于程序、档案资源还是代表使用者。一般的角色有:

object_r:代表的是档案或目录等档案资源,这应该是最常见的啰;

system_r:代表的就是程序!不过,一般使用者也会被指定成为 system_r !

类型 (Type): 在预设的 targeted 政策中, Identify 与 Role 字段基本上是不重要的!重要的在于这个类型 (type) 字段! 基本上,一个主体程序能不能读取到这个档案资源,与类型字段有关!而类型字段在档案与程序的定义不太相同,分别是:

type:在档案资源 (Object) 上面称为类型 (Type);

domain:在主体程序 (Subject) 则称为领域 (domain) 了!

×domain 需要与 type 搭配,则该程序才能够顺利的读取档案资源!

程序与档案 SELinux type 字段的相关性:

身份识别角色该对应在 targeted 的意义
rootsystem_r代表供 root 账号登入时所取得的权限
system_usystem_r由于为系统账号,因此是非交谈式的系统运作程序
user_usystem_r一般可登入用户的程序
例子:

[root@www ~]# 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
# 两者的角色字段都是 object_r ,代表都是档案!而 httpd 属于 httpd_exec_t 类型,
# /var/www/html 则属于 httpd_sys_content_t 这个类型!


httpd 属于 httpd_exec_t 这个可以执行的类型,而 /var/www/html 则属于 httpd_sys_content_t 这个可以让 httpd 领域 (domain) 读取的类型。

1.首先,我们触发一个可执行的目标档案,那就是具有 httpd_exec_t 这个类型的 /usr/sbin/httpd;

2.该档案的类型会让这个档案所造成的主体程序 (Subject) 具有 httpd 这个领域 (domain), 我们的政策针对这个领域已经制定了许多规则,其中包括这个领域可以读取的目标资源类型;

3.由于 httpd domain 被设定为可以读取 httpd_sys_content_t 这个类型的目标档案 (Object), 因此你的网页放置到 /var/www/html/ 目录下,就能够被 httpd 那支程序所读取了;

4.但最终能不能读到正确的资料,还得要看 rwx 是否符合 Linux 权限的规范!

2.SELinux 的启动、关闭与观察: getenforce, setenforce

3.SELinux type 的修改: chcon, restorecon, semanage

4.SELinux 政策内的规则布尔值修订: seinfo, sesearch, getsebool, setsebool

5.SELinux 登录文件记录所需服务:setroubleshoot, sealert

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: