Day 5518 关于 UFW 防火墙和 Bitwarden docker 容器在网络连接管理方面冲突的笔记

注:本文不是教程,只是为了在特定环境下实现特定需求的笔记,仅供参考。

最近被人推荐了 Bitwarden 的服务端开源实现 bitwarden-rs,于是在自己的服务器上做实验。

由于 Chrome 的限制,Web Crypto API 在非 HTTPS 连接上无法使用,所以根据官方建议及其它教程配置 HAProxy 以开启 https 服务,但配置好后,发现一个有点吓人的事情:在 ufw 防火墙没有允许访问 80 端口的情况下,容器的 80 端口仍能正常访问。

经过检索,发现是由于 docker 会直接修改 iptables 配置容器的网络连接,而这部分修改并不会体现在 ufw status 中。

修正笔记如下:

1、停止 docker 服务:systemctl stop docker.socket && systemctl stop docker

2、修改 bitwarden 容器的绑定配置:在 /var/lib/docker/containers/bitwarden容器对应的hash/hostconfig.json 中,找到 PortBindings 段,修改HostIp 为 127.0.0.1(以使服务不发布在本机之外)、HostPort 为 80 以外的其它值(不冲突的话,愿意留着80也可以),如8888。修改完成后保存。

3、重启 docker 服务:systemctl start docker.socket && systemctl start docker

4、修改 HAProxy 中对应的转发端口。

5、修改 ufw 配置,使 HAProxy 的对外端口能被外网访问。

参考资料:

1、https://askubuntu.com/questions/652556/uncomplicated-firewall-ufw-is-not-blocking-anything-when-using-docker

2、https://stackoverflow.com/questions/19335444/how-do-i-assign-a-port-mapping-to-an-existing-docker-container

Day 5517 Aria2 将 RPC 服务绑定到其它网卡的折衷方法笔记

注:本文不是教程,只是为了在特定环境下实现特定需求的笔记,如有更好的方法,欢迎提出。

服务器上运行 Debian 10,有两块网卡,姑且称作 eth0 和 eth1,其中 eth0 是外网连接,通过 DHCP 自动获取 IP 地址,可以访问互联网;eth1 是内网连接,为静态 IP 地址,无法访问互联网。

现想达到如下目的:

1、让下载流量自动走 eth0。

2、使 RPC 服务可以通过 eth1 访问。

Aria2 有一配置选项 interface 可以将整个服务绑定在个网络连接(某块网卡或某个IP)上,但并不支持将下载流量和 RPC 服务分别绑定在不同的网络连接上(按:本文撰写时 Aria2 版本为 1.35),按上述环境,如果将 Aria2 服务绑定在 eth0,则 RPC 服务不可访问;如果绑定在 eth1,则无法下载。此外,Aria2 的 rpc-listen-all 参数受 interface 参数的影响,当 interface 绑定为特定网络连接时,rpc-listen-all 会随之绑定在对应网络连接上,而不是所有的网络连接。

由于我不会写 C,无法对 Aria2 本身的代码做出修改,最终在此处找到一个折衷的解决方案(按:本文撰写时该 issue 已提出6年,官方仍未实现,估计是需求太少),配置成功,操作步骤如下:

1、安装 HAProxy(Debian 下为 apt-get install haproxy,其它系统请自行尝试)

2、修改 HAProxy 配置文件,在末尾增加如下内容(默认位置为 /etc/haproxy/haproxy.cfg):

listen web_port

bind 10.0.0.1:6801 #此处地址为 eth1 上的内网地址,6801 为要开放的端口,依据实际情况自行修改

mode http

log global

server aria2 127.0.0.1:6800 check inter 3000 fall 2 rise 5 #此处6800为 Aria2 的 RPC 端口,依据实际情况自行修改

3、重启 HAProxy 服务:systemctl restart haproxy

4、修改 aria2 配置文件,包含如下两处修改:

(1)删除 rpc-listen-all 行(此时 RPC 服务会被绑定到本地回环设备 lo 上)

