NeoAtlantis应用科学和神秘学实验室最近新购置一台用于管理最重要的认证信息的笔记本电脑。 对这台电脑的要求是,让系统安全、稳定运行优先,兼顾日常应用(比如编程、文字处理)。 因此,采取了很多配置对其进行完善。这里就把进行的操作记下来,以备日后参考。

目前包含的重要步骤有:

  1. 配置系统的自动更新。
  2. 通过UFW配置防火墙,阻止全部的进入流量(关闭全部端口),并阻止一般用户的外出流量,强制通过Tor访问互联网。
  3. 启用AppArmor,运用内核的强制访问控制(Mandatory Access Control)功能, 对关键的软件(Tor和KeepassX)进行强制约束,避免软件Bug带来的安全问题。

本文内容会随着配置的变化不断更改。

1. 安装系统

1.1 选择系统

选择的系统是Debian 8.8.0, 用于AMD64架构上,以便支持笔记本电脑的Atom CPU。

做出这个选择的其他理由:

  1. Debian系的系统自带UFW防火墙管理程序,配置比较简单粗暴。
  2. Debian自带的AppArmor比SELinux便于自定义配置。
  3. Debian比较稳定。

1.2 安装过程

1.2.1 下载和检验

下载文件后,首先对文件进行完整性校验:

$   sha256sum debian-8.8.0-amd64-netinst.iso 
2c07ff8cc766767610566297b8729740f923735e790c8e78b718fb93923b448e  debian-8.8.0-amd64-netinst.iso

然后上网简单搜索下2c07ff8c...923b448e这段字符串,能找到已有的结果,也确实来自Debian的镜像网站。

1.2.2 安装

使用dd的方式(略)将iso文件写入到U盘,然后配置电脑从U盘启动,进入安装。

安装过程的要点:

  1. 必须使用加密整个硬盘的选项,并设置较长的密码。
  2. 使用XFCE4作为桌面环境,兼顾功能强大和内存占用低的优势。

1.2.3 锁定BIOS

安装成功后,锁定BIOS,配置BIOS管理员密码和硬盘密码。

可以允许BIOS密码只在进入BIOS时才需要输入,以便加快开机速度。但是开机应当要输入用户密码,以免计算机被未授权地使用。

必须配置硬盘密码,以避免未经授权访问硬盘,毁坏数据的可能; 同时提供开机时使用Tails等USB操作系统而不会访问硬盘的保险方式。

2. 配置系统防火墙

安装后,开机,登录,连接网络。

然后立刻要做的事情是配置防火墙:使用sudo apt-get install ufw安装UFW。

使用如下命令,启用UFW,并阻止所有进入流量:

$   sudo ufw enable
$   sudo ufw default deny

3. 配置自动更新

配置使Debian接收自动的安全更新,参考这篇文章

4. 安装AppArmor并启用

参考文章在这里,重要步骤:

  1. 使用命令安装AppArmor。
    $ sudo apt-get install apparmor apparmor-profiles apparmor-utils
  1. 启用AppArmor:
    $ sudo perl -pi -e 's,GRUB_CMDLINE_LINUX="(.*)"$,GRUB_CMDLINE_LINUX="$1 apparmor=1 security=apparmor",' /etc/default/grub
    $ sudo update-grub
    $ sudo reboot
  1. 上述命令将重启计算机。使用sudo aa-status查看AppArmor的状态。
  2. 安装apparmor-profiles-extra包,提供更加完整的规则。

5. 安装Tor并限制所有的普通流量通过Tor代理

希望将所有的上网流量通过Tor代理,实现匿名、加密,减少入侵的攻击面。 AppArmor安装后,应当提供了对Tor程序的约束规则,可以让Tor本地服务比较安全。

5.1 安装Tor

使用apt-get安装Tor,略。

5.2 配置UFW,禁止普通用户的直接外出流量

参考本实验室《暗网介绍》一文4.2.2节的方式。

假设普通用户叫neo, 修改UFW的策略文件,位置在/etc/ufw/before.rules。 在文件靠前的位置,Loopback规则的后面,添加空行,然后增加如下规则:

-A ufw-before-output -o eth0 -m owner --uid-owner neo -j DROP
-A ufw-before-output -o wlan0 -m owner --uid-owner neo -j DROP

这样就为eth0wlan0(有线和无线网卡)上添加了外出规则,将所有的数据包全部丢弃。

我们仍然准备让root用户可以访问网络,例如更新系统软件等。所以不进行配置。

5.3 配置浏览器代理

让火狐浏览器通过127.0.0.1:9050,协议Socks5访问网络。

如果是Chromium/Google Chrome浏览器,在启动命令中使用

chromium --incognito --proxy-server=socks5://127.0.0.1:9050

启动,进入隐私浏览,并使用Tor代理。

6. 安装并限制密码管理器

安装KeepassX密码管理器,用于管理登录密码。

6.1 使用jessie-backports源

Debian 8自带的KeepassX还是0.4版本的,我们需要版本2的,以便支持更新的.kdbx数据库。

/etc/apt/sources.list.d/中添加Debian 8(Jessie) Backports的软件源:

deb http://ftp.debian.org/debian jessie-backports main

然后运行如下指令进行安装:

$ sudo apt-get update
$ sudo aptitude -t jessie-backports keepassx

6.2 用AppArmor限制KeepassX

参考配置在这里

我们使用如下配置,放置到/etc/apparmor.d/usr.bin.keepassx

# vim:syntax=apparmor

#include <tunables/global>

/usr/bin/keepassx {
  #include <abstractions/base>
  #include <abstractions/dbus-session>
  #include <abstractions/ibus>
  #include <abstractions/kde>
  #include <abstractions/nameservice>
  #include <abstractions/private-files>

  # missing from dbus abstractions?
  audit /usr/bin/dbus-send ix, 

  /etc/xdg/sni-qt.conf rk,
  /etc/xdg/Trolltech.conf rk,
  /usr/share/themes/** r,
  /usr/share/glib-2.0/schemas/gschemas.compiled r,
  /usr/lib/@{multiarch}/gtk-[0-9]*/**.so mr,

  owner @{HOME}/.config/gtk-[0-9]*/* rw,
  owner @{HOME}/.{cache,config}/dconf/user rw,
  owner /{,var/}run/user/*/dconf/user rwk,

  # gvfs
  /usr/share/gvfs/remote-volume-monitors/  r,
  /usr/share/gvfs/remote-volume-monitors/* r,

  # usb
  /media/   r,
  /media/veracrypt*/   r,
  /media/veracrypt*/** r,

  owner @{HOME}/.config/keepassx/ rw,
  owner @{HOME}/.config/keepassx/config.ini rwk,
  owner @{HOME}/DMZ/ r,
  owner @{HOME}/DMZ/* rw,

  /usr/share/keepassx/** r,

  owner @{PROC}/@{pid}/cmdline r,
}

由于我们计划将KeepassX的数据库额外放到VeraCrypt的加密分区中保存, 所以该配置修改了/media/之下的访问权限,允许只读访问挂载成/media/veracrypt*这样的目录。

如果需要修改KeepassX的数据库,我们需要一个临时目录,放置在~/DMZ,这里授予写入权限。

最后使用sudo aa-enable /usr/bin/keepassx,应用上述规则,约束KeepassX。