基于linux平台的WEB安全技术研究 - 图文

更新时间:2024-06-16 15:19:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

题目:基于linux平台的WEB安全技术研究

—APACHE安全技术

摘要 网络技术的普及、应用和Web技术的不断完善,Web服务已经成为互联网

上重要的服务形式之一。原有的客户端/服务器模式正在逐渐被浏览器/服务器模式所取代。但是由于Internet的开放性,及在设计时对于信息的保密和系统的安全考虑不完备,Web站点被黑客入侵的事件屡有发生,Web安全问题已引起人们的极大重视。本文将根据目前Web面临的主要威胁,并结合在Linux中使用最多的Apache服务器,介绍进行Web服务器安全配置的技巧。

关键词 Linux,网络安全,WEB服务,Apache服务器

ABSTRACT Popularization of network technology, applications and Web technology

continues to improve the, Web services, the Internet has become an important form of service. The original client / server model is gradually being browser / server model replaced. However, due to the open Internet, and the design for the confidentiality of information and system security is not complete, Web sites were hacked happened

frequently, Web security issue has been of great importance. This article will present the main threat facing the Web, combined with the use of Linux in the most Apache servers, as described in the Web server security configuration skills.

Keyworks Linux; the Network Safety; Website of WEB;Apache Server

目 录

前言............................................................................................................1 第一章

Web服务器安全分析.......................................................................2

1.1 Web服务器安全威胁分析 ................................................................2 1.2 Web服务器安全目标 ......................................................................3 第二章

基于Linux的Web服务器安全模型 ...................................................4

2.1 木桶理论分析.................................................................................4 2.2 模型的设计 ....................................................................................5

2.2.1 模型的提出.........................................................................5 2.2.2 模型的组成.........................................................................5 2.2.3 模块的分析.........................................................................6

第三章 安全模型设计与实现...........................................................................7

3.1 Linux平台安全模型.........................................................................7

3.1.1 发行版的选择 .....................................................................7 3.1.2 系统安装与升级 ..................................................................8 3.1.3 系统安全设置 ................................................................... 11 3.1.4 系统安全漏洞检测 ............................................................. 17 3.2 防火墙安全模型 ........................................................................... 22

3.2.1 Linux 安全性和 netfilter/iptables ......................................... 22 3.2.2 netfilter/iptables 系统是如何工作的? .................................. 22 3.2.3 iptables规则构思 .............................................................. 23 3.2.4编写脚本 .......................................................................... 25 3.3 Apache服务器安全模型 ................................................................ 27

3.3.1 Apache服务器简介............................................................ 27 3.3.2 Apache服务器的安全配置 .................................................. 27 3.3.3 Apache服务器的安全模块 .................................................. 33

·

第四章 安全模型的测试 ............................................................................... 40

4.1 系统实现环境............................................................................... 40 4.2 安全模型测试............................................................................... 41

4.2.1远程连接信息机密性测试 ........................................................ 41 4.2.2网站密码认证功能: .............................................................. 42 4.2.3摘要式认证测试:.................................................................. 44

总结与展望 ................................................................................................ 47 参考文献 ................................................................................................... 48

·

广州大学华软软件学院网络技术系学位论文

前 言

随着网络技术的普及、应用和Web技术的不断完善,Web服务已经成为互联网上重要的服务形式之一。网络银行、电子政府、远程教育、电子商务等这些应用已经成为了我们日常生活中不可或缺的部分,企业和机构已经将网络作为竞争力的重要来源,包括中国在内的很多国家都把信息技术提升到战略的高度来考量。

显然,互联网以其网络的开放性、技术的渗透性、信息传播的交互性而广泛渗透到各个领域,有力地促进了经济社会的发展。但同时,网络信息安全问题日益突出,据工信部日前透露,2010年1月4日至10日,我国境内被篡改的政府网站数量为178个,与前一周相比大幅增长409%。紧接着,全球最大的中文搜索引擎百度也遭遇攻击,从而导致用户不能正常访问,众多网站最近频遭网络攻击的消息。

认识网络安全工作的重要性和紧迫性,进一步加强网络安全工作,创建一个健康、和谐的网络环境,需要我们深入研究,落实措施。本文将根据目前Web面临的主要威胁,并结合在Linux中使用最多的Apache服务器,介绍进行Web服务器安全配置的技巧。

第1页 共47 作者:杨锦辉

第一章 Web服务器安全分析

1.1 Web服务器安全威胁分析

由于Web服务器的应用越来越广泛,同时其重要性也日益加重,所以,在现实中Web服务器的安全问题备受关注。目前,Web服务器面临以下主要的安全威胁:

1.攻击者获得管理员权限

如果Web服务器以管理员权限运行,系统上一些程序的逻辑缺陷或缓冲区溢出的漏洞,会让攻击者很容易在本地获得Web服务器上管理员管理员权限。在一些远程的情况下,攻击者会利用一些以管理员身份执行的有缺陷的系统守护进程来取得管理员权限,或利用有缺陷的服务进程漏洞来取得普通用户权限,用以远程登录服务器,进而控制整个系统。

2.缓冲区溢出

攻击者利用CGI程序编写的一些缺陷使程序偏离正常的流程。程序使用静态分配的内存保存请求数据,攻击者就可以发送一个超长请求使缓冲区溢出。比如,一些Perl编写的处理用户请求的网关脚本。一旦缓冲区溢出,攻击者可以执行其恶意指令。

3.HTTP拒绝服务

攻击者通过某些手段使服务器拒绝对HTTP应答。这使得Web服务器对系统资源(CPU时间和内存)需求剧增,最终造成系统变慢甚至完全瘫痪。Web服务器服务器最大的缺点是,它的普及性使它成为众矢之的。Web服务器服务器无时无刻不受到DoS攻击的威胁。主要包括以下几种形式。

