我从来没有激活mod_security
或编辑过虚拟主机,所以这对我来说是一个新的挑战,我试着遵循本教程但似乎网络上的大多数教程都没有反映我的情况。我有一个在 Ubuntu 14.04 上运行 Apache 2 的 EC2 实例,我没有名为 httpd 的文件,但是在我的/etc/apache2/sites-available
文件夹中我有一个名为的文件000-default.conf
:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
<IfModule security2_module>
SecRuleEngine Off
</IfModule>
<Directory /var/www >
AllowOverride All
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
这是我的security2.conf
位置/etc/apache2/mods-available
<IfModule security2_module>
SecDataDir /var/cache/modsecurity
Include "/usr/share/modsecurity-crs/*.conf"
Include "/usr/share/modsecurity-crs/activated_rules/*.conf"
IncludeOptional /etc/modsecurity/*.conf
</IfModule>
我希望启用此功能mod_security
,但现在无法启用,因为../html
文件夹(我的网站的文件夹)内有 Wordpress 和 phpMyAdmin(因此,如果我删除 SecRuleEngine Off,它会给我一个错误,即所有网站的权限都被拒绝)。从上面提到的教程中,我知道我需要使用此代码来排除特定目录:
<Directory "/var/www/wp-admin">
<IfModule security2_module>
SecRuleEngine Off
</IfModule>
</Directory>
我不明白的是:我需要在里面创建一个新的 .conf 文件吗/sites-available
?例如,排除位于 中的 phpMyAdmin 目录的 .conf 文件应该是什么样子的/usr/share/phpmyadmin
?
答案1
[这篇文章太长了,不适合发表评论,所以将其作为答案发布。希望对您有所帮助]
似乎您没有配置虚拟主机。相反,只有一个主 DocumentRoot,并且您使用以下方式调用网站http://ip 地址/站点文件夹网址。
假设有两个虚拟主机:一个在 /var/www/html/wordpress,另一个在 /var/www/html/phpmyadmin。
如果您需要禁用 phpmyadmin,则在 phpmyadmin 的虚拟主机配置下,添加您在后半部分中所述的行:
<VirtualHost *:80>
..
..
..
<Directory "/var/www/html/phpmyadmin">
<IfModule security2_module>
SecRuleEngine Off
</IfModule>
</Directory>
..
..
</VirtualHost>
要为 wordpress 管理员禁用它,请在 wordpress 站点的虚拟主机配置下添加相同的内容:即。
<virtualhost *:80>
..
..
..
<Directory "/var/www/html/wordpress/wp-admin">
<IfModule security2_module>
SecRuleEngine Off
</IfModule>
</Directory>
..
..
</VirtualHost>
如果没有 VirtualHost 配置,那么您可以尝试<Directory>..</Directory>
在 mod_security 配置文件中为 phpmyadmin 和 wp-admin 添加指令:'/etc/apache2/mods-available/security2.conf'
apachectl -t
在重新加载之前测试语法。