(2)修改 interface 行为下载流量要绑定的设备或 IP,如:interface=eth0(注意:Windows 下必须使用 IP 地址或主机名

5、重启 Aria2服务:systemctl restart aria2

此时使用 Aria2 的 UI 服务(如 AriaNg 等)去连接内网地址上的 HAProxy 转发端口,即可连上 RPC 服务,同时下载将通过外网连接进行。

Day 5515 修复在 VMWare ESXi 中误将主机阵列卡设置为直通设备后,ESXi 存储变为 NaN,且无法取消阵列卡直通的问题

手里有一台二手的戴尔 R420 服务器,在上面安装了 VMWare ESXi 6.5 作为虚拟化平台。有一次出于好奇,将主机的 PERC 阵列卡设置为了直通设备,结果重启主机之后发现两个问题:

1、ESXi Web 控制台报告存储空间为 NaN,且数据存储列表为空、存储设备中的本地硬盘消失。

2、所有虚拟机变为无效状态。

VMWare 官方给出的方案是在 VMKernel 控制台修改 /etc/vmware/esx.conf,将其中的 passthru 设备修改为 vmkernel,但对于该情况而言,修改保存后重启,阵列卡仍然会报告为直通启用,且再次查看修改后的文件时,会发现刚刚修改的内容又变回原样。

惊恐之下到处搜索,终于找到如下可用的方案,并成功修复问题。

以下内容来自 https://blog.51cto.com/fengwan/2497520,其原文来自 https://communities.vmware.com/t5/ESXi-Discussions/How-to-disable-ESXi-Passthrough-my-findings/m-p/2732447#2592922

1、使用 Ubuntu Desktop Live CD 引导系统(不要用服务器版),并在安装界面选择 Try Ubuntu(试用 Ubuntu)

2、打开终端,输入以下指令切换到 root 账户:sudo su –

3、执行如下指令查看当前硬盘分区:parted -l

4、挂载 VMKernel 所在分区,原文直接提到为编号 5 的分区,我的情况也一样,但中文版教程提到他的分区是编号 6,请按自身情况选择(能找到接下来的文件就算正确):mount /dev/sda5 /mnt

5、依次执行如下指令解压缩打包的配置文件:

tar xvf state.tgz (此时本目录(~)下会解压出一个 local.tgz来)

tar xvf local.tgz(此时本目录下会解压出一个 etc 目录来)

6、使用 vi 或 nano 修改 etc/vmware/esx.conf,将其中对应阵列卡的 device 行有 passthru 字样之处修改为 vmkernel(也可以将所有 passthru 都修改为 vmkernel,缺点是如果有其他直通设备,需要重启后重新配置),保存退出。

7、此时应仍在 ~ 目录下,依次执行如下指令重新打包配置文件:

tar czf local.tgz etc/ (此时会将 etc 目录打包为 local.tgz)

tar cvf state.tgz local.tgz(此时会将 local.tgz 打包为 state.tgz)

8、执行如下指令替换 VMKernel 分区下的文件:cp -rf state.tgz /mnt/

9、重启主机即可。

Day 5273 在Debian 10上安装Dell OpenManage

环境为Debian 10默认安装。

1、为PATH变量增加/usr/sbin(永久修改位置为/etc/login.defs):

export PATH=$PATH:/usr/sbin

2、在root下运行以下指令安装OpenManage软件包(来自此Reddit帖子,感谢作者):

gpg –keyserver hkp://pool.sks-keyservers.net:80 –recv-key 1285491434D8786F
gpg -a –export 1285491434D8786F | apt-key add –
echo “deb http://linux.dell.com/repo/community/openmanage/930/bionic bionic main” > /etc/apt/sources.list.d/linux.dell.com.sources.list
wget http://archive.ubuntu.com/ubuntu/pool/universe/o/openwsman/libwsman-curl-client-transport1_2.6.5-0ubuntu3_amd64.deb
wget http://archive.ubuntu.com/ubuntu/pool/universe/o/openwsman/libwsman-client4_2.6.5-0ubuntu3_amd64.deb
wget http://archive.ubuntu.com/ubuntu/pool/universe/o/openwsman/libwsman1_2.6.5-0ubuntu3_amd64.deb
wget http://archive.ubuntu.com/ubuntu/pool/universe/o/openwsman/libwsman-server1_2.6.5-0ubuntu3_amd64.deb
wget http://archive.ubuntu.com/ubuntu/pool/universe/s/sblim-sfcc/libcimcclient0_2.2.8-0ubuntu2_amd64.deb
wget http://archive.ubuntu.com/ubuntu/pool/universe/o/openwsman/openwsman_2.6.5-0ubuntu3_amd64.deb
wget http://archive.ubuntu.com/ubuntu/pool/multiverse/c/cim-schema/cim-schema_2.48.0-0ubuntu1_all.deb
wget http://archive.ubuntu.com/ubuntu/pool/universe/s/sblim-sfc-common/libsfcutil0_1.0.1-0ubuntu4_amd64.deb
wget http://archive.ubuntu.com/ubuntu/pool/multiverse/s/sblim-sfcb/sfcb_1.4.9-0ubuntu5_amd64.deb
wget http://archive.ubuntu.com/ubuntu/pool/universe/s/sblim-cmpi-devel/libcmpicppimpl0_2.0.3-0ubuntu2_amd64.deb
dpkg -i libwsman-curl-client-transport1_2.6.5-0ubuntu3_amd64.deb
dpkg -i libwsman-client4_2.6.5-0ubuntu3_amd64.deb
dpkg -i libwsman1_2.6.5-0ubuntu3_amd64.deb
dpkg -i libwsman-server1_2.6.5-0ubuntu3_amd64.deb
dpkg -i libcimcclient0_2.2.8-0ubuntu2_amd64.deb
dpkg -i openwsman_2.6.5-0ubuntu3_amd64.deb
dpkg -i cim-schema_2.48.0-0ubuntu1_all.deb
dpkg -i libsfcutil0_1.0.1-0ubuntu4_amd64.deb
dpkg -i sfcb_1.4.9-0ubuntu5_amd64.deb
dpkg -i libcmpicppimpl0_2.0.3-0ubuntu2_amd64.deb

apt update
apt install srvadmin-all
touch /opt/dell/srvadmin/lib64/openmanage/IGNORE_GENERATION
srvadmin-services.sh enable && srvadmin-services.sh start

3、此时已可通过https://IP:1311/看到网页界面,但命令行omreport功能暂时不可用,会提示:

omconfig: error while loading shared libraries: libxslt.so.1: cannot open shared object file: No such file or directory

执行以下指令安装所缺失的libxslt1.1:

apt-get install libxslt1.1

此时执行omreport的查询命令(如omreport system summary),会提示(即使在root下执行也是如此):

Error! User has insufficient privileges to run command.

依据此处内容提示(帖子下方的回复),应为缺失libncurses5,运行如下指令安装之,并重启OpenManage相关服务:

apt install libncurses5

systemctl start dsm_sa_datamgrd
systemctl start dsm_sa_eventmgrd
systemctl start dsm_sa_snmpd
systemctl start dsm_om_connsvc
systemctl start dsm_om_shrsvc

现在终于可以使用omreport在CLI下查看系统概况了。

Day 4849 自行组装RAID10磁盘阵列

以前的时候,由于家里的网速一直不是很快,加上由于环境受限,一直没有外网环境,从来没有做过资源党,也就对硬盘空间没有多高的需求。事实上,从第一台电脑开始,家中的台式机几乎一一直是单(机械)硬盘配置,依次经历了2G、20G、120G、600G、1T和2T的容量台阶,并且在600G以前一直是IDE接口。

然而对存储空间的追求是永无止境的,为了在一段时间内暂时不再受台式机硬盘的限制,又忌惮于群晖的价格,一狠心,实践了一次用阵列卡自行组装磁盘阵列的想法。

这中间也算学到了点东西。

继续阅读 “Day 4849 自行组装RAID10磁盘阵列”

Day 4768 关于Excel中录入15位以上数字时(例如身份证号),COUNTIF函数返回的结果数量不正确的问题

最近帮同事做一个表格,要求在录入数据时,自动查找同一列下是否有相同的值,有则进行提示,而需要这个提示功能的其中一列是『身份证号』。

众所周知,中国大陆地区的身份证号是18位。鉴于Excel采用了IEEE 754的浮点数存储规范,对于正整数最高支持到15位。这也是在Excel中录入身份证号时,如果身份证号中不含X,经常会在按下回车的时候变成一串科学记数法的原因,而实际上此时第16位起的数字已经丢失了。

对于只使用表格本身的场合,可以简单地将对应单元格的数字格式修改为『文本』,虽然这样一来相关数字就不能参与运算,但多半也没有需要对身份证号进行运算的情形。

然而,当涉及到使用COUNTIF函数时,即使对应单元格的数字格式是文本,COUNTIF对于传入的数据也会进行自动的类型判断。试观察如下VBA语句:

‘sShenfenzheng是之前传入的单元格内容(身份证号),变量类型为String
n = Application.WorksheetFunction.CountIf(Range(“B1:B65535”), sShenfenzheng)

此时如果在B列中录入如下数据:

110000199901012333
110000199901012334
110000199901012335

然后对sShenfenzheng传入『110000199901012336』的话,n的值将会是3,而不是预期的0。

解决方法:

在调用CountIf时,将传入的查找目标后面跟上一个『*』,强制CountIf按照字符串形式对数据进行查找,即可获得正确的结果。

以前述代码为例,应修改为:

n = Application.WorksheetFunction.CountIf(Range(“B1:B65535”), sShenfenzheng & “*”)

Day 4763 关于Windows Update更新Windows Defender定义时,返回8050800C错误的解决方法

情况说明:

在Windows 7 x64下,使用Windows Update进行系统更新时,无法安装Windows Defender恶意软件定义的相关更新,始终返回8050800C错误。此时,直接打开Windows Defender对定义进行更新时,也会报错无法更新。

解决方法: 继续阅读 “Day 4763 关于Windows Update更新Windows Defender定义时,返回8050800C错误的解决方法”

Day 4713 关于在VMWare Workstation中安装Windows Thin PC时,网卡和SCSI驱动无法安装的问题

情况说明:

1、在VMWare Workstation 12中选择系统类型为Windows 7、安装Windows Thin PC并安装VMWare Tools后,发现网络无法正常使用。
2、到设备管理器中查看时,可发现有感叹号设备Ethernet Controller和SCSI Controller。

解决方法:

可能有更简单的解决方式,不过可以选择手动下载对应驱动进行安装:网卡驱动SCSI控制器驱动

Day 4548 在Windows Vista及以上版本系统中,提升权限后的凭据看不到普通凭据创建的映射网络驱动器

情况说明:

1、以普通用户权限(普通用户或“管理员”账户均可)创建映射的网络驱动器;

2、在一个提升权限后的凭据(例如:以管理员模式启动的第三方文件管理器)中进行浏览文件夹操作;

3、Voila:找不到这个映射的网络驱动器,即使直接录入映射的驱动器盘符也无法访问。

原因分析:

提升权限后的凭据与登录时使用的账户实际上是两个账户(尽管它们俩共享账号和密码),由于安全权限设计,这两个账户创建的映射网络驱动器是不互通的。(微软官方的详细说明

解决方法:

修改注册表 HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System 建立或修改DWORD(32位)项目EnableLinkedConnections,值为1,然后重启计算机即可。

Day 4514 Apache、PHP NTS、FastCGI与Rewrite之间不得不说的故事(雾

为单位装新网站,出于安全考虑,环境需要由我自行配置,于是按照开发公司的要求去下载了Apache 2.4、PHP 5.6和MySQL,由于服务器系统为64位Windows,所以理所当然地都下载了64位的组件,其中PHP使用了比较顺手的TS(线程安全,Thread-safe)版本。

一切配置好后,发现说明书中组件要求有一个Zend Guard Loader,于是跑去下载,但当看到支持PHP 5.6的Zend Guard Loader的版本只有x86版本时心里就咯噔一下,尝试配置后,果不其然,64位的PHP无法与32位的Zend组件协作,不得已推倒重来,谁知这只是更大坑的开始。 继续阅读 “Day 4514 Apache、PHP NTS、FastCGI与Rewrite之间不得不说的故事(雾”