「security」カテゴリーアーカイブ

FedoraのApacheにテスト用のSSL(自己署名証明書)を設定

Chromeに対応するためには、subjectAltNameを設定した自己署名証明書を作成する必要があります。
subjectAltNameが設定されていない証明書はChromeで NET::ERR_CERT_COMMON_NAME_INVALID エラーを参照してください。

あらかじめ用意されているテスト用の仮の鍵と証明書をバックアップする。

# cd /etc/pki/tls
# mv private/localhost.key private/localhost.key.bk
# mv certs/localhost.crt certs/localhost.crt.bk

サーバ鍵を作成する。

# openssl genrsa -out private/test.key 2048

これでパスフレーズなしのサーバ鍵が作成される。

テスト用に自己証明書を作成。

# openssl req -new -x509 -days 3650 -sha256 -key /etc/pki/tls/private/test.key -out /etc/pki/tls/certs/test.crt
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:JP
State or Province Name (full name) [Berkshire]:Tokyo
Locality Name (eg, city) [Newbury]:Chiyoda-ku
Organization Name (eg, company) [My Company Ltd]:Pistolfly Co., Ltd.
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:test.pistolfly.jp
Email Address []:webmaster@pistolfly.jp
# apachectl restart

あとは、/etc/httpd/conf.d/ssl.confにバーチャルホストを設定して、
・サーバ鍵と証明書のパス
・その他バーチャルホストの設定
を行う。

iptables

設定の確認

iptables -L

設定の削除

iptables -F

設定の保存

service iptables save

設定例

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i ! lo -d 127.0.0.0/8 -j REJECT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --sport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --sport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp --dport 143 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -j REJECT
iptables -A FORWARD -j REJECT

SSHで公開鍵認証を使う

1. ssh-keygen コマンドで鍵ペアを作成する

$ ssh-keygen -t rsa

秘密鍵の保存先を聞いてくるので、デフォルトのままEnter。
パスフレーズを2回入力。
すると、以下の鍵ペアのファイルが ~/.ssh/ に作成される。

  • id_rsa
  • id_rsa.pub

2. SSHサーバに公開鍵を登録する

ユーザのホームディレクトリに1.で作成した公開鍵を転送する。(FTPで転送してもよい。)

$ scp ~/.ssh/id_rsa.pub user@host:

サーバ側で、catコマンドとリダイレクションを使って転送した公開鍵を登録する。(登録するファイルは ~/.ssh/authorized_keys)

$ cat id_rsa.pub >> ~/.ssh/authorized_keys

「~/.ssh」ディレクトリと「~/.ssh/authorized_keys」はオーナーだけに読み書き可能なようにパーミッションを設定する。

$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys
  • クライアント側のユーザのホームディレクトリのパーミッションにも注意する。所有者以外の書込み権を設定してあるとだめ。
    たとえば、/home/hogeのパーミッションが777の場合、公開鍵認証でsshログインしようとすると、
    Permission denied (publickey,gssapi-with-mic).
    というエラーになる。この場合、サーバ側のログ(/var/log/secure)では
    Authentication refused: bad ownership or modes for directory /home/hoge
    となっていて、/hoem/hogeのパーミッションに問題があるということ。
    所有者以外の書込み権を設定してあるとだめ。700、711、755にすればOK。

3. 公開鍵認証方式でログインする

$ ssh -l user host

パスフレーズを聞いてくるので、ssh-keygenコマンドで指定したパスフレーズを入力する。
接続先サーバのパスワードではないことに注意

4. クライアント側の設定

id_rsa ファイルをクライアント側にコピーする。
例:
ユーザのホームディレクトリ\.ssh

  • 秘密鍵のパーミッションに注意。秘密鍵のパーミッションがopenすぎるとだめ。
    以下はmacosxでのエラーの例。

    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    @         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    Permissions 0640 for '/Users/xxx/.ssh/id_rsa' are too open.
    It is recommended that your private key files are NOT accessible by others.
    This private key will be ignored.
    bad permissions: ignore key: /Users/xxx/.ssh/id_rsa
    Permission denied (publickey,gssapi-with-mic).
    

    id_rsaを600にすればOK。

  • cwRsyncで公開鍵認証を使用する場合は、環境変数HOMEの下の「.ssh」(known_hostsファイルが作成されるディレクトリ)に秘密鍵ファイル(id_rsa)を置く。
    例:
    HOME=/home/pistolfly
    でcygwinがD:\cygwinの場合、
    D:\cygwin\home\.ssh
    に秘密鍵ファイルを置く。
    (rsyncの-eまたは--rshオプションのsshコマンドで-iオプションで秘密鍵のパスを指定してもよい。)

    rsyncしてパスフレーズの入力を促されたところ

    C:\sfprojects\reserve>symfony sync production
    >> exec      rsync --progress --dry-run -azC...s.net:/usr/local/share/reserve/
    Enter passphrase for key '/cygdrive/c/Documents and Settings/pistolfly/.ssh/id_r
    sa':
    
  • TeraTermでは、ログイン時に「RSA/DSA鍵を使う」を選択して、秘密鍵に上記ディレクトリの秘密鍵ファイルを指定して、秘密鍵のパスフレーズを入力する。

5. パスワード認証を許可しないようする

/etc/ssh/sshd_config (サーバ側) を編集する。

PasswordAuthentication yes

PasswordAuthentication no

にする。

rootのログインも禁止しておく。

PermitRootLogin no

root権限でsshdをreloadする。(rootでログインしたままで)

$ /etc/init.d/sshd reload

参考:
FedoraCore5ビギナーズバイブル11-2-2
最終回 セキュアなSSHサーバーを構築する:ITpro
リモート接続に SSH を使う
@IT:鍵交換方式のsshでアクセスするには