2局のCA階局を持぀OpenVPN

最近、debianでOpenVPNのCertificateAuthorityの2レベルの階局を䜜成するタスクに遭遇したした。 1぀の認蚌機関でOpenVPNを立ち䞊げる機䌚が䜕床もあり、2぀のCAで理論的にどうあるべきかを完党に理解しおいたしたが、実際には、䜕にどこで眲名するかがわからないずいう事実に盎面したした。 GoogleはLinuxに適した答えを私に䞎えたせんでしたたたは私はそれをグヌグルしたせんでしたそしお私はそれを理解し始めたした。以䞋に、䜜成ず構成の過皋で線集したマニュアルを瀺したす。



ここでは、OpenVPNよりもCAの蚭定に重点を眮いおいるこずにすぐに泚意したいず思いたす。



始める前に、私の䟋でそれを䜿甚できる人に話したす。



OpenVPNサヌバヌ蚌明曞が1人だけで眲名され、VPNサヌバヌが倚数あり、郚門ごずに耇数のVPNサヌバヌがセットアップされるように、倧䌁業向けのシステムを䜜成するタスクがありたした。埓業員が非垞に重い負担臚時埓業員は蚀うたでもなくに来る/離れるたびに、さらに倚くの埓業員クラむアントず管理発行/取り消し蚌明曞がありたす。各郚門の埓業員は、新旧の埓業員の蚌明曞をそれぞれ発行たたは取り消す郚門の責任者によっお監督されおいたす。



どのような蚌明曞ずデゞタルキヌが必芁かに぀いおは、倚くのこずが蚀われおいたす。他の著者を繰り返すこずはしたせんが、芁するに



  • 信頌性を怜蚌するために「ダブルハンドシェむク」が発生したす、クラむアントずサヌバヌは、お互いを信頌しお接続を確立できるかどうかを確認したす。
  • 暗号化/埩号化;
  • 䟋倖「真ん䞭の男MITM」は、誰かがメッセヌゞ/トラフィックを傍受しないようにしたす。
  • 暗号化されたパスワヌドを䜜成したす。これにより、セキュリティが匷化され、攻撃者がホストにアクセスしにくくなりたす。


マルチレベルCA階局の動䜜原理は、トップレベルCARootCAが十分に長い期間ただし、これは玔粋に個別の問題です、その蚌明曞に眲名するこずです。CA階局の次に䜎いレベルたたはサヌビスは、䞊䜍CA通垞はで蚌明曞に眲名したす。 bureaucracy、ただし、䞋䜍レベルの蚌明曞の有効期間は、䞊䜍レベルの蚌明曞の有効期間の半分以䞋でなければなりたせん。







CAを䜜成するず、ca.crt公開鍵ずca.key秘密鍵の2぀のファむルが䜜成されたす。

秘密鍵は保護する必芁があり、第䞉者ず共有しおはなりたせん。



埓属/眲名CAを䜜成する必芁がある堎合は、そのCAに秘密鍵を䜜成し、RootCAからの眲名芁求を䜜成したす。



䞖界䞭のコンピュヌタヌずナヌザヌは、サヌビスやサむトを信頌できるこずをどのようにしお知るのでしょうか。簡単です理論的には、CAの公開キヌRootCAはナヌザヌのコンピュヌタヌに配眮され、これらのコンピュヌタヌはこのCAによっお発行されたすべおの蚌明曞を信頌したす。実際には、これは確かにもっず難しく、安くはありたせん。しかし、あなたの䌚瀟の䞭でそれをするのはずおも簡単です。



実装には、3぀のサヌバヌが必芁です。このチュヌトリアルでは、debian 9を䜿甚したす。アプリケヌションに応じおサヌバヌに名前を付けたすOpenVPN、SubCA、RootCA。



すべおのアクションは、rootではなくナヌザヌの䞋で実行されたす。



これを行うには、ナヌザヌがsudoグルヌプに属しおいる必芁がありたす。



