首页
wjlink
投稿
视频
直播
壁纸
更多
留言
统计
LINK
Search
1
宝塔面板绑定域名套上cloudflare – 实现cdn访问拯救你的IP
110 阅读
2
Python 爬取YouTube某个频道下的所有视频信息
109 阅读
3
为你的 WordPress 站点配置 Telegram Instant View
63 阅读
4
苹果CMS(MACCMS)如何在标题中随机插入关键词
60 阅读
5
windows 使用 FFmpeg 按大小或时间来批量分割视频
59 阅读
技術類
自媒体
調查
问卷调查
美國站
英國站
注册丨登录
Search
标签搜索
wordpress
V2Ray
vps
苹果cms
面板
php
宝塔
ipfs
DD
脚本
语言
上传
判断
Youtube
cdn
ip
AI
HTML
1
2
Gengre
累计撰写
67
篇文章
累计收到
0
条评论
今日撰写
0
篇文章
️
首页
分类
技術類
自媒体
調查
问卷调查
美國站
英國站
页面
wjlink
投稿
视频
直播
壁纸
留言
统计
LINK
登录丨注册
搜索到
2
篇与
的结果
2023-10-22
NGINX,PHP获取Cloudflare传递的真实访客IP 配合宝塔面板防御CC攻击 防伪造IP 日志记
Cloudflare获取访客真实IP,获取cf传递的真实访客ip,再结合我们的cdn.bnxb.com的批量提交IP给CF的防火墙的功能,可以实现抵御CC攻击的功能,将CC攻击者的连接IP给封杀在CDN阶段,就到不了我们服务器,消耗不了我们的服务器资源那怎么获取CC攻击者的真实IP信息呢(也就是这些CC攻击者连接到CF CDN的IP),其实很简单,CF有将通过他们的CDN访问你网站的访客的真实IP通过HEADER发送到你服务器来,标头是HTTP_CF_CONNECTING_IPNGINX,PHP获取Cloudflare发送的真实访客IP 可用于防御CC攻击 防伪造IP 日志记录真实IP 显示访客真实IP先看看我们通过PHP 得到的CF返回来的HEADER信息<?php print_r($_SERVER); ?>读取到结果如下:Array ( [USER] => www [HOME] => /home/www [HTTP_CF_CONNECTING_IP] => 122.114.6.211 [HTTP_COOKIE] => __cfduid=*****; PHPSESSID=******; PHPSESSID=*****; Hm_lvt_***=****; Hm_lpvt_*****=1536121476 [HTTP_ACCEPT_LANGUAGE] => zh-CN,zh;q=0.9 [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 [HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36 [HTTP_UPGRADE_INSECURE_REQUESTS] => 1 [HTTP_CF_VISITOR] => {"scheme":"https"} [HTTP_X_FORWARDED_PROTO] => https [HTTP_CF_RAY] => 455d1c72ed0e963d-SJC [HTTP_X_FORWARDED_FOR] => 122.114.6.211 [HTTP_CF_IPCOUNTRY] => CN [HTTP_ACCEPT_ENCODING] => gzip [HTTP_CONNECTION] => Keep-Alive [HTTP_HOST] => cdn.bnxb.com [PATH_INFO] => [REDIRECT_STATUS] => 200 [SERVER_NAME] => cdn.bnxb.com [SERVER_PORT] => 443 [SERVER_ADDR] => * [REMOTE_PORT] => 12554 [REMOTE_ADDR] => 172.68.132.93 [SERVER_SOFTWARE] => nginx/1.14.0 [GATEWAY_INTERFACE] => CGI/1.1 [HTTPS] => on [REQUEST_SCHEME] => https [SERVER_PROTOCOL] => HTTP/1.1 [DOCUMENT_ROOT] => / [DOCUMENT_URI] => /ip.php [REQUEST_URI] => /ip.php [SCRIPT_NAME] => /ip.php [CONTENT_LENGTH] => [CONTENT_TYPE] => [REQUEST_METHOD] => GET [QUERY_STRING] => [SCRIPT_FILENAME] => /ip.php [FCGI_ROLE] => RESPONDER [PHP_SELF] => /ip.php [REQUEST_TIME_FLOAT] => 1536196806.1434 [REQUEST_TIME] => 1536196806 )其中HTTP_CF_CONNECTING_IP标头就是我们要的访客真实IP信息了。接下来说一下NGINX和PHP分别如何获取这个IP1、NGINX配置获取CloudFlare 下的访客真实IP并记录到日志需要修改NGINX的配置文件宝塔的nginx配置文件存放位置与一般nginx不一样,宝塔存放nginx配置文件位置:/www/server/nginx/conf/nginx.conf;一般nginx的配置文件位置:/usr/local/nginx/conf/nginx.conf。在http {}部分增加map $HTTP_CF_CONNECTING_IP $clientRealIp { "" $remote_addr; ~^(?P<firstAddr>[0-9.]+),?.*$ $firstAddr; } log_format main '$clientRealIp [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '$http_user_agent $remote_addr $request_time';主要是为了通用性,如果关闭了CDN,可以不需要修改获取IP的方式,所以才这么修改,不然直接用$HTTP_CF_CONNECTING_IP就行了(这个时候就不需要在日志格式里使用$clientRealIp)然后在网站记录的日志定义使用main这个日志格式比如access_log /www/wwwlogs/www.bnxb.com.log main;可以参考https://www.bnxb.com/nginx/27513.html另外还有一种更简单的方法,但是如果服务器上有其他站点没套CF,可能就获取会异常。就是在NGINX的主配置文件中加入set_real_ip_from 0.0.0.0/0;real_ip_header CF-CONNECTING-IP;如下图:2、PHP获取使用CloudFlare CDN环境下的访客真实IP<?php $realip =$_SERVER['HTTP_CF_CONNECTING_IP']; echo $realip; //也可以用下面这个 $clientIP = isset($_SERVER['HTTP_CF_CONNECTING_IP']) ? $_SERVER['HTTP_CF_CONNECTING_IP'] : $_SERVER['REMOTE_ADDR']; echo $clientIP; ?>以上就是获取Cloudflare环境下真实IP功能3、利用宝塔防火墙配合CF CDN防御CC攻击宝塔的防火墙可以打开CDN选项,这样就能获取到CDN后面的真实访客IP,但是需要自定义HEADER先设置一下防御的力度,我是设置30秒60次然后设置下真实访客IP的获取方式添加HEADER,把cf_connecting_ip加进去,原来的x-forwarded-for 和x-real-ip都删掉完工,这样宝塔的防火墙就能利用CF传递过来的真实访客IP对攻击者进行封禁来源:https://www.bnxb.com/php/27592.html
2023年10月22日
4 阅读
0 评论
0 点赞
2023-10-21
Linux脚本iptables屏蔽指定国家或海外IP恶意访问网站的详细方法
前言:对于网站站长来说,经常遇到海外ip恶意抓取或恶意CC攻击的情况,对于这种问题,很是头痛,之前本站也有一篇教程介绍在Linux系统下使用SH脚本如何屏蔽海外ip的详细方法,虽然可以屏蔽,但功能不强大,本次在网上找到了一篇非常使用的教程,可以屏蔽指定国家的ip访问服务器,现在转载过来,希望对大家有帮助本教程相关阅读:1、Linux系统屏蔽国外(海外)IP解决被CC攻击的方法:https://blog.tag.gg/showinfo-3-36155-0.html2、被CC攻击了怎么办?Linux系统使用shell脚本自动屏蔽简单解决CC攻击方法:https://blog.tag.gg/showinfo-3-36156-0.html 功能:屏蔽指定国家地区的IP访问方法一:使用大神的开源脚本,屏蔽指定国家地区的IP访问执行如下命令下载脚本并执行 wget https://blog.tag.gg/soft/block-ips.shsh block-ips.sh 执行效果如图封禁ip时会要求你输入国家代码,国家代码以及国家对应的ip段可查看:点击进入。记住所填参数均为小写字母。比如JAPAN (JP),我们就输入jp这个参数 方法二:使用IPIP的数据库进行流量屏蔽(推荐,目前已支持centos6和7还有ubuntu系统)1、创建一个shell脚本文件例如block_ip.sh,并写入如下代码保存 #!/bin/bash#判断是否具有root权限root_need() { if [[ $EUID -ne 0 ]]; then echo “Error:This script must be run as root!” 1>&2 exit 1 fi}#检查系统分支及版本(主要是:分支->>版本>>决定命令格式)check_release() { if uname -a | grep el7 ; then release=”centos7″ elif uname -a | grep el6 ; then release=”centos6″ yum install ipset -y elif cat /etc/issue |grep -i ubuntu ; then release=”ubuntu” apt install ipset -y fi}#安装必要的软件(wget),并下载中国IP网段文件(最后将局域网地址也放进去)get_china_ip() { #安装必要的软件(wget) rpm –help >/dev/null 2>&1 && rpm -qa |grep wget >/dev/null 2>&1 ||yum install -y wget ipset >/dev/null 2>&1 dpkg –help >/dev/null 2>&1 && dpkg -l |grep wget >/dev/null 2>&1 ||apt-get install wget ipset -y >/dev/null 2>&1 #该文件由IPIP维护更新,大约一月一次更新(也可以用我放在国内的存储的版本,2018-9-8日版) [ -f china_ip_list.txt ] && mv china_ip_list.txt china_ip_list.txt.old wget https://github.com/17mon/china_ip_list/blob/master/china_ip_list.txt cat china_ip_list.txt |grep ‘js-file-line”>’ |awk -F’js-file-line”>’ ‘{print $2}’ |awk -F'< ‘ ‘{print $1}’ >> china_ip.txt rm -rf china_ip_list.txt #wget https://qiniu.wsfnk.com/china_ip.txt #放行局域网地址 echo “192.168.0.0/18” >> china_ip.txt echo “10.0.0.0/8” >> china_ip.txt echo “172.16.0.0/12” >> china_ip.txt}#只允许国内IP访问ipset_only_china() { echo “ipset create whitelist-china hash:net hashsize 10000 maxelem 1000000” > /etc/ip-black.sh for i in $( cat china_ip.txt ) do echo “ipset add whitelist-china $i” >> /etc/ip-black.sh done echo “iptables -I INPUT -m set –match-set whitelist-china src -j ACCEPT” >> /etc/ip-black.sh #拒绝非国内和内网地址发起的tcp连接请求(tcp syn 包)(注意,只是屏蔽了入向的tcp syn包,该主机主动访问国外资源不用影响) echo “iptables -A INPUT -p tcp –syn -m connlimit –connlimit-above 0 -j DROP” >> /etc/ip-black.sh #拒绝非国内和内网发起的ping探测(不影响本机ping外部主机) echo “iptables -A INPUT -p icmp -m icmp –icmp-type 8 -j DROP” >> /etc/ip-black.sh #echo “iptables -A INPUT -j DROP” >> /etc/ip-black.sh rm -rf china_ip.txt}run_setup() { chmod +x /etc/rc.local sh /etc/ip-black.sh rm -rf /etc/ip-black.sh #下面这句主要是兼容centos6不能使用”-f”参数 ipset save whitelist-china -f /etc/ipset.conf || ipset save whitelist-china > /etc/ipset.conf [ $release = centos7 ] && echo “ipset restore -f /etc/ipset.conf” >> /etc/rc.local [ $release = centos6 ] && echo “ipset restore < /etc/ipset.conf” >> /etc/rc.local echo “iptables -I INPUT -m set –match-set whitelist-china src -j ACCEPT” >> /etc/rc.local echo “iptables -A INPUT -p tcp –syn -m connlimit –connlimit-above 0 -j DROP” >> /etc/rc.local echo “iptables -A INPUT -p icmp -m icmp –icmp-type 8 -j DROP” >> /etc/rc.local #echo “iptables -A INPUT -j DROP” >> /etc/rc.local}main() { check_release get_china_ip ipset_only_chinacase “$release” incentos6) run_setup ;;centos7) chmod +x /etc/rc.d/rc.local run_setup ;;ubuntu) sed -i ‘/exit 0/d’ /etc/rc.local run_setup echo “exit 0” >> /etc/rc.local ;;esac}main 2、输入命令 block_ip.sh 执行脚本即可。希望对大家有帮助
2023年10月21日
9 阅读
0 评论
0 点赞