kazeno memo

メモとか

Debian Busterで(/bootを含んだ)フルディスク暗号化

元ネタ: Full disk encryption, including /boot: Unlocking LUKS devices from GRUB

Debianなど多くのLinuxディストリビューションでは、LVM on LUKS構成でインストールしても /boot パーティションは暗号化されません。

一方、GRUB2は暗号化されたLUKSパーティションのロックを解除できます。(ただし、LUKSバージョン1のみ)

インストール

インストーラを用いて、以下の構成でインストールします。

# lsblk -o NAME,FSTYPE,MOUNTPOINT /dev/sda
NAME                    FSTYPE      MOUNTPOINT
sda
├─sda1                  ext2        /boot
└─sda2                  crypto_LUKS
  └─root_crypt          LVM2_member
    ├─root_crypt--root  ext4        /
    └─root_crypt--swap  swap        [SWAP]

こちらの記事を参考にインストールしました。

Full disk encryption (including /boot) on Ubuntu

/boot パーティションの暗号化

/boot パーティションを暗号化する方法は2つあります。

後者はパーティションを1つにまとめることが出来るというメリットはありますが、ルートパーティションでLUKS2の機能を使うことはできません。

ここでは前者の方法で /boot パーティションを暗号化します。

  1. /boot を読み取り専用で再マウント
    # mount -oremount,ro /boot
  2. /boot の中身を別の場所へ移動
    # cd ~
    # install -m600 /dev/null /tmp/boot.tar
    # tar -C /boot --acls --xattrs --one-file-system -cf /tmp/boot.tar .
    # umount /boot
  3. 必要に応じてランダムデータで上書き
    # dd if=/dev/urandom of=/dev/sda1 bs=1M
    ddstatus=progress オプションを追加すると進捗が表示されます。
  4. LUKS1でフォーマット
    # cryptsetup luksFormat --type luks1 /dev/sda1
    Are you sure? (Type uppercase yes): と聞かれるので、大文字で YES と入力します。次に、パスフレーズを入力します。
  5. /boot/dev/sda1 を追加し、マウント
    # uuid="$(blkid -o value -s UUID /dev/sda1)"
    # echo "boot UUID=$uuid none luks" | tee -a /etc/crypttab
    # cryptdisks_start boot
  6. ext2でフォーマット
    # uuid="$(grep /boot /etc/fstab | grep UUID | awk '{print $1}' | awk -F'[=]' '{print $2}')"
    # mkfs.ext2 -m0 -U $uuid /dev/mapper/boot
  7. /boot をマウントして、中身を戻す
    # mount -v /boot
    # tar -C /boot --acls --xattrs -xf /tmp/boot.tar

GRUBの設定

# echo "GRUB_ENABLE_CRYPTODISK=y" >> /etc/default/grub
# update-grub
# grub-install /dev/sda

パスワード入力を省略

GRUBによって sda1 のロックが解除されますが、initramfs ステージで sda2(ルートデバイス) のパスワードを入力する必要があります。その後 sda1 のパスワードをもう一度入力する必要があります。

これは面倒なので、LUKSパーティションにキーファイルを追加して、パスワード入力をスキップします。

