OpenWrtルータでのOpenVPNセキュリティの考え

OpenWrtルータでのOpenVPNセキュリティの考え

OpenWrt 10.03ルーターのポート1194にOpenVPNサーバーを配置しました。

echo "nameserver 8.8.8.8" > /etc/resolv.conf; opkg update; opkg install luci-app-openvpn openvpn openssl-util openssh-sftp-server ntpd
vim /etc/ssl/openssl.cnf # modify a few lines
[ CA_default ]
dir             = /etc/openvpn
new_certs_dir   = $dir/certs
certificate = $dir/ca.crt
private_key = $dir/ca.key

touch /etc/openvpn/index.txt; touch /etc/openvpn/serial; echo 01 > /etc/openvpn/serial
openssl req -nodes -new -x509 -keyout /etc/openvpn/ca.key -out /etc/openvpn/ca.crt -days 3650 # give a common name, like: vpnserver
openvpn --genkey --secret /etc/openvpn/ta.key
openssl req -nodes -new -keyout /etc/openvpn/server.key -out /etc/openvpn/server.csr # give a common name, like: vpnserver
mkdir -p /etc/openvpn/certs; mkdir -p /etc/openvpn/private
openssl ca -out /etc/openvpn/server.crt -in /etc/openvpn/server.csr
time openssl dhparam -out /etc/openvpn/dh1024.pem 1024 # it could take 10 minutes!

# generate certs for clients [X = client number]
openssl req -nodes -new -keyout /etc/openvpn/clientX.key -out /etc/openvpn/clientX.csr # give a common name! it will be the user name
openssl ca -out /etc/openvpn/clientX.crt -in /etc/openvpn/clientX.csr
# e.g.: 
openssl req -nodes -new -keyout /etc/openvpn/client1.key -out /etc/openvpn/client1.csr # give a common name! it will be the user name
openssl ca -out /etc/openvpn/client1.crt -in /etc/openvpn/client1.csr

vim /etc/config/openvpn
config 'openvpn' 'openvpn_server'
    option 'enable' '1'
    option 'port' '1194'
    option 'proto' 'udp'
    option 'dev' 'tap'
    option 'ca' '/etc/openvpn/ca.crt'
    option 'cert' '/etc/openvpn/server.crt'
    option 'key' '/etc/openvpn/server.key'
    option 'tls_auth' '/etc/openvpn/ta.key 0' # server: 0
    option 'dh' '/etc/openvpn/dh1024.pem'
    option 'comp_lzo' '1'
    option 'server' '10.20.30.0 255.255.255.0'
    option 'keepalive' '10 120'
    option 'persist_key' '1'
    option 'persist_tun' '1'
    option 'mute' '20'
    option 'verb' '3'
    option 'client_to_client' '1'
    list 'push' 'dhcp-option DNS 10.20.30.1'
/etc/init.d/openvpn enable
/etc/init.d/openvpn start
ifconfig -a | less
ping 10.20.30.1

# here comes the firewall part
vim /etc/config/firewall # modify it
config 'include'
    option 'path' '/etc/firewall.user'

config 'redirect'
    option 'src' 'wan'
    option 'proto' 'udp'
    option 'src_dport' '1194'
    option 'dest_port' '1194'
    option '_name' 'OpenVPN'

vim /etc/firewall.user # modify it
iptables -t nat -A prerouting_rule -i $WAN -p udp --dport 1194 -j ACCEPT
iptables -A input_rule -i $WAN -p udp --dport 1194 -j ACCEPT
iptables -A forwarding_rule -i tap+ -o br-lan -j ACCEPT
iptables -A forwarding_rule -i br-lan -o tap+ -j ACCEPT
iptables -A input_rule -i tap+ -j ACCEPT
iptables -A output_rule -o tap -j ACCEPT

/etc/init.d/firewall restart

# tar the files that goes to the client1
mkdir -p /root/client1
cp /etc/openvpn/ca.crt /root/client1/; cp /etc/openvpn/client1.crt /root/client1/; cp /etc/openvpn/client1.key /root/client1/; cp /etc/openvpn/ta.key /root/client1/
cd /root/; tar -cf client1.tar client1

# configure the client
# extract the client1.tar's content to "~/.cert" on the clients pc
# if you're using e.g.: Fedora/SELinux, then
restorecon -Rv ~/.cert*
# then: 
# ca.crt: the ca certificate
# client1.crt: the users certificate
# client1.key: the users private key
# ta.key: tls authentication [1]

OpenVPNサーバーのセキュリティを向上させるために(サーバー側で)何ができますか?私の考えは次のとおりです。

  1. sed 's/1194/50000/'ポートスキャナは見つけるのが難しく、ポート番号をより高い番号に設定しました。
  2. iptables? [入力チェーンで]実際に使用しているIP範囲のみを許可する必要がありますか? +私のラップトップのMACアドレスのみを許可
  3. ルーターを使用していないときは(寝ているときなど)、電源を切ってください。

私が逃したものはありますか?コマンドを使用すると、psOpenVPNがルートによって実行されていることがわかりますが、これは安全ではありません。セキュリティを強化するにはどうすればよいですか?

ベストアンサー1

OpenVPNは安全に設計されています。署名キーを持つクライアントのみが許可されます。最も重要なのは、秘密鍵を安全に保管することです。常にクライアントで暗号化し、サーバーのキーファイルに対する権限を確認してください。 CA 秘密鍵を必要としないサーバーに保管しないでください。暗号化してペンドライブに入れて保護します。

ポートスキャナはすべてのポートでサーバーを見つけることに問題はありませんが、それを使用することはできません。制限された一連のIPアドレスでのみ使用することがわかっている場合は、iptablesを使用して他のすべてのアドレスを無効にしてください。しかし、ほとんどの人はラップトップを使用するなど、さまざまな場所で使用する傾向があります。無効なキーを試みるIPを自動的にブロックすることはできますが、このようなRSAキーの無差別代入はとにかく不可能です。

鍵が安全である場合、最大のリスクはOpenVPN実装のバグにより攻撃に対して脆弱になることです。これが発生すると、攻撃者はOpenVPNサーバープロセスの権限で任意のコードを実行する可能性があります。サーバーを root として実行しないと、このタイプの攻撃による影響を軽減できます。サーバー構成に以下を追加します。

user nobody
group nobody

あなたの設定ファイルは私とは異なる構文を使用しているようですが、同様のものをサポートする必要があります。カーネルでgrsecurityパッチを試してみることはできますが、組み込みシステムで動作しているかどうかはわかりません。誤って起動できなくなると、本当に悪いことになります。ランダムなコード実行エラーを悪用するのが難しくなります。

キーサイズを増やすこともできます。 1024ビットキーは、近いうちにクラックしやすくなります(まだクラックしていない場合)。 DebianのOpenSSLを使用して作成しないようにしてください。 :)

個人的には、MACアドレスフィルタリングはまったく役に立たないと思います。偽造しやすく、動作するものを簡単に見つけることができます。 WPA2 CCMPと63バイト長のランダムキーを使用しても問題ありません。人々がランダムにケーブルを接続しないようにしてください。

ルータに利用可能なリソースがあまりないことはわかっていますが、ロギングを試してみることができます。ルータに十分な空き容量がないことはほぼ確実ですので、別のホストにログインしてください。 Syslog-ngはこれを簡単に実行できますが、ルータにインストールするのがどれほど簡単かはわかりません。

おすすめ記事