记得很久以前看过一个留学生使用华为上网棒架设越洋VOIP服务器实现境外使用国内SIM卡拨打电话的文章,颇为有意思,操作简单来说就是购买华为特定型号的USB上网棒(Dongle Modem),手机卡使用特定运营商的SIM,当然这里选择最便宜的套餐,国内使用树莓派安装RasPBX系统,将上网棒接入树莓派,配置FreePBX之后就可以愉快使用树莓派接打电话或收发短信了,而且在地球的任意角落也可以通过互联网实现境内通话资费。 一直对这种新鲜Geek范儿的事情比较感兴趣,正好手头闲置有树莓派,于是动手实施,当然本着不折腾不舒服的理由,我没有直接安装RasPBX这个定制的系统,当然另外的考虑就是树莓派仅作为话务中心服务对于我来说没有充分榨干其价值,毕竟上面还跑有其他各种特殊的服务,于是参考了RasPBX的定制脚本开始了折腾之路......遗憾的是这个事情已经过去有六七年了,当时没有记录折腾的步骤,虽然 …

日常运维中经常会接触到SSH(Secure Shell,安全外壳协议),通过SSH登录到要管理的服务器,通过各种命令完成整个服务器的维护,这个过程在内网中或者网络质量较高的时候总是很顺畅,但是当网络质量比较差的时候就会出现意外断开连接的情况了,比如比较常见的报错Socket error Event: 32 Error: 10053,这时候往往需要我们重新发起SSH连接,问题是新发起的连接无法继续上一个连接执行的命令,比如在断开连接前我们在虚拟终端执行了一个需要长时间等待的Shell命令,但是命令没执行完网络中断了,实际上此时的命令仍然在执行,如果遇到需要交互的部分还会停下来,只是我们新的连接将看不到命令的输出,可以通过ps aux | grep 进程名定位到进程。本文将介绍对于此类问题的应对方法供参考 1 终端的概念 1.1 什么是TTY TTY 是 Teletype 或 …

一些项目中对外服务需要开放一些API接口,常见也是最易用的就是使用GET方式向URL传参查询字符串(Query String),这种方式的缺点主要有①传输的数据需要进行URL编码(URL Encode);②受到URL最大长度限制,超过限制则有可能被Web服务器拒绝;③一种可能的安全缺陷就是Web服务器的日志有可能暴露敏感信息,比如查询字符串传递了密码,虽然使用HTTPS加密传输的URL能够避免被中间人拦截识别敏感信息,但是无法避免服务器端Web应用日志记录的问题,敏感信息可能会通过日志暴露给审计人员或者攻击者。 可能有读者会考虑使用POST方法是不是能够避免这些问题,确实对于复杂数据传输场景使用POST方式更为合适,因为POST请求的载荷(Payload)主要位于HTTP请求的主体(Body)部分,除非特殊配置,否则有效避免了②和③,对于①,常见的POST主体编码是表单模式,常见提交表单就 …

nginx作为反向代理服务器一直以轻巧高效著称,在日常实践中我将其作为项目的反向代理应用前端并取得了不错的效果,这里记录nginx其中利用njs模块的脚本支持读取ipset黑名单(白名单)从而实现访问控制列表(Access Control List)的方法,做法仅供参考,如有想法欢迎评论提出。 1 主要背景 1.1 问题的提出 互联网环境日益复杂和危险,对于新上线的服务器主机来说,每天都将面临大量的漏洞扫描、DDoS攻击,对于配置不当或者存在安全漏洞的主机,很容易就会沦为跳板机或者挖矿机,继而攻击网络中其他主机或者白白消耗宝贵的计算资源,对于互联网威胁我认为有必要采取积极的防御策略。 1.2 基本的防御策略 主要有这几种手段:① 关注安全公告并及时打补丁避免漏洞;② 复杂的身份认证策略,避免弱口令存在于SSH或者数据库系统中,建议采取证书或者key方式完成认证流程;③ 最小权限划分原则,避 …

本网站自从3月上线以来已经有8个月时间,期间也有各种bug,也勉强修复了,最初网站运行在.NET 5.0平台上,后来一直关注着.NET 6.0的进展,在微软正式Release的时候立马开始适配新的6.0平台,期间也遇到过各种坑,留有这篇文章仅做记载。 1 安装Visual Studio 2022 因为Visual Studio 2019不再支持NET 6.0 SDK,如果想继续在VS平台下开发,必须升级到Visual Studio 2022,对于个人来说我们选择Community版本就可以了,安装完成后选择用最新的VS2022打开你的项目。 2 升级NuGet Package到最新版本 由于我是等到.NET 6.0正式版出来的时候升级的,大部分的第三方包(Package)已经适配了.NET 6.0,可以直接升级,但仍然建议各位查阅项目官方的文档,特别是breaking changes以及用 …

