运维烂笔头

一个 SA 老兵的工作日志

缘起

最近要登某一台 ec2,结果其私钥丢了,于是根据文档,将这台 ec2 的机器 stop 掉,然后将根区先 detach 掉,然后再将其 attach 到同 subnet 的另外一台 ec2 上。

按照正常的流程,在另外一台好的 ec2 的机器上将刚 attach 过来的分区 mount 上以后再修改好其 authorized_keys 文件即可完成任务的。

阅读全文 »

Eliza Sorensen 的访谈

NOTE:

你是谁,你做什么工作

我是 Eliza Sorensen 或其他任何地方的 @zemmiph0bia。我是澳大利亚墨尔本市的一名基础设施和安全工程师,也是创建了性工作友好社交空间 Switter.at 和现代广告平台 Tryst.linkAssembly Four 的共同创始人。

您使用什么硬件

看来这些天我一直在移动,所以我严重依赖我的 X1 Carbon, Google Pixel 3 XL, Audio Technica ATH-AR5BT headphones,powerpack(很大的背包?),笔记本和 Lamy(凌美,一种笔)Safari

当我在办公桌前时,可以使用两台 Dell 27 英寸显示器,一个 Ducky One 机械键盘(樱桃棕色轴)和一个Logitech G700 鼠标。

您用什么软件

我只想在台式机上使用 Linux,我的操作系统是Ubuntu,我的 shell 是 zsh,我用 ProtonVPN 连接,我用 Firefox (上网)冲浪,我用 1Password 保存密码,我用 Spotify 听音乐,我用 Toggl 管理时间、用 Clubhouse 管理任务,用 vim 写作,用 Sublime Text 3 写代码,使用 Zeal 保留我的文档。

您的理想设置是什么

我对当前设置非常满意,但是我不介意回到带有樱桃蓝色轴的键盘……但是我不想赶走我的伴侣。

缘起

以前有个贪便宜(一年 5 刀)而入手但目前在吃灰中的小鸡,当然是 OpenVZ,网络条件很差,用起来很鸡肋,后来看到 Google 的 BBR 也有能用在 OpenVZ 的案例,于是也想尝试下,看是否能将其起死回生。

阅读全文 »

缘起

自然是我司每周都要完成的周报。

背景

我司重度依赖“不存在网站”:Facebook 开源出来的项目:Phabricator,我们的每项工作也来自于其中的 Maniphest(不知道是什么语言,不像英语,反正应该就是 task 的意思),每周的工作周报里提到的事情如果有 task 的(一般都有),都还要附上其 task id。

同时,Phabricator 目前的运营公司: Phacility 同时也放出了一套 php 的类似于 SDK 的东西:libphutil,所以我就开始尝试着用 php 来撸一个自动生成、发布周报的东西。

about Pha_WR_SRE

