Configuring OpenVPN for Secure Network Connectivity

undefined
 
Open
VPN
 
calee
 
2
 
Caveat!
 
The following commands, file locations is for CentOS.
If you are using 
F
ree
BSD,
 don’t copy-paste all below.
 
3
 
Why Openvpn
 
1.cross-platform portability
2.extensible VPN framework
3.OpenVPN uses an 
industrial-strength security model
 
4
 
TUN/TAP
 
TAP
Layer 2
behave like adapter
More overhead(L2)
Transfer any protocol
Bridge
 
TUN
Layer 3
Less Overhead(L3)
Only IPv4 , IPv6(Ovpn2.3)
No Bridges!
 
5
 
Configuring Openvpn
 
A server/client setting can be describe as a ovpn/conf file.
At most circumstances, we will separate key/ca files to make
config file clean.
 
6
 
server.conf
 
/etc/openvpn/server/serv.conf
cp /usr/share/doc/openvpn-2.4.6/sample/sample-config-
files/server.conf /etc/openvpn/server/
 
7
 
A simple server config(1/2)
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh2048.pem
topology subnet
server 192.168.14.0 255.255.255.0
ifconfig-pool-persist ipp.txt
client-config-dir static_clients
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
client-to-client
 
8
 
A simple server config(2/2)
keepalive 10 120
tls-auth ta.key 0 # This file is secret
cipher AES-256-CBC   # AES
comp-lzo
max-clients 10
user nobody
group nobody
persist-key
persist-tun
verb 5
mute 20
 
9
 
A simple client config
client
dev tun
proto udp
remote xxx.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-CBC
comp-lzo
verb 3
mute 20
 
10
 
X.509 PKI
 
11
 
Diffie Hellman parameters
 
From wikipedia:
Diffie–Hellman is used to secure a variety of 
Internet
 services. However, research published in October
2015 suggests that the parameters in use for many D-H Internet applications at that time are not strong
enough to prevent compromise by very well-funded attackers, such as the security services of large
governments.
Generate 2048bit dhparams!
 
12
 
HMAC
 
tls-auth
The tls-auth directive adds an additional HMAC signature to all SSL/TLS handshake packets for
integrity verification. Any UDP packet not bearing the correct HMAC signature can be dropped
without further processing. The tls-auth HMAC signature provides an additional level of security above
and beyond that provided by SSL/TLS. It can protect against:
DoS attacks or port flooding on the OpenVPN UDP port.
Port scanning to determine which server UDP ports are in a listening state.
Buffer overflow vulnerabilities in the SSL/TLS implementation.
SSL/TLS handshake initiations from unauthorized machines (while such handshakes would
ultimately fail to authenticate, tls-auth can cut them off at a much earlier point).
 
13
 
Generate ca, cert
 
1.Use easy-rsa, a openvpn ca,cert generate tool
2.Do it from scratch with openssl
 
14
 
easy-rsa
# yum install easy-rsa
 
# mkdir /root/ca
# cd /root/ca
# /usr/share/easy-rsa/3/easyrsa init-pki
# /usr/share/easy-rsa/3/easyrsa build-ca
 
# cd /etc/openvpn/server
# /usr/share/easy-rsa/3/easyrsa init-pki
# /usr/share/easy-rsa/3/easyrsa gen-req [NAME] nopass
# /usr/share/easy-rsa/3/easyrsa gen-dh
 
# mkdir /root/client
# cd /root/client
# /usr/share/easy-rsa/3/easyrsa init-pki
# /usr/share/easy-rsa/3/easyrsa fen-req [NAME]
 
Reference:
https://community.openvpn.net/openvpn/wiki/EasyRSA3-OpenVPN-Howto
https://wiki.archlinux.org/index.php/Easy-RSA
 
15
 
Sign key to CA
# cd /root/ca
# /usr/share/easy-rsa/3/easyrsa import-req /etc/openvpn/server/pki/reqs/[NAME].req [NAME]
# /usr/share/easy-rsa/3/easyrsa import-req /root/client/pki/reqs/[NAME].req [NAME]
 
