2011年9月13日火曜日

mii-tool と ethtool

Linuxでネットワークインターフェースの状況を確認するときに使えるコマンド。

mii-tool

$ man mii-tool
NAME
        mii-tool - view, manipulate media-independent interface status
(略)

指定したインターフェース(et0, eth1 など)の状況を表示する。-wオプションを使うとlink status の変化を検出してくれる。たとえば、VMWareなどのゲストOS上で実験すると面白い。

仮想スイッチに接続したゲストOSで mii-tool -w を実行してみる

VMWare Fusion on Mac OS 10.6.8 にインストールしたゲストOS(CentOS-6.0)で eth1に対して mii-tool -wを実行。

仮想ネットワークの設定を開く。

「接続」のチェックボックスをオフにする。これで、仮想的にネットワークケーブルを抜いた状態になる。

すると、mii-tool の出力が変化してno linkになる。

「接続」のチェックボックスをオンに戻すと、もとに戻る。

このように mii-tool は楽しいのだが、obsoleteであるからなるべく使わないほうがよいらしい(その代わりにethtoolを使う)。

ethtool

$ man ethtool
NAME
        ethtool - Display or change ethernet card settings
(略)

ethtool は mii-tool に比べると多機能でオプションが多いので、とりあえずNICの状態を調べる。

# ethtool eth1
Settings for eth1:
 Supported ports: [ TP ]
 Supported link modes:   10baseT/Half 10baseT/Full 
                         100baseT/Half 100baseT/Full 
                         1000baseT/Full 
 Supports auto-negotiation: Yes
 Advertised link modes:  10baseT/Half 10baseT/Full 
                         100baseT/Half 100baseT/Full 
                         1000baseT/Full 
 Advertised pause frame use: No
 Advertised auto-negotiation: Yes
 Speed: 1000Mb/s
 Duplex: Full
 Port: Twisted Pair
 PHYAD: 0
 Transceiver: internal
 Auto-negotiation: on
 MDI-X: Unknown
 Supports Wake-on: d
 Wake-on: d
 Current message level: 0x00000007 (7)
 Link detected: yes

上述の mii-tool -w のようにケーブルの状態をチェックするなら、たとえば watchと組み合わせて

# watch -n 1 "ethtool eth1|grep 'Link detected'"

とすれば間に合う(下の画像のように表示される)。

2011年9月8日木曜日

yum groupinstall ほか

yumのパッケージを複数まとめたもの、つまり「パッケージグループ」をインストールするためのコマンドが yum groupinstall

メール、DNS、WWW等のサーバー用Linuxに、後になってデスクトップ環境を入れようとすると大量のパッケージを追加インストールしなければならないのだが、そういった場合に役にたつ。

そして、パッケージグループ関連のコマンドは、groupinstallのほかにも

  • grouplist
  • groupinfo
  • groupupdate
  • groupremove

…等がある。

yum grouplist の例

# yum grouplist
Loaded plugins: fastestmirror
Setting up Group Process
Loading mirror speeds from cached hostfile
 * base: mirror.khlug.org
 * extras: data.nicehosting.co.kr
 * updates: data.nicehosting.co.kr
Installed Groups:
   Additional Development
   Arabic Support
(略)
   Web Server
Available Groups:
   Afrikaans Support
   Albanian Support
(略)
   iSCSI Storage Client
Done

yum groupinfo の例

# yum groupinfo Desktop
Loaded plugins: fastestmirror
Setting up Group Process
Loading mirror speeds from cached hostfile
 * base: mirror.khlug.org
 * extras: data.nicehosting.co.kr
 * updates: data.nicehosting.co.kr

Group: Desktop
 Description: A minimal desktop that can also be used as a thin client.
 Mandatory Packages:
   NetworkManager
   NetworkManager-gnome
   alsa-plugins-pulseaudio
(略)
 Default Packages:
   eog
   gdm-plugin-fingerprint
(略)
 Optional Packages:
   control-center-extra
   sabayon-apply
   tigervnc-server
   xguest

2011年9月3日土曜日

Linux の /proc/crypto

/proc/crypto を見ると、Linuxカーネルがどのような暗号化アルゴリズム(cryptographic cipher)を使用しているかがわかる、という話


/proc/crypto の例

CentOS-6.0 で /proc/crypto を見てみた。

# cat /proc/crypto
name         : xts(aes)
driver       : xts(aes-asm)
module       : kernel
priority     : 200
refcnt       : 1
selftest     : passed
type         : givcipher
async        : no
blocksize    : 16
min keysize  : 32
max keysize  : 64
ivsize       : 16
geniv        : eseqiv
(略)

name だけ grep してみた。

# grep '^name' /proc/crypto
name         : xts(aes)
name         : xts(aes)
name         : sha256
name         : sha224
name         : cbc(aes)
name         : cbc(aes)
name         : aes
name         : aes
name         : stdrng
name         : crc32c
name         : sha1
name         : md5

