-
OpenVPNファイアウォール設定
# OpenVPNファイアウォール設定 iptables -I INPUT 16 -p udp --dport 1194 -j ACCEPT service iptables save
# 設定内容の確認 # フィルタリングの確認(-t filter省略) iptables -L --line-numbers -n -v # アドレス変換の確認(-t nat) iptables -L -t nat --line-numbers -n -v
この設定ではiPhone5sからVPNサーバに接続できても
各サーバにPingが飛ばせませんでした。
どこか設定をミスしているのかも。
以下の設定を追加してみても変化なし。iptables -t nat -I POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to 192.168.11.30 service iptables save
「/var/log/message」を確認するとiPhone5sからLZOのエラーが出ていたので、
そこを改善すれば直るのかは確認中です。
【VPNサーバ】OpenVPN設定(クライアント用)
-
OpenVPN設定(クライアント側パスワード有)
iPhone以外でパスワード有りでログインする場合、こっちを選択。# クライアント用の証明書作成 cd /etc/openvpn/easyrsa3/ ./easyrsa build-client-full クライアント名
下記内容を入力 Enter PEM pass phrase:クライアント用パスワードを入力 Verifying - Enter PEM pass phrase:クライアント用パスワードを入力 Enter pass phrase for /etc/openvpn/easyrsa3/pki/private/ca.key:CA秘密鍵のパスワードを入力
-
OpenVPN設定(クライアント側パスワード無)
iPhoneやパスワード無しでログインする場合、こっちを選択。# クライアント用の証明書作成 cd /etc/openvpn/easyrsa3/ ./easyrsa build-client-full クライアント名 nopass
下記内容を入力 Enter pass phrase for /etc/openvpn/easyrsa3/pki/private/ca.key:CA秘密鍵のパスワードを入力
-
iPhone用のOpenVPN設定
WindowsのOpenVPNクライアントをインストールし、
インストール後、「インストールディレクトリ/OpenVPN/sample-config/client.ovpn」を編集する。
iPhone用は設定値のみとし、#のコメントも削除する。下記内容を確認/追加/変更 # TLSクライアントを指定 tls-client # VPNインターフェースとしてtunデバイスを指定 dev tun # プロトコルとしてudp proto udp # サーバ名とポートを指定 remote z-area.net 1194 # 名前解決試みのリトライ数(無限) resolv-retry infinite # ローカルポートをバインドしない nobind # 再接続時に鍵読み込み、tunデバイスオープン persist-key persist-tun # Man-in-the-Middle攻撃対策 remote-cert-tls server # LZO圧縮を利用 comp-lzo # OpenVPNのログ設定 verb 3 # 鍵の設定と思われるがいまいち不明 # しかしこの記述がないと接続できなかった key-direction 1
-
iPhone用の秘密鍵の変換
「X509」というエラーが出いてた場合、
iPhoneのOpenVPNクライアントアプリのTLS/SSLがPolarSSLを利用している場合があり、
OpenSSLと秘密鍵のフォーマットが異なり、接続できないことがある。
そこで以下のコマンドで秘密鍵を変換する。openssl rsa -in /etc/openvpn/easyrsa3/pki/private/クライアント名.key -out /etc/openvpn/easyrsa3/pki/private/クライアント名.key.polarssl
【VPNサーバ】OpenVPN設定
-
OpenVPN設定
# OpenVPN設定ファイルをOpenVPN設定ファイル格納ディレクトリへコピー cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn/ # OpenVPN設定ファイルを編集 vi /etc/openvpn/server.conf
下記内容を確認/追加/変更 # VPNインターフェースとしてtunデバイスを指定 dev tun # プロトコルとしてudp、ポートは1194を指定 proto udp port 1194 # 認証局証明書、サーバー証明書、サーバー秘密鍵のファイルパスを指定 # 配置場所を変更している場合、変更する ca ca.crt cert server.crt key server.key # DHパラメータファイルのパスを指定 # 配置場所を変更している場合、変更する dh dh.pem # VPNクライアント割当てアドレス範囲として10.8.0.0/24を指定(デフォルト) server 10.8.0.0 255.255.255.0 # LAN(例:192.168.1.0/24)へのルートをVPNサーバー経由にする ;push "route 192.168.10.0 255.255.255.0" ;push "route 192.168.20.0 255.255.255.0" push "route 192.168.11.0 255.255.255.0" # TLS認証有効化(行頭の;を削除し、コメント解除) tls-auth ta.key 0 # This file is secret # OpenVPN実行権限を下げる(行頭の;を削除し、コメント解除) user nobody group nobody # 起動時に鍵読み込み、tunデバイスオープン persist-key persist-tun # ログの設定 status /var/log/openvpn-status.log log-append /var/log/openvpn.log verb 3 # LZO圧縮を利用 comp-lzo # OpenVPNクライアントのIP固定設定を利用しない # 利用する場合、行頭の;を削除 ;client-config-dir ccd # 管理インタフェースの有効化(最終行に追加) # 証明書廃止リストの有効化(最終行に追加) management localhost 7505 crl-verify crl.pem # OpenVPN経由でSambaへのアクセスがエラーになる場合、最終行に追加 fragment 1280 mssfix 1280 link-mtu 1400
-
OpenVPN起動時実行スクリプト作成
# OpenVPN起動時実行スクリプト作成 vi /etc/openvpn/openvpn-startup
#!/bin/bash # VPN用のiptablesルール削除スクリプト実行(初期化) /etc/openvpn/openvpn-shutdown # VPNサーバーからの送信を許可 iptables -I OUTPUT -o tun+ -j ACCEPT iptables -I FORWARD -o tun+ -j ACCEPT # VPNクライアントからVPNサーバーへのアクセスを許可 iptables -I INPUT -i tun+ -j ACCEPT # VPNクライアントからLANへのアクセスを許可 # VPNクライアントから192.168.11.0/24へのアクセスを許可する場合、 # 192.168.11.0/24側のファイアウォール等でVPNクライアント(10.8.0.0/24)からのアクセスを許可すること iptables -I FORWARD -i tun+ -d 192.168.11.0/24 -j ACCEPT
# OpenVPN起動時実行スクリプトへ実行権限付加 chmod +x /etc/openvpn/openvpn-startup
-
OpenVPN停止時実行スクリプト新規作成
# OpenVPN停止時実行スクリプト新規作成 vi /etc/openvpn/openvpn-shutdown
#!/bin/bash # VPNインタフェース(tun+)用iptablesルール削除関数 delete() { rule_number=`iptables -L $target --line-numbers -n -v|grep tun.|awk '{print $1}'|sort -r` for num in $rule_number do iptables -D $target $num done } # VPNインタフェース(tun+)用iptables受信ルール削除 target='INPUT' delete # VPNインタフェース(tun+)用iptables転送ルール削除 target='FORWARD' delete # VPNインタフェース(tun+)用iptables送信ルール削除 target='OUTPUT' delete
# OpenVPN停止時実行スクリプトへ実行権限付加 chmod +x /etc/openvpn/openvpn-shutdown
-
OpenVPNログローテーション設定
# OpenVPNログローテーション設定ファイル新規作成 vi /etc/logrotate.d/openvpn
/var/log/openvpn.log { missingok notifempty sharedscripts postrotate systemctl restart openvpn 2>&1 > /dev/null || true endscript }
-
OpenVPN起動スクリプト変更
# OpenVPN起動スクリプト変更 vi /etc/rc.d/init.d/openvpn
下記内容を変更 # 行頭の#を削除し、コメント解除 # パケット転送を有効化する echo 1 > /proc/sys/net/ipv4/ip_forward
【VPNサーバ】OpenVPN導入
RaspberryPiがとうとう壊れしまったので、
NUCにOpenVPNを導入します。
導入はrootユーザで実施します。
-
OpenVPN導入
cd /usr/local/src # OpenVPNインストールに必要なパッケージをインストール yum -y install openssl-devel lzo-devel pam-devel # 最新の OpenVPN をダウンロードしてビルド # 最新版は公式サイトで確認 wget http://swupdate.openvpn.org/community/releases/openvpn-2.3.10.tar.gz rpmbuild -tb --clean openvpn-2.3.10.tar.gz yum -y localinstall ~/rpmbuild/RPMS/x86_64/openvpn-2.3.10-1.x86_64.rpm rm -f ~/rpmbuild/RPMS/x86_64/openvpn-* rm -f openvpn-2.3.10.tar.gz
# easyrsa をダウンロードして解凍 # OpenVPNをインストールするとOpenSSLを簡単に利用できるツール「easy-rsa」が # 「/usr/share/doc/openvpn/examples/easy-rsa/2.0」にインストールされるが、 # 最新版の3.0をダウンロードします。 wget https://github.com/OpenVPN/easy-rsa/archive/master.zip unzip master.zip cp -r easy-rsa-master/easyrsa3/ /etc/openvpn/ rm -rf easy-rsa-master/ rm -f master.zip
-
証明書初期化(OpenVPN導入後の1回のみ)
cd /etc/openvpn/easyrsa3/ ./easyrsa init-pki
-
CA証明書と秘密鍵作成
./easyrsa build-ca
下記内容を入力 Enter PEM pass phrase:任意のパスワードを入力 Verifying - Enter PEM pass phrase:任意のパスワードを再入力 Common Name (eg: your user, host, or server name) [Easy-RSA CA]:z-area.net
# CA証明書をOpenVPN設定ファイル格納ディレクトリへコピー cp pki/ca.crt /etc/openvpn/ # CA秘密鍵は以降のサーバ証明書・秘密鍵作成時、クライアント証明書・秘密鍵作成時のみ使用するため、コピー不要
-
サーバ証明書と秘密鍵作成
./easyrsa build-server-full server nopass
下記内容を入力 Enter pass phrase for /etc/openvpn/easyrsa3/pki/private/ca.key:CA秘密鍵のパスワードを入力
# サーバ証明書をOpenVPN設定ファイル格納ディレクトリへコピー cp pki/issued/server.crt /etc/openvpn/ # サーバ秘密鍵をOpenVPN設定ファイル格納ディレクトリへコピー cp pki/private/server.key /etc/openvpn/
-
DH(Diffie Hellman)パラメータ作成
# DHパラメータ作成 ./easyrsa gen-dh # DHパラメータをOpenVPN設定ファイル格納ディレクトリへコピー cp pki/dh.pem /etc/openvpn/
-
証明書廃止リスト作成
証明書廃止リストは、実際にクライアント証明書を
作成してから廃止を行わないと作成できないので、
ダミーのクライアント証明書を一旦、作成と廃止することにより、
証明書廃止リストを作成する# ダミーのクライアント証明書作成 ./easyrsa build-client-full dmy nopass
下記内容を入力 Enter pass phrase for /etc/openvpn/easyrsa3/pki/private/ca.key:CA秘密鍵のパスワードを入力
# ダミーのクライアント証明書廃止 ./easyrsa revoke dmy
下記内容を入力 Continue with revocation:yes Enter pass phrase for /etc/openvpn/easyrsa3/pki/private/ca.key:CA秘密鍵のパスワードを入力
# 証明書廃止リストを作成 ./easyrsa gen-crl
下記内容を入力 Enter pass phrase for /etc/openvpn/easyrsa3/pki/private/ca.key:CA秘密鍵のパスワードを入力
# 証明書廃止リストをOpenVPN設定ファイル格納ディレクトリへコピー cp pki/crl.pem /etc/openvpn/ # 証明書廃止リストへ参照権限付加 chmod o+r /etc/openvpn/crl.pem
-
TLS認証鍵作成
# TLS認証鍵作成 openvpn --genkey --secret /etc/openvpn/ta.key
IT単語覚書
-
HTTP
HTMLなどのコンテンツデータをサーバ・クライアント間でやり取りするプロトコルのこと。 -
HTTPS
HTTPのURIスキームの1つ。
厳密にはプロトコルではなく、SSL/TLSプロトコルによって提供されるセキュアなHTTP通信。
別名はHTTP Over SSL/TLSという。 -
SSL/TLS
暗号化を提供するプロトコル。
SSLの方が良く聞くが、SSLはTLSの旧名称。
通信内容の暗号化と通信相手の証明を行う。
HTTP専用ではなく、様々なアプリケーション層のプロトコルに利用でき、
HTTPS(HTTP Over SSL/TLS)だけではなく、
FTPS(FTP over SSL/TLS)、POP over SSL/TLS、IMAP over SSL/TLS、SMTP over SSL/TLSなどがある。 -
URIスキーム
一定の書式によってリソースを指し示す識別子。
URLの考え方を拡張したもの。
httpやhttpsやftpなどのスキームで始まり、
コロン(:)による区切りの後にスキームごとに定義された書式によってリソースを示す。
【FireFox】【Poster】リクエスト送信テスト
FireFoxのPosterと呼ばれるアドオンを利用し、
リクエスト送信のテストをしてみました。
-
サーブレット
サーブレットはTestParamプロジェクトとして定義しておきます。
TestServletはTestというサーブレットマッピング名として定義しておきます。public class TestServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // リクエストの設定 request.setCharacterEncoding("UTF-8"); // ヘッダ部の取得 StringBuffer head = new StringBuffer(); Enumeration<String> headernames = request.getHeaderNames(); while (headernames.hasMoreElements()) { String name = headernames.nextElement(); Enumeration<String> headervals = request.getHeaders(name); while (headervals.hasMoreElements()) { String val = headervals.nextElement(); head.append(name); head.append(":"); head.append(val); head.append("\n"); } // ボディー部の取得 // メモ:Tomcatではrequest.getParameterとgetReaderが同時に使えない。 BufferedReader bufferReaderBody = new BufferedReader(request.getReader()); String body = bufferReaderBody.readLine(); // レスポンスの設定 response.setCharacterEncoding("UTF-8"); response.setContentType("text/hmtl"); // response.setContentType("application/json"); // ヘッダ部とボディー部の出力 PrintWriter out = response.getWriter(); out.println(head.toString()); out.println(body); } }
-
Poster
Request-URL:http://localhost:8080/TestJson/Test
Parametersタブ:Nameにtest、Valueにあいうえおを設定し、
Add/Changeボタンを押下する。
Content to Sendタブ:Body from Parametersボタンを押下する。
POSTボタンを押下する。サーブレットがJSONの読み取りに対応していれば、
ParametersタブのValueに以下を指定すると、JSONをリクエストで飛ばしたことになる。
{“name”: “John Smith”, “age”: 33}
【Excel】日付からの曜日の自動算出
WBSで日付と曜日を表現することが多いですが、
日付をユーザ定義の「d」を設定。
曜日を数式の「TEXT(日付セル,”aaa”)」にすると使いやすいです。
【JSP】ボタンでリンクと同じ動作を行う
ボタン押下時にリンク押下時と同じ動作を行う。
<input type="button" value="メニュー画面へ" onclick="location.href='Menu.jsp'" class="btn btn-default">
class属性はbootstrapの指定方法のひとつ。
ボタンを無地のデフォルトにします。
【JSP】ボタンやリンクからフォームのアクションを動的に変更しSubmit
ボタンやリンク押下時に
フォームのaction先をJavaScriptで設定し、submitする。
-
ボタンの場合
<head> <script type="text/javascript"> function exec(){ document.form1.value = 'ACTION001' document.form1.submit(); } </script> </head>
<form action="" method="POST" name="form1"> <input type="button" value="ボタン1" onClick="exec()" /> </form>
-
リンクの場合
<head> <script type="text/javascript"> function exec(){ document.form1.value = 'ACTION001' document.form1.submit(); } </script> </head>
<form action="" method="POST" name="form1"> <a href="javascript:void(0)" onClick="exec()">リンク1</a> </form>
hrefに「javascript:void(0)」を指定しないと、
ルート(http://localhost:8080/コンテキスト)にアクセスする。
【Eclipse】動的Webプロジェクトでのプロパティファイル読込
動的Webプロジェクトのプロパティファイル読込で
以下のように処理を書いてみました。
prop.load(new FileInputStream("hoge.properties"));
プロパティファイルをプロジェクト直下、クラスパス直下、パッケージ直下においてみましたが、
いずれも実行時にエラーになりました。
解決策として以下の通りにしました。
プロパティファイルは「WEB-INF/src」直下に配置し、
「WEB-INF/class」に自動コピーされるので、
以下のように処理を変更しました。
prop.load(this.getClass().getResourceAsStream("/hoge.properties"));