Browsed by
分类:Internet技术

Google AdWords 一点小经验

Google AdWords 一点小经验

古语有言:酒香不怕巷子深,然而今时今日这种观点已经过时了。好的产品如果不为人知,即对不起开发商自己,其实对消费者也是损害。好的产品就应该广而告之,让大家尽早享受,摆脱折磨,比如我们的产品(miniSIPServer)就挽救了很多迷失在 Asterisk、FreeSwitch 中的灵魂。

常见的广告手段无非是:

(1)传统方式。例如在电视、纸媒、报纸、杂志等撒钱做广告,这种方式适合有钱的主,对一般中小企业而言,这种方式的价值越来越低,尤其对我们这类小软件开发商而言,几乎毫无意义。

(2)网络搜索广告。作为中文用户,我们一度以为首先应该试试百度的广告推广方式,当然后来发生的一些事件以及我们自己的体会而言,建议放弃百度,不要抱任何幻想。本文推荐使用Google AdWords。 当然,由于众所周知的原因,您需要自行解决访问问题。

使用 AdWords 的经历积累了一点经验,“广而告之”的“广”有几个方面需要仔细考虑:

(1)人群。是不是所有人都适合点击、接受您的广告? 实际是要对自己的产品有准确认识。比如我们的产品是企业软件产品,那么一般的消费群众就不可能是目标客户,向他们提供广告就没有意义。

(2)地理。是不是需要向全球提供广告?这点其实也和产品本身的定位有关联。这里有个常见的误区:“应当尽量拓展新用户! 如果某个地区客户少,更应该加大该区域的广告推广!”。 如果您的客户大部分来自某个区域,那么向那个区域推广告其实更可能取得比较大的效果。比如我们的产品客户绝大部分来自欧美,因此我们在AdWords中,限制了广告的【地理范围】,只设置定位在欧美地区,基本上将广大亚非拉地区明确排除了(若干发达经济体除外,例如香港、新加坡等)。就我们的经验来说,亚非拉地区的欺诈性点击很多,对产品的推广毫无帮助。

(3)方式。AdWords 提供了很多推广告方式,例如搜索方式(这个最常见)、联盟网络推广等。我们可以明确的是:只要选择搜索方式即可。联盟网络推广等方式虽然能增加点击,但是帮助不大、欺诈也多,用户也可能只是看到广告,随手点击来看看而已,这类广告带来的用户往往并不是产品的目标客户。而通过搜索推广告,这契合了用户的搜索需求,极可能就是您产品的目标客户。

(4)关键词选择。通常我们都希望尽可能将所有的关键词都加入进去,哪怕只有一点点关联性的关键词也恨不得全部加入进去。这在初始阶段当然可以。运行一段时间后,需要观察关键词的效果,如果点击率小于1%,那这个关键词就应该放弃。有时候我们自认为某个关键词高度契合产品,实际搜索结果往往会大跌眼镜,这种情况下要果断砍掉,别犹豫。

(5)费用。不差钱的主可以忽略。如果费用预算有限制,自然需要精打细算。必须限制每个广告系列、默认每次出价的最高值。在这点上,不要相信 AdWords 的调价建议,这些建议基本是按照最高出价进行调整,如果盲目地跟随这些建议,您的广告费用就会直线上升。默认出价值仍然应该根据关键词的效果来调整,确保您希望的关键词能有合理的点击率。广告费用应当与您的产品销售收入要保持一致,过高的广告投入未必会换来产品销售增长。

SSHd使用强加密算法

SSHd使用强加密算法

默认情况下,SSH服务器会启用各种尽可能的加密算法,其中包含一些很弱的加密算法,这确保了客户端广泛的接入,但是的确会引入一些风险。企业环境中设备是可控的,因此可以去掉弱加密算法而只保留特定的强加密算法。

Linux环境中查询以下帮助,可以了解包含算法在内的各项配置信息:

man 5 sshd_config

修改/etc/ssh/sshd_config文件,指定Ciphers采用强加密算法即可,例如,将下列语句直接加入到该文件后面:

Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,aes256-cbc