キーファイルは initramfs にコピーすることになります。 initramfs は起動時、RAMに平文でキーファイルを展開します。セキュリティ上の問題があるように思うかもしれませんが、LUKSもボリュームキーをRAMに保持しているので脅威モデルは同じです。

  1. キーファイルの作成
    # mkdir -p -m0000 /etc/keys
    # ( umask 0777 && dd if=/dev/random of=/etc/keys/boot.key bs=1024 count=4 conv=fsync)
    # ( umask 0777 && dd if=/dev/random of=/etc/keys/root.key bs=1024 count=4 conv=fsync)
    キーの生成が進まない場合、エントロピーが枯渇している場合があります。 その場合、 rng-toolshaveged をインストールすることで改善します。
    キーの生成に /dev/urandom を使用することは推奨されていません。
  2. キースロットに追加
    # cryptsetup luksAddKey /dev/sda1 /etc/keys/boot.key
    # cryptsetup luksAddKey /dev/sda2 /etc/keys/root.key
    キースロットに追加されていることを確認する
    # cryptsetup luksDump /dev/sda1 | grep "^Key Slot"
    Key Slot 0: ENABLED
    Key Slot 1: ENABLED
    Key Slot 2: DISABLED
    Key Slot 3: DISABLED
    Key Slot 4: DISABLED
    Key Slot 5: DISABLED
    Key Slot 6: DISABLED
    Key Slot 7: DISABLED
    スロット1にキーファイルが追加されていることが分かります。
  3. /etc/crypttab にキーファイルのパスを追加 sda1sda2 両方設定します。
    root_crypt UUID=... /etc/keys/root.key luks,key-slot=1
    上記のように、3行目をキーファイルのパスに、4行目に key-slot オプションを追加します。 LUKSはスロット0から順番に実行します。 key-slot オプションは指定したスロット以外をスキップするので、起動時間が短縮されます。
  4. initramfs の設定
    # echo "KEYFILE_PATTERN=\"/etc/keys/*.key\"" >> /etc/cryptsetup-initramfs/conf-hook
    # echo UMASK=0077 >> /etc/initramfs-tools/initramfs.conf
  5. initramfs の再構成と確認
    # update-initramfs -u
    initramfsにキーファイルが存在するのか確認
    # lsinitramfs /initrd.img | grep "*.key"

これで、起動時に一度 sda1 のパスワードを入力するだけで起動するはずです。

トラブルシューティング

設定が誤っていて起動できない場合、DebianのLiveイメージなどを立ち上げてchrootすることで、GRUBやinitramfsを再構成できます。

  1. /mnt にマウント
    # cryptsetup open /dev/sda1 boot
    # cryptsetup open /dev/sda2 root_crypt
    # lvchange -ay root_crypt
    # mount /dev/root_crypt/root /mnt
    # mount /dev/mapper/boot /mnt/boot
    # mount --rbind /dev /mnt/dev
    # mount --rbind /sys /mnt/sys
    # mount -t proc /proc /mnt/proc
  2. /mntchroot する
    # chroot /mnt /bin/bash
    これで update-grubupdate-initramfs -u を実行できます。 exitchroot から抜けられます。
  3. アンマウント
    # umount -R /mnt
    # lvchange -an root_crypt
    # cryptsetup close root_crypt
    # cryptsetup close boot

Links

Full disk encryption, including /boot: Unlocking LUKS devices from GRUB

Full disk encryption (including /boot) on Ubuntu

Real full disk encryption using GRUB on Debian GNU/Linux for BIOS

LinuxからYamaha RTX1500のファームウェアアップデート

linux側の準備

RTXのファームウェアアップデートにはtftpが必要なのでインストールします。

# apt update && apt install tftp

ファームウェアはここからダウンロード出来ます。
http://www.rtpro.yamaha.co.jp/RT/firmware/
rtx1500.binがファームウェア本体です。

RTX1500側の準備

シリアルコンソールかsshで接続できます。

tftpサーバへの接続を許可(多分管理者権限が必要です)

# tftp host any

Linuxからtftpで接続できるように、適切にルーティングしておく必要があります。

tftpでファームウェアを送る

linuxからtftpでファームウェアをputします。

$ tftp ルータのアドレス
 > mode binary
 > put /path/to/rtx1500.bin exec
 > quit

putの後は終了するまで待ちましょう。(1分ぐらい)
途中で接続を切断してしまうと起動しなくなってしまうかもしれないので注意。

コンソールに接続しておくと進捗が分かる。

VoidLinuxにb43ドライバを入れる

broadcomWi-Fiカード「bcm43xx」のドライバを導入します。

# xbps-install -S b43-fwcutter
# export FIRMWARE_INSTALL_DIR="/usr/lib/firmware"
# wget https://www.lwfinger.com/b43-firmware/broadcom-wl-5.100.138.tar.bz2
# tar xvjf broadcom-wl-5.100.138.tar.bz2
# b43-fwcutter -w "$FIRMWARE_INSTALL_DIR" broadcom-wl-5.100.138/linux/wl_apsta.o

Macbook - Void Linux Wiki

en/users/Drivers/b43 - Linux Wireless

Void LinuxをLUKSで暗号化してインストール

Void Linuxを暗号化したパーティションに手動でインストールしてみます。

Linuxのフルディスク暗号化は、/bootパーティションを暗号化しないのが主流なようですが、それは微妙と言うか、/bootも暗号化していないとフルじゃないだろって事で/bootもLUKSで暗号化します。

