Apache 安装 mod_rpaf 扩展获取代理机前的访客真实ip

模块的github: https://github.com/gnif/mod_rpaf/

下载编译

wget -O mod_rpaf.zip https://github.com/gnif/mod_rpaf/archive/stable.zip
unzip mod_rpaf.zip
cd mod_rpaf-stable
/usr/local/apache/bin/apxs -i  -c -n mod_rpaf.so mod_rpaf.c

记录一下编译后的.so文件位置

chmod 755 /usr/local/apache/modules/mod_rpaf.so

配置可放在httpd.conf也可放在虚拟目录配置中

<VirtualHost *:80>

        LoadModule              rpaf_module modules/mod_rpaf.so
        RPAF_Enable             On
        RPAF_ProxyIPs           代理机ip 代理机ip2
        RPAF_SetHostName        On
        RPAF_SetHTTPS           On
        RPAF_SetPort            On
        RPAF_ForbidIfNotProxy   Off

        ServerAdmin www.test.com
        DocumentRoot "/home/public_html/test/"
        ServerName www.test.com
</VirtualHost>

配置也可放在httpd.conf中全局配置

#ben 20180204 配置接收代理ip的客户地址并设置成remote_add
LoadModule rpaf_module modules/mod_rpaf.so

<IfModule mod_rpaf.c>
        RPAF_Enable             On
        RPAF_ProxyIPs           代理机ip 代理机ip2
        RPAF_SetHostName        On
        RPAF_SetHTTPS           On
        RPAF_SetPort            On
        RPAF_ForbidIfNotProxy   Off

</IfModule>

如果对日志有要求,则也要对日志的ip做修改
LogFormat "%{X-Forwarded-For}i %h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
LogFormat "%{X-Forwarded-For}i %h %l %u %t "%r" %>s %b" common

暂时不能确定 {X-Forwarded-For} 做为日志记录ip,是否百分百对系统安全,个人认为仅仅一个字符而以。

不过不确定,就用自定义的其它头。

这个扩展模块主要是获取 X-Forwarded-For 来替换

为防止出现基于 X-Forwarded-For的攻击
nginx上必须修改掉这个的值

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Forwarded-For $remote_addr;

完整如下

server {
        listen  80;
        rewrite_log on;
        server_name  www.test.com;
        access_log  /home/public_html/test/access.log;
        error_log /home/public_html/test/error.log debug;
        location / {
                proxy_store off;
                proxy_redirect off;
                #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-For $remote_addr;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header Host $host;
                proxy_pass http://后端ip;
        }
}

            

通过firefox 修改header,X-Forwarded-For 。
直接解析到服务器不走代理。
则不会触发 mod_rpaf ,只有通过代理服务器来的,
才会触发 mod_rpaf扩展的功能。

RPAF_ProxyIPs 代理机ip