使用WAF保护Linux服务器安全
2020-05-20河南刘进京
■ 河南 刘进京
编者按:Linux系统并非无懈可击,同样存在各种漏洞。在很多Linux服务器上运行各种Web服务,如何提高其安全性,是管理员必须重视的事情。相比之下,使用WAF(即Web应用防护系统)可以有效提高其安全性。WAF是基于网站应用级别的入侵防御系统,通过执行一些针对HTTP/HTTPSDE安全策略,专门为Web应用提供保护。
WAF防护技术的特点
Nginx服务器目前应用的极为广泛,WAF就可以通过专门的模块,对其进行安全保护。
例如,WAF能够实现黑白名单功能,禁止黑名单的IP访问。可以使用URL白名单功能定义无需过滤的URL。WAF支持User-Agent过滤,并与自定义规则进行匹配,其支持CC攻击保护,可以有效限制单个URL在指定时间内的访问次数。
此外,WAF还支持Cookie和URL过滤,而且支持URL参数过滤,利用预设的规则防止恶意攻击。利用日志记录功能,WAF可以将可疑的访问行为全部记录下来。
WAF能够对HTTP请求进行异常检测,过滤异常的HTTP请求,而且可以只允许HTTP协议的部分选项通过,来有效较小攻击的范围。
对于高级的WAP应用防火墙来说,还可以严格限制HTTP协议中不常用的或者没有被完全规范的选项。对于诸如网页篡改、窃取数据、安装后门等入侵行为,WAF可以通过输入验证技术来加以防范。
任何网站都有可能存在各种漏洞,如果不及时将漏洞补上,很容易招致黑客的攻击。WAF可以利用各种漏洞信息,并在尽可能短的时间内修补漏洞。
WAF是基于安全规则进行运作的,利用各种Web应用的规则可以对网站进行全面的检测,通过建立基于应用数据的模型,可以准确判断应用数据是否存在异常。利用WAF的状态管理功能,可以有效检测诸如登录失败等异常事件,并对对超过极限值的行为进行管控,这对于防御各种暴力破解行为非常有用。
当用户首次访问时,WAF可以将其重定向到默认登录页面,并对用户的整体行为进行识别和记录,这有利于判别该行为是否具有攻击性。
此外,WAF还具有响应监视和保护信息泄露、隐藏表单域、抗击入侵规避技术等功能。因为有些开发人员对于输入信息并没有进行有效的安全监测,而WAF恰恰可以有效增强其安全性。
WAF与传统防火墙
WAF和防火墙是存在区别的,防火墙的主要作用是控制网络访问,其工作在OSI模型的三层和四层。防火墙是基于报文进行检测的,可以对端口访问进行管理,但是其无法处理HTTP会话,无法理解各种Web应用应用程序语句。所以防火墙无法对HTTP通讯进行输入验证和攻击方式分析。现在很多针对Web访问的攻击(例如SQL注入、跨站脚本、Cookie欺骗等),都会将恶意数据包封装为看似合法HTTP请求,通过TCP 80/443等端口通过防火墙检测。
当然,对于比较高级的防火墙(下一代防火墙),也可以在一定程度上提供应用层防御功能。例如,可以根据异常的TCP会话分析其攻击特征并阻止网络层攻击,将IP报文进行拆分组合来判断是否隐藏有恶意攻击数据包等。
但是,从原理上说防火墙是无法理解HTTP会话的,难以完美应对各种基于应用的攻击行为。与之对应的是,WAF可以在应用层很好的理解HTTP会话,可以有效防御基于应用层的攻击。
使用WAF保护Web服务
WAF的组成包括协议解析模块、规则管理模块、动作处理模块、防御模块、配置模块和错误处理模块等,可以依次实现解析HTTP请求、检测访问以及防御和记录恶意攻击等功能。
例如,在Linux服务器上下 载Nginx、PCRE、LuaJIT、Ngx_Devel_Kit,以及Lua_Nginx_Module等软件包,使用Tar命令将其全部解压到特定的目录中(例如“/usr/local/src”)。执行以下命令安装Lua即时编译器LuaJIT:
执 行“useradd nguser-s/sbin/nologin -M”命令,创建名为“nguser”的用户,使用其运行Nginx,并且禁止其拥有登录权限。
执行“tar xvf nginx-1.x.x.tar.gz”命令,对Nginx包进行解压,其中的“x”表示具体的版本号。执行以下命令安装Nginx:
注意其中使用“–addmodule”,“–with-pcre”等参数指定了PCRE、LuaJIT、Ngx_Devel_Kit和Lua_Nginx_Module等软件的路径。进入Nginx安装路径中的“conf”目录,执行“ln -s/usr/local/lib/libluajit-5.x.so.x/lib/libluajit-5.x.so.x”,创建符号链接。
执行“vi nginx.conf”命令,在其配置文件中添加:
执行“/usr/local/nginx/sbin/nginx -t”命令,会显示Nginx的配置文件语法正确的提示。执行“/usr/local/nginx/sbin/nginx”命令启动Nginx服务,在浏览器中访问“http://xxx.xxx.xxx.xxx/test”,其中的“xxx”表示Nginx服务器的地址,会显示“Test OK”的内容,这说明配置文件是正确的。
使用WAF保护网络应用安全,必须使用到合适的规则。这里从网上下载名为“ngx_lua_waf”的规则库,这是一个压缩包,将其解压复制到Nginx的“conf”目录中,并将目录名更名为“waf”。
该规则库可以用于过滤利用Post、Get以及Cookie方式进行的Web攻击,可以防止SQL注入、本地包含、溢出攻击、Fuzzing等压力测试,XSS和SSRF跨站攻击等非法行为,能够有效防止敏感文件泄漏,屏蔽黑客扫描和非法提权,防御异常的网络请求,防止WebShell上传操作等。
在Nginx配置文件中的指定的“http{}”段中添加:
打开上述“WAF”目录,执 行“vi config.lua”命令,在该配置文件中的“RulePath=”行中确保其内容 为“"/usr/local/nginx/conf/waf/wafconf/"”。
为了便于测试,执行:
创建指定的目录,并赋予Nginx、账户读写执行该目录的权限。
执 行“vi config.lua”命令,在其配置文件中输入“attacklog="off"”行,开启记录攻击日志功能。输入“logdir=/data/logs/”行,设置日志存储路径。依次输入:
实现开启URL拦截访问、拦截后重定向、拦截Cookie欺骗攻击、拦截Post攻击、开启URL白名单功能、设置禁止上传的文件类型、开启IP白名单功能、开启黑名单功能、开启防御CC攻击功能、设置CC攻击频率、设置警告信息等。
可以根据实际情况进行灵活的调整,例如添加更多的禁止上传文件类型,设置更多的IP黑白名单,多个IP以逗号分隔,对于CC攻击频率默认为一分钟同一个IP只能请求同一个地址100次,您可以适当修改。
之后可执行诸如“curl http://localhost/test.php?id=../etc/passwd”之类的命令,会触发WAF保护功能,提示该访问请求带有不合法参数已经被拦截。
打开Nginx的“access.log”日志,根据时间信息进行查找,可以看到服务器针对该访问返回HTTP 403代码。
这样,当黑客试图对Nginx服务器进行各种攻击时,都会触发对应的WAF规则并被屏蔽或者拦截。
提高Linux安全性的建议
当然,对于Linux服务器进行安全保护,必须从更多的方面着手。
例如,首先必须保证Root管理员密码的安全,必须将密码设置的足够长足够复杂,而且Root密码不能让更多人知晓,如果发生危及密码安全的情况,必须及时修改Root密码等。
在执行远程管理时,需要禁止Root账号,只能配置一个具有Sudo权限的账户。对于系统账户来说,应该尽可能的减少其数量,对于应用程序的执行账户,需要将它的登录Shell设置为Nologin状态,禁止其登录系统。对于无用的的账户,应该定期进行清理。对于vsftpd、MySQL等账户,需要严格控制其权限。
因为SSH服务使用的比较广泛,可以实现安全的远程连接,因此,必须采取各种措施保护其连接密码的安全。例如使用内置的NetFilter防火墙模块模设置IPTable规则,利用Recent参数限制连接登录数,使用DenyHost工具等方法,防范暴力破解SSH密码。为了有效提高SSH访问的安全性,可以使用跳板机来进行访问,而跳板机只允许合法的地址进行访问。例如在线主机不开启针对公网的SSH端口,访问者只能通过指定的跳板机,才可以通过SSH连接访问目标主机。
对于系统日志进行及时的查看和分析,可以有效发现黑客的踪迹,例如,使用“last”命令可以查看非授权用户登录事件信息。该命令依靠的是“/var/log/wtmp”文件,如果发现该文件被删除,就很有可能说明黑客已经光顾过。
对日志文件进行分析,如果发现其中存在没有退出的操作和对应的登录操作,就说明黑客恶意删除了上述文件。
对于狡猾的黑客来说,当其入侵之后,会在系统中设置RootKIt级别的后门,让用户无法查找。为此可以定期使 用CHKrootkit、RKHunter等工具对系统进行扫描,来及时发现并清除这类后门。当黑客侵入系统后,必然会对一些系统文件进行篡改,这就导致文件系统的完整性遭到破坏。
因此,管理员通过检测文件系统的异常变化,就可以发现黑客活动的踪迹。使用Tripwire之类的软件,可以针对文件系统拍摄快照,为当前的系统状态创建数据库。当文件发生变化(例如新建、删除、修改等),Tripwire可以将现在的文件系统信息和之前创建数据库进行比对,来发现文件的变动情况。
对于一些不需要的系统服务,最好及时将其关闭。系统内核的重要性不言自喻,因为很多攻击都是针对特定内核的,因此升级到稳定的新内核版本,是提高系统安全性的好方法。
对于系统软件要及时进行更新,防止黑客利用潜在的漏洞进行渗透。网络安全不仅仅要重视来自外网的访问,对于内网的安全同样不可忽视。
例如可以将一些服务器放置到DMZ区域,将其和内网分隔开,这可以有效防止来之内部的破坏活动。为了进一步提高安全性,可以在网络中的关键服务器上安装Snort等入侵检测系统,来对整个网段进行监控,提高内网的安全性。在部署入侵检测系统时,可以采取灵活的策略。例如可以将入侵检测检测主机连接到防火墙和交换机之间串接一个集线器上,也可以将其安装到交换机下的某台主机上,或者直接将其安装到防火墙主机上,对进出整个内网的所有数据包进行分析监控等。