UEFIではないことに注意してください。

パーティション構成

sda (MBR)
├─sda1 (LUKS ver1)
│ └─boot			1GB		/boot	ext4
└─sda2 (LUKS ver2)
  └─LVM
    ├─lvm-swap	        	2GB	        [SWAP]
    ├─lvm-root	        	10GB    	/	ext4
    ├─lvm-home	        	20GB    	/home	ext4
    └─lvm-tmp	        	5GB		/tmp	ext4

/bootとそれ以外に分けた理由は、LUKS2を使いたかったのですが、GRUB2はLUKS1にしか対応していないからです。

https://cryptsetup-team.pages.debian.net/cryptsetup/encrypted-boot.html

https://savannah.gnu.org/bugs/?55093

注意/ポイント

  • GRUB2はLUKS2に対応していません。その為、起動パーティションはLUKS1で暗号化する必要があります。

  • LVMは必須では無いですが、LUKS上でパーティションを分割出来る、削除や拡張・縮小などの操作が楽になる等の利点があります。

  • VoidLinuxのmusl版を使いますが、手順はmuslとglibcでほぼ変わりません。

  • /dev/random/dev/urandomのどちらを使うべきか?

    キーファイルを作成する場合 random を使うべきですが、ディスクのフォーマットなどは基本的に urandom で良いと思います。 システムのエントロピーが極端に少ない場合、 random,urandom のどちらを使う場合も危険なようです。HAVEGED などのエントロピーソースを増やすソフトウェアや NEUG などのハードウェアRNGを使うことを検討してください。

