OpenVPN&セキュリティ情報
2011-12-07
sqlite authentication plug-in for OpenVPN
この記事はこちらの記事の簡易英語版です
This is an authentication plug-in for OpenVPN. It uses sqlite database for ID/Password authentication. It is python script, so you can modify this script as necessary.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED.
Usage
Setting up the credentials database
You have to create sqlite database that stores the login credentials. In the sample database, there is a table that is called "Users". This table contains "UserId" field, "Password" field and "Active" field. You can modifyauth-sqlite.py
script to use other table and/or fields.UserId | Password ※ | Active |
---|---|---|
gonbe | naisho#0023 | 1 |
jdoe | Da-reMO_shiRANA1 | 1 |
haruka | QueenS#1*2 | 1 |
hide | monkey%55! | 0 |
- You need to store the hashed password instead of plain password. We use RIPEMD160 as message digest algorithm.
Place the plug-in script and database file
Placeauth-sqlite.py
and vpnusers.db
(you may change the filename) in the appropriate directory. Usually you can place it in /etc/openvpn
. Make sure this script has a execute permission.Edit the server configuration file
Add these directives to your OpenVPN server configuration file. You may removeclient-cert-not-required
directive.script-security 2 client-cert-not-required username-as-common-name setenv auth_sqlite_db /etc/openvpn/vpnusers.db auth-user-pass-verify /etc/openvpn/auth-sqlite.py via-filePlease change the path in
setenv
directive and auth-user-pass-verify
directive as needed.
Connect
Try to connect to the server. Before you connect to the server, you have to addauth-user-pass
directive to your client configuration file. You can use vpnux Connector Lite as OpenVPN client.Source code : auth-sqlite.py
#!/usr/bin/python import os import sys import hashlib try: import sqlite3 except: from pysqlite2 import dbapi2 as sqlite3 ## Read settings from config sqlite_file = os.environ["auth_sqlite_db"] print "[auth-sqlite] sqlite_file : " + sqlite_file ## Read username and password from via-file filename = sys.argv[1] print "[auth-sqlite] filename : " + filename fp = open(filename) data = fp.readlines() fp.close() username = data[0].rstrip() password = data[1].rstrip() print "[auth-sqlite] username : " + username print "[auth-sqlite] password : " + password h = hashlib.new("ripemd160") h.update(password) hashedPassword = h.hexdigest() print "[auth-sqlite] hashedPassword : " + hashedPassword ## Connect and fetch from database vals = (username, hashedPassword) conn = sqlite3.connect(sqlite_file) cur = conn.cursor() cur.execute('SELECT count(*) FROM Users WHERE UserId = ? AND Password = ? AND Active = 1', vals) row = cur.fetchone(); targetRows = row[0] conn.close() print targetRows ## Return result if(targetRows == 1): print "[auth-sqlite] Authentication succeed." sys.exit(0) else: print "[auth-sqlite] Authentication failed." sys.exit(1) sys.exit(1)
Profile
- 山崎 太郎 (Taro Yamazaki)
- プラムシステムズ株式会社所属。 主にVPN(OpenVPN)やセキュリティ関連技術、Webアプリケーションを手がけています。
Page Views
Popular Posts
-
「VPNっていろいろあるけど、OpenVPNのメリットって何?」 という疑問は多くの方が持たれますよね。この点は公式サイトなどにもいろいろ書かれているのですが、実際に使ってきたユーザー側としてメリットと思う部分をまとめてみました。
-
現在ダウンロードできるOpenVPNでは、今まで認証局の構築で使用していたeasy-rsaが含まれなくなっています。 OpenVPN.netのダウンロードページ にも Note that easy-rsa is no longer bundled with OpenVPN...
-
Jan Just Keijser氏の記事「 Optimizing performance on gigabit networks 」については こちら でも概要を取り上げましたが、記事全体にいろいろなヒントが含まれていますので、全文の日本語訳を掲載しています。意訳している部分も...
-
OpenVPNでは、接続してきたクライアントのVPNアドレスは動的に割り振られます(その際に割り振られる際のアドレス範囲はOpenVPNサーバー側設定ファイルに基づきます)。特定のVPNクライアントに特定のVPNアドレスを割り振りたい場合、OpenVPNでは以下の2つの方法で設定...
-
では、いよいよiPhone構成ユーティリティでVoDの設定をしてみましょう。あ、 前の記事 での準備はきちんとやっておいてくださいね!
-
前回 は2つのワンタイムパスワードの生成方法について取り上げました。今回はいよいよ実際の生成アルゴリズムを取り上げましょう。TOTPをベースに説明します(ただ、前回も解説したように、基本的なロジックはTOTPとHOTPで同じです)。 参考としてpythonのコードも併記してみま...
-
現時点においてはマニュアルやHowToにも記載されていない(ChangeLogにちょっとだけ出てきます)あまり知られていない機能なのですが、「設定ファイルで鍵ファイルや証明書ファイルのパスを記載する」という通常の方法とは別に、「鍵ファイルや証明書ファイル内のデータをそのまま設定フ...
-
OpenVPNはLinuxをはじめとした幅広いプラットフォームで動作実績があるのが特徴の一つです。 今回は、最近の電子工作ブームでも話題のシングルボードPC 3機種をOpenVPNサーバーとしてセットアップし、OpenVPNのVPNパフォーマンスを測定してみましょう。 ...
-
前回 はワンタイムパスワードの基本的な仕組みについて説明しました。サーバー側とクライアント側で、それぞれ共通のルールに基づいてパスワードを生成させる必要があることを取り上げましたが、今回は OATH が規定しているその生成ルールについて具体的に説明します。 ワンタ...
-
OpenVPNを使用している方ならよくご存知だと思いますが、通常OpenVPNでは証明書認証を使用します。証明書認証はID/パスワード認証に比較すると安全性が高いとされます(もちろん、秘密鍵の管理方法に大きく依存します)が、証明書認証の概念を理解しにくいユーザーが秘密鍵や証明...
© yamata::memo 2013 . Powered by Bootstrap , WebLyb