Tag: security

  • 避开备案租中国大陆的服务器

    首先,如果不想备案,最简单的就是租香港的服务器。我这里特指中国大陆。

    其次,澄清一个概念:租中国大陆的服务器并非要备案。备案特指的是域名备案。

    再次,域名可以指向中国大陆的服务器,只要不建站,也可以不备案。比如,拿它做 SIP server。

    那么,建站想用中国大陆的服务器,不备案可以吗?我只想从技术上挑战一下,还成了。是在一定限定条件下的成功,但已具有极强的实操性,所以我有兴致讲一讲。

    大陆机房会抓数据包来分析 http(s) 流量是否为某个未备案的域名,是,则拦截并提示去备案。依我所见,无法 100% 抓包来分析(机房路由器算力无法 100% 抓包分析?),所以会有个别几次 http://unicped.domain 访问成功。机房的算法也是相当巧妙,所以也只是偶尔能访问成功,绝大部分次数是不成功的。

    有人说,只要改掉 http 默认的 80 端口就可以不备案建站。我已试过,此路不通,不管曾经有没有通过,反正现在不通。未加密的数据包能被分析,https 协议下的数据包是无法被分析的。所以,要避开备案,只能用 https 建站。

    好在如今 https 已是主流,http 建站可以不考虑了。需要注意的是,在 tls 1.3 出来前,https 的握手数据包是不加密的,不加密就能被分析,分析后就能阻断握手。

    好在如今的主流浏览器和主流 web server 都已支持 tls 1.3,这让不备案建站有了实操性。简单点说,就是用最新版的 web server 建个 https://any.domain。

    最后,我想用一点时间讲一讲如何不备案建一个 free SSL certificated https://freepbx.server.domain。

    1,FreePBX 安装完成后,用 http://ip.address 是可以管理的。

    2,在 System Admin > Hostname 输入域名 freepbx.server.domain,在 > Port Management 修改 Admin port 80 至一个未使用的端口,比如 48561,这样 80 端口就可以留给 LetsEncript 做 http-01 challenge。

    3,之后可以用 http://ip.address:48561 来管理。但这样去 Certificate Management 生成 LetsEncript 证书会失败,因为 FreePBX 只会用 http-01 challenge(如果会 dns-01 challenge 就好了)。

    4,我的研究表明,用 http://non-fqdn-domain:48561 来管理,就能让 FreePBX 完成 http-01 challenge。这需要在本地解析 non-fqdn-domain。

    5,在 System Admin > HTTPS Setup 启用这张证书就可以用 https://freepbx.server.domain 来管理了。

    后记:虽然成功了,但我挺纳闷的,用 http://non-fqdn-domain:48561 来管理和用 http://ip.address:48561 来管理,LetsEncript http-01 challenge 所涉及的数据包都是未加密的、无分别的、能被分析的,为什么 http://non-fqdn-domain:48561 一次就挑战成功,而 http://ip.address:48561 屡次失败。

  • Firewall and fail2ban in FreePBX

    之前一直不理解 FreePBX 里 Firewall 和 fail2ban 的关系,只感觉 FreePBX 动辄把我给关门外了,搞得我灰头土脸,为了方便起见,我干脆把 fail2ban 给关了。

    FreePBX 处于裸奔状态很久了,直到最近发生一件事:fail2ban 的日志在一天之内迅速膨胀,把硬盘写满了,于是 FreePBX 崩溃了。其中,我还是没搞懂为什么 fail2ban 禁用状态仍然在写日志?可能这就是 fail2ban 的设定。

    这个事件让我觉得应该启用 fail2ban,但我不熟 fail2ban 的命令行,甚是困惑。也是机缘巧合,这时我发现 FreePBX 激活以后(是的,很长一段时间我都不愿意激活,以为它没什么用,以为它只是为了方便 Sangoma 推销自己的付费产品),在 System Admin 或是在 Firewall 菜单页面里,就能找到 Intrusion Detection 了。Intrusion Detection 就是 fail2ban 的图形版,虽然很简化,但是足够了。

    如果在 Networks 标签页里添了一个 IP 或 Hostname 作为 Trusted Zone,但在 Intrusion Detection 标签页里没有把这个 IP 添入白名单,fail2ban 还是有可能把这个 IP 给 ban。这也是我之前经常被关门外的原因。

    那么,一个 IP 在 Networks 添一遍 Trusted Zone,还要在 Intrusion Detection 添一遍白名单,岂不是重复劳动?

    而且,Networks 可以填 Hostname,Intrusion Detection 只能填 IP,似乎灵活性差点意思?

    非也。Intrusion Detection 里 Import 选中 Trusted Zone,Trusted Zone 里的 IP 和 Hostname 就同步到白名单了。白名单只存 IP,Hostname 被自动解析了。

    自此,我只要维护好 Trusted Zone,就不再会把自己关门外了。

  • Do not run Asterisk as root user

    我用的 FreePBX 带的 Asterisk 是很久以前安装的,也没有关心过它是不是以 root 身份运行,直到最近被攻击。

    攻击的症状是有大量的流量访问,伴随流量不停在 /tmp 目录下生成 1-2 GB 的垃圾文件,产生文件的速度似乎跟流量大小相关。

    我不懂此次攻击的原理,但我发现原来一直以来 Asterisk 都是以 root 身份运行,我也知道这不合适。同时我也发现系统里早已有 asterisk 用户和 asterisk 组,程序、配置文件和文件夹的属主和属组都已是 asterisk 和 asterisk,也许攻击者对 Asterisk 做了提权。

    不管怎样,我得先把 Asterisk 改为非 root 身份运行。因为我的 Asterisk 以 service 方式启动,所以我在 /etc/init.d/asterisk 里增加了两行:

    AST_USER="asterisk"
    AST_GROUP="asterisk"

    重启就 OK 了。流量正常了,/tmp 下也不再生产垃圾文件,但不知道攻击有没有消失,至少漏洞堵上了。

    在堵漏洞的过程中还有个插曲:一开始还不清楚是不是操作系统层面的漏洞,我一上来就来一个

    yum update -y

    结果重启后发现系统瘫痪了,连 ssh 也进不去,只好用 console 登录,发现尝试用 service 启动任何服务时都会出现类似的错误信息。

    Error getting authority: Error initializing authority: Could not connect: Connection refused (g-io-error-quark, 44)

    据说这是 CentOS 在某个阶段升级特有的毛病。执行以下命令就好了:

    mv /var/run/dbus/system_bus_socket

    ln -s /run/dbus/system_bus_socket /var/run/dbus/system_bus_socket

  • Sftp chroot howto

    我之前在服务器上应用 Ftp chroot,那设置起来相对简单。但 Ftp service 不是服务器预装的,通常我会装 proftpd 或 vsftpd。

    这次我想为什么不用服务器预装的 Sftp service?我有点钻了牛角尖—— Sftp 比 Ftp 好在哪?更安全?似乎这增加的安全性对我来说毫无意义。少占点硬盘空间?空余字节多着呢。总之,我想到了就想把它用起来。

    首先新建一个用户组,sftponly,只要是这个组的用户 Sftp 登录后都会被 chroot。

    
    groupadd sftponly
    
    

    然后把需要 chroot 的用户都加到 sftponly 组

    
    usermod -a -G sftponly user1
    
    

    如果是新用户,则在创建的时候直接参组。

    
    useradd -U -G sftponly -s /sbin/nologin -d /path/to/user1_home user1
    
    

    然后要保证 /path/to/user1_home 这个目录及所有各级父目录的属主是 root,属性 755。user1 在他的 home directory 下是没有写权限的,不能由他自己创建文件或文件夹。这也容易理解,因为他被 chroot 以后,他的 home directory 看上去是系统根目录,普通用户当然不能在根目录这一级有写权限。这时需要 root 事先为 user1 创建好若干文件夹,如 /path/to/user1_home/documents、/path/to/user1_home/pictures,并将 documents、pictures 的属主指定为 user1。

    然后我按网上的指点依样画瓢,在 /etc/ssh/sshd_config 里添加了这几行:

    
    Match Group sftponly
        ForceCommand internal-sftp
        ChrootDirectory %h
    

    然后重启 sshd service

    
    service sshd restart
    
    

    理论上这时 user1 已经可以在 Sftp 登录是被 chroot,限定在他的 home directory。但是 user1 怎么都登录不了,碰到的错误是:

    Connection closed by server with exitcode 1

    原来,在我的 /etc/ssh/sshd_config 里有这么一行

    
    Subsystem       sftp    /usr/libexec/openssh/sftp-server
    
    

    这是服务器预装时的配置,可能不是所有的服务器都这样,但有一定的普遍性。

    这说明,Sftp 子系统是由 /usr/libexec/openssh/sftp-server 支持的。而在被 chroot 的 user1 看来,是没有 /usr/libexec/openssh/sftp-server 这个文件的。怎么办?两个办法:

    办法一:将那一行改为

    
    Subsystem     sftp    internal-sftp
    
    

    办法二:在 user1 的 home directory 下建一个副本 %h/usr/libexec/openssh/sftp-server,只是简单的文件拷贝。

     

  • I almost forgot how to use Apache

    我不用 Apache 很多年,几乎忘了该怎么完整地配一台 Apache server。最近上线了一台 FreePBX,我想加强 web server 的安全系数,要修改一些默认参数。因为对 FreePBX 还不是很了解,所以不敢贸然把它的 web server 用我喜欢的 Nginx 代替,只好沿用元配的 Apache,捣腾它的 conf 文件。

    首先,我想弄个 VirtualHost,把 FreePBX admin 界面隐藏到不公开的 ServerName 上。我忘了在使用 name based virtual host 前要先使用 NameVirtualHost 先声明一下。

    
    NameVirtualHost ip_address:port_number
    
    

    其次,启用了 VirtualHost 以后,VirtualHost 之外的 main DocumentRoot 就不起作用了。我在 VirtualHost 之外定义了一个 DocumentRoot 并想当然地认为它是 default server (未经任何一个 VirtualHost 定义的 server)的 DocumentRoot。事实上,VirtualHost 的 default server 是由 _default_ 显式定义,或在 _default_ 缺失的情况下,第一个 VirtualHost 就是 default server。

  • Get rid of snapdo.com

    Snapdo.com 非常流氓,一旦进驻,到处修改设置,把每个浏览器改得面目全非。

    Snapdo haunted in my computer
    Snapdo haunted in my computer

    杀毒软件不当它是病毒,所以指望杀毒软件来修正错误是不可能的。我手动修正了多处地方,过了几天发现它还潜伏在那里。

    今天又发现 Snapdo 原来是 Quickshare 在作祟。去 installed programs 里一看,果然有一个 Quickshare (之前没找到 Snapdo,以为 Snapdo 不敢暴露自己)。赶紧卸载。

    Quickshare installed
    Quickshare installed

    发现 Snapdo 是 Quickshare 纯属偶然。因为 Chrome new tab 时仍出现 Snapdo,我搜了一下怎么恢复 Chrome new tab。有人说在 chome://flags disable Instant Extended API,但没效果,又有人说在 chrome://extensions/ disable all extensions。我这才发现 Quickshare,直接移除。

    Remove quickshare extension
    Remove quickshare extension

  • Step by step setup OpenVPN server on DrayTek router

    一直以来都是偷懒,习惯用 PPTP 连接 VPN server。但 PPTP 安全性欠佳,overhead 又偏大,是时候让自己过渡到 OpenVPN 或者其他非 PPTP 方式的 VPN 了。

    找到一个教程,是针对 Windows 用户的,先做个笔记。有空之时我再研究 Linux client 怎么连入 OpenVPN server on DrayTek router。

  • I thought I lost Hotmail

    Hotmail 今天给我惊了一身冷汗。

    我不用 hotmail 很多年。今天由于某种需要,登录了一下 hotmail。我虽然牢记我的密码,但是 hotmail 过于热心地说,“您好久不来了,我给你发个验证码”。

    Hotmail wants to verify me
    Hotmail wants to verify me

    验证码发到哪儿呢?hotmail 显示了以前留给 hotmail 恢复密码用的另一个邮箱。hotmail 显示了恢复邮箱@前的前 2 个字母结果,其他用一串星号遮住。那是很久以前我用的一个免费邮箱提供商提供的邮箱,我申请过多个,有些已经不属于我了。

    天哪!hotmail 会把验证码发到哪儿?我诚惶诚恐地登录了其中一个,一堆垃圾邮件,但没有新邮件;退出再登一个,也没有。晕了晕了——要是 hotmail 把验证码乱发,那我的 hotmail 也要被别人拿去了。然后骗子可能拿着我的账号去借钱,然后……

    还好,我再点一次让 hotmail 重发验证码,这次收到了,而且一次收到两个,不知道上一个验证码是发送延迟,还是接收延迟。哎,草草登录了事。hotmail 在欢迎页面上兴致勃勃地介绍起 outlook.com,我却有点哭笑不得。

    I am not reading this welcome
    I am not reading this welcome

  • Like WordPress, Dislike Cisco

    WordPress 升 3.3了,感觉更清新了。好喜欢。

    Cisco 本是不相干的一件事,为了省事,我放一块说了。两年前买了 Cisco WVC210 wireless IP camera,当时市价 £150左右,我买的是样机,£90。买了之后玩了两天就成了摆设,因为它距离路由器10米的地方隔两堵墙就不工作了。

    最近为 hotel 买了几个 Xenta Wireless Night and Day Wireless IP Network Camera,£50不到,超级满意。我本不太敢买 Xenta 的产品,因为没有这个牌子的使用经验,事实证明我的顾虑是多余的。

    跟 Cisco WVC210 wireless IP camera 相比好在哪?

    • 首先,Xenta 有红线成像而 Cisco 没有;
    • 其次,Xenta 内置喇叭而 Cisco 没有;
    • 再次,Xenta pan & tilt 时静悄悄的而 Cisco 有吱吱声;
    • 最后,Xenta 物美价实,而 Cisco 卖了两年还在卖 £150。
  • Damn phishing

    网络骗子很可恶,因为它们在一个八杆子打不着的地方诱人上钩。虽然我不会上钩,但拿它们没办法,所以它们可恶。

    今天接到一个未知号码(诈骗特征一)的来电,接起来后线路质量不是很好(诈骗特征二),一个印度口音的男子自称来自我的手机公司,问我是某某某吗。

    因为线路不好,所以我根本没听清它到底称呼我什么,我就说:

    “Yes?”

    它说:

    “You ordered a brand new phone in a year’s time, right?”

    我这时不能确定它的意图,可能是手机公司要给我 upgrade,那就继续听下去。我还是说:

    “Yes?”

    它说:

    “Can you confirm your name?”

    我立马警觉,说:

    “Why do I need to confirm my name?”

    它说:

    “Because I want to verify your name.”

    我说:

    “Why do you want to verify my name?”

    它见我不上钩,挂了。我还是觉得很气愤,骗子们四处逛,总有无知的会上钩,谁能整整这些败类,啊?!