科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道用Apache Proxy的指令改进LAMP安全性 (2)

用Apache Proxy的指令改进LAMP安全性 (2)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在本文中,Nick Maynard 描述了一种使用 Apache 的 mod_proxy 模块改进 LAMP 设置的安全性的方法。本文专门针对 Linux;但是,也可以将一些原理应用于其他操作系统。

作者:Nick Maynard 来源:www.ibm.com 2007年9月11日

关键字: 安全性 Proxy 操作系统 Linux

  • 评论
  • 分享微博
  • 分享邮件
 

示例场景

我们来考虑一个场景:Apache 管理员必须为两个单独的客户建立两个域。一个客户是在线创业企业,很关注在线安全性。另一个是个人客户,他在站点安全性方面比较宽松,可能将不安全的代码上载到这个站点。因此,Apache 管理员必须采取措施将这两个站点隔离开。

因此,管理员有两个域:www.startup.tld,它属于在线创业企业(用户 ID startup);以及 www.reckless.tld,它属于个人(用户 ID nimrod)。为了解决这个问题,管理员决定使用 mod_proxy 解决方案。管理员给每个用户一个单独的 Apache 实例,这个实例运行在用户自己的用户 ID 下,使用私有的 IP 地址/端口组合,并使用 mod_proxy 解决方案通过一个 facade 服务器提供对这两个用户的域的访问,这个服务器作为 www-data 运行,使用一个公共的 IP 地址/端口组合。图 1 说明了整个场景。

图 1. 场景示例

推荐的 Apache 版本

对于示例应用程序配置中的每个元素,Apache 管理员应该使用 表 1 中列出的 Apache 版本。

后端 Apache 实例的配置

清单 2 和 清单 3 中的代码片段说明了与标准 Apache 配置的基本差异。应该根据需要将它们添加到适当的配置中,比如这里忽略的 PHP 功能配置。

清单 2. 在线创业企业的 Apache 配置:

# Stuff every Apache configuration needs
ServerType standalone
LockFile /var/lock/apache/accept.startup.lock
PidFile /var/run/apache.startup.pid

ServerName necessaryevil.startup.tld
DocumentRoot "/home/startup/web"

# Essential modules
LoadModule access_module /usr/lib/apache/1.3/mod_access.so

# Which user to run this Apache configuration as
User startup
Group startup

# This must be off else the host isn't passed correctly
UseCanonicalName Off

# The IP/port combination to listen on
Listen 127.0.0.2:10000

# Using name-based virtual hosting allows
 you to host multiple sites per IP/port combo
NameVirtualHost 127.0.0.2:10000

<VirtualHost 127.0.0.2:10000>
        ServerName www.startup.tld

        # You can add aliases so long as the facade server is aware of them!
        ServerAlias startup.tld

        DocumentRoot "/home/startup/web/www.startup.tld"

        <Directory /home/startup/web/www.startup.tld/>
            Options Indexes FollowSymLinks MultiViews ExecCGI Includes
            AllowOverride All
            Order allow,deny
            Allow from all
        </Directory>

</VirtualHost>

清单 3. 个人客户的 Apache 配置

# Stuff every Apache configuration needs
ServerType standalone
LockFile /var/lock/apache/accept.nimrod.lock
PidFile /var/run/apache.nimrod.pid

ServerName necessaryevil.nimrod.tld
DocumentRoot "/home/nimrod/web"

# Essential modules
LoadModule access_module /usr/lib/apache/1.3/mod_access.so

# Which user to run this Apache configuration as
User nimrod
Group nimrod

# This must be off else the host isn't passed correctly
UseCanonicalName Off

# The IP/port combination to listen on
Listen 127.0.0.2:10001

# Using name-based virtual hosting allows you 
to host multiple sites per IP/port combo
NameVirtualHost 127.0.0.2:10001

<VirtualHost 127.0.0.2:10001>
        ServerName www.reckless.tld

        # You can add aliases so long as the facade server is aware of them!
        ServerAlias reckless.tld

        DocumentRoot "/home/nimrod/web/www.reckless.tld"

        <Directory /home/nimrod/web/www.reckless.tld/>
            Options Indexes FollowSymLinks MultiViews ExecCGI Includes
            AllowOverride All
            Order allow,deny
            Allow from all
        </Directory>

</VirtualHost>

清单 4. 门面 Apache 实例的 Apache 配置

# Stuff every Apache configuration needs
LockFile /var/lock/apache/accept.www-data.lock
PidFile /var/run/apache.www-data.pid

ServerName necessaryevil.facade.server
DocumentRoot "/home/www-data"

# Essential modules
LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so

# Which user to run this Apache configuration as
User www-data
Group www-data

# These must be set else the host isn't passed correctly
UseCanonicalName Off
ProxyVia On
ProxyRequests Off
# This must also be set, though it's only an option in Apache2
ProxyPreserveHost On    

# The IP/port combination to listen on
Listen 9.20.1.1:80

# Using name-based virtual hosting allows 
you to host multiple sites per IP/port combo
NameVirtualHost 9.20.1.1:80

# Configuration to forward requests for startup.tld
<VirtualHost 9.20.1.1:80>
        ServerName www.startup.tld
        ServerAlias startup.tld

        ProxyPass / http://127.0.0.2:10000/
        ProxyPassReverse / http://127.0.0.2:10000/
        ProxyPassReverse / http://www.startup.tld:10000/
        ProxyPassReverse / http://startup.tld:10000/
</VirtualHost>

# Configuration to forward requests for reckless.tld
<VirtualHost 9.20.1.1:80>
        ServerName www.reckless.tld
        ServerAlias reckless.tld

        ProxyPass / http://127.0.0.2:10001/
        ProxyPassReverse / http://127.0.0.2:10001/
        ProxyPassReverse / http://www.reckless.tld:10001/
        ProxyPassReverse / http://reckless.tld:10001/
</VirtualHost>
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章