阻止并监控web系统服务器端请求外部网址的方法
当我们安装一个开源系统时,好多开源系统会留有后门,该后门会向开源系统的网站发送我们服务器的信息,比如域名、服务器ip、甚至是管理账号密码等。我们这里只讨论是服务器端发送数据到某外部地址,不讨论由用户前端发送的情况。
我们不希望安装到自己服务器上的系统会往其他网站上发送数据。
解决办法有,比如可以禁止服务器访问外网。这样服务器就不能对外访问任何数据了。但是这样的缺点就是我们彻底不能让服务器访问外网了,我们正常的请求需求也会被禁止了,比如网站常用的短信接口等,都不能用了。
另外一种办法是,把开源系统的后门请求的url找出来,并修改掉。这样最好。但是如果我们还想知道开源系统到底给该url发送了什么数据,我们这里就来讲这种情况的需求。
第一步:把系统请求外部的url的域名,在服务器端修改hosts文件,把ip指向另外一个我们可以监控的服务器上,比如127.0.0.1(也可以是外网ip)。
第二步:在服务器上搭建监控服务。本次讲的是使用nginx + php来搭建监控服务。
nginx配置文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
server { listen 80 default_server; server_name monitor.*****.com ; index index.html index.htm index.php default.html default.htm default.php; root /data0/htdocs/monitor; location / { rewrite ^/(.*) /monitor.php?$1 last; } location /monitor.php { try_files $uri =404; fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index index.php; include fastcgi.conf; } } |
站点目录下即/data0/htdocs/monitor下只需要一个文件monitor.php,源码只需要几行:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php //一个域名创建一个目录 $dir = './logs/'.$_SERVER["HTTP_HOST"]; is_dir($dir) OR mkdir($dir, 0777, true); $fp = fopen($dir.'/'.date('Y').date('m').date('d').'-'.".log.php","a+"); flock($fp, LOCK_EX) ; fwrite($fp,"<?php exit();?>RUN TIME:".date('Y-m-d H:i:s')."\n" .__FILE__ . "\n".var_export($_SERVER,true)."\n"); flock($fp, LOCK_UN); fclose($fp); echo "true"; |
大家自己试试吧。