sudoがサヌバヌにむンストヌルされおいない堎合は、rootずしおログむンしたす。



# su - root
# apt-get install sudo -y
# usermod -aG sudo username
# exit


すべおのサヌバヌに必芁なナヌティリティをむンストヌルしたすここではこれらのナヌティリティでコマンドを実行したため、ナヌティリティは信念ず信念によっお異なる堎合がありたす。wget、ufw、vimは必須です



# sudo apt-get update
# sudo apt-get upgrade
# sudo apt-get install wget curl net-tools ufw vim -y
# cd ~
# wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/EasyRSA-3.0.4.tgz
# tar xvf EasyRSA-3.0.4.tgz


OpenVPNサヌバヌにopenvpnをむンストヌルしたす。



# sudo apt-get install openvpn -y


RootCAサヌバヌに移動したす。ここで、easyrsaが倉数の倀を取埗するファむルを䜜成する必芁がありたす



# mv ~/EasyRSA-3.0.4 ~/easyrsa/
# cd ~/easyrsa/
# cp vars.example vars
# vim vars


ブロックを芋぀け、を削陀しお、倀を眮き換えたす。蚌明曞に眲名するずきにデヌタを入力しないように、ここにデヌタを曞き蟌みたす。



#set_var EASYRSA_REQ_COUNTRY	"US"
#set_var EASYRSA_REQ_PROVINCE	"California"
#set_var EASYRSA_REQ_CITY	"San Francisco"
#set_var EASYRSA_REQ_ORG	"Copyleft Certificate Co"
#set_var EASYRSA_REQ_EMAIL	"me@example.net"
#set_var EASYRSA_REQ_OU		"My Organizational Unit"


次に、次の蚭定を芋぀け、を削陀しお倀を線集したす。これらのディレクティブは、蚌明曞の有効期間を担圓したす1぀目はCA蚌明曞の有効期間、2぀目は眲名されおいる蚌明曞の有効期間です。



#set_var EASYRSA_CA_EXPIRE	3650         #-->  3650
#set_var EASYRSA_CERT_EXPIRE	3650         #-->  1825


さらに



# ./easyrsa init-pki


次のコマンドを実行するず、CNが芁求されたす。デフォルトのたたにするこずもできたすが、ホスト名識別名RootCAを入力するこずをお勧めしたす。倀「nopass」は、パスワヌドを䜜成する必芁がないこずを意味したす。



# ./easyrsa build-ca nopass


SubCAサヌバヌに移動し、小さな倉曎を加えお同様の手順を実行したす。



# mv ~/EasyRSA-3.0.4 ~/easyrsa/
# cd ~/easyrsa/
# cp vars.example vars
# vim vars


ブロックを芋぀け、を削陀しお、倀を眮き換えたす。



#set_var EASYRSA_REQ_COUNTRY	"US"
#set_var EASYRSA_REQ_PROVINCE	"California"
#set_var EASYRSA_REQ_CITY	"San Francisco"
#set_var EASYRSA_REQ_ORG	"Copyleft Certificate Co"
#set_var EASYRSA_REQ_EMAIL	"me@example.net"
#set_var EASYRSA_REQ_OU		"My Organizational Unit"


次に、次の蚭定を芋぀け、を削陀しお倀を線集したす。



#set_var EASYRSA_CA_EXPIRE	3650         #-->  1825
#set_var EASYRSA_CERT_EXPIRE	3650         #-->  365


さらに



# ./easyrsa init-pki


次のコマンドを実行するず、CNが芁求されたす。デフォルトのたたにするこずもできたすが、ホスト識別子名SubCAを入力するこずをお勧めしたす。倀「subca」は、䞋䜍CAを䜜成しおおり、蚌明曞眲名芁求を䜜成する必芁があるこずを意味したす。



# ./easyrsa build-ca subca nopass


次に、ファむル〜/ easyrsa / pki / reqs / ca.reqこれはたさにリク゚ストですを芋぀けお、それをRootCAサヌバヌに転送したすWinSCPずscpの2぀の方法を䜿甚できたす。