(1)数据包洪水攻击 (2)磁盘攻击 (3)路由不可达

第2页 共48 页

(4)分布式拒绝服务攻击

1.2 Web服务器安全目标

Web服务器的安全目标主要有以下几个方面:

1.Web服务器管理员用户的安全性:要求保证Web服务器上的管理员用户的帐号和密码得到安全保障,不让黑客利用漏洞得到管理员身份。

2.Web服务器脚本程序的安全性:要求保证无论是Web服务器上的脚本程序还是用户上传的脚本程序的安全性,不给系统带来漏洞,使服务器成为攻击目标。

3.Web服务器资源的冗余性:要求Web服务器最大限度的防止HTTP拒绝服务中的任何一种攻击模式,使服务器资源时刻处于冗余,保证用户获得稳定快速的浏览体验。

第3页 共48 页

第二章 基于Linux的Web服务器安全模型

2.1 木桶理论分析

木桶理论:一个由许多块长短不同的木板箍成的木桶,决定其容水量大小的并非是其中最长的那块木板或全部木板长度的平均值,而是取决于其中最短的那块木板。

同样这个理论也被引进了信息安全领域,“木桶理论”对于信息安全领域来说,其基本要旨有两方面:

1.指安全机制和安全服务设计首先要防止最常用的攻击手段,即强调系统安全要从小处着手;

2.指要提高整个系统的“安全最低点”的安全性能,即提高系统安全“基线”的水准。

两层含义既有交叉之处,又互有区别。前者意在强调安全防御设计应该循序渐进,设计思路应该是楼梯式,即从防御最简单类型的攻击开始,如防火墙应该首先能够控制对Ping命令的相应,先确保本机的隐蔽性,然后以此为基础,再一步一步实现其他安全防护功能,后者旨在说明要提升系统整体的安全级别,要特别注意提高系统中薄弱环节的安全水平。

在经过了冲击波,熊猫烧香等网络安全事件的“洗礼”后,网络安全问题已经被提到了各级用户的重要议事日程。不必说大型网络装备的电信级硬件防火墙、IDS等重型设备,即便是家庭用户也会为了防止帐号失窃而煞有其事的装上杀毒软件。

虽然它们也很重要,但是这些“外围”设备实际上并不是系统安全之本。只见森林不见树木,我们常常会忽略了系统内部的许多木桶短板。比如一些设置不当或者一些安全性考虑不足的默认设置,其实就是平时不注意的木桶短板,而这些短板恰恰可能会成为了一个个溃堤蚁穴。

基于此,本论文回到操作系统和Web程序本身,搭建一个基于Linux平台的Web安全模型,来弥补一个个被忽略的木桶短板。

第4页 共48 页

2.2 模型的设计

2.2.1 模型的提出

通过上一章对Web服务器所面临的安全威胁分析,结合“木桶理论”对Web服务器的安全分析,要做到Web服务器安全性的要求首先要保证服务器系统的安全性,因为服务器系统是Web服务器的基石。模型的主要思想是:服务请求者发送请求信息到达Web服务器之时,首先是经过了服务器系统防火墙的安全过滤,然后到达服务器提供Web服务器的程序平台,而提供Web服务器的程序平台本身也会对请求信息进行安全检测,同时对返回信息进行一些安全处理,并返回。

防 Linux Apache

请求 请求信息 火 平台 安全 墙 安全 模型 模型 返回信息

图2.1 基本的安全模型 防火墙(iptables) Linux平台安全模型(采用rkhunter检测漏洞) Apache服务器(采用mod_rewrite 、mod_ssl、mod_security、mod_chroot等安全模块) 图2.2 Web服务器安全模型

2.2.2 模型的组成

Web服务器安全模型的各个模块组成与功能如以下显示:

请求:它是Web服务架构的组成部分, 主要是发出服务请求,申请服务,其中包括了正常的Web服务请求,也包括有意者的带攻击性的请求。

防火墙:防火墙是系统安全的第一道防线,对请求信息进行规则过滤。

第5页 共48 页

Linux平台安全模型:一个安全的Linux平台是一个Web服务器安全模型最基本的保证。采用rkhunter程序来检测系统漏洞,然后及时完善系统安全工作。

Apache服务器安全模型:负责请求服务的应答,同时也对请求信息进行安全处理,并且还对返回信息进行安全处理。 2.2.3 模块的分析

对Web服务器安全模块的具体分析如下:

1.模型中使用了防火墙来保证请求信息的安全性。防火墙采用了规则过滤,能很好的把不符合规则的请求信息过滤掉。

2.模型中Linux平台采用rkhunter来检测系统漏洞,并根据漏洞及时完善系统安全工作,能在最短时间将系统安全风险降到最低。

3.模型中Apache安全模型采用了mod_rewrite 、mod_ssl、mod_security、mod_chroot等安全模块,保证了Web服务器对SQL注入攻击、HTTP拒绝服务等攻击具有很好的抵御性。

第6页 共48 页

第三章 安全模型设计与实现

上一章构建的安全模型包含了三个部分:防火墙安全模型、Linux平台安全模型、Apache服务器安全模型。以下则是安全模型的实现过程:

3.1 Linux平台安全模型

3.1.1 发行版的选择

对于管理员来说Linux绝大部分是用来作为服务器使用的,那么要作为服务器,最大的首要问题就是稳定,其次最重要的也是安全。Redhat公司的发行版对于作为服务器来说,是无可厚非的选择,它有着专业的团队为选择其发行版的企业进行服务,但是这样的服务确实需要付出一定的费用,并且这笔费用不菲。而作为世界上最大的开源项目——Linux,从来不缺乏免费而且实用的发行版,Ubuntu正是其中的佼佼者。Ubuntu Server系统拥有如下的优势:

① 内核 ——Ubuntu服务器版包括一个专门配置的内核,以适应在一台典型服