インストール

  1. VoidLinuxのインストールメディアを起動

  2. ip aコマンドでIPアドレスを確認して、必要に応じてSSHで外部から操作

  3. シェルをBashに変更し、日本語キーボードのキーマップを読み込む

    # bash
    # loadkeys jp106
  4. fdisk -lでディスクの確認

  5. ディスクをランダムデータで上書き
    この項目は必須ではないですが、特に理由がない限り実行することをおすすめします。
    巨大なディスクでは数時間かかることがあります。

    # dd if=/dev/urandom of=/dev/sda bs=60M
    

    この操作はディスク上のすべてのデータを上書きします。復元は不可能なので、重要なデータは事前にバックアップしておいて下さい。

  6. パーティションを作成

    # cfdisk /dev/sda
    

    パーティションテーブルは MBR なので dos を選択します。
    2つのパーティションを作り、/boot用のパーティションにBootableフラグを付けます。
    設定が終わったら[Write]を選択、本当に実行するか?と聞かれるのでyesと入力してEnter、その後[Quit]で終了します。

    # lsblk /dev/sda
    

    lsblkパーティションが作成されているか確認します。

  7. /boot パーティションをLUKSでフォーマット

    # cryptsetup -v --type luks1 \
    	--cipher aes-xts-plain64 \
    	--key-size 512 \
    	--pbkdf pbkdf2 \
    	--iter-time 5000 \
    	--verify-passphrase \
    	--use-urandom \
    	--timeout 20 \
    	luksFormat /dev/sda1
    

    luks1では pbkdf に argon2i/id は選択できません。
    --iter-timeパスフレーズ入力後の待ち時間をミリ秒で指定(5000なら5秒)
    --timeoutタイムアウトするまでの時間を秒で指定
    /dev/randomを使いたい場合--use-randomを指定

  8. システムパーティションをLUKSでフォーマット

    # cryptsetup -v --type luks2 \
    	--cipher aes-xts-plain64 \
    	--key-size 512 \
    	--pbkdf argon2id \
    	--iter-time 5000 \
    	--verify-passphrase \
    	--use-urandom \
    	--timeout 20 \
    	luksFormat /dev/sda2
    
  9. LUKSパーティションを開く

    # cryptsetup luksOpen /dev/sda1 boot
    # cryptsetup luksOpen /dev/sda2 lvm
    

    boot,lvmの部分は環境に合わせて分かりやすい名前に変更してください。
    /dev/mapper/ディレクトリに指定した名前のデバイスファイルが作成されます。
    (例:/dev/mapper/boot)

  10. /boot パーティションext4でフォーマット

    # mkfs.ext4 /dev/mapper/boot
    
  11. LVMのセットアップ

    # pvcreate /dev/mapper/lvm
    # vgcreate /dev/lvm /dev/mapper/lvm
    # lvcreate /dev/lvm -L 2GB -n swap
    # lvcreate /dev/lvm -L 10GB -n root
    # lvcreate /dev/lvm -L 20GB -n home
    # lvcreate /dev/lvm -L 5GB -n tmp
    

    空き容量をすべて使うには、-l 100%FREEというオプションを指定します。
    -lが小文字であることに注意してください。大文字だとエラーが出ます。

  12. システムパーティションのフォーマット

    mkswap -L swap /dev/lvm/swap
    mkfs.ext4 -L root /dev/lvm/root
    mkfs.ext4 -L home /dev/lvm/home
    mkfs.ext4 -L tmp /dev/lvm/tmp
    
  13. システムパーティションとdev,sys,procのマウント

    # mount /dev/lvm/root /mnt
    # mkdir /mnt/{dev,sys,proc,boot,home,tmp}
    # mount /dev/mapper/boot /mnt/boot
    # mount /dev/lvm/home /mnt/home
    # mount /dev/lvm/tmp /mnt/tmp
    # mount --rbind /dev /mnt/dev
    # mount --rbind /sys /mnt/sys
    # mount -t proc /proc /mnt/proc
    
  14. ベースシステムのインストール

    //musl版
    # XBPS_ARCH=$(uname -m)-musl xbps-install -Sy -R https://youngjin.io/voidlinux/current/musl -r /mnt base-system cryptsetup lvm2 grub vim
    
    //glibc版
    # xbps-install -Sy -R https://youngjin.io/voidlinux/current -r /mnt base-system cryptsetup lvm2 grub vim
    

    日本からは韓国のミラー(youngjin.io)が一番速いです。
    その他のミラーは公式サイトを参照してください。
    https://voidlinux.org/download/#mirrors

  15. chrootでセットアップ

    # chroot /mnt /bin/bash
    
    // rootのパスワード
    # passwd root
    
    // パーミッション
    # chown root:root /
    # chmod 755 /
    
    // デフォルトシェル
    # chsh -s /bin/bash
    
    // ホストネーム
    # echo "hostname" > /etc/hostname
    
    // タイムゾーン
    # ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
    
    // ローケル
    # echo "LANG=en_US.UTF-8" > /etc/locale.conf
    

    glibc版の場合glibcのローケル設定が必要です。

    # echo "en_US.UTF-8 UTF-8" >> /etc/default/libc-locales
    # xbps-reconfigure -f glibc-locales
    

    /etc/rc.conf
    TIMEZONE="Asia/Tokyo"
    KEYMAP="jp106"
    TTYS=2
    

    /etc/crypttab

    crypttabにルートファイルシステムを追加しないで下さい。

    boot	UUID=</dev/sda1のuuid>	none	luks,timeout=10
    

    /dev/sda1 の UUID を確認

    # blkid -o value -s UUID /dev/sda1
    

    /etc/dracut.conf.d/00-hostonly.conf
    hostonly=yes
    

    /etc/dracut.conf.d/10-crypt.conf
    install_items+="/etc/crypttab"
    

    /etc/fstab
    # <filesystem>	<dir>	<type>	<options>				<dump>	<pass>
    /dev/mpper/boot	/boot	ext4	rw,nodev,nosuid,noexec			0	0
    /dev/lvm/root	/	ext4	rw,errors=remount-ro	                0	0
    /dev/lvm/home	/home	ext4	rw,nodev,nosuid				0	0
    /dev/lvm/tmp	/tmp	ext4	rw,nodev,nosuid,noexec			0	0
    /dev/lvm/swap	none	swap	sw					0	0
    
  16. GRUBの設定
    設定ファイルに以下を追加します。

    /etc/default/grub
    GRUB_CMDLINE_LINUX="cryptdevice=UUID=</dev/sda1のuuid>:boot"
    GRUB_ENABLE_CRYPTODISK=y
    

    また、GRUB_CMDLINE_LINUX_DEFAULTに以下のカーネルパラメータを追加します。
    rd.auto=1
    このようになっているはずです。
    GRUB_CMDLINE_LINUX_DEFAULT="loglevel=4 slub_debug=P page_poison=1 rd.auto=1"

  17. GRUBのインストール

    # grub-install --target=i386-pc /dev/sda
    

    設定ファイルの生成

    # grub-mkconfig -o /boot/grub/grub.cfg
    
  18. カーネルフックのセットアップ

    # xbps-reconfigure -f linux4.18
    

    カーネルのバージョンはこのコマンドで確認出来ます。

    # cat /var/db/xbps/*.plist | grep key | grep linux
    

    実行するとこのように出力されます。

    <key>linux</key>
    <key>linux-firmware-amd</key>
    <key>linux-firmware-intel</key>
    <key>linux-firmware-network</key>
    <key>linux-firmware-nvidia</key>
    <key>linux4.18</key>
    <key>util-linux</key>
    

    カーネルのバージョンが4.18であることが分かります。

  19. 再起動

    # exit
    # swapoff /dev/lvm/swap
    # umount -R /mnt
    # lvchange -a n lvm
    # cryptsetup luksClose lvm
    # cryptsetup luksClose boot
    # reboot
    