# /usr/share/easy-rsa/3/easyrsa sign-req server [NAME]
# /usr/share/easy-rsa/3/easyrsa sign-req client [NAME]
 
16
 
Diffie-Hellman / TLS-auth key
DH-KEY
# cd /etc/openvpn/server
# /usr/share/easy-rsa/3/easyrsa gen dh
 
AUTH KEY
# cd /etc/openvpn/server
# openvpn -genkey -secret ta.key
 
# cd /etc/openvpn/client
# cp ../server/ta.key ta.key
 
17
 
Package your config
 
Server
ca.crt
server.conf
server.key
server.crt
dh.pem
ta.key
 
Client
ca.crt
client.conf
client.key
client.crt
ta.key
 
18
 
Enable and start
SERVER SIDE
# cp keys,conf,crts… /etc/openvpn
# systemctl enable openvpn@CONFIG_NAME # Start at boot
 
ex. systemctl enable openvpn@server
# systemctl start openvpn@CONFIG_NAME
OR
# openvpn --config ./server.conf
 
CLIENT SIDE
# cp keys,conf,crts… /etc/openvpn
# systemctl start openvpn@CONFIG_NAME
 
19
 
Configure NAT
# if you are using nftables
# add this to your table
chain postrouting {
    type nat hook postrouting priority 0;
    ip saddr 192.168.14.0/24 oifname "eth0" masquerade;
}
 
# if you are using iptables
# add this to your iptables.rules
 -A POSTROUTING -s 192.168.14.0/24 -o eth0 -j MASQUERADE
 
# if you are using firewalld
# add this to your firewall-cmd rules
firewall-cmd --zone=trusted --add-service openvpn —permanent
firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o eth0 -j MASQUERADE
firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i tun0 -o eth0 -j ACCEPT # -i
是 input, -o 是 output
 
# sorry I don’t know how to use pf. You are on your own.
 
20
 
Confirm your vpn is working
# ifconifg (macOS)
utun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 2000
 
          inet6 fe80::7a68:beac:a9c9:97cb%utun0 prefixlen 64 scopeid 0x10
 
          nd6 options=201<PERFORMNUD,DAD>
utun1: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
 
          inet 192.168.10.2 --> 192.168.10.2 netmask 0xffffff00
 
# netstat -nr
Routing tables
 
Internet:
Destination        Gateway            Flags        Refs      Use   Netif Expire
0/1                192.168.10.1       UGSc          113        0   utun1
default            172.18.15.254      UGSc            1        0     en0
 
21
 
User-authentication
 
1.Simply by signing client certs.
2.Use Username/password
 
22
 
Server Side
Inside server.conf
 
# Using PAM to auth (Working with LDAP/NIS/Local Accout)
(verify-client-cert)
plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so login
 
# Use a shell script to auth
auth-user-pass-verify /etc/openvpn/auth.sh via-env
script-security 3 # To allow script reading passwords
 
Reference:
/usr/share/doc/openvpn-2.4.6/README.auth-pam
/etc/pam.d/login
 
23
 
Client Side
# A dialog will popup to ask you username/password
auth-user-pass
# Saving username/password into a file
auth-user-pass client.secret
# cat client.secret
Clientname
Clientpassword
 
24
 
Reference
 
https://www.digitalocean.com/community/tutorials/how-to-setup-and-
configure-an-openvpn-server-on-centos-7
https://www.howtoforge.com/tutorial/how-to-install-openvpn-on-
centos-7/
https://wiki.archlinux.org/index.php/OpenVPN
Slide Note
Embed
Share

OpenVPN is a powerful and versatile VPN framework that offers cross-platform portability and industrial-strength security. Learn how to configure OpenVPN server and client settings on CentOS for secure network connections. Discover the advantages of using TUN/TAP interfaces, file organization best practices, and simple configuration examples for both servers and clients.

  • OpenVPN
  • VPN framework
  • Network security
  • TUN/TAP
  • Configuration