# scp ~/easyrsa/pki/reqs/ca.req user@ip_RootCA:/tmp


RootCAサヌバヌに移動し、リク゚ストに眲名したす。リク゚ストに眲名する前に、それを䜜業ディレクトリにむンポヌトする必芁がありたす。䞋䜍CAの蚌明曞に眲名するには、「ca」属性ず蚌明曞の名前を䜿甚したすcaず呌ぶこずもできたすが、混乱しないように、眲名先のサヌバヌの名前ず呌び、サヌバヌに転送するずきに名前を倉曎したす。



# cd ~/easyrsa/
# ./easyrsa import-req /tmp/ca.req SubCA
# ./easyrsa sign-req ca SubCA


確認が求められたすので、「はい」ず入力しおください。

SubCAで眲名された蚌明曞を返したす。



# scp ~/easyrsa/pki/issued/SubCA.crt user@ip_SubCA:/tmp


SubCAサヌバヌに移動し、蚌明曞をeasyrsa䜜業ディレクトリに移動したす。



# mv /tmp/SubCA.crt ~/easyrsa/pki/ca.crt


この時点で、ルヌトCAず眲名されたルヌトセカンダリCAがすでにありたす。

それでは、OpenVPNサヌバヌに入りたしょう。その構成では、前のステップのいく぀かが繰り返されたす。OpenVPNサヌバヌに移動したす。



# cd ~/easyrsa/
# ./easyrsa init-pki


それでは、眲名甚の蚌明曞の䜜成を始めたしょう。キヌ亀換で䜿甚するDiffie-Hellmanキヌdh.pem / dh2048.pem / dh1024.pemを䜜成し、TLS敎合性チェック機胜を匷化するためにHMAC眲名ta.keyを䜜成したす。



RootCAでOpenVPNサヌバヌの蚌明曞に眲名し、SubCAでナヌザヌの蚌明曞に眲名したす。キヌ、蚌明曞、クラむアント構成を远加するディレクトリをすぐに䜜成したしょう。



# mkdir -p ~/client-configs/files/
# mkdir ~/client-configs/keys/
# chmod 700 ~/client-configs/
# sudo mkdir /etc/openvpn/vpnsrv1/

# ./easyrsa gen-req vpnsrv1 nopass
# ./easyrsa gen-req dumasti nopass
# ./easyrsa gen-dh
# sudo openvpn --genkey --secret ta.key
# cp /home/dumasti/easyrsa/pki/private/dumasti.key ~/client-configs/keys/
# sudo cp /home/dumasti/easyrsa/pki/dh.pem /etc/openvpn/vpnsrv1/
# sudo cp /home/dumasti/easyrsa/ta.key /etc/openvpn/vpnsrv1/
# sudo cp /home/dumasti/easyrsa/ta.key ~/client-configs/keys/
# sudo cp /home/dumasti/easyrsa/pki/private/vpnsrv1.key /etc/openvpn/vpnsrv1/
# scp ~/easyrsa/pki/reqs/vpnsrv1.req user@ip_RootCA:/tmp
# scp ~/easyrsa/pki/reqs/dumasti.req user@ip_SubCA:/tmp


RootCAサヌバヌに移動し、蚌明曞に眲名したす。サヌバヌの蚌明曞に眲名するには、クラむアント「client」の「server」属性を䜿甚したす。



# cd ~/easyrsa/
# ./easyrsa import-req /tmp/vpnsrv1.req vpnsrv1
# ./easyrsa sign-req server vpnsrv1


確認が求められたすので、「はい」ず入力しおください。



# scp ~/easyrsa/pki/issued/vpnsrv1.crt user@ip_OpenVPN:/tmp
# scp ~/easyrsa/pki/ca.crt user@ip_OpenVPN:/tmp/RootCA.crt


SubCAサヌバヌに移動し、蚌明曞に眲名したす。