务器上全部共有工作负载的需要,让您能够最有效地利用您的硬件,同时保持最佳的功率消耗。

② 认证——无论您运行的是Windows、Unix、MacOSX或其它类型的Unix,

Ubuntu服务器版配备了所有的工具,很容易集成到您现有的用户管理系统,让您的客户能够无缝地验证、共享文档和访问服务。

③ 部署——Ubuntu,无论是用于台式机或服务器上,提供所有用于进行自动化

正式安装的工具,因此,允许可重现、硬件无关的部署方案。 ④ Web 服务器——无论您想用PHP、Perl、Java、Ruby或Python,配合

Apache和MySQL、PostgreSQL、DB2或Oracle,Ubuntu服务器版均可在数分钟内准备就绪并开始为您的动态网页服务。

第7页 共48 页

⑤ 基础设施——Ubuntu服务器版提供您所需要的大多数工具,以建立您的网

络基础设施。随着Linux内建路由网络支持,下列工具使您可以创建并维护用于关键服务的网络。

⑥ 电源管理——电源管理特性允许您让系统更具弹性并降低你的能源耗费。 ⑦ 安全性——Ubuntu的安全团队与Debian和其他领先厂商的安全小组合作,

以确保当发现问题时Ubuntu仍然是尽可能的安全,并在补丁释放时发布通知。

3.1.2 系统安装与升级

1.分区

分区的讲究就是需要针对服务器的应用来规划分区,最简单的分区方式就是只给系统划分一个硬盘分区,然后把根目录挂载在其中,但是这样的做法却很容易遭受到以下的不好的现象:

①不稳定性,一旦根目录发生错误导致需要重新安装系统,这样不论是用户数据,还是网站文件,都可能毁于一旦。

②效率不高,因为只分了一个分区,只有一个根目录,没有交换空间,而且像/var 、/tmp这样的目录会产生比较多的文件碎片,容易导致系统运行效率不高。

所以而作为标准的Web服务器,一般会将硬盘划分为以下几个分区:

表3.1.1 分区表

/boot /swap / /var /usr /home 包含Linux的启动文件以及内核。 交换空间 根目录(为必须分区) 集中存放可变数据,如日志和打印机缓冲文件等 ext4 swap ext4 ext4 集中存放一些对所有用户可用的小程序,包含许多系统管ext4 理命令和实用程序 集中存放用户的主目录 ext4 第8页 共48 页

/tmp 集中存放临时文件,默认情况下,系统会自动周期性地清ext4 空该目录 而文件系统上,除了swap分区,其他都是采用ext4文件系统,因为ext4文件系统是ext3的改进版,修改了 Ext3 中部分重要的数据结构,而不仅仅像 Ext3 对 Ext2 那样,只是增加了一个日志功能而已。Ext4 可以提供更佳的性能和可靠性,还有更为丰富的功能:

? 与 Ext3 兼容。

? 更大的文件系统和更大的文件。 ? 无限数量的子目录。 ? 快速 fsck。 ? 日志校验。

? “无日志”(No Journaling)模式。 ? 在线碎片整理。 ? inode 相关特性。

? 持久预分配(Persistent preallocation)。 ? 默认启用 barrier。 分区大小:

分区大小一般是根据硬盘的大小和企业需求而定,不过有几个分区是有所规定:

表3.1.2 分区格式说明

/ /swap /boot /var 根目录不得小于1G 如果机器内存小于1G那么将SWAP分区分为内存的2倍,如果大于1G那么就分最大2G 一般/boot分区有100M就已经足够 要求尽量大,因为大部分软件是存在在此 第9页 共48 页

/tmp 同样对于服务器而言,也是尽量大为好 以下是分区表:

图3.1.1 分区表

2. 软件包安装

软件包的安装同样关乎系统的安全,所以为了不胡乱安装软件,导致以后系统产生了自己不了解的漏洞,我们只选择安装系统的核心软件,而不安装其他任何软件包:

第10页 共48 页

图3.1.2 软件包安装

3.系统软件升级与更新

系统在安装完成,连接上网络之后的第一件事就是为系统和应用程序升级更新。 $ sudo apt-get update #这一步是更新源列表 $ sudo apt-get upgrade #这一步是更新软件,更新到最新的软件版本有助于修正系统中存在bug的软件。 3.1.3 系统安全设置

1.关闭不需要的默认用户

在系统安装完成之后,Ubuntu给系统添加了一些不必要的用户, 多余的用户在会给黑客留下获取shell的可能性,关闭不必要的用户shell使用权限在一定程度上可以加固Ubuntu服务的安全性。以下是系统的默认用户列表:

第11页 共48 页

图3.1.3 默认用户列表

下图是采用shell关闭方式关闭不需要的默认用户:

图3.1.4 关闭不需要默认用户列表

2.修改root密码

第12页 共48 页

默认情况下root用户的密码是和安装ubuntu时候所建立的用户的密码一致的,所以在系统安装成功之后,就要为root用户修改密码:

$ sudo passwd root 然后两次输入密码即可,而密码长度最好是能够大于8,我们可以强制用户使用8个字符以上的口令。

$ sudo vi /etc/login.defs 找到

PASS_MIN_LEN 5 修改为

PASS_MIN_LEN 8 3.禁止控制台的访问 一个最简单而且最常用的保证系统安全的方法就是禁止使用所有的控制台程序,如:shutdown和halt。

$ sudo rm –f /etc/security/console.apps/halt $ sudo rm –f /etc/security/console.apps/poweroff $ sudo rm –f /etc/security/console.apps/reboot $ sudo rm –f /etc/security/console.apps/shutdown 要禁止控制台的访问,除了程序,还需要给/etc/pam.d/目录下的所有文件中,给那些包含pan_console.so的行加上注释。这点可以使用shell脚本来减轻工作量:

$ sudo vi disable.sh 然后在disable.sh文件中输入 # !/bin/sh cd /etc/pam.d for i in * ; do sed '/[^#].*pam_console.so/s/^/#/' < $i > foo && mv foo $I done 第13页 共48 页

然后保存,并且退出并使用以下命令使脚本有可执行的权限,并执行它: $ sudo chomd 700 disable.sh $ sudo ./disable.sh 这样 /etc/pam.d目录下所有文件中包含“pam_console.so”的行都被加上了注释。

4.关闭不需要的服务和端口

作为一名Linux系统管理员或者安全管理员,一定要定义下面3项: ? 服务器角色(Web、数据库、代理、FTP、DNS、DHCP或其他) ? 服务器成为这种角色要运行的服务程序 ? 开启的端口

操作系统的开发的端口和服务,是黑客入侵的第一目标和接口,所以为了使服务器更安全,应该关闭不必要的服务程序和端口。

在ubuntu下面,使用sysv-rc-conf工具来关闭不需要的服务。 首先是安装sysv-rc-conf:

$ sudo aptitude install sysv-rc-conf 然后运行: $ sudo sysv-rc-conf sysv-rc-conf工具会将系统的服务以列表形式显示出来,然后根据需求来打开和关闭系统服务。

第14页 共48 页

图3.1.5 服务列表

表3.1.3 关闭ubuntu不必要服务

atd Bluetooth cupsys gdm 5.路由协议

类似cron,一个作业调度程序。因为已打开cron,所以可以关闭。 服务器一般不需要蓝牙服务。 管理打印机的子系统。同样,服务器角色为Web服务器,而不是打印服务器。 gnome桌面管理器。作为服务器,一般不需要图形界面。 路由和路由协议会导致一些问题,IP原路径路由(IP source routing),也就是IP包包含到达目的地址的的详细路径信息,而根据RFC1122规定目的主机必须按原路径返回这样的IP包。如果黑客能够伪造原路径路由的信息包,那么它就能截取返回的信息包,并且欺骗用户计算机,让它觉得正在和它交换信息的是可以信任的主机。所以应该禁止IP原路径路由以避免这个安全漏洞。

第15页 共48 页

使用以下命令:

$ sudo vi /etc/rc.d/rc.local 在最后加入:

for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do echo 0 > $f done 6.保护重要文件的不可改变位

给口令文件和组文件设置不可改变位,这样就可以有些人对这些文件删除、重写或者创建符号链接,可以用下面的命令:

$ sudo chattr +i /etc/passwd $ sudo chattr +i /etc/shadow $ sudo chattr +i /etc/group $ sudo chattr +i /etc/gshadow 注意:如果将来需要在口令文件或组文件中增加或删除文件,就必须先清除这些文件的不可改变位,否则不能做任何改变,清除命令为:

$ sudo chattr –i /etc/passwd 7.资源限制 限制用户对系统资源的使用,可以避免拒绝服务(如:创建很多进程、消耗系统的内存等)这种攻击方式。这些限制必须在用户之前设定。使用如下命令:

第一步:

$ sudo vi /etc/security/limits.conf 加入以下行: * hard core 0 * hard rss 5000 * hard nproc 20 第16页 共48 页

这些行的意思是:―core 0‖表示禁止创建core文件,―nproc20‖把最多进程数限制到20,―rss5000‖表示除了root之外,其他用户都最多只能用5M内存。星号―*‖表示的是所有登陆到系统中的用户。

第二步:

$ sudo vi /etc/pam.d/login 在文件末尾假如下面这一行:

$ session required /lib/security/pam_limits.so 3.1.4 系统安全漏洞检测

1.使用rkhunter检测系统漏洞

众所周知,要取的一部主机的所有权限,那就是需要取得该部主机的超级管理员root的权限。所以一般的黑客都会想尽办法去取的root的权限的,而最简单的方法就是利用网络上流传的RootKit软件程序来进行入侵的动作。

而Rootkit程序就是一些有心人士将某些恶意的cracker发现并且利用的系统漏洞做成的恶意程序收集起来,并且做成的软件包,这些软件包被上传至Internet,以至于任何人都可以下载并且某些别有用心的人会利用此来攻击网络上的服务器。

由于RootKit主要是籍由主机的漏洞来攻击的,因此确定把不必要的服务关闭,并且随时更新系统。

除此之外,还应该关注系统安装的软件,因为RootKit也可能会伪装Internet上合法的软件来吸引你去安装他。而这方面,可以用Root Kit Hunter来做出检测。

RKHunter可以做的事情包括:侦测RootKit程序、侦测后门程序以及主机端的套件检查问题。

我们通过以下命令来安装RKHunter: $ sudo apt-get install rkhunter 使用RKHunter来检测系统: $ sudo rkhunter ––check 然后RKHunter就会从以下几个项目去检查系统的安全性

第17页 共48 页

system commands rootkits the network the local host application versions 最后,则会提示可以从日志文件中查知检测结果 Please check the log file (/var/log/rkhunter.log) 下图正是rkhunter扫描到系统的漏洞所作出的警告:

图3.1.6 rkhunter扫描日志

2.管理日志文件

系统安全的另一方面问题是管理日志文件。Linux提供相关的记录,使管理员可以查到访问系统的简要情况。 ① 日志文件介绍

而ubuntu常见的日志文件详述如下: /var/log/boot.log 该文件记录了系统在引导过程中发生的事件,就是Linux系统开机自检过程显示的信息。

/var/log/cron 该日志文件记录crontab守护进程crond所派生的子进程的动作,前面加上用户、登录时间和PID,以及派生出的进程的动作。CMD的一个动作是cron派生出一个调度进程的常见情况。REPLACE(替换)动作记录用户对它的cron文件的更新,该文件列出了要周期性执行的任务调度。 RELOAD动作在REPLACE动作后不

第18页 共48 页