LUKSパーティションのマウントを楽にする

上記の設定のままでは、起動時に複数回luksのパスフレーズを入力する必要があります。
キーファイルを追加するか、SSH経由でパスフレーズを入力することで、楽にluksパーティションをマウントすることが出来ます。

GRUBにパッチを当てることで起動時のパスフレーズの入力を完全にスキップすることも出来ますが、セキュリティ的に問題があると思うのでおすすめしません。

キーファイルの追加

SSH経由でパスフレーズを入力

アドオンを使わずTwitterを旧UIに戻す(Firefox)

12月5日現在 この方法は使えないようです。


PC版Twitterのレイアウトが変更されて各所で悲鳴が上がってますが
私の環境では旧レイアウトが問題なく使えていたのですが、先程新しいレイアウトへ強制変更されてしまった。

解決策を探していると、どうやら"Cookieの削除" or "User Agentを(IEに)変更する"ことで戻せるらしい。
How to Switch Back to the Old Twitter Layout

  • Cookieを削除する場合「rweb_optin」という名前のCookieを削除
  • User Agentを変える場合アドオンを入れてUAをIE11に偽装→twitter.comのCookieを削除

いずれかの方法で戻せるという事でしたが、Cookieを削除する方法は失敗。アドオンを入れるのは嫌なので、他の方法は無いかと探していたらあった。
Reverting back to the old twitter interface for firefox users : Twitter

about:configの設定をいじる方法なのですこし面倒かもしれないですが。

手順

  1. about:configを開く
  2. 右クリック→「新規作成」→「文字列」
  3. 設定名として「general.useragent.override.twitter.com」を入力してEnter
  4. 文字列として「Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko」を入力してEnter
  5. about:preferences#privacyを開く→「Cookie とサイトデータ」→「データを管理」
  6. 「ウェブサイトを検索」にtwitter.comと入力
  7. 「表示されたサイトデータをすべて削除」をクリック(twitter.comのみ削除でいいかも)
  8. 「変更を保存」→ダイアログが出てくるので「削除」をクリック
  9. twitter.comへアクセスしてログインし直す
  10. 終わり

Twitterに限らずですが、最近のPC版とモバイル版のUIを無理矢理?統一する風潮は何なんだろう。使いにくい。

GajimでOMEMOを使う

GajimPidginのようなIMクライアントで、PGP・OMEMOを使ったE2E暗号化に対応しています。

OMEMOは、OTRと違って、暗号化されたグループチャットに対応しています。サーバ側がhttp_uploadに対応していれば暗号化されたファイルの送受信も可能です。

Gajimのインストール方法

Gajimは多くのLinux系OSとWindowsに対応しています。詳しいインストール方法は公式サイトを参照してください。

Windowsの場合

公式サイトのダウンロードページからインストーラをダウンロードしてください。Windows版はOMEMOプラグインも含まれています。

DebianUbuntuの場合

gajim,gajim-omemoパッケージをインストールします。

# apt update
# apt install gajim gajim-omemo

Gajim v1.0より前のバージョンを使用していて、ファイル転送機能を使用したい場合は、gajim-httpuploadパッケージもインストールする必要があります。

Unstable(不安定版)パッケージを利用するには