当然,最后要重启ssh服务才能使配置生效。

RFC4235与RFC7463

RFC4235与RFC7463

基本上两篇RFC文档是传承的关系,RFC7463场景应用比RFC4235要详细很多,一些旧的SIP设备未必支持7463。

在兼容性方面,对于SIP-SUBSCRIBE消息,两篇RFC文档采用了不同的Event,rfc4235中定义“dialog”,而rfc7463中定义“dialog;shared”。rfc4235限定在只订阅SIP呼叫对话的状态,因此在dialog-info中,要求必须填充dialog元素,其中就包含call-id,remote-tag以及local-tag等典型呼叫参数。

而rfc7463不仅仅是关注呼叫,更关注“状态呈现”,因此凡是与“状态”相关的消息,都尽量进行了定义。比如在“11.1. Registration and Subscription”章节中,就定义了终端注册的状态呈现。在注册流程中,就没有dialog的信息。

呈现信息多,对用户当然有好处,对VoIP系统也很有意义,尤其是在企业应用场景中。但是需要注意的是这也大大增加了VoIP系统的负荷,实际部署中要慎重考虑。

清除Putty主机指纹

清除Putty主机指纹

最近修改了主机上的公钥,结果导致Putty无法登录到主机,仔细检查后发现Putty还在使用原有的主机指纹,因此删除原有的记录即可(Putty似乎可以改进一下,重新提示用户是否保存或者修改,不是更合理吗?)。

删除方法比较简单,直接打开注册表,找到以下目录:

HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys

然后删除对应的主机记录即可。

企业VPN设置的注意事项

企业VPN设置的注意事项

公司建立了自己的VPN网络用于内部系统接入和管理,出于成本和部署简化的考虑,采用了相对比较简单的PPTP-VPN方案。服务端采用Debian 8系统,客户端就直接是windows和Linux自带的PPTP拨号软件。由于是私有的网络,因此在配置上可以尽量简化、统一,去掉一些没有必要的协商环节。

Debian服务端配置

服务端只保留一种协议(即MS-CHAP v2),同时强制要求MPPE-128bit加密(Microsoft Point-to-Point Encryption-微软点对点加密术)。在“/etc/ppp/pptpd-options”文件中,设置以下值即可:

refuse-pap
refuse-chap
refuse-mschap

require-mschap-v2
require-mppe-128

Windows客户端配置

以Windows自带的拨号网络配置为例。直接指定为“PPTP”的VPN类型,要求数据必须加密,同时协议部分只保留MS-CHAP v2即可。如下图所示。

Windows VPN拨号设置
Windows VPN 拨号设置

Linux客户端配置

与Windows客户端的配置基本一致,只是需要单独指示出MPPE-128bit加密方式,如下图所示。

Linux VPN 客户端配置
Linux VPN 客户端配置
设置SPF记录

设置SPF记录

最近发现的一个问题,如果邮件没有 SPF 记录,某些邮件服务器可能会过滤为垃圾邮件甚至直接拉入黑名单,比如 outlook 的服务器。相对而言,gmail 服务器要聪明很多,似乎在没有 SPF 记录的情况下,会反查MX记录及IP地址并进行匹配检验。

SPF的全称是:Sender Policy Framework, 由RFC7208文档定义详细规格。具体细节就不介绍了,基本意思就是让接收方的邮件服务器对发送者的域名和IP地址等进行检查。

在Linode的DNS管理中,仅仅添加MX记录是不够的,需要单独添加一条TXT记录,如图所示:

添加SPF的DNS记录
添加SPF的DNS记录

根据RFC7208的定义,可以进行很细致的控制。如果想省事,就如上图一样,设置一条”-all”的记录即可:

v=spf1 mx -all
Bootstrap 4!

Bootstrap 4!

最近真是好消息不断,经过多年的开发,bootstrap v4终于发布了,可喜可贺!