久发生,这意味着cron注意到一个用户的cron文件被更新而cron需要把它重新装入内存。该文件可能会查到一些反常的情况。

/var/log/maillog 该日志文件记录了每一个发送到系统或从系统发出的电子邮件的活动。它可以用来查看用户使用哪个系统发送工具或把数据发送到哪个系统。

/var/log/messages 该日志文件是许多进程日志文件的汇总,从该文件可以看出任何入侵企图或成功的入侵。

/var/log/syslog 默认ubuntu Linux不生成该日志文件,但可以配置/etc/syslog.conf让系统生成该日志文件。它和/etc/log/messages日志文件不同,它只记录警告信息,常常是系统出问题的信息,所以更应该关注该文件。要让系统生成该日志文件,在/etc/syslog.conf文件中加上: *.warning /var/log/syslog

该日志文件能记录当用户登录时login记录下的错误口令、Sendmail的问题、su命令执行失败等信息。

/var/log/secure 该日志文件记录与安全相关的信息。该日志文件的部分内容如下: /var/log/lastlog 该日志文件记录最近成功登录的事件和最后一次不成功的登录事件,由login生成。在每次用户登录时被查询,该文件是二进制文件,需要使用 lastlog命令查看,根据UID排序显示登录名、端口号和上次登录时间。如果某用户从来没有登录过,就显示为\。该命令只能以root权限执行。

/var/log/wtmp 该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件。因此随着系统正常运行时间的增加,该文件的大小也会越来越大,增加的速度取决于系统用户登录的次数。该日志文件可以用来查看用户的登录记录,last命令就通过访问

第19页 共48 页

这个文件获得这些信息,并以反序从后向前显示用户的登录记录,last也能根据用户、终端 tty或时间显示相应的记录。

命令last有两个可选参数: -u用户名 -t 天数 ② 日志备份

虽然日志文件可以提供大量的信息,但是在慢慢的积累下,一些日志文件就会变的越来越庞大,占用大量的存储空间,而且,庞大的日志文件也可能会导致系统的不正常工作,为了杜绝这样的情况发生,使用logrotate对系统日志文件自动整理。

logrotate是用来设置滚动系统日志的,周期性地旋转日志文件,可以周期性地把每个日志文件重命名成一个备份名字,然后让它的守护进程开始使用一个日志文件的新的拷贝。

以下为其配置文件

/etc/logrotate.conf,这个文件对所有的日志文件都起作用,下面是它的范例:

显示用户上次登录的情况。 显示指定天数之前的用户登录情况。 第20页 共48 页

# see \# rotate log files weekly weekly

#以7天为一个周期

# keep 4 weeks worth of backlogs rotate 4

#每隔4周备份日志文件 # send errors to root errors root

#发生错误向root报告

# create new (empty) log files after rotating old ones create

#转完旧的日志文件就创建新的日志文件

# uncomment this if you want your log files compressed #compress

#指定是否压缩日志文件

# RPM packages drop log rotation information into this directory include /etc/logrotate.d

# no packages own lastlog or wtmp -- we`ll rotate them here /var/log/wtmp {

monthly

create 0664 root utmp rotate 1 }

从上面的可以看出系统会自动对所有的日志文件进行每周一次的备份处理,这对大多数日志文件就够用了。

如果需要对某个日志文件进行特殊的处理,只需要在/etc/logrotate.d下新建一个配置即可。

第21页 共48 页

配置格式: 日志全路径 { 指令 prerotate shell command endscript } 3.2 防火墙安全模型

3.2.1 Linux 安全性和 netfilter/iptables

Linux 因其健壮性、可靠性、灵活性以及好象无限范围的可定制性而在 IT 业界变得非常受欢迎。Linux 具有许多内置的能力, 使开发人员可以根据自己的需要定制其工具、行为和外观,而无需昂贵的第三方工具。 如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 所要用到的一种内置能力就是针对网络上 Linux 系统的防火墙配置。

在如 ipfwadm和 ipchains 这样的 Linux 信息包过滤解决方案中,

netfilter/iptables IP 信息包过滤系统是最新的解决方案, 而且也是第一个集成到 Linux 内核的解决方案。 对于 Linux 系统管理员、网络管理员以及家庭用户(他们 想要根据自己特定的需求来配置防火墙、在防火墙解决方案上节省费用和对 IP 信息包过滤具有完全控制权)来说,netfilter/iptables 系统十分理想。 3.2.2 netfilter/iptables 系统是如何工作的?

netfilter/iptables IP 信息包过滤系统是一种功能强大的工具, 可用于添加、编辑和除去规则,这些规则是在做信息包过滤决定时,防火墙所遵循和组成的规则。这些规则存储在专用的信息包过滤表中, 而这些表集成在 Linux 内核中。 在信息包过滤表中,规则被分组放在我们所谓的 链(chain)中。

虽然 netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件 netfilter和 iptables 组成。

第22页 共48 页

netfilter 组件也称为 内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成, 这些表包含内核用来控制信息包过滤处理的规则集。

iptables 组件是一种工具,也称为 用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。 除非您正在使用 Red Hat Linux 7.1 或更高版本,否则需要从 netfilter.org 下载该工具并安装使用它。

下图是信息包过滤的过程。

图3.2.1信息过滤过程

3.2.3 iptables规则构思 1. 初始化工作

在shell提示符 # 下打入 iptables -F iptables -X iptables -t nat -F iptables -t nat -X 以上每一个命令都有它确切的含义。一般设置iptables过滤表之前,首先要清除所有以前设置的规则,这就是对防火墙过滤表的初始化。

2.设置规则 (1)拒绝一切连接

第23页 共48 页

iptables -P INPUT DROP 这一条命令将会构建一个非常“安全”的防火墙,因为它将所有从网络进入机器的数据丢弃(drop)了。这是给防火墙设置默认规则。当进入计算机的数据,不匹配任何一个条件时,那么就由默认规则来处理这个数据----drop掉,不给发送方任何应答。 (2)防止ping

