ラベル OpenVPN の投稿を表示しています。 すべての投稿を表示
ラベル OpenVPN の投稿を表示しています。 すべての投稿を表示

OpenVPNでINSECUREのWARNINGが出て接続できなくなった時の対処

ある日、マシンを再起動するとOpenVPNがサーバーと接続されてなかった。ログには次の記載があった。
WARNING: INSECURE cipher with block size less than 128 bit (64 bit).  This allows attacks like SWEET32.  Mitigate by using a --cipher with a larger block size (e.g. AES-256-CBC).
対処方法は、メッセージにある通り、ブロックサイズが128bit以上のcipherを用いること。例えば、以下をサーバーとクライアントのconfigに記載する。
cipher AES-256-GCM
参考
OpenVPNのクライアント用configファイル例

OpenVPNの再ネゴシエーション時間を変更する。

サーバーのconfにreneg-secを秒単位で追加。以下は、24時間の例。
reneg-sec 86400
クライアントのconfには、reneg-sec 0を追加する。
reneg-sec 0

Ubuntuで自動接続するOpenVPNのサーバを制限する。

デフォルトでは、/etc/openvpn以下にあるすべての.confファイルに対応するサーバに接続を行います。
これを特定のサーバだけと接続するには/etc/default/openvpnのAUTOSTARTに、それらのサーバを列挙します。
AUTOSTART="sv1 sv2"

CentOS 7でOpenVPNサーバの起動後にスクリプトを実行する。

confファイルに以下のように記述すると、OpenVPNサーバの起動後にそのスクリプトを実行できるが、デフォルトではそれが抑止されている。
up "/etc/openvpn/up.sh"
以下のように設定ファイルのExecStart行に--script-security 2を追加する。
# cat /etc/systemd/system/multi-user.target.wants/openvpn@.service
(省略)
ExecStart=/usr/sbin/openvpn --daemon --writepid /var/run/openvpn/%i.pid --cd /etc/openvpn/ --config %i.conf --script-security 2
最後に、systemdに設定ファイルを再読み込みさせる。
# systemctl daemon-reload

OpenVPNでクライアントに固定IPを設定する。

サーバのconfファイルにclient-config-dirを設定する。 例えば
client-config-dir client-config
上記のの場合、/etc/client-configというディレクトリを作成し、その中にクライアント名のファイルを配置する。

TUNの場合

クライアントclient01に192.168.10.25をアサインしたい場合、それをifconfig-pushの 第1引数にしてする。2引数には、サーバー側の仮想アドレスを指定。 それらに指定できる第4オクテットのペアは決まっている。このページの"Each pair of ifconfig-push addresses represent"で始まる節を参照。
$ cat /etc/client-config/client01
ifconfig-push 192.168.10.25 192.168.10.26

TAPの場合

2番目の引数には、ネットマスクを指定。
$ cat /etc/client-config/client01
ifconfig-push 192.168.10.25 255.255.255.0

OpenVPNのクライアント用configファイル例

ブリッジ(Tap)接続の例。
# client側ではclientと記述
client

# L3接続ならtun, L2接続ならtap
dev tap

# 通常はudpでいい。tcp over tcpは再送等の問題あり
proto udp

# サーバ名 or IPとport番号
remote server_name 1194

# サーバの名前解決ができないときも、無限にリトライする
# たぶん、デフォルトはこの設定(無限)のはず。
# 上記remote項目で、複数のサーバーを指定している場合、この値が有限時間なら、その時間経過後に次のサーバへの接続を試みる
resolv-retry infinite

# OpenVPN 2.3.2では不要。エラーになる
no bind

# なくても、自動でネゴシエーションすると思うが、サーバー側と同じのを記載するとログにWARNINGがでなくなる
cipher AES-256-GCM

# persistentオプションは、再起動で特権ダウングレードによりアクセスできなくリソースへのアクセスを回避するよう試みる
persist-key
persist-tun

# クライアント認証のためのキーと証明書
ca ca.crt
cert client.crt
key client.key

# HMAC用の共有キー。メッセージが改ざんされていなことを保証するために使用
# 暗号化そのものはメッセージを秘匿するが、改ざんそのものを検出することはできないので、この仕組み(HMAC)で補完
tls-auth ta.key 1

# 圧縮アルゴリズム。サーバ設定にもよるがサーバ側からpushされるので、なくてもいいかも。
comp-lzo

# ログの詳細レベル 
verb 3


【参考】
CentOS6でOpenVPNサーバ構築のための手順

CentOS6および7でOpenVPNサーバ構築のための手順

以下のサイトがかなり分かり易かった。
Amazon Linux 2014.03でもこのとおりに設定して動作した。
なお、上記サイトには、クライアント用のキーを作るために次のコマンド例が出てくる。このclient1を、実際に接続するクライアントの名前に変更した方がよい。
./build-key client1
ちなみに、ta.keyを作成するのは、次のコマンド。
openvpn --genkey --secret ta.key

TAPを使うserver.confの例

port 1194
proto udp
dev tap
ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
key /etc/openvpn/easy-rsa/2.0/keys/server.key  # This file should be kept secret
dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem
ifconfig-pool-persist ipp.txt
server-bridge 172.16.32.1 255.255.255.0 172.16.32.10 172.16.32.100
client-to-client
keepalive 10 120
tls-auth ta.key 0
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3
mssfix 1280
up "/etc/openvpn/up.sh
【参考】
OpenVPNのクライアント用configファイル例
CentOS 7でOpenVPNサーバの起動後にスクリプトを実行する。