マイムの部屋

社内SEが,興味をもったことを書いていきます.

自宅サーバにOpenVPNを入れる(Ubuntu 14.04 LTS, OpenVPN)

今回は,安全に外部から自宅サーバーに接続させるために,OpenVPNを入れてみることにしました.

1. OpenVPNをインストール

$ sudo apt-get install openvpn libssl-dev openssl easy-rsa

2.外部から接続するときに認証に必要なものを入れるディレクトリを作成

$ sudo make-cadir /etc/openvpn/easy-rsa

3.鍵作成

$ source vars && ./clean-all && ./build-ca
$ ./pkitool --initca && ./pkitool --server server
$ ./build-key-server (サーバー用鍵の名前.適当につけましょう)
$ ./build-dh

# /etc/openvpn に鍵関連のファイルをコピー
$ cd keys/
$ cp server.crt server.key ca.crt dh1024.pem /etc/openvpn/

# 各マシンに入れる鍵を生成
# 後で各マシンに移動させる鍵
$ cd ..
$ ./build-key (鍵の名前)

# VPN自体の鍵(TLS)を生成
$ openvpn --genkey --secret ta.key

# 各マシンの鍵とVPN自体の鍵をコピー
$ cd keys/
$ cp ta.key /etc/openvpn

4.OpenVPNの設定

$ cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
$ gzip -d server.conf.gz

# いろいろの設定を変更
$ nano server.conf
server.confで,私が変更をした部分を以下に書きます.
#ファイルに追記する部分
mode server
tls-server
tls-auth ta.key 0 # TLS暗号化を有効にする

# DH パラメータの指定
;dh dh1024.pem 
dh dh2048.pem # 鍵を作成の工程で,このファイルが作成されたので,こっちに変更

# 外部からアクセスする自分のネットワークアドレスを入力する.
push "route 192.168.xxx.0 255.255.255.0"

# DNS サーバのIPアドレスを設定
# $ cat /etc/resolv.conf で調べることができる
push "dhcp-option DNS 192.168.xxx.xxx"

################################
## コメントアウトを外すものを以下に書く##
################################

# VPN Clinent(外部からアクセスする端末)のすべてのトラフィックVPNサーバを通るらしい.
push "redirect-gateway def1 bypass-dhcp" 

# 通信暗号化の設定
# サーバーとクラインアント間での暗号化方式を指定する.
# これが,異なると接続エラーが起きる
cipher AES-256-CBC

# サービスユーザの変更
# セキュリティ向上のために行う
user nobody
group nogroup

# クライアント間通信の有効化
client-to-client
この変更を反映するために,OpenVPNの再起動
$ sudo service openvpn restart

 * Stopping virtual private network daemon(s)...
 *   Stopping VPN 'server' [ OK ] 
 * Starting virtual private network daemon(s)...
 *   Autostarting VPN 'server'

5.ルーティングの設定

フォワーディングの設定をします.

iptablesの設定

$ apt-get install iptables-persistent

# インターネットに接続しているIFを指定.
# プライペートアドレスをインターネットに送信する際にもアドレスが変換される. 
$ iptables -t nat -A POSTROUTING -s (VPNで使うIPアドレス) -o (使用するNICの名前) -j MASQUERADE

$ /sbin/iptables-save -c > /etc/iptables.rule
$ nano /etc/network/if-pre-up.d/適当なファイル名
$ sudo chmod +x 適当なファイル名
ちょっと,時間かかりそうなので,今日はここまでにしておきます.すいません

参考サイト