.NET Core多语言本地化支持可以让所开发的应用更加国际化,但是不同操作系统平台之间可能会遇到一些特有的部署问题,本文将介绍我在Linux环境下部署国际化应用过程中遇到的zh-CN中文资源丢失问题的解决方案,当然可能有其他更好的方案,这里不做推荐,本文操作使用的软件环境是Debian 11、ASP.NET 5.0、nginx,仅供参考。 1 多语言国际化应用的建立 .NET Core本地化方式参考《Globalization and localization in ASP.NET Core》,通常情况下,在Startup.cs的ConfigureServices部分会包含如下代码: services.AddLocalization(options => options.ResourcesPath = "Resources"); services.AddMvc() . …

Docker默认是不开启IPv6支持的,但是我们某些业务往往又需要IPv6的支持,特别是IPv6普及大势所趋,本文主要介绍的是如何开启Docker桥接网络IPv6支持,这篇文章具体操作仅供参考,建议以官方文档为准。 本文最重要的先决条件是主机商已经分配给你一个公网IPv6地址段,我们可以通过查看主机控制面板中信息、询问主机供应商或者直接SSH登录主机使用命令ip -f inet6 addr show eth0获取。命令方式获取的ipv6地址输出如下: 6: eth0: mtu 9000 inet6 2607:f0d0:1002:51::4/64 scope global valid_lft forever preferred_lft forever inet6 fe80::230:48ff:fe33:bc33/64 scope link …

维护的一台服务器近期做了异地备份,具体的做法实际上也很简单,通过任务计划每日午夜将数据库备份文件压缩,再通过群晖的Cloud Station Backup回传至异地群晖NAS中,当然群晖NAS做了多盘RAID,这样数据也多了一层保护,本来数据库备份这里也考虑看能否使用第三方软件,结果在搜索时找到了微软官方的解决方案《Schedule and automate backups of SQL Server databases in SQL Server Express》,简单易用,比较nice~ 这里再简单记录一下,作为一个备忘,以下操作仅供参考,建议大家先测试确保无误后再运用在生产服务器上,本人不对下面操作带来的可能数据损坏等问题负责,敬请理解。 1 备份数据库 1.1 安装必须的软件 这个是先决条件,一般服务器上可能缺少这些软件,如果不安装将无法使用下面的命令,当然你也可以使用替代命令,这 …

记得很久之前就尝试使用废弃的银行U盾存储加密用的数字证书,也考虑过购买空白USB Key或者智能卡,直到有一天看到了YubiKey这个小玩意儿,彻底被种了草,由于国内购买不便,淘宝上价格虚高也不放心,一直等到亚马逊支持了海外直邮,立马入手,如果说仅将YubiKey用来存储数字证书,那么没有完全发挥出其在个人信息安全保护上的威力。比如就现在的YubiKey而言,在我的个人信息安全保护体系中主要承担了重要信息资产两步认证、SSH证书登录、GnuPG签名与加密、常用密码数据库KeePass保护等等,预计今后将会通过YubiKey逐步替代掉所有不安全的认证方式。 今天主要介绍的是YubiKey配置SSH登录备忘,配置内容仅供参考,实际上SSH最早是在采用YubiKey 4的时候就已经配置了,当时仅有一把YubiKey,串在钥匙扣上,配置GnuPG的时候顺带支持了SSH登录,当然主要是依赖于 …

大多数情况下我们开发的应用可能需要与其他服务进行交互,比如数据库服务、第三方服务等等,出于安全考虑,这些服务的交互都需要发起端提供认证凭据,这里可能是账号密码、API Key等,这里就涉及到认证凭据的保管问题,很长一段时间我们都是将认证凭据写死到配置文件中,这样做一开始是简单可行,但是随后你就会发现带来了一系列的问题:首先你的所有开发环境和生产环境都需要配置成一样的,比如生产环境数据库账号和密码和开发环境数据库账号和密码最好是一致的,否则部署到生产环境则需要手动修改这个认证凭据,当然你也可以通过配置分离或者环境变量控制来避免这个问题;其次是代码仓库提交,尤其是开源项目,至今GitHub公共库仍然存在大量配置文件明文保管着敏感凭据;最后分布式开发或者交付麻烦,需要团队合作或者直接提供给终端用户的项目,团队成员或者终端用户需要修改为本地环境凭据。 1 .NET Core与secrets. …


Some archived posts that were written in Simplified Chinese before the year 2021 were moved to and it may never update.