nginx反向代理apache,后端获取真实ip地址的配置

网络安全   96阅读

关于网站访问日志中无法获取客户端真实的ip地址的问题,使用nginx方向代理到后端服务端的架构,后端服务端获取到的ip地址是nginx代理服务器的地址,而并没有记录到真实的客户端的ip地址,不能准确记录用户的真实网络ip地址,除了不满足程序的功能,还在日志审计合规性上不满足要求。

不满足程序功能的地方,比如在文章评论功能里,每次发布评论时都会记录发布评论的机器的网络ip地址,用于区分发表评论的不同用户,如果程序获取的客户端ip地址都是本地127.0.0.1,那么在数据表里设置一个ip字段就失去了意义。

而满足日志审计合规性要求是重点,准确记录访问来源的真实网络ip地址有法律法规依据,而如果不按照法律法规的规定执行日志保存的,公安机关可以依法进行处罚。

法律法规依据一:《网络安全法》第三章网络运行安全第一节一般规定第二十一条的第(三)小点:采取监测、记录网络运行状态、网络安全事件的技术措施,并按照规定留存相关的网络日志不少于六个月。

法律法规依据二:《互联网安全保护技术措施规定(公安部令第82号)》第七条互联网服务提供者和联网使用单位应当落实以下互联网安全保护技术措施,(三)记录并留存用户登录和退出事件、主叫号码、互联网地址或域名、系统维护日志的技术措施。

法律法规依据三:《互联网安全保护技术措施规定(公安部令第82号)》第十三条互联网服务提供者和联网使用单位依照本规定落实的记录留存技术措施,应当具有至少保存六十天记录备份的功能。

违法规定的处罚依据:

一、《网络安全法》第六章法律责任。

二、《计算机信息网络国际联网安全保护管理办法(2011修订)》第二十一条。

2020102101.PNG


通常反向代理的结构可以简化为如图所示。

2020102102.PNG

客户端访问网址, 首先访问到的是nginx反向代理,再由反向代理将请求转发给后端的Aapche服务器,默认情况下nginx反向代理获取到的是客户端的真实网络ip地址,而后端Apache服务器则获取到的是反向代理服务器的ip地址,没有反馈真实的客户端ip地址。通过修改nginx和apahce的配置,可以将客户端的真实ip地址传递给后端的apache服务器。

1,修改nginx配置文件

server {
    listen       80;
    server_name  luoanman.com www.luoanman.com;
    rewrite ^(.*)$ https://$host$1  permanent;
}
server {
    listen       443 ssl;
    server_name  luoanman.com www.luoanman.com;
    ssl_certificate   /var/www/www-luoanman-com/luoanman/www.luoanman.com.pem;
    ssl_certificate_key  /var/www/www-luoanman-com/cert/www.luoanman.com.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    location / {
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-Ip $remote_addr;
        proxy_set_header X-NginX-Proxy true;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://localhost:8080;
        proxy_redirect off;
    }
}

2,启用apahce的remoteip模块

/etc/httpd/conf.modules.d

在模块配置目录增加一个00-remoteip.conf配置文件,内容为

LoadModule remoteip_module modules/mod_remoteip.so

3、修改httpd.conf配置

<IfModule remoteip_module>
        RemoteIPHeader X-Forwarded-For
        RemoteIPInternalProxy 127.0.0.1

</Ifmodule>
LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%a %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
    # You need to enable mod_logio.c to use %I and %O
    LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>

4、重新启动nginx和apache

查看日志记录可以看到前后的对比情况,默认记录的都是本地ip地址,配置生效之后记录了真实的ip地址。

20201021023.PNG

20201021004.PNG



喜欢请常来,打赏请随意。

  1. 姜辰    回复

    瑟瑟发抖,我是不是也应该记录下? 不对啊,我不是境内网站啊哈哈哈