我们一直在关注这个版本,其中一些特性非常有吸引力,值得为此升级。我们的产品管理系统、网站等各方面都应用了bootstrap。悲剧性的事情是bootstrap当年推出v3后,过早地放弃了对v2的支持,同时变动实在太大,导致我们目前同时使用了v2和v3两个版本,一直困扰我们的维护工作。

而随着v4版本的推出,我们有机会统一内部的使用情况,将网站、软件产品管理系统的bootstrap都升级到v4的版本。当然,工作量估计非常巨大。

关于V4版本发布的细节,请参考以下文章:

http://blog.getbootstrap.com/2018/01/18/bootstrap-4/

DigitalOcean 免费升级

DigitalOcean 免费升级

早上开始工作时,收到了DO的邮件,非常惊喜。DO更新了各项套餐,增加了一些新套餐,也对老套餐进行了免费升级,真是良心企业。比如原有的“$10/mo”套餐,内存从1G升级到2G,存储从30G SSD升级为50G SSD。

不过默认情况下不会自动升级,需要手工对droplet进行resize。另外需要注意的是,可以只升级CPU和Memory,如果disk也同时升级到更高容量的话,则不支持降级回原有容量。

resize操作非常简单,请参考官方文档:

https://www.digitalocean.com/community/tutorials/how-to-resize-your-droplets-on-digitalocean

网站启用IPv6应注意的事项

网站启用IPv6应注意的事项

网站支持IPv6的步骤比较简单,基本上目前常用的软件,例如Apache、Postfix、dovecot等,都已经支持IPv4和IPv6双栈,只要服务商的设备提供IPv4和IPv6连接,这些软件本身无需为IPv6做特别配置。

需要注意的是服务商处的DNS配置。如果DNS配置不全面,某些服务器在鉴权时会拒绝接受来自IPv6地址的消息。例如gmail服务器在收到 email 消息时,会鉴定DNS和IPv6地址是否匹配,如果不匹配,则视为垃圾邮件直接拒绝,可以看到如下错误警示:

Our system has detected that this 550-5.7.1 message does not meet IPv6 sending guidelines regarding PTR records 550-5.7.1 and authentication.

下面以Linode中的配置做简单介绍(对DO而言也基本如此)。假设IPv4地址是“1.2.3.4”,IPv6地址是“1:2:3:4::5:6”,域名是“demo.com”。

Reverse DNS

Linode 为每个节点分配的DNS名默认是类似的成员名,例如“1234.members.linode.com”。在 Linux 系统 ping 域名”demo.com”时,首先显示的是”1234.members.linode.com”,然后才是跳转到”demo.com”。某些服务应用会认为是PTR错误。在linode中需要设置“ reverse DNS”记录,将节点的DNS名直接指定为“demo.com”。

具体措施请参考linode的在线文档

如果同时支持IPv4和IPv6,上述文档里指导的操作需要单独操作两次,分别指定IPv4地址和IPv6地址。

MX 记录

另外一个需要注意的是 MX 记录,即邮件服务器记录。如果我们将 MX 记录设置为“mail.demo.com”,那么在DNS的A和AAAA记录中,要分别对“mail.demo.com”设置IPv4和IPv6地址,例如以下DNS记录结果:

mail.demo.com. 300 IN AAAA 1:2:3:4::5:6
mail.demo.com. 300 IN A 1.2.3.4

仅仅指定一个地址,对端有可能以域名和地址不匹配为由拒绝消息请求。

TTL

Linode 默认的TTL是3600秒,建议修改为300秒。TTL 太长太短都不好,要根据自己的实际情况调整,以方便自己网络部署、同时又不增加太多网络负担为准则。

调整路由器的MTU

调整路由器的MTU

家里的无线路由器是Netgear,检查WAN设置中MTU默认为1496字节。这个数值是常见的无线网络MTU设置,但是实际应用中,发现其实还是能微调一下。

在CMD窗口使用以下命令测试网络MTU包:

ping -f -l 1460 myvoipapp.com

测试结果表明,实际负荷超过1460字节就会要求拆分数据包。加上28字节的包头,因此路由器中MTU应该设置为1488字节才是合理值。