为您的Joomla!网站安装Web服务器
许多人质疑Joomla! CMS的安全性,因为他们不知道大多数成功的攻击都发生在服务器层面。
显然,一些行动是必要的,以提高CMS的安全性,我强调以下内容
1)始终使用最新稳定版;
2)封装管理员目录(/administrator);
3)目录应具有755权限;
4)文件应具有644权限;
5)永远不要使用商业或盗版的模板。
以下列出的是构建安全Web服务器的良好实践,特别针对基于Linux-Apache-MySQL-PHP技术的PHP应用程序,尤其是Joomla!
安装软件包
aptitude install apache2 apache2-mpm-prefork apache2-utils apache2.2-commonbinutils build-essential ca-certificates curl dbconfig-common defoma
dpkg-dev fontconfig-config gawk javascript-common libapache2-mod-php5libapr1 libaprutil1 libc6-dev libcurl3 libdbd-mysql-perl libdbi-perl libexpat1
libfontconfig1 libfreetype6 libgd2-xpm libgmp3c2 libgomp1 libhtml-templateperl libio-multiplex-perl libjpeg62 libjs-jquery libmpfr1ldbl libmysqlclient15off
libnet-cidr-perl libnet-daemon-perl libnet-server-perl libnet-snmp-perl libplrpc-perl libpng12-0 libpq5 libssh2-1 libstdc++6-4.3-dev libt1-5
libtalloc1 libterm-readkey-perl libtimedate-perl libwbclient0 libxpm4 munin-node mysql-server mysql-common openssl openssl-blacklist php5 php5-common
php5-gd php5-mysql php5-suhosin psmisc ssl-cert ttf-dejavu ttf-dejavu-core ttf-dejavu-extra wwwconfig-common libwww-perl htop sudo
强化和调整Apache
编辑文件
- Server Tokens
De
ServerTokens Full
Para
ServerTokens Prod - ServerSignature
De
ServerSignature On
Para
ServerSignature Off - TraceEnable
De
TraceEnable On
Para
TraceEnable Off
(*) 在文件配置文件
<Document />
Order Deny,Allow
Deny from All
Options FollowSymLinks
AllowOverride None
</Document>
启用*server-status*以获取Apache2统计信息
在 |/etc/apache2/conf.d/| 目录下创建名为 *server-status* 的文件,内容如下:
SetHandler server-status
Deny from all
Allow from localhost
将以下行添加到文件 |/etc/apache2/apache2.conf| 的末尾
ExtendedStatus On
启用 *info* 模块
a2enmod info
启用 SSL
要启用 SSL,请访问 http://blog.alexos.com.br/?p=371
Apache 调优
Apache2 的调优配置完全取决于可用的资源(CPU、内存和带宽)
例如,对于拥有 8GB 内存和 5Mb 链接的四核服务器,建议以下配置
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 1000
MaxClients 1000
MaxRequestsPerChild 0
每个指令的描述
* StartServers (推荐保持默认值)
配置初始化时创建的子进程数量 - https://httpd.apache.ac.cn/docs/2.0/mod/mpm_common.html#startservers
* MinSpareServers (推荐保持默认值)
不处理请求的最小进程数量 - https://httpd.apache.ac.cn/docs/2.0/mod/prefork.html#minspareservers
* MaxSpareServers (推荐保持默认值)
不处理请求的最大进程数量 - https://httpd.apache.ac.cn/docs/2.0/mod/prefork.html#maxspareservers
* ServerLimit (应等于或高于 MaxClients)
MaxClients 指令的最大值 - https://httpd.apache.ac.cn/docs/2.0/mod/mpm_common.html#serverlimit
* MaxClients (根据可用资源变化)
最大并发连接数 - https://httpd.apache.ac.cn/docs/2.0/mod/mpm_common.html#maxclients
* MaxRequestsPerChild (0 表示无限)
每个子进程可处理请求的限制 - https://httpd.apache.ac.cn/docs/2.0/mod/mpm_common.html#maxrequestsperchild
(*) 重要提示:对于 Apache2 的基准测试,推荐使用 AB(《Apache Benchmark》)
MySQL 增强和安全调优
执行以下命令并遵循推荐步骤
/usr/bin/mysql_secure_installation
- 输入 root 当前密码(如无,按回车键)
输入 mysql root 密码或按回车键(如果尚未配置密码) - 更改 root 密码?[Y/n]
按回车键以创建新密码 - 删除匿名用户?[Y/n]
按回车键 - 禁止 root 远程登录?[Y/n]
按回车键 - 删除测试数据库及其访问权限?[Y/n]
按回车键 - 现在重新加载权限表?[Y/n]
按回车键
MySQL 调优
推荐使用 MySQL 性能调优入门脚本 进行调优。
(*) 重要提示:使用此工具建议在数据库使用 48 小时后进行,以便脚本能够检测到调优的正确值。该脚本将验证 *my.cnf* 文件的参数并创建一个包含推荐更改的新文件。
PHP 增强和安全
为了提高 PHP 的安全性,推荐使用 Suhosin。Debian 默认支持它。
除了 suhosin,还需要禁用以下 /etc/php5/apache2/php.ini 文件中的参数
allow_url_fopen = Off (*)
display_errors = Off
magic_quotes_gpc = Off (**)
(*) 对于Joomla自动更新的启用是必需的,但潜在上可能存在风险。
(**) 对于Joomla! 3.0 Alpha的运行,其启用是必需的。
操作系统安全和维护。
- 禁用exim4。
调用invoke-rc.d exim4停止。
更新-rc.d exim4删除。 - SSH加固。
修改以下文件中的以下行:|/etc/ssh/sshd_config|。
将端口22改为例如端口3000。
将PermitRootLogin yes改为PermitRootLogin no。 - 仅限制sudo的使用于admin组。
创建admin组 - addgroup admin。
将您的用户添加到该组中 adduser seuuser admin。
通过添加以下行配置sudo:%admin ALL=(ALL) ALL。
禁用root用户 - usermod -L root。
为了保持操作系统和应用程序的更新,建议使用Cron-apt。
性能监控。
为了监控服务器和服务的性能,建议使用Munin,在这里您可以找到如何安装和配置Munin的方法。
现在,我们将展示如何配置Munin以监控Apache。
当`server-status`运行时,启用Apache插件。
- cd /etc/munin/plugins
- ln -s /usr/share/munin/plugins/apache_processes apache_processes
- ln -s /usr/share/munin/plugins/apache_accesses apache_accesses
完成这些后,需要编辑文件|/etc/munin/plugin-conf.d/munin-node|,并告知具有访问Apache信息的用户。在Debian的情况下,该用户是*wwwdata*。
vim /etc/munin/plugin-conf.d/munin-node
[apache2]
user www-data
为了最终增加更多安全性,强烈建议使用Ossec Hids和一个小型防火墙脚本。
学习如何安装和配置Ossec Hids。.
(*) 在安装Ossec时,选择本地安装而不是服务器安装,这样安装将是独立的。
防火墙脚本
创建一个包含以下内容的文件|/etc/init.d/firewall.sh|
- #!/bin/bash
- # 服务器防火墙
- # Alexandro Silva
- # 2010年4月27日
- PATH=/bin:/usr/bin:/sbin:/usr/sbin
- TCPOK="123 80 443"
- UDPOK="53"
- iptables -F INPUT
- iptables -F OUTPUT
- iptables -F FORWARD
- iptables -P INPUT ACCEPT
- iptables -P OUTPUT ACCEPT
- iptables -P FORWARD DROP
- # 丢弃进入的损坏的NULL数据包
- iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
- # 丢弃进入的损坏的XMAS数据包
- iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
- # Syn洪水防护
- iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j RETURN
- # 丢弃进入的ping请求
- iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
- iptables -A INPUT -j ACCEPT -i lo
- iptables -A INPUT -j LOG -i ! lo -s 127.0.0.1/255.0.0.0
- iptables -A INPUT -j DROP -i ! lo -s 127.0.0.1/255.0.0.0
- iptables -A OUTPUT -j ACCEPT -o lo
- # 允许3000端口上的SSH访问
- iptables -A INPUT -s 0.0.0.0 -p tcp --dport 3000 -j ACCEPT
- # 允许某些TCP端口的访问
- for PORTA in $TCPOK
- do
- iptables -A INPUT -p tcp --dport $PORTA -j ACCEPT
- done
- # 允许某些UDP端口的访问
- for PORTA in $UDPOK
- do
- iptables -A INPUT -p udp --dport $PORTA -j ACCEPT
- done
- # 根据状态丢弃其他进入连接
- iptables -A INPUT -m state --state ! ESTABLISHED,RELATED -j DROP
- iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
下载脚本 - 在系统启动时添加此脚本
- update-rc.d firewall.sh 默认 测试服务器的安全性
完成所有这些步骤后,使用以下工具扫描服务器并验证所有工作
* w3af
* nikto - Nikto 使用教程
* Netsparker
来源: http://blog.alexos.com.br/ (亚历山大·安东尼奥·安东内斯·阿尔梅达)
一些发表在 Joomla 社区杂志上的文章代表了作者对特定主题的个人观点或经验,可能与 Joomla 项目官方立场不一致
通过接受,您将访问 https://magazine.joomla.net.cn/ 之外的第三方外部服务
评论