Pha_WR_SRE
不许说项目名称起的很雷人。:(

这个东西怎么做的就不说了,这里主要说下大概实现了哪些功能。

输出的信息

输出的信息分三种:“completed”、”ongoing” 和 “other”,分别对应着“已完成”、“未完成”和“其他”。

输出的目标

已实现的是四种:

  1. Console
  2. OneNote
  3. Evernote
  4. Phabircator’s Phame

第一种就不用说了,如果在控制台运行,运行结果会被直接输出到控制台的;

第二种也简单,OneNote 支持用 Email 的方式发布 Note,不过需要先在 OneNote 里设置下发邮件的地址白名单(具体见 README 文件);

第三种跟 OneNote 差不多,不过 Evernote 需要一定级别的帐号才支持这种功能,而且他的目标 email 地址是隐藏的,需要自己去找,而且不建议让别人知道;

第四种是我自己想的,反正 Phabricator 也支持 blog 功能(Phame),不过这个需要先在 Phabricator 中新建一个 blog 获得其的 phid 并配置在 config.ini 中;

macOS

对于用 macOS 的用户,这里还有个特殊的新功能:可以直接设置定时运行这个任务。具体方法就是把项目里那个 .plist.example 文件稍稍修改下(也可以不修改),改名去掉“.example”,放到 ~/Library/LaunchAgents 目录下,然后可以用命令:

1
2
3
4
# load .plist file if U have not change it's name
launchctl load gs.theyan.phawrsre.plist;
# start job manually
launchctl launchctl start GenerateReport.job;

缘起

about Tasker

早先通过 Google Opinion Rewards 做调查挣了小几美刀,于是就购买了 Google Play Store 下的第一个收费软件:Tasker。但后来由于种种原因,Tasker 一直没有真正用起来(我最看重的几个功能都实现的不好)。

about IFTTT

一直在用 IFTTT 的一个功能:每日抓取 NASA 的图回来做 Android 手机的 Wallpaper,但最近同时用两个 Android 手机,不希望两个手机同时一样的 Wallpaper,但这个需求如果用 IFTTT 来做只能每台 Android 手机用单独的账号来实现,这个实现显然太丑陋了。

最终方案

Tasker 官方其实有一个放出来的 profile,是来抓 reddit 的图的,但那是几年前的东西了,现在几乎没法用,但作为例子,这个 profile 处理这种问题的思路是可以借鉴的。于是我就修改了下这个 profile,实现了抓 reddit.com/r/wallpaper 和 reddit.com/r/pic 以及 NASA iotd(Image of the Day) 的功能。

about tasker_profile

上面提到的这个 profile,我放到了 github 下面了,这里远期还会放一些 Tasker 可用的、实现了一些实用好玩儿功能的 profile,但是暂时,就这么一个 profile,叫“Wallpaper”,意思是更系统 Wallpaper 相关的一个 profile。使用起来也不难,README.md 里都有提到。

写在最后

如果我辛苦折腾的这个东西真能帮上你的忙,请帮我给项目点赞吧,谢谢!

WHY

这里的为什么不是说为什么要装 zabbix-proxy 的问题,而是说为什么要写这篇文章。
为什么要写这篇文章呢?答案很简单,官方文档太碎了,东一榔头西一棒子,一个简单实际直接的问题:怎样在 ubuntu 上安装部署 zabbix-proxy,翻官方文档得翻四五篇文档,而且这四五篇文档中还有很多干扰信息,需要仔细分辨,否则会对部署造成负面影响。
所以,就有了这篇“流水账”。

HOWTO

INSTALLATION

1
2
3
4
5
6
7
8
9
# 安装 zabbix 官方的 ubuntu 16.04(版本号 xenial) 的软件仓
wget \
https://repo.zabbix.com/zabbix/3.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.4-1+xenial_all.deb;
dpkg -i zabbix-release_3.4-1+xenial_all.deb;
apt-get update;
# 安装 zabbix-proxy 所需之 mysql 数据库服务器软件
# 注意这一步会让设置 mysql 服务器的 root 密码(不是系统密码!)
# 这个要记住,在执行下一步操作的时候要输入的
apt-get install mysql-server-5.7;
1
2
3
# 用 root 身份连入 mysql 数据库系统并进入交互式模式
# 注意:这里需要输入上一步设置的 root 的密码
mysql -uroot -p
1
2
3
4
5
6
7
8
# 创建 zabbix-proxy 系统所用数据库:zabbix
create database zabbix character set utf8 collate utf8_bin;
# 创建 zabbix-proxy 应用所用数据库账号:zabbix 并其密码以及响应权限
grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
# 使权限及时生效
flush privileges;
# 退出 mysql 交互式环境
quit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 安装一些 zabbix-proxy 系统可能会需要
# 但又未在 zabbix-proxy-mysql 软件包里
# 明确指定依赖的软件包,
# 这里对于有用 snmp 监控网络设备的场景来讲非常重要
# 因为缺省是不会安装 snmp-mibs-downloader 之类
# 必须的软件包的。
# 注意,同时也安装上了 zabbix-agent,这个是无所谓的,
# 毕竟,所有的服务器都要装 zabbix-agent 不是吗
apt-get install \
libsnmp-base \
snmp-mibs-downloader \
snmp \
libsnmp30 \
zabbix-proxy-mysql \
zabbix-agent;
# 创建 zabbix-proxy 需要的数据库结构及一些初始数据
zcat \
/usr/share/doc/zabbix-proxy-mysql/schema.sql.gz \
| mysql -uzabbix -p zabbix;

CONFIGURATION

1
2
# 修改 zabbix proxy 的设置文件
vim /etc/zabbix/zabbix_proxy.conf
1
2
3
4
# 修改 zabbix agent 的配置文件
# 本来这个不是本文讨论的重点
# 只是部署 zabbix proxy 时都会部署 zabbix agent
vim /etc/zabbix/zabbix_agentd.conf
1
2
3
4
# 最后,将几个服务设为自启动
systemctl enable mysql.service;
systemctl enable zabbix-proxy.service;
systemctl enable zabbix-agent.service;

起因

服务器上用 apt-mirror 来拉取某些软件官方的 apt 仓并本地建仓,用于本地服务器的软件安装和更新,这个大概也是众多运维工程师曾经做过的事情吧。

今天我在某一台服务器上做 apt-get update 时出错了,系统报 “http://xxx.xx.xx.xx/xxxxxxxxxxxxxxxxxxx/binary-i386/Packages.gz” 抓取失败。xxx.xx.xx.xx 是我自己建的 apt 仓,用来服务于内部服务器的,xxxxxxxxxxxxxxxxxxx 正是自建仓的路径,这下面当然没有 binary-i386 目录,因为服务器都是 x86_64 架构的,应该使用的是目录 binary-amd64 才对。

环境介绍

出错的服务器的操作系统是:Ubuntu 16.04.5 LTS (GNU/Linux 4.15.0-13-generic x86_64)

  1. apt 的配置文件里没有关于 i386 的设置
  2. source 里也没有关于 i386 的设置

原因简介

Ubuntuamd64 系统中,i386 是作为额外的体系结构被支持的。证据如下:

1
dpkg --print-architecture;dpkg --print-foreign-architectures

会输出“amd64”和”i386”。

所以 apt 缺省是希望 apt 仓也同时能提供 i386 的软件包。而我用 apt-mirror 建仓时,没有指定同步抓取 i386 的软件包,故而当服务器来抓取 i386 相关数据时会出错(因为的确没有哇)。

解决方法

知道原因了以后解决起来相对就简单了,在 apt-mirror 的配置文件 /etc/apt/mirror.list 中将想要同步抓取的软件多写一行,用 deb-i386 替换 deb,然后再跑下

1
apt-mirror

就会同时同步 i386 的软件包下来,这样客户端 apt-get 时就不会有错了。

进阶阅读

可以让 x86_64 系统架构的服务器仅安装 amd64 的软件吗?这样 apt-get 时也不会去抓群 i386 相关的东西了,这样的话也可以避免上面的错误。

回答是:当然可以!

首先,干掉系统现有的所有 i386 的软件包

1
apt-get purge ".*:i386"

接着,将 i386 从支持的体系结构里删掉

1
dpkg --remove-architecture i386

这样也可以达到目的!

缘起

我司用 PowerDNS 来维护域名,某天否然发现有纪录在 PowerDNS 已经更新了,但是客户端查询解析结果却迟迟没有更新。

排查问题

请求传输数据的一端

在用做 dns 查询用的服务器上(也是 PowerDNS),执行:

1
pdns_control reload;

然后在 log 里看到有错误输出:

Unable to AXFR zone ‘in-addr.arpa’ from remote ‘1.1.1.1’ (resolver): Remote nameserver closed TCP connection

(1.1.1.1 是主 DNS 服务器)

看了些文档,说有可能是数据文件太大导致传输失败,于是有直接测试了一下传输 zone:

1
dig in-addr.arpa @1.1.1.1 AXFR;

结果发现还是未能得到整个 zone 的数据,于是怀疑服务器端可能有问题。

在传输数据的一端

在主 DNS 服务器上(这里应该是 1.1.1.1),查看 log,发现有报错误:

Exception: All data was not consumed
TCP Connection Thread died because of STL error: All data was not consumed

仔细看了下文档,说有可能是待传输的 zone 的数据文件有问题,于是我又做了下检测:

1
pdnsutil check-zone in-addr.arpa;

发现一堆的数据(解析纪录)显然有问题,都备份好,然后删除之。

然后一一回头测试,这回都正常了。

问题根源

肯定是大家瞎改反向解析(in-addr.arpa)的数据记录导致的。

What is HSTS

HTTP Strict Transport Security (HSTS) is a web security policy mechanism which helps to protect websites against protocol downgrade attacks and cookie hijacking. It allows web servers to declare that web browsers (or other complying user agents) should only interact with it using secure HTTPS connections,[1] and never via the insecure HTTP protocol. HSTS is an IETF standards track protocol and is specified in RFC 6797.

The HSTS Policy is communicated by the server to the user agent via an HTTPS response header field named “Strict-Transport-Security”.[2] HSTS Policy specifies a period of time during which the user agent should only access the server in a secure fashion.[3]

以上来自于维基百科

大概意思是说 HSTS 是一个 web 安全策略装置,用于保护 web 站点免受协议降级攻击和 cookie 劫持。

阅读全文 »

缘起

我厂办公室测试小机房有一些运算资源,但是其网络是不能直接上公网的,而是通过一个内部代理(内部域名是:proxy.xxxdev.com,端口 3128)来上公网的。

但是现在部署环境,多半需要在命令行下折腾,而且还多半需要不停的从公网下东西(安装),所以,怎样在命令行下(shell 里)使用代理来上公网就成了一个绕不开的话题……

阅读全文 »
0%