DebianUbuntuでは、以下の手順で、Unstable(不安定版)パッケージをインストールすることもできます。

//(インストールしている場合)Gajimのアンインストール
# apt remove gajim
//GPG鍵のインポート
# wget -q https://gajim.org/gajim.key -O - | apt-key add -
//リポジトリの追加
# sh -c "echo deb https://ftp.gajim.org/debian unstable main > /etc/apt/sources.list.d/gajim.list"
//更新・インストール
# apt update
# apt install gajim-nightly

設定

OMEMOの有効化

GajimプラグインAvailableOMEMOの右側のチェックボックスをクリック→左下のInstall/Update Pluginアイコンをクリック

これでOMEMOがインストールされました。

次に、OMEMOでチャットしたい相手とのメッセージ画面を開きます。

メッセージウィンドウの右下の南京錠アイコンをクリックして、OMEMOを有効化します。

すると、南京錠アイコンの横に盾のようなアイコンが表示されます。

クリックすると相手のフィンガープリントが表示されるので、左側の盾アイコンをクリックしてTrustedを選択します。

相手にも同じ手順で設定してもらうと、暗号化チャットが出来るようになります。チャットの左側に緑色の南京錠アイコンが表示されていると思います。

プライバシー設定

Whonix WIkiには、プライバシー保護のために以下の設定を行うことを推奨しています。(一部抜粋)

ログの設定

Gajimアカウントxyz@xmpp.org(あなたのアカウント名)全般

すべての相手先の会話記録を保存するをオフにする。

(この設定で、ローカルストレージ上に会話履歴が保存されなくなります。)

アクティビティの設定

Gajim設定在席状況

「離席中」にするのチェックを外す。

「不在」にするのチェックを外す。

プライバシーの設定

Gajim設定拡張プライバシー

名簿にない相手先からのイベントを無視するのチェックを外す。

クライアントやOS情報の送信を許可するのチェックを外す。

ローカルのシステムの時刻情報の送信を許可するのチェックを外す。

操作しない時間の送信を許可するのチェックを外す。

リンク

Gajim - Gajim公式

OMEMO - OMEMO公式

OMEMO.top - OMEMOに対応しているIMクライアントのリスト

Gajim | Whonix Wiki - Gajimのプライバシー設定

How To chat with OMEMO - GajimのOMEMO設定

Debianのネットワーク設定とか

適当なので(特に)IPv6周りは自信がないです。

/etc/network/interfaces

バイス 説明
lo loopback
eth0 NIC1

最近のsystemdでは、従来のeth0のような命名ではなく、enp0s1のような予測可能なネットワークインタフェース名を用います。

DHCP

#loopback
auto lo
iface lo inet loopback

#eth0 DHCP
auto eth0
iface eth0 inet dhcp
iface eth0 inet6 auto
  privext 2

IPv6DHCPは正直よくわからない。 こちらの記事ではautodhcpを両方設定している。

Static

構成は以下を仮定

IPv4 IPv6
PC 192.168.1.100/24 xxxx:xxxx:xxxx:xxxx::100/128
ルータ(gateway) 192.168.1.1 fe80::1
DNS1(ルータ) 192.168.1.1 fe80::1
DNS2(Google Public DNS) 8.8.8.8 2001:4860:4860::8888
#loopback
auto lo
iface lo inet loopback

#eth0
auto eth0
iface eth0 inet static
  address 192.168.1.100/24
  gateway 192.168.1.1
  dns-nameservers 192.168.1.1 8.8.8.8
  dns-search hoge.org
iface eth0 inet6 static
  address 2001:xxxx:xxxx:xxxx::100/128
  gateway fe80::1
  dns-nameservers fe80::1 2001:4860:4860::8888
  autoconf 0
  accept_ra 0

dns-*周りはresolvconfパッケージのmanを見ましょう。

IPv6 Enable/Disable

IPv6の有効化/無効化

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

0で有効化 1で無効化

DebianにMAC(強制アクセス制御)を導入する

目次

AppArmor

AppArmor - Debian Wiki

AppArmorインストール

# apt install apparmor apparmor-utils apparmor-profiles apparmor-profiles-extra auditd

AppArmorの有効化

# mkdir -p /etc/default/grub.d
# echo 'GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT apparmor=1 security=apparmor"' \
  | tee /etc/default/grub.d/apparmor.cfg
