<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="/feeds/rss-style.xsl" type="text/xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Hacc的小站</title>
        <link>https://hacc.page/</link>
        <description>Hacc的个人博客，记录了我摆弄Linux在内的各种软件以及一些灵车硬件所踩过的坑。</description>
        <lastBuildDate>Thu, 09 Oct 2025 06:48:31 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>Astro-Theme-Retypeset with Feed for Node.js</generator>
        <language>zh</language>
        <copyright>Copyright © 2025 hacc1225</copyright>
        <atom:link href="https://hacc.page/rss.xml" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[让Nginx获取访问者的真实IP]]></title>
            <link>https://hacc.page/posts/nginx-real-ip-behind-cloudflare/</link>
            <guid isPermaLink="false">https://hacc.page/posts/nginx-real-ip-behind-cloudflare/</guid>
            <pubDate>Mon, 23 Apr 2018 03:30:00 GMT</pubDate>
            <description><![CDATA[这项特性需要Nginx模块ngx_http_realip_module来实现 参考Cloudflare官方文档在配置文件的http块中加入...]]></description>
            <content:encoded><![CDATA[<p>这项特性需要Nginx模块<a href="https://nginx.org/en/docs/http/ngx_http_realip_module.html">ngx_http_realip_module</a>来实现</p>
<p>参考<a href="https://developers.cloudflare.com/support/troubleshooting/restoring-visitor-ips/restoring-original-visitor-ips/">Cloudflare官方文档</a>在配置文件的http块中加入</p>
<pre><code>set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 104.16.0.0/12;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 131.0.72.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 2400:cb00::/32;
set_real_ip_from 2606:4700::/32;
set_real_ip_from 2803:f800::/32;
set_real_ip_from 2405:b500::/32;
set_real_ip_from 2405:8100::/32;
set_real_ip_from 2c0f:f248::/32;
set_real_ip_from 2a06:98c0::/29;

# use any of the following two
real_ip_header CF-Connecting-IP;
#real_ip_header X-Forwarded-For;
</code></pre>
<blockquote>
<p>未来Hacc的评论：</p>
<p>嘛，其实就算不这么做后端的应用也能感知到客户端的真实IP，因为可以直接读<code>CF-Connecting-IP</code>或者是<code>X-Forwarded-For</code>头（如果<code>X-Forwarded-For</code>没有被Nginx覆盖掉的话）。但如果我没记错的话，Nginx本身不会把<code>X-Forwarded-For</code>所记录的地址视为客户端的真实IP，因此在Nginx日志里看到的地址全都是CDN的地址，<code>ngx_http_realip_module</code>模块就是让nginx本身去读所设定的某个头，然后将其视为客户端的IP，然后为了安全起见，可以只信任白名单内地址段传入连接的头，其余情况依旧把IP层的源地址视为客户端地址。</p>
<p>还是像之前说的那样，如果是Cloudflare的话，<a href="https://github.com/cloudflare/cloudflared">cloudflared</a>打隧道就好了，<code>set_real_ip_from</code>直接填本地回环地址，不需要定期更新Cloudflare的地址段。</p>
</blockquote>
]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[在Vultr上的Archlinux配置IPv6]]></title>
            <link>https://hacc.page/posts/vultr-archlinux-ipv6-setup/</link>
            <guid isPermaLink="false">https://hacc.page/posts/vultr-archlinux-ipv6-setup/</guid>
            <pubDate>Mon, 23 Apr 2018 02:50:00 GMT</pubDate>
            <description><![CDATA[一直奉行「生命在于折腾」的博主在VPS购买后没多久便将系统换成了Archlinux，配置时为了省事就用了dhcpcd自动配置了IP地址。自动...]]></description>
            <content:encoded><![CDATA[<p>一直奉行「生命在于折腾」的博主在VPS购买后没多久便将系统换成了Archlinux，配置时为了省事就用了<code>dhcpcd</code>自动配置了IP地址。</p>
<p>自动配置的IPv4是完美的，可自动配置的IPv6就出事了。。。之前一直没有用过IPv6做过网站，直到最近脑抽突然想用Cloudflare的IPv6网关时才将问题暴露出来。</p>
<p>服务器可以ping外界IPv6主机，但外界IPv6主机却没法ping服务器。用<code>systemctl status dhcpcd</code>查看dhcpcd的日志后发现，这玩意自动获取的IPv6地址和Vultr给的固定IPv6地址不是一个地址。。。</p>
<p>用<a href="https://man.archlinux.org/man/dhcpcd.conf.5">man DHCPCD.CONF</a>查询，得到dhcpcd的静态地址配置方法。在<code>/etc/dhcpcd.conf</code>的尾部加入如下内容</p>
<pre><code>interface eth0 #网卡名
static ip6_address= #你的静态IPv6地址
</code></pre>
<p>然后<code>sudo systemctl restart dhcpcd</code>重启<code>dhcpcd</code>后就OK了。</p>
<hr />
<p>然而博主在配置Nginx时并没有监听IPv6地址，因此想要使用Cloudflare的IPv6网关还得要在配置文件中的<code>server</code>块中有</p>
<pre><code>listen [::]:80;
</code></pre>
<p>或者是</p>
<pre><code>listen [::]:443 ssl http2;
</code></pre>
<blockquote>
<p>未来Hacc的评论：</p>
<p>现在的我作为<code>Systemd</code>教徒应该就<code>Systemd</code>全家桶一把梭了。</p>
<p>虽然现在已经没法搞清楚当时到底发生了啥导致VPS可以ping外部，但外部没法ping VPS了。但再次发动水晶球占卜，我猜大概应该是<code>dhcpcd</code>根据Vultr的RA自己SLAAC配了一个地址，这个地址也是有效的，但它不是Vultr管理面板上所显示的分配给VPS的地址，从而导致了这个问题。</p>
</blockquote>
]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Web服务IP白名单]]></title>
            <link>https://hacc.page/posts/securing-web-server-ip-allow-list/</link>
            <guid isPermaLink="false">https://hacc.page/posts/securing-web-server-ip-allow-list/</guid>
            <pubDate>Sun, 22 Apr 2018 05:33:00 GMT</pubDate>
            <description><![CDATA[孤陋寡闻的博主某天突然知道还可以通过“全网扫描”这种骚操作来获取CDN背后网站的真实IP。于是乎为了（hao）增（wan）强网站的安全性，博...]]></description>
            <content:encoded><![CDATA[<p>孤陋寡闻的博主某天突然知道还可以通过“全网扫描”这种骚操作来获取CDN背后网站的真实IP。于是乎为了（hao）增（wan）强网站的安全性，博主开始折腾通过白名单来屏蔽全网扫描大法。</p>
<p>博主首先想到的是通过Nginx来屏蔽。</p>
<p>首先通过<a href="https://www.cloudflare.com/ips/">https://www.cloudflare.com/ips/</a>来get到Cloudflare的IP段。</p>
<p>将<code>allow</code>指令添加到配置文件的<code>http</code>块下，依次添加Cloudflare的IP段。</p>
<pre><code>allow 103.21.244.0/22;
…
allow 2400:cb00::/32;
…
</code></pre>
<p>然后再添加</p>
<pre><code>deny all;
</code></pre>
<p>访问源站，服务器确实返回了<code>403</code>，可这是在https握手之后才返回的。。。</p>
<p>证书暴露了。。。</p>
<p>然后想到让Nginx返回444，说不定可以在握手前断开与白名单外主机的连接。</p>
<p>参考<a href="https://serverfault.com/questions/892941/nginx-return-444-on-deny/892952#892952">Ilham Sulaksono的回答</a>后，在配置文件的<code>http</code>块中加入</p>
<pre><code>geo $remote_addr $allowed_trafic {
default false;
103.21.244.0/22 true;
…
2400:cb00::/32 true;
…
}
</code></pre>
<p>来添加Cloudflare的IP段</p>
<p>在每个<code>server</code>块下添加</p>
<pre><code>if ( $allowed_trafic = 'false'){
return 444;
}
</code></pre>
<p>重启Nginx后发现。。。</p>
<p>依然是在握手后才断开连接。。。</p>
<p>好吧，服气。。。</p>
<blockquote>
<p>未来Hacc的评论：</p>
<p>当然会这样，Nginx这边在http上屏蔽无论如何都是在会话层的TLS之后了</p>
</blockquote>
<p>看来只能用<code>iptables</code>屏蔽了。。。</p>
<p>依次输入</p>
<pre><code>sudo systemctl enable iptables
sudo systemctl enable ip6tables
</code></pre>
<p>启用<code>iptables</code></p>
<blockquote>
<p>未来Hacc的评论：</p>
<p>其实这里只是启用了加载<code>iptables</code>规则的<code>systemd</code>服务</p>
</blockquote>
<p>然后输入</p>
<pre><code>sudo touch /etc/iptables/iptables.rules
sudo touch /etc/iptables/ip6tables.rules
</code></pre>
<p>新建一个空配置文件</p>
<p>再依次输入</p>
<pre><code>sudo systemctl start iptables
sudo systemctl start ip6tables
</code></pre>
<p>启动<code>iptables</code></p>
<blockquote>
<p>未来Hacc的评论：</p>
<p>现在想的话，其实应该<code>restart</code>比较合适，因为此时这个服务可能已经启动了，这种情况下刚刚清空<code>iptables</code>配置的操作将不会生效。</p>
</blockquote>
<p>输入<code>sudo bash</code>提权</p>
<p>参考<a href="https://rietta.com/blog/2012/09/10/using-iptables-to-require-cloudflare/">Frank Rietta的文章</a>还有<a href="https://support.cloudflare.com/hc/en-us/articles/200169166-How-do-I-whitelist-Cloudflare-s-IP-addresses-in-iptables-">Cloudflare的文档</a>用root权限执行以下指令来将Cloudflare的IP段以及本地回环地址添加进<code>iptables</code>。</p>
<pre><code>for i in `curl https://www.cloudflare.com/ips-v4`; do iptables -I INPUT -p tcp -s $i --dport http -j ACCEPT; done
for i in `curl https://www.cloudflare.com/ips-v4`; do iptables -I INPUT -p tcp -s $i --dport https -j ACCEPT; done
for i in `curl https://www.cloudflare.com/ips-v6`; do ip6tables -I INPUT -p tcp -s $i --dport http -j ACCEPT; done
for i in `curl https://www.cloudflare.com/ips-v6`; do ip6tables -I INPUT -p tcp -s $i --dport https -j ACCEPT; done
</code></pre>
<p>然后再输入下列指令来丢弃掉白名单外主机的数据包</p>
<pre><code>iptables -A INPUT -p tcp --dport http -j DROP
iptables -A INPUT -p tcp --dport https -j DROP
ip6tables -A INPUT -p tcp --dport http -j DROP
ip6tables -A INPUT -p tcp --dport https -j DROP
</code></pre>
<p>此时设置就已经完成了，可设置还没有保存，还需要输入</p>
<pre><code>iptables-save &gt; /etc/iptables/iptables.rules
ip6tables-save &gt; /etc/iptables/ip6tables.rules
</code></pre>
<p>将设置保存到配置文件</p>
<blockquote>
<p>未来Hacc的评论：</p>
<p>如果是Cloudflare的话，感觉在一般的场景下直接用开源的<a href="https://github.com/cloudflare/cloudflared">cloudflared</a>打个隧道就好了，这样不仅不用定期更新Cloudflare的IP段，ISP还没法通过SNI读到服务器所托管的网站域名，更隐蔽。</p>
</blockquote>
]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Nginx的Wordpress伪静态配置]]></title>
            <link>https://hacc.page/posts/nginx-wordpress-permalinks/</link>
            <guid isPermaLink="false">https://hacc.page/posts/nginx-wordpress-permalinks/</guid>
            <pubDate>Sat, 21 Apr 2018 18:49:00 GMT</pubDate>
            <description><![CDATA[参考Nginx官方文档和Wordpress官方文档在location块中加入 try_files $uri $uri/ /index.php...]]></description>
            <content:encoded><![CDATA[<p>参考<a href="https://www.nginx.com/resources/wiki/start/topics/recipes/wordpress/">Nginx官方文档</a>和<a href="https://codex.wordpress.org/Nginx">Wordpress官方文档</a>在location块中加入</p>
<pre><code>try_files $uri $uri/ /index.php?$args;
</code></pre>
]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[光威Gloway VAL500GS3开盘]]></title>
            <link>https://hacc.page/posts/gloway-val500gs3-mp-tool-flash/</link>
            <guid isPermaLink="false">https://hacc.page/posts/gloway-val500gs3-mp-tool-flash/</guid>
            <pubDate>Thu, 05 Apr 2018 10:56:00 GMT</pubDate>
            <description><![CDATA[光威Gloway VAL500GS3固态硬盘采用M.2接口，SM2246EN主控。使量产工具检测到硬盘的过程如下：短接JP1-1 → 硬盘上...]]></description>
            <content:encoded><![CDATA[<p>光威Gloway VAL500GS3固态硬盘采用M.2接口，SM2246EN主控。</p>
<p>使量产工具检测到硬盘的过程如下：</p>
<p>短接JP1-1 → 硬盘上电 → 取消短接 → 打开量产工具 → 点击Scan → 检测到硬盘</p>
<p><img src="https://hacc.page/_astro/IMG_20180123_150004_guetzli.CFXE8k3E_c8tTA.webp" alt="" /></p>
<p>其余开盘过程参考SM2246EN通用开盘教程</p>
]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[电信、联通4G凌晨测速]]></title>
            <link>https://hacc.page/posts/telecom-unicom-4g-late-night-speedtest/</link>
            <guid isPermaLink="false">https://hacc.page/posts/telecom-unicom-4g-late-night-speedtest/</guid>
            <pubDate>Thu, 05 Apr 2018 09:10:00 GMT</pubDate>
            <description><![CDATA[由于学校WiFi经常抽风，博主最近便申请了一张联通版的米粉卡。据说联通访问国外服务器很快，博主就趁着40G的高速流量还在，赶紧跟手头上的电信...]]></description>
            <content:encoded><![CDATA[<p>由于学校WiFi经常抽风，博主最近便申请了一张联通版的米粉卡。</p>
<p>据说联通访问国外服务器很快，博主就趁着40G的高速流量还在，赶紧跟手头上的电信卡做一个对比测速。</p>
<p>位置：北京</p>
<p>测试手机：Nexus 6（已破解Band1）</p>
<p>电信卡归属地：湖南</p>
<p>联通卡归属地：北京</p>
<p>代理服务器：自建SS（开启TCP-BBR）</p>
<p>测试时间：2:01 - 2:16</p>
<p><img src="https://hacc.page/_astro/Screenshot_Speedtest_20180405-022840_guetzli.CGe-iCLE_Z1WeW54.webp" alt="" /></p>
<p>联通测速：</p>
<p><img src="https://hacc.page/_astro/Screenshot_Speedtest_20180405-022844_guetzli.C54Y1dqn_1GVcUo.webp" alt="" /></p>
<p>联通出国测速：</p>
<p><img src="https://hacc.page/_astro/Screenshot_Speedtest_20180405-022849_guetzli.DnX3M-Q__Z1J9yka.webp" alt="" /></p>
<p>测速基带信息：</p>
<p><img src="https://hacc.page/_astro/Screenshot_HiddenMenu_20180405-022629_guetzli.CCpgrl6Q_OVly6.webp" alt="" /></p>
<p>电信测速：</p>
<p><img src="https://hacc.page/_astro/Screenshot_Speedtest_20180405-022854_guetzli.C9DceLUi_Z1E4aRm.webp" alt="" /></p>
<p>电信出国测速：</p>
<p><img src="https://hacc.page/_astro/Screenshot_Speedtest_20180405-022859_guetzli.DvNrSStV_Z21W6K4.webp" alt="" /></p>
<p>测速基带信息：</p>
<p><img src="https://hacc.page/_astro/Screenshot_HiddenMenu_20180405-022044_guetzli.TYVBqSvk_Z10dScJ.webp" alt="" /></p>
]]></content:encoded>
        </item>
    </channel>
</rss>