6分钟阅读时间 (1202个单词)

为您的Joomla!网站安装Web服务器

Montando o servidor web para seu site em Joomla!

许多人质疑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 项目官方立场不一致

0
发布你的九月俳句
 

评论

已注册? 登录这里
尚未发表评论。成为第一个发表评论的人

通过接受,您将访问 https://magazine.joomla.net.cn/ 之外的第三方外部服务