如果黑客用namp工具对你的电脑进行端口扫描,正常的拒绝ping返回信息会提示黑客,你的计算机处于防火墙的保护之中。为了不让黑客获取更多服务器信息,我们可以设置如下规则:

iptables -A INPUT -i ppp0 -p tcp -j REJECT --reject-with tcp-reset iptables -A INPUT -i ppp0 -p udp -j REJECT --reject-with icmp-port-unreachable 这样的设置之后,黑客虽然能扫描出服务器所开放的端口,但是他却很难知道,服务器处在防火墙的保护之中。如果服务器只运行了ftp并且仅仅对局域网内部访问,黑客就很难知道服务器是否运行了ftp。 (3)开放服务器端口

这一句也就是将服务器上的80端口对外开放了,这样internet上的其他人就能通过80端口访问你的Web服务器了。

iptables -A INPUT -i ppp0 -p tcp --dport 80 -j ACCEPT (4)用iptables来防止web服务器被CC攻击

? 控制单个IP的最大并发连接数

iptables -I INPUT -p tcp –dport 80 -m connlimit –connlimit-above 50 -j REJECT #允许单个IP的最大连接数为 30 ? 控制单个IP在一定的时间(比如60秒)内允许新建立的连接数

第24页 共48 页

iptables -A INPUT -p tcp –dport 80 -m recent –name BAD_HTTP_ACCESS –update –seconds 60 –hitcount 30 -j REJECT iptables -A INPUT -p tcp –dport 80 -m recent –name BAD_HTTP_ACCESS –set -j ACCEPT #单个IP在60秒内只允许最多新建30个连接 3.2.4编写脚本

通过编写一个shell脚本达到方便服务器防火墙管理工作。 首先需要建立一个脚本文件 $ sudo vi iptables.sh 然后添加以下内容: #!/bin/bash # define const here Open_ports=\自己机器对外开放的端口 Allow_ports=\的数据可以进入自己机器的端口 #init iptables -F iptables -X iptables -t nat -F iptables -t nat -X # define ruler so that some data can come in. for Port in \iptables -A INPUT -i ppp0 -p tcp --sport $Port -j ACCEPT iptables -A INPUT -i ppp0 -p udp --sport $Port -j ACCEPT done for Port in \第25页 共48 页

iptables -A INPUT -i ppp0 -p tcp --dport $Port -j ACCEPT iptables -A INPUT -i ppp0 -p udp --dport $Port -j ACCEPT done # This is the last ruler , it can make you firewall better iptables -A INPUT -i ppp0 -p tcp -j REJECT --reject-with tcp-reset iptables -A INPUT -i ppp0 -p udp -j REJECT --reject-with icmp-port-unreachable # CC to prevent attacks iptables -I INPUT -p tcp –dport 80 -m connlimit –connlimit-above 50 -j REJECT iptables -A INPUT -p tcp –dport 80 -m recent –name BAD_HTTP_ACCESS –update –seconds 60 –hitcount 30 -j REJECT iptables -A INPUT -p tcp –dport 80 -m recent –name BAD_HTTP_ACCESS –set -j ACCEPT 这个脚本有五个部分:

第一部分是定义一些端口:访问服务器的“Open_ports”端口的数据,允许进入;来源是\端口的数据,也能够进入。

第二部分是iptables的初始化。 第三部分是对定义的端口具体的操作。

如果以后服务器需求发生了一些变化,比如,需要给服务器加上了一个ftp服务器,那么只要在第一部分\的定义中,将ftp对应的20与21端口加上去就行了。

第四部分是用来给那些尝试扫描服务器的黑客的一个欺骗性的回答。

第五部分则是用iptables来防止web服务器被CC攻击,实现自动屏蔽IP的功能。

然后赋予权限给脚本: $ sudo chomd 700 iptables.sh $ sudo ./ iptables.sh 第26页 共48 页

3.3 Apache服务器安全模型

3.3.1 Apache服务器简介

Apache,一种开放源码的HTTP服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,Perl/Python等解释器可被编译到服务器中。

Apache支持许多特性,大部分通过编译的模块实现。这些特性从服务器端的编程语言支持到身份认证方案。一些通用的语言接口支持Perl,Python, Tcl, 和 PHP。流行的认证模块包括 mod_access, mod_auth 和 mod_digest。其他的例子有 SSL 和 TLS 支持 (mod_ssl), proxy 模块,很有用的URL重写(由 mod_rewrite 实现),定制日志文件 (mod_log_config),以及过滤支持(mod_include 和 mod_ext_filter)。Apache日志可以通过网页浏览器使用免费的脚本AWStats或Visitors来进行分析。

3.3.2 Apache服务器的安全配置 1.安装Apache

要想让Apache的性能最好,那么第一步要做到的是:选择合适的MPM。 Apache有3个MPM,它们分别是:event、prefork和worker。worker是Apache2版本中新开发的MPM,速度比prefork快很多。而且,由于使用多线程进行访问处理,所以能够处理相对海量的请求,而系统资源的占用也要小于基于进程的服务器。worker是Apache 2的主要使用方式。worker有两个比较重要的配置参数,那就是:ThreadsPerChild和MaxClients。 ThreadsPerChild用来控制每个子进程允许建立的线程数,ThreadsPerChild用来控制允许建立的总线程数。我们使用如下命令安装:

$ sudo apt-get install apache2

2.Apache的配置文件

第27页 共48 页

在Ubuntu中,Apache的软件包时由ubuntu官方核心开发组维护的。他们在编译apache时,只编译进了很少的模块。如果需要其它的模块, 则需要手工添加。这也大大增强了apache的可定制性和灵活性。可以使用apache2 -l命令查到被编译进apache2的模块。 (1) Apache配置文件说明