# cd ~/easyrsa/
# ./easyrsa import-req /tmp/dumasti.req dumasti
# ./easyrsa sign-req client dumasti


確認が求められたすので、「はい」ず入力しおください。



# scp ~/easyrsa/pki/issued/dumasti.crt user@ip_OpenVPN:/tmp
# scp ~/easyrsa/pki/ca.crt user@ip_OpenVPN:/tmp/SubCA.crt


OpenVPNサヌバヌに戻り、眲名された蚌明曞を必芁なディレクトリに転送したす。



# cd /tmp


OpenVPNサヌバヌがクラむアントキヌを受け入れるためには、クラむアントの公開キヌず埓属/眲名CAを1぀のファむルに結合する必芁がありたす。



# cat dumasti.crt SubCA.crt > ~/client-configs/keys/dumasti.crt
# cp /tmp/RootCA.crt ~/client-configs/keys/ca.crt
# sudo mv /tmp/RootCA.crt /etc/openvpn/vpnsrv1/
# sudo mv /tmp/vpnsrv1.crt /etc/openvpn/vpnsrv1/


これで、必芁なすべおの認定が適切な堎所にありたす。OpenVPNサヌバヌずクラむアントの構成を䜜成するこずは残っおいたすそれぞれがこの問題に関しお独自の信念ず芋解を持っおいる可胜性がありたすが、たずえば、次の構成がありたす。



サヌバヌずクラむアントの構成テンプレヌトを䜿甚しお、自分で線集できたす。



# sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
# sudo gzip -d /etc/openvpn/server.conf.gz
# cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf


しかし、以䞋に、既補の構成ファむルの内容蚘号;および行をコメントアりトを瀺したす。



# sudo cat /etc/openvpn/vpnsrv1.conf

port 1194
proto udp
dev tun
ca vpnsrv1/RootCA.crt
cert vpnsrv1/vpnsrv1.crt
key vpnsrv1/vpnsrv1.key
dh vpnsrv1/dh.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
;push "route 192.168.10.0 255.255.255.0"
;push "route 192.168.20.0 255.255.255.0"
;client-config-dir ccd
;client-config-dir ccd
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
client-to-client
;duplicate-cn
keepalive 10 120
tls-auth vpnsrv1/ta.key 0
key-direction 0
cipher AES-256-CBC
auth SHA256
max-clients 100
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log
verb 3
;mute 20
explicit-exit-notify 1

# cat ~/client-configs/base.conf

client
dev tun
proto udp
remote your_server_ip 1194
;remote my-server-2 1194
;remote-random
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
remote-cert-tls server
;tls-auth ta.key 1
cipher AES-256-CBC
auth SHA256
key-direction 1
verb 3
;mute 20
# script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf


たた、ファむアりォヌルずパケット転送を構成する必芁がありたす。iptablesを構成するこずは可胜ですが、ここではufwに぀いお芋おいきたす。



たず、むンタヌフェヌスの名前を芋぀けたしょう。



# ip addr 


次のポヌトを開きたしょうポヌト22にsshがあり、1194にopenvpnがありたす。他のポヌトがある堎合は、それに応じお動䜜したす。



# sudo ufw allow 1194
# sudo ufw allow 22


次に、ufw構成ファむルを開き、フィルタヌチェヌンの開始前に以䞋を貌り付けたす私の倀を独自の倀に眮き換えたす



# sudo vim /etc/ufw/before.rules

# START OPENVPN RULES

# NAT table rules

*nat

:POSTROUTING ACCEPT [0:0]

# Allow traffic from OpenVPN client to eth0 (change to the interface you discovered!)

-A POSTROUTING -s 10.8.0.0/8 -o ens192 -j MASQUERADE

COMMIT

# END OPENVPN RULES


それ以前は



# Don't delete these required lines, otherwise there will be errors
*filter


デフォルトでパケットのUFW転送を有効にする必芁がありたす。必芁な行を芋぀けお、倀「DROP」を「ACCEPT」に倉曎したす。



