2核1G3M服务器88一季度

腾讯云,阿里云百度云等 折扣价→点我←

站长窝服务器运维Linux大神亲自传授的网络安全与主机基本防护 discuz 教程

游客1 游客组

一.网络封包联机进入主机的流程
1.封包进入主机的流程
http://p1.pstatp.com/large/b0a0001c94e3d8a3832

  • 经过防火墙的分析:
    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 -tunlctive Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address Statetcp 0 0 0.0.0.0:111 0.0.0.0:* LISTENtcp 0 0 0.0.0.0:22 0.0.0.0:* LISTENtcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN....(底下省略)....123456789
列出已联机的网络联机状态:
[root@www ~]# netstat -tunActive Internet connections (w/o servers)Proto Recv-Q Send-Q Local Address Foreign Address Statetcp 0 52 192.168.1.100:22 192.168.1.101:2162 ESTABLISHED123456
删除已建立或在监听当中的联机:
[root@www ~]# netstat -tunpActive 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 13421234567
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 的协议!1234567891011121314151617181920212223242526
# 范例二:同时扫瞄本机的 TCP/UDP 埠口[root@www ~]# nmap -sTU localhostPORT STATE SERVICE22/tcp open ssh25/tcp open smtp111/tcp open rpcbind111/udp open rpcbind <==会多出 UDP 的通讯协议埠口!1234567# 范例三:透过 ICMP 封包的检测,分析区网内有几部主机是启动的[root@www ~]# nmap -sP 192.168.1.0/24Starting Nmap 5.21 ( http://nmap.org ) at 2011-07-20 17:05 CSTNmap 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.254Host 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 seconds123456789101112
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 111tcp 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/rpcbindrpcbind-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 stop12345678910111213141516
一些必要的服务,不要关闭!












服务名称服务内容
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 !安全性本文的内容与设定是非常重要的! 如果设定错误,你的某些服务(主体程序)就无法存取文件系统(目标资源),当然就会一直出现『权限不符』的错误讯息了!
http://p1.pstatp.com/large/b0a0001c94d4872d38f
安全性本文 (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.cfgdrwxr-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.syslog12345
安全性本文主要用冒号分为三个字段 (最后一个字段先略过不看),这三个字段的意义为:
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 这个类型!12345
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

站长窝论坛版权声明 1、本帖标题:站长窝服务器运维Linux大神亲自传授的网络安全与主机基本防护
2、论坛网址:站长窝论坛
3、站长窝论坛的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
4、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
5、站长窝论坛一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6、本帖由游客1在站长窝论坛《程序综合区》版块原创发布, 转载请注明出处!
评论
最新回复 (1)
返回
发新帖