Uploaded on Feb 26, 2025 | 0 Views


Download Presentation

Please find below an Image/Link to download the presentation.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author. Download presentation by click this link. If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.

E N D

Presentation Transcript


  1. OpenVPN calee

  2. Computer Center, CS, NCTU Caveat! The following commands, file locations is for CentOS. If you are using FreeBSD, don t copy-paste all below. 2

  3. Computer Center, CS, NCTU Why Openvpn 1.cross-platform portability 2.extensible VPN framework 3.OpenVPN uses an industrial-strength security model 3

  4. Computer Center, CS, NCTU TUN/TAP TAP Layer 2 behave like adapter More overhead(L2) Transfer any protocol Bridge TUN Layer 3 Less Overhead(L3) Only IPv4 , IPv6(Ovpn2.3) No Bridges! 4

  5. Computer Center, CS, NCTU Configuring Openvpn A server/client setting can be describe as a ovpn/conf file. At most circumstances, we will separate key/ca files to make config file clean. 5

  6. Computer Center, CS, NCTU server.conf /etc/openvpn/server/serv.conf cp /usr/share/doc/openvpn-2.4.6/sample/sample-config- files/server.conf /etc/openvpn/server/ 6

  7. Computer Center, CS, NCTU A simple server config(1/2) port 1194 proto udp dev tun ca ca.crt cert server.crt key server.key # This file should be kept secret dh dh2048.pem topology subnet server 192.168.14.0 255.255.255.0 ifconfig-pool-persist ipp.txt client-config-dir static_clients push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4" client-to-client 7

  8. Computer Center, CS, NCTU A simple server config(2/2) keepalive 10 120 tls-auth ta.key 0 # This file is secret cipher AES-256-CBC # AES comp-lzo max-clients 10 user nobody group nobody persist-key persist-tun verb 5 mute 20 8

  9. Computer Center, CS, NCTU A simple client config client dev tun proto udp remote xxx.com 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert client.crt key client.key remote-cert-tls server tls-auth ta.key 1 cipher AES-256-CBC comp-lzo verb 3 mute 20 9

  10. Computer Center, CS, NCTU X.509 PKI 10

  11. Computer Center, CS, NCTU Diffie Hellman parameters From wikipedia: Diffie Hellman is used to secure a variety of Internet services. However, research published in October 2015 suggests that the parameters in use for many D-H Internet applications at that time are not strong enough to prevent compromise by very well-funded attackers, such as the security services of large governments. Generate 2048bit dhparams! 11

  12. Computer Center, CS, NCTU HMAC tls-auth The tls-auth directive adds an additional HMAC signature to all SSL/TLS handshake packets for integrity verification. Any UDP packet not bearing the correct HMAC signature can be dropped without further processing. The tls-auth HMAC signature provides an additional level of security above and beyond that provided by SSL/TLS. It can protect against: DoS attacks or port flooding on the OpenVPN UDP port. Port scanning to determine which server UDP ports are in a listening state. Buffer overflow vulnerabilities in the SSL/TLS implementation. SSL/TLS handshake initiations from unauthorized machines (while such handshakes would ultimately fail to authenticate, tls-auth can cut them off at a much earlier point). 12

  13. Computer Center, CS, NCTU Generate ca, cert 1.Use easy-rsa, a openvpn ca,cert generate tool 2.Do it from scratch with openssl 13

  14. Computer Center, CS, NCTU easy-rsa # yum install easy-rsa # mkdir /root/ca # cd /root/ca # /usr/share/easy-rsa/3/easyrsa init-pki # /usr/share/easy-rsa/3/easyrsa build-ca # cd /etc/openvpn/server # /usr/share/easy-rsa/3/easyrsa init-pki # /usr/share/easy-rsa/3/easyrsa gen-req [NAME] nopass # /usr/share/easy-rsa/3/easyrsa gen-dh # mkdir /root/client # cd /root/client # /usr/share/easy-rsa/3/easyrsa init-pki # /usr/share/easy-rsa/3/easyrsa fen-req [NAME] Reference: https://community.openvpn.net/openvpn/wiki/EasyRSA3-OpenVPN-Howto https://wiki.archlinux.org/index.php/Easy-RSA 14

  15. Computer Center, CS, NCTU Sign key to CA # cd /root/ca # /usr/share/easy-rsa/3/easyrsa import-req /etc/openvpn/server/pki/reqs/[NAME].req [NAME] # /usr/share/easy-rsa/3/easyrsa import-req /root/client/pki/reqs/[NAME].req [NAME] # /usr/share/easy-rsa/3/easyrsa sign-req server [NAME] # /usr/share/easy-rsa/3/easyrsa sign-req client [NAME] 15

  16. Computer Center, CS, NCTU Diffie-Hellman / TLS-auth key DH-KEY # cd /etc/openvpn/server # /usr/share/easy-rsa/3/easyrsa gen dh AUTH KEY # cd /etc/openvpn/server # openvpn -genkey -secret ta.key # cd /etc/openvpn/client # cp ../server/ta.key ta.key 16

  17. Computer Center, CS, NCTU Package your config Server Client ca.crt ca.crt server.conf client.conf server.key client.key server.crt client.crt dh.pem ta.key ta.key 17

  18. Computer Center, CS, NCTU Enable and start SERVER SIDE # cp keys,conf,crts /etc/openvpn # systemctl enable openvpn@CONFIG_NAME # Start at boot ex. systemctl enable openvpn@server # systemctl start openvpn@CONFIG_NAME OR # openvpn --config ./server.conf CLIENT SIDE # cp keys,conf,crts /etc/openvpn # systemctl start openvpn@CONFIG_NAME 18

  19. Computer Center, CS, NCTU Configure NAT # if you are using nftables # add this to your table chain postrouting { type nat hook postrouting priority 0; ip saddr 192.168.14.0/24 oifname "eth0" masquerade; } # if you are using iptables # add this to your iptables.rules -A POSTROUTING -s 192.168.14.0/24 -o eth0 -j MASQUERADE # if you are using firewalld # add this to your firewall-cmd rules firewall-cmd --zone=trusted --add-service openvpn permanent firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o eth0 -j MASQUERADE firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i tun0 -o eth0 -j ACCEPT # -i input, -o output # sorry I don t know how to use pf. You are on your own. 19

  20. Computer Center, CS, NCTU Confirm your vpn is working # ifconifg (macOS) utun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 2000 inet6 fe80::7a68:beac:a9c9:97cb%utun0 prefixlen 64 scopeid 0x10 nd6 options=201<PERFORMNUD,DAD> utun1: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500 inet 192.168.10.2 --> 192.168.10.2 netmask 0xffffff00 # netstat -nr Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire 0/1 192.168.10.1 UGSc 113 0 utun1 default 172.18.15.254 UGSc 1 0 en0 20

  21. Computer Center, CS, NCTU User-authentication 1.Simply by signing client certs. 2.Use Username/password 21

  22. Computer Center, CS, NCTU Server Side Inside server.conf # Using PAM to auth (Working with LDAP/NIS/Local Accout) (verify-client-cert) plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so login # Use a shell script to auth auth-user-pass-verify /etc/openvpn/auth.sh via-env script-security 3 # To allow script reading passwords Reference: /usr/share/doc/openvpn-2.4.6/README.auth-pam /etc/pam.d/login 22

  23. Computer Center, CS, NCTU Client Side # A dialog will popup to ask you username/password auth-user-pass # Saving username/password into a file auth-user-pass client.secret # cat client.secret Clientname Clientpassword 23

  24. Computer Center, CS, NCTU Reference https://www.digitalocean.com/community/tutorials/how-to-setup-and- configure-an-openvpn-server-on-centos-7 https://www.howtoforge.com/tutorial/how-to-install-openvpn-on- centos-7/ https://wiki.archlinux.org/index.php/OpenVPN 24

Related


More Related Content

giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#