# update-grub
# reboot

プロファイルの有効化

# cd /usr/share/doc/apparmor-profiles/extras
# cp -i *.* /etc/apparmor.d/
# for f in *.* ; do aa-enforce /etc/apparmor.d/$f; done
# systemctl reload apparmor

SELinux

SELinux - Debian Wiki Debian StretchにSELinuxを入れる

SELinuxのインストール

# apt install selinux-basics selinux-policy-default auditd

SELinuxの有効化

# selinux-activate
# reboot
この後、再起動を2回繰り返すので待ちましょう。

確認

正常にインストールされているか確認します。

# sestatus
SELinux status:             enabled
SELinuxfs mount:            /sys/fs/selinux
SELinux root directory:     /etc/selinux
Loaded policy name:         default
Current mode:               permissive
Mode from config file:      permissive
Policy MLS status:          enabled
Policy deny_unknown status: allowed
Max kernel policy version:  30

TOMOYO Linux

DebianにTOMOYO Linuxをインストールする

そのうち書きます。

DebianでAMD CPUのマイクロコードをアップデートする

amd-microcodeというパッケージをAPTで追加するだけです。 (Intel CPUの場合はintel-microcode)

BackPortsの追加

/etc/apt/sources.list.d/backports.list

deb http://ftp.debian.org/debianstretch-backports main contrib non-free

インストール

# apt update
# apt install -t stretch-backports amd-microcode

インストール中、ファームウェアが足りない旨の警告文が表示されますが、無視して問題ないです。

Spectre/Meltdown脆弱性のチェック

sprectre-meltdown-checkerで、Spectre/Meltdown攻撃に脆弱であるか確認できます。 インストール

# apt install -t stretch-backports sprectre-meltdown-checker

以下のコマンドで確認出来ます。

# spectre-meltdown-checker --paranoid ; echo $?

STATUS: NOT VULNERABLEと表示されていれば大丈夫なようです。

参考

Firmware Security and Updates - Whonix

Certbot&Cloudflareな環境でLet'sEncryptの自動更新

mydns.jpの使用をやめてCloudFlareへ移行した。
certbot-dns-cloudflareというCertbot公式プラグインを使用することで、CloudFlare利用者は簡単に証明書の発行と更新が出来る。
ってことでやってみる。
OSはDebianStretchを使っている。

APT

# vi /etc/apt/source.list.d/backports.list
	deb http://ftp.debian.org/debian stretch-backports main
# apt update
# apt install -t stretch-backports certbot python3-certbot-dns-cloudflare

backportsについてはこちらを参考に
https://backports.debian.org/Instructions/

準備

certbot-dns-cloudflareはCloudFlareのAPIキーを必要とするので用意する。
CloudFlareのMy ProfileにAPI Keysという項目がある。
今回必要なのはGlobal API Keyなので、右側のViewをクリック、パスワードを入力したら取得できる。

以下の手順で資格情報を書いたファイルを作成する。

# mkdir /root/.cloudflare
# chmod 700 /root/.cloudflare
# vi /root/.cloudflare/credentials
	dns_cloudflare_email=CFで使っているEmail
	dns_cloudflare_api_key=Global APIキー
# chmod 600 /root/.cloudflare/credentials

証明書の発行

certbot certonly \
 --dns-cloudflare \
 --dns-cloudflare-credentials /root/.cloudflare/credentials \
 --dns-cloudflare-propagation-seconds 20 \
 -d example.com \
 -m root@example.com \
 --agree-tos \
 --manual-public-ip-logging-ok \
 --dry-run
    • dns-cloudflare-credentialsには先程作成した資格情報ファイルを指定する。
    • dns-cloudflare-propagation-secondsはCFへDNS情報を設定した後何秒待つか。

その他のオプションは適宜設定する。
実際に発行するには--dry-runを外すこと。

更新

certbot renew 

renew時のオプションはこちらを参考に
コマンド解説 - Let's Encrypt 総合ポータル

    • post-hookと--renew-hookの違いはこういう事らしいです。

certbot の renew hook について - @znz blog

cron

# crontab -e
0 4 * * * certbot renew -q --renew-hook "systemctl restart postfix" --renew-hook "systemctl restart dovecot"

終わり