暗号化モジュールをロードしてみる

カーネルが使用できる暗号を追加したい場合は、該当するモジュールをロードしてやればいい(modprobe 等のコマンドを使う)。

例:blowfish暗号を追加

# modprobe blowfish

lsmod, modinfoで、ロードされたモジュールを確認。

# lsmod |grep blowfish
blowfish                7850  0 

# modinfo blowfish
filename:       /lib/modules/2.6.32-71.29.1.el6.x86_64/kernel/crypto/blowfish.ko
description:    Blowfish Cipher Algorithm
license:        GPL
srcversion:     3D0BFB5C93D66CBA1C92FA2
depends:        
vermagic:       2.6.32-71.29.1.el6.x86_64 SMP mod_unload modversions 

/proc/crypto も確認。

cat /proc/crypto
name         : blowfish
driver       : blowfish-generic
module       : blowfish
priority     : 0
refcnt       : 1
selftest     : passed
type         : cipher
blocksize    : 8
min keysize  : 4
max keysize  : 56
(略)

dm-crypt での例

dm-crypt は、ディスク暗号化のための仕組み(a device-mapper crypto target)。dm-crypt を使用すると、/proc/crypto の内容が変化する。つまり、 dm-crypt が Linuxカーネルの暗号化モジュールを利用している、ということが分かる。

テキトーにdm-cryptを使って暗号化してみる

/dev/sdc1 を blowfish の CTRモード で暗号化して mapping01 にマップ。

# cryptsetup create -y -c blowfish-ctr-plain mapping01 /dev/sdc1

/proc/crypto を見てみる。

# cat /proc/crypto
name         : ctr(blowfish)
driver       : ctr(blowfish-generic)
module       : kernel
priority     : 0
refcnt       : 2
selftest     : passed
type         : givcipher
async        : yes
blocksize    : 1
min keysize  : 4
max keysize  : 56
ivsize       : 8
geniv        : chainiv

name         : ctr(blowfish)
driver       : ctr(blowfish-generic)
module       : ctr
priority     : 0
refcnt       : 2
selftest     : passed
type         : blkcipher
blocksize    : 1
min keysize  : 4
max keysize  : 56
ivsize       : 8
geniv        : chainiv

name         : blowfish
driver       : blowfish-generic
module       : blowfish
priority     : 0
refcnt       : 2
selftest     : passed
type         : cipher
blocksize    : 8
min keysize  : 4
max keysize  : 56
(略)

…というように、CTR とか blowfish のモジュールがロードされたのが分かる。

なお、 dm-crypt に関しては、なるべくデフォルトの暗号化アルゴリズムとモードを使ったほうがよいようだ。というのは、2011-06-28頃のメーリングリストでそのように主張されていたから(AES + CBCモード + ESSIV を使いましょう、とのこと)。


2011年9月1日木曜日

openssl の s_client -sess_out と sess_id

-sess_outsess_id が便利だったのでメモ。


openssl s_client コマンド

openssls_clientは、サーバーとのSSL通信を確認するためのコマンド。いろいろな場面で応用できる。


-sess_out オプション

-sess_out を使うと、openssl s_client の結果(SSLセッション情報)をファイルに記録することができる。

$ openssl s_client -connect smtp.gmail.com:587 -starttls smtp -sess_out sess_out.txt

上の例では、sess_out.txtに記録される(鍵の情報が含まれているので、扱いには要注意)。

$ cat sess_out.txt
-----BEGIN SSL SESSION PARAMETERS-----
MIIEdQIBAQICAwEEAgAFBCCiljn8yfXmDAlDzxlv53HgKo02ds87ncxERAAfYxf2
(略)
-----END SSL SESSION PARAMETERS-----

ただし、cat で表示してみると分かるように、PEMエンコードされているためそのままでは読めない。


openssl sess_id コマンド

SSLセッション情報を解読するためのコマンドとして、openssl sess_id が提供されている。

$ openssl sess_id -text -noout -in sess_out.txt
SSL-Session:
    Protocol  : TLSv1
    Cipher    : 0005
    Session-ID: A29639FCC9F5E60C0943CF196FE771E02A8D3676CF3B9DCC4444001F6317F68E
    Session-ID-ctx:
    Master-Key: 0FF83FC108F7A09BD6E9D76CD707804B6DFCCA3520EA13574B42EE40E21718D651432D79645AB91DAF2937D9373D1F97
    Key-Arg   : None
    Krb5 Principal: None
(略)
    Start Time: 1314886612
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)

上の例のように、Protocol, Cipher, Session-ID, Master-Keyなど、SSLセッションを特徴づけるデータが分かる。

このコマンドのオプションは man sess_id で確認ができる。