Ubuntu和Debian对apache2软件包做了很多定制,很多配置文件的布局都和原来的apache2的布局不同。以下是/etc /apache2目录下各个配置文件的说明:

*apache2.conf——全局配置文件 *conf.d/——该目录存放一些一般性的配置 *envvars——存放环境变量,一般不需要修改 *httpd.conf——用户配置文件 *mods-available/——该目录下是已经安装的可用模块 *mods-enabled/——该目录下是已经启用的模块 *ports.conf——httpd服务的端口 *sites-available/——该目录下是可用的虚拟主机 *sites-enabled/——该目录下是已经启用的虚拟主机 其中,apache2.conf是apache2的主配置文件,它会读取上面列出的所有目录和文件。

(2)Apache模块

新安装的Apache编译加载的模块很少,很多模块要手动安装或者加载。可以使用a2enmod查看可用的模块和用a2dismod查看已经启用的模块。 如果要用的模块还没有安装,但是又不知道这个模块在Ubuntu中的确切名称,则可以先用apt-get search libapache2-mod命令进行搜索,找到正确的软件包名称后,再用apt-get install来安装。

3.安全更新

第28页 共48 页

要保证apache的安全,首要任务就是,要及时“打补丁”——当有新的安全更新时,在第一时间内安装该补丁,订阅Ubuntu的安全邮件列表能够在第一时间内知道系统是否存在安全更新:

ubuntu-security-announce@lists.ubuntu.com 在ubuntu网站的可以订阅。

https://lists.ubuntu.com/mailman/listinfo/ubuntu-security-announce 4.隐藏敏感信息

当用户使用远程命令连接主机,并且执行“HEAD/HTTP/1.0″命令的时候,服务器会立刻返回详细的系统和版本的信息,这样对于想搞破坏的黑客来说,可是一个很好的利用漏洞。

我们可以使用ServerTokens指令。修改配置文件 $sudo vi /etc/apache2/apache2.conf 找到ServerTokens Full所在的行,将其改为: ServerTokens Prod 然后重新加载apache配置: $ sudo /etc/init.d/apache2 reload 5.检查apache运行用户

查看目前的apache的运行用户: $ ps auxf | grep apache

图3.3.1 查看Apache运行用户

第29页 共48 页

从上面命令输出可以看出,是www-data这个用户在运行apache。其实这是ubuntu默认的,在apache安装时,创建了www-data这个组合用户。如果发现是root用户在运行apache的话,应该立刻想是否“被黑了”,并立即检查配置文件/etc/apache2/apache2.conf,看看Group和User指令的设置是否正确。在 Ubuntu Server9.10中,这两个指令的默认定义是这样的:

# These need to be set in /etc/apache2/envvars User ${APACHE_RUN_USER} Group ${APACHE_RUN_GROUP} 也就是说,这里两个指令,是在/etc/apache2/envvars文件中定义的。打开该文件,可以看到默认定义:

export APACHE_RUN_USER=www-data export APACHE_RUN_GROUP=www-data 一旦发现该部分设置被改变,你应该立即恢复原配置。此外,你还应该检查系统的www-data用户和组是否存在:

$ cat /etc/group|grep www-data $ cat /etc/passwd|grep www-data 万一不存在的话,则应该手工创建它们: $ sudo groupadd www-data $ sudo useradd -g www-data www-data 然后重启apache:

$ sudo /etc/init.d/apache2 restart 6.密码认证

密码认证,有两种方法:“基本认证”和“摘要式认证”;前者使用明文密码,后者则使用MD5摘要的方式将密码加密后,在网上传输。

(1)基本认证

由于基本认证是明文传输,所以可以在使用https的加密传输的时候启用“基本认证”。这样既能达到使用密码认证的目的,又可以保证密码传输的安全性。

第30页 共48 页

首先要让apache能够读取.htaccess文件,因此先要修改一下站点的配置文件/etc/apache2 /sites-enabled/ssl:

$ sudo vi /etc/apache2/sites-enabled/ssl 加入下面的行:

Options Indexes FollowSymLinks MultiViews AllowOverride AuthConfig Order allow,deny allow from all AllowOverride AuthConfig这一行,代表启用了.htaccess文件。 保存后重新加载apache配置:

$ sudo /etc/init.d/apache2 reload 接下来,就要使用htpasswd命令来创建认证文件了。先建立一个目录,用来存放认证文件:

$ sudo mkdir /var/www/bo-blog/auth $ sudo chmod a+rx /var/www/bo-blog/auth $ cd /var/www/ bo-blog/auth 然后用htpasswd命令来创建认证文件:

$ sudo htpasswd -bc private.passwords Evil 123456 Adding password for user Evil 上述命令创建了一个文件private.passwords,并向该文件写入了一个认证信息:用户名Evil,密码是123456。

接下来,在private目录下创建一个.htaccess文件,在这个文件中将认证文件指定为刚才创建的 private.passwords:

第31页 共48 页

$ sudo mkdir /var/www/bo-blog/private $ cd /var/www/bo-blog/private $ sudo vi .htaccess 在.htaccess文件中加入下列内容:

AuthName ―BasicAut‖ AuthType Basic AuthUserFile /var/www/bo-blog/auth/private.passwords Require valid-user (2)摘要式认证

摘要式认证比较新,可能有些旧版本的浏览器不支持。 要使用摘要式认证,首先要启用该模块: $ sudo a2enmod auth_digest $ sudo /etc/init.d/apache2 restart 假设还是要保护bo-blog网站的private目录,我们要在该目录下创建.htaccess文件。

$ sudo /var/www/bo-blog/private 文件内容如下: AuthType Digest AuthName ―Digest Auth‖ AuthDigestDomain /var/www/bo-blog/private AuthUserFile /var/www/bo-blog/auth/digest.passwords require valid-user 接下来,我们需要用htdigest命令来创建认证文件:

第32页 共48 页

$ cd /var/www/bo-blog/private $sudo htdigest -c digest.passwords Evil New password: Re-type new password: 7.检查文件权限

一般来说,.htpasswd文件应该给予640权限,.htaccess文件应为644,PHP文件为600。如果有的文件非常要紧,你不希望别人看到(比如config.php),那么可以给予400权限。如果某些文件需要写入权限的话,则可以设为766,写完后再设为755。除非真正需要,才设置为777,而且当应用完成之后,应改成700。

将下面的两行行加入到apache2.conf文件中也是对权限的一种保护: Options FollowSymLinks AllowOverride None 默认情况下,ubuntu的apache是有这两行配置的。 3.3.3 Apache服务器的安全模块

在服务器安全的原则中,有一条最基本的就是“最少服务”原则。也就是说,只要是用不到的,就不启用、不安装。所以ubuntu的Apache默认加载的模块很少,在一方面来说,也算是提高了Apache的安全性。但是同时也可以使用加载一些安全模块来加强服务器安全。

表3.3.1 Apache安全模块

mod_evasive mod_evasive 是Apache(httpd)服务器的防DDOS的一个模块。对于WEB服务器来说,是目前比较好的一个防护DDOS攻击的扩展模块。 mod_ssl 这个模块提供了使用安全套接字层(SSL v2/v3)和传输层安全(TLS v1)协议实现高强度加密传输的功能。 mod_Security mod_security是一个集入侵检测和防御引擎功能的开源web应用安全程序(或web应用程序防火墙). mod_chroot mod_chroot 可以使 Apache 运行在一个安全的 chroot 环境。 第33页 共48 页

(1)加载mod-evasive防范DDoS攻击防范

apache提供一个mod-evasive的模块,该模块可以在很大程度上防止HTTP DDoS攻击。虽然无法完全防御,至少可以缓解HTTP服务器的压力。如果配合软件防火墙、硬件防火墙等,则更能达到防御DDOS攻击的功能。 1.mod-evasive的安装

$ sudo apt-get install libapache2-mod-evasive 2.mod-evasive的配置 创建一个配置文件,然后根据需要来调整mod_evasive模块参数:

$ sudo vi /etc/apache2/conf.d/evasive 写入内容:

DOSHashTableSize 3097 DOSPageCount 2 DOSSiteCount 50 DOSPageInterval 1 DOSSiteInterval 1 DOSBlockingPeriod 10 #还可以加入以下备选配置 DOSEmailNotify you@yourdomain.com DOSSystemCommand ―su – someuser -c ?/sbin/… %s …‘‖ DOSLogDir ―/var/lock/mod_evasive‖ #还可以加入以下的“白名单”配置 DOSWhitelist 127.0.0.1 DOSWhitelist 127.0.0.* (2)安装Mod Security 2模块 1.安装mod-security

第34页 共48 页

$ sudo apt-get install libapache2-mod-security2 2.新建配置文件

$ sudo vim /etc/apache2/conf.d/modsecurity2.conf 添加以下内容:

Include conf.d/modsecurity/*.conf 3.编写规则文件

$ sudo mkdir /etc/apache2/conf.d/modsecurity $ sudo vim /etc/apache2/conf.d/modsecurity/mod-security.conf 添加规则

# 检测内容长度以避免堆溢出攻击 SecFilterForceByteRange 32 254 =>SecFilterForceByteRange 32 126 # debug设置 SecFilterDebugLevel 9 =>SecFilterDebugLevel 0 # 设置缺省的动作 SecFilterDefaultAction \\# 把设置传递给子目录 SecFilterInheritance Off # Redirect user on filter match # 当匹配sh的时候,重新定向到一个特殊的警告页面,该页面是自行编写的,写些警告的话让攻击者知难而退,该段先不要生效,等到相关配置配好之后再失效不迟。记住在配好之后要使之生效。 #SecFilter sh redirect:http://localhost/hack/warning.htm # Prevent OS specific keywords #过滤一些敏感的东西,我们使用*是为了攻击者使用/etc/./passwd来绕开检测 第35页 共48 页

SecFilter /etc/passwd =>SecFilter /etc/*passwd SecFilter /bin/*sh From:http://hi.http://www.wodefanwen.com//zhfct123/blog/item/6b6623ce00e3053af8dc61ec.html # Very crude filters to prevent SQL injection attacks # 防止SQL插入(SQL Injection)攻击 SecFilter \SecFilter \SecFilter \SecFilter \4.激活mod-security模块

$ sudo a2enmod mod-security 5.建立日志目录

$ sudo mkdir /etc/apache2/logs 6.重启Apache服务器

$ sudo /etc/init.d/apache2 restart 7.查看mod security 2是否已经正常运行

$ cat /var/log/apache2/error.log | grep \(3)给Apahce服务器安装ssl模块 1.激活ssl模块

$ sudo a2enmod ssl 2.配置生成证书命令

$ vi ~/.bashrc 在最后添加以下语句

alias apache2-ssl-certificate='sudo /usr/sbin/make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem' 第36页 共48 页

3.生成证书

注销之后,即可使用apache2-ssl-certificate命令来生成证书

$ sudo mkdir /etc/apache2/ssl $ apache2-ssl-certificate 4.创建站点文件

$ cd /etc/apache2/sites-available $ sudo cp default-ssl ssl $ sudo vi ssl 将

NameVirtualHost * 修改成

NameVirtualHost *:443 将

修改成

同时在

ServerAdmin webmaster@localhost 下面添加 SSLEngine On SSLCertificateFile /etc/apache2/ssl/apache.pem 5.激活站点

sudo a2ensite ssl 6.重启apache服务器

第37页 共48 页

本文来源:https://www.bwwdw.com/article/zh03.html

Top