Apache
Oct 05, 2009
SSL証明書でクライアント認証をする
Apacheを使ってSSL証明書を使ってクライアント認証の実験をした。
まず次のものを用意する。
- CA証明書
- サーバSSL証明書 (PEMとKeyファイル)
- クライアント証明書 (PKCS12)
一々手で用意するのも面倒なので TinyCA を使って作成した。TinyCAの使い方は省略。
クライアント証明書認証の概念をおおざっぱに説明すると サーバ側にクライアント証明書を見せて、サーバが証明書が正しい(CAに署名されている)ことを確認して、接続を許可するという流れになる。通常のSSL接続の設定に比べると、サーバ側にCA証明書の設定が必要になる。
サーバSSL証明書の設定
まずは通常のApache+SSLの設定をする。あまり詳細な説明はしない。他を参照すること。mod_sslを導入した上で設定ファイルを書く。この時点でPEMとKeyファイルをサーバにコピーした上で設定が必要となる。
SSLCertificateFile /etc/ssl/apache/ssl-cert-ssltest.pem SSLCertificateKeyFile /etc/ssl/apache/ssl-cert-ssltest.der
この時点でブラウザで接続すると通常は証明書が信頼できない云々のエラーが出る。そこでブラウザ側にCA証明書をインストールする。手順は略。ただし、この手順はセキュリティ的には書いてあったからそのままやるとか思ってると将来大変なことになるので注意。
この状態で接続するとSSL証明書に関するエラーは出なくなる。
クライアント証明書の設定
サーバ側にCA証明書をコピーする。これをApacheに設定した上でSSL証明書接続を要求する設定も追加する。
SSLCACertificateFile /etc/ssl/apache/SSLTESTCA-cacert.pem SSLVerifyClient require
この状態で接続しようとしても接続できないことを確認する。
次にクライアント証明書をブラウザ側でインポートする。そのあと接続するとクライアント証明書を提示することの確認などがされて無事接続される。
環境変数のSSL_CLIENT_S_DN_CNに CommonName が入っている。これを利用してユーザーの確認をすればいい。
Jul 13, 2009
手元でdjangoをwsgiで動かす
手元のPCでまともにDNSを動かしているわけではないのでちょっと工夫。
apacheを工夫というよりDNS(unbound)の工夫だな。
unbound.confに以下を追加。
local-zone: "local." static
local-data: "django.local. IN A 127.0.0.1"
とやりまして、django.localに対してVirtualHostを設定するという流れ。
Apacheのほうはwsgiを設定するところの肝心なところだけ再掲。
Alias /media "/usr/share/pyshared/django/contrib/admin/media"
<Directory "/usr/share/pyshared/django/contrib/admin/media">
Order allow,deny
Options Indexes
Allow from all
IndexOptions FancyIndexing
</Directory>
WSGIScriptAlias / "/home/takaki/src/django/myproject/apache/django_app.wsgi"
<Directory "/home/takaki/src/django/myproject/apache/django_app.wsgi">
Allow from all
</Directory>
Jan 25, 2009
fail2banでtrackback spamを切る話の続き
正引きできないものはしゃーないのさ。
ApacheのログをIPで取るものと二つ取ることにした。次のようなもの apahceの設定に追加。combinedの%hを%aに変更。
CustomLog /var/log/apache2/ip-access.log "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
こっちのファイルをもとにbanするように設定。順調にbanしている。
Dec 09, 2008
mod_rewrite使っているときのDoS対処
DoSでうざいので普通にDenyしていたんだが十分ではなかった。
RewriteCond %{REMOTE_HOST} .*\.svservers\.com$
RewriteRule ^/.* - [F]
Sep 11, 2008
GeoIPで国外を叩き出す方法
join_formへのスパムがうざいので。
日本以外は叩き出すことにする。
<Location /join_form>
GeoIPEnable On
SetEnvIf GEOIP_COUNTRY_CODE JP AllowCountry
Deny from all
Allow from env=AllowCountry
</Location>