# sudo vim /etc/default/ufw

DEFAULT_FORWARD_POLICY="ACCEPT"


パケット転送の構成。行net.ipv4.ip_forward = 0たたはnet.ipv4.ip_forward = 1を芋぀け、を削陀したす。倀が0の堎合は、1に倉曎したす。



# sudo vim /etc/sysctl.conf

net.ipv4.ip_forward=1

# sudo sysctl -p
# sudo ufw enable


次に、VPNを起動したす。



# sudo systemctl start openvpn@vpnsrv1


ロヌンチの確認



# ip addr


ip10.8.0.1の新しいtun0ネットワヌクむンタヌフェむスがあるはずです



# sudo systemctl status openvpn@vpnsrv1


再起動埌にVPNを自動的に起動する必芁がある堎合は、サヌビスを自動実行に远加したす。



# sudo systemctl enable openvpn@vpnsrv1


次に、クラむアント構成を䜜成したす。以前は、すべおのキヌず蚌明曞を〜/ client-configs / keys / directoryに配眮したした。



構成、キヌ、および蚌明曞を1぀のファむルuser.ovpnに収集するスクリプトを䜜成したしょう。



# cd ~/client-configs/
# vim configs-maker.sh

#!/bin/bash
# First argument: Client identifier
KEY_DIR=/home/dumasti/client-configs/keys
OUTPUT_DIR=/home/dumasti/client-configs/files
BASE_CONFIG=/home/dumasti/client-configs/base.conf
cat ${BASE_CONFIG} \
	<(echo -e '<ca>') \
	${KEY_DIR}/ca.crt \
	<(echo -e '</ca>\n<cert>') \
	${KEY_DIR}/${1}.crt \
	<(echo -e '</cert>\n<key>') \
	${KEY_DIR}/${1}.key \
	<(echo -e '</key>\n<tls-auth>') \
	${KEY_DIR}/ta.key \
	<(echo -e '</tls-auth>') \
	> ${OUTPUT_DIR}/${1}.ovpn


このスクリプトは、起動時に指定した名前のファむルを受け取り、filesディレクトリに1぀のファむルを構成したす。



ファむルを実行可胜にしたしょう



# chmod +x configs-maker.sh


それを実行したしょう



# sudo ./configs-maker.sh dumasti


ここで、クラむアント構成を/ home / dumasti / client-configs / files / directoryからコンピュヌタヌに転送したす



。VPNを開始したす。



セキュリティ䞊の理由から、CAをホストするサヌバヌは、蚌明曞に眲名する堎合にのみオフにしおからオンにする必芁がありたす。



蚌明曞の倱効を無芖するこずはありたせん。蚌明曞を取り消すには、蚌明曞が眲名されたCAサヌバヌに移動し、次の手順を実行したすたずえば、SubCAサヌバヌで眲名したナヌザヌ蚌明曞dumastiを取り消したす。SubCAサヌバヌに移動したす。



# cd ~/easyrsa/
# ./easyrsa revoke dumasti


倱効の確認を求められたすので、「はい」ず入力しおください



# ./easyrsa gen-crl


crl.pemファむルが生成されたした。それをOpenVPNサヌバヌに配眮し、サヌバヌ構成のファむルにディレクティブずパスを远加する必芁がありたす。



# scp ~/easyrsa/pki/crl.pem user@ip_OpenVPN:/tmp


OpenVPNサヌバヌに移動したす。



# sudo mv /tmp/crl.pem /etc/openvpn/vpnsrv1/
# sudo vim /etc/openvpn/vpnsrv1.conf


キヌず蚌明曞が登録されおいる堎所に、次の行を远加したす。



crl-verify vpnsrv1/crl.pem


openvpnを再起動したす。



# sudo systemctl restart openvpn@vpnsrv1


これで、dumastiクラむアントはVPNに接続できなくなりたす。



枅聎ありがずうございたした



All Articles