কম্পিউটার টিউটোরিয়াল

লিনাক্স CentOS/RHEL-এ OpenVPN সার্ভার ইনস্টল ও কনফিগারেশন

এই লেখায় আমরা লিনাক্স CentOS/RHEL (7/8)-এ চলমান OpenVPN সার্ভারের ইনস্টলেশন এবং কনফিগারেশন বিবেচনা করব এবং দেখাব কিভাবে একটি কনফিগার করা OpenVPN সার্ভার ব্যবহার করে NAT পেছনে থেকে দুটি রিমোট কম্পিউটার (অথবা অফিস) একটি একক নেটওয়ার্কে যোগ করবেন। VPN ক্লায়েন্টগুলো সার্টিফিকেট ব্যবহার করে প্রমাণীকৃত হবে।

VPN হল تكنোলজির একটি সেট যা পাবলিক নেটওয়ার্ক বা ইন্টারনেটের ওপর একটি সিকিউর নেটওয়ার্ক তৈরি করতে সাহায্য করে। VPN ব্যবহার করে, আপনি বিভিন্ন ডিভাইস বা নেটওয়ার্ককে ইন্টারনেটের ওপর একটি একক সিকিউর লোকাল নেটওয়ার্কে সংযুক্ত করতে পারেন।

OpenVPN হল VPN টেকনোলজির ওপেন সোর্স SSL/TLS-ভিত্তিক ইমপ্লিমেন্টেশনlardan একটি যা OpenSSL-ভিত্তিক। OpenVPN ব্যবহার করে, আপনি NAT ডিভাইসের পেছনে থেকে রিমোট অফিস এবং পৃথক কম্পিউটার উভয়কেই একটি একক নেটওয়ার্কে সংযুক্ত করতে পারেন।

OpenVPN এবং Easy-RSA ইনস্টলেশন

প্রথম ধাপে, আপনাকে EPEL রিপোজিটরি সংযুক্ত করে আপনার হোস্ট আপডেট করতে হবে:

# yum install epel-release -y
# yum update -y

সিস্টেম আপডেট হওয়ার পর, yum প্যাকেজ ম্যানেজার ব্যবহার করে OpenVPN এবং Easy-RSA ইনস্টল করুন (VPN সার্ভারে PKI কি ইনফ্রাস্ট্রাকচার বাস্তবায়নের জন্য এটা লাগবে)।

# yum install openvpn easy-rsa -y

Easy-RSA কনফিগারেশন এবং X.509 সার্টিফিকেট জেনারেশন কীভাবে করবেন?

সব easy-rsa স্ক্রিপ্ট /etc/openvpn/-এ কপি করুন:

# cp -r /usr/share/easy-rsa /etc/openvpn/

/etc/openvpn/easy-rsa/3/-এ যান এবং সেখানে vars ফাইল তৈরি করুন:

# cd /etc/openvpn/easy-rsa/3/
# nano vars

ফাইলের কন্টেন্ট যোগ করুন (আপনার প্রয়োজন অনুযায়ী কনফিগ মডিফাই করতে পারেন):

set_var EASYRSA "$PWD" set_var EASYRSA_PKI "$EASYRSA/pki" set_var EASYRSA_DN "cn_only" set_var EASYRSA_REQ_COUNTRY "DE" set_var EASYRSA_REQ_PROVINCE "MUN" set_var EASYRSA_REQ_CITY "BY" set_var EASYRSA_REQ_ORG "WOSHUB" set_var EASYRSA_REQ_EMAIL "vpnadmin@woshub.com" set_var EASYRSA_REQ_OU "IT dept" set_var EASYRSA_KEY_SIZE 4096 set_var EASYRSA_ALGO rsa set_var EASYRSA_CA_EXPIRE 7500 set_var EASYRSA_CERT_EXPIRE 3650 set_var EASYRSA_NS_SUPPORT "no" set_var EASYRSA_NS_COMMENT "CERTIFICATE AUTHORITY" set_var EASYRSA_EXT_DIR "$EASYRSA/x509-types" set_var EASYRSA_SSL_CONF "$EASYRSA/openssl-1.0.cnf" set_var EASYRSA_DIGEST "sha512"

ফাইলে আপনি যেকোনো ডেটা নির্দিষ্ট করতে পারেন, এটি কনফিগারেশন এবং সার্ভারের পরবর্তী অপারেশনে কোনো প্রভাব ফেলবে না।

ফাইলটি এক্সিকিউটেবল হতে হবে, তাই এই কমান্ড চালান:

# chmod +x vars

OpenVPN সার্টিফিকেট এবং কি জেনারেট করুন

কি তৈরির আগে, PKI ডিরেক্টরি ইনিশিয়ালাইজ করুন এবং একটি CA কি তৈরি করুন।
# cd /etc/openvpn/easy-rsa/3/
# ./easyrsa init-pki

Note: using Easy-RSA configuration from: ./vars init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: /etc/openvpn/easy-rsa/3/pki

একটি CA কি তৈরি করুন:

# ./easyrsa build-ca

কমান্ড চালানোর পর, আপনাকে কি এবং সার্টিফিকেট জেনারেট করার জন্য পাসওয়ার্ড লিখতে হবে। সার্টিফিকেট সাইন করার জন্য পরে এই পাসওয়ার্ড লাগবে।

লিনাক্স CentOS/RHEL-এ OpenVPN সার্ভার ইনস্টল ও কনফিগারেশন

একটি সার্ভার কি তৈরি করুন (সার্ভার নাম vpn.woshub.com):

nopass অপশন পাসওয়ার্ড ডিজেবল করে

# ./easyrsa gen-req vpn.woshub.com nopass

Note: using Easy-RSA configuration from: ./vars Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017 Generating a 4096 bit RSA private key .........................++ writing new private key to '/etc/openvpn/easy-rsa/3/pki/private/vpn.woshub.com.key.R4IYCbD1zP' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Common Name (eg: your user, host, or server name) [vpn.woshub.com]: Keypair and certificate request completed. Your files are: req: /etc/openvpn/easy-rsa/3/pki/reqs/vpn.woshub.com.req key: /etc/openvpn/easy-rsa/3/pki/private/vpn.woshub.com.key

সার্টিফিকেট ইস্যু করার সময় Common Name কলামে Enter চাপুন.

আমাদের CA সার্টিফিকেট ব্যবহার করে vpn.woshub.com কি সাইন করুন:

# ./easyrsa sign-req server vpn.woshub.com

সার্টিফিকেট সাইন করার জন্য, আমাদের CA সার্টিফিকেট ইস্যু করার সময় সেট করা পাসওয়ার্ড লাগবে:

লিনাক্স CentOS/RHEL-এ OpenVPN সার্ভার ইনস্টল ও কনফিগারেশন

স্ক্রিনশটে দেখানো হয়েছে, প্রসেসে আপনাকে yes এবং CA পাসওয়ার্ড লিখতে হবে।

সার্টিফিকেটগুলো কোনো এরর ছাড়া জেনারেট হয়েছে কিনা নিশ্চিত করতে এই কমান্ড চালান:

# openssl verify -CAfile pki/ca.crt pki/issued/vpn.woshub.com.crt

pki/issued/vpn.woshub.com.crt: OK

সব OpenVPN সার্ভার সার্টিফিকেট তৈরি হয়েছে।

  • রুট সার্টিফিকেট pki/ca.crt
  • প্রাইভেট সার্ভার কি pki/private/vpn.woshub.com.key
  • সার্ভার সার্টিফিকেট pki/issued/vpn.woshub.com.crt

একটি ক্লায়েন্ট কি জেনারেট করতে নিচের কমান্ড চালান:

# ./easyrsa gen-req client_name nopass

চলুন admin1 ক্লায়েন্ট কি জেনারেট করি:
# ./easyrsa gen-req admin1 nopass

Note: using Easy-RSA configuration from: ./vars Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017 Generating a 4096 bit RSA private key ..........++ writing new private key to '/etc/openvpn/easy-rsa/3/pki/private/admin1.key.R5OY6reT2e' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Common Name (eg: your user, host, or server name) [admin1]: Keypair and certificate request completed. Your files are: req: /etc/openvpn/easy-rsa/3/pki/reqs/admin1.req key: /etc/openvpn/easy-rsa/3/pki/private/admin1.key

সার্ভার কির মতো এটিও CA সার্টিফিকেট ব্যবহার করে সাইন করতে হবে:

# ./easyrsa sign-req client admin1

লিনাক্স CentOS/RHEL-এ OpenVPN সার্ভার ইনস্টল ও কনফিগারেশন

ইউজারের জন্য সার্টিফিকেট তৈরি হয়েছে।

অতিরিক্তভাবে, আপনাকে একটি ডিফি-হেলম্যান কি জেনারেট করতে হবে কি এক্সচেঞ্জের জন্য:

# ./easyrsa gen-dh

জেনারেট হতে কিছু সময় লাগে:

লিনাক্স CentOS/RHEL-এ OpenVPN সার্ভার ইনস্টল ও কনফিগারেশন

তারপর একটি TSL সার্টিফিকেট জেনারেট করুন:

# openvpn --genkey --secret ta.key

যদি পরে আমরা ক্লায়েন্ট সার্টিফিকেট রিভোক করতে চাই, তবে একটি CRL কি জেনারেট করতে হবে:

# ./easyrsa gen-crl

Note: using Easy-RSA configuration from: ./vars Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017 Using configuration from /etc/openvpn/easy-rsa/3/pki/safessl-easyrsa.cnf Enter pass phrase for /etc/openvpn/easy-rsa/3/pki/private/ca.key: An updated CRL has been created. CRL file: /etc/openvpn/easy-rsa/3/pki/crl.pem

একটি সার্টিফিকেট রিভোক করতে এই কমান্ড চালান:

./easyrsa revoke admin1 — যেখানে admin1 হল সার্টিফিকেটের নাম

প্রয়োজনীয় সার্টিফিকেটগুলো তৈরি হয়েছে। এখন সেগুলো ওয়ার্ক ডিরেক্টরিতে কপি করুন।

সার্ভার সার্টিফিকেটগুলো এখানে:

# cp pki/ca.crt /etc/openvpn/server/
# cp pki/issued/vpn.woshub.com.crt /etc/openvpn/server/
# cp pki/private/vpn.woshub.com.key /etc/openvpn/server/
# cp pki/private/dh.pem /etc/openvpn/server/
# cp pki/private/ta.key /etc/openvpn/server/
# cp pki/crl.pem /etc/openvpn/server/

ক্লায়েন্ট সার্টিফিকেটগুলো এখানে:

# cp pki/issued/admin1.crt /etc/openvpn/client/
# cp pki/private/admin1.key /etc/openvpn/client/

OpenVPN সার্ভার কনফিগারেশন ফাইল, ফায়ারওয়াল রুলস

OpenVPN কনফিগারেশন ফাইলের সেটিংসে যাই। সব থেকে প্রথম, আপনার OpenVPN কনফিগারেশন ফাইল server.conf তৈরি করুন:

# cd /etc/openvpn/ && nano server.conf

ফাইলের কন্টেন্ট নিচের মতো পরিবর্তন করুন:

# Specify the port, protocol and device port 1194 proto udp dev tun # Specify the paths to the server certificates ca /etc/openvpn/server/ca.crt cert /etc/openvpn/server/vpn.woshub.com.crt key /etc/openvpn/server/vpn.woshub.com.key # Paths to key CRL and DH dh /etc/openvpn/server/dh.pem crl-verify /etc/openvpn/server/crl.pem # Specify the IP settings of the network VPN clients will get addresses from server 10.1.2.0 255.255.255.0 push "redirect-gateway def1" # Specify the assigned DNS servers push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4" # Allow connection to different clients with the same key duplicate-cn # TLS protection tls-auth /etc/openvpn/server/ta.key 0 cipher AES-256-CBC tls-version-min 1.2 tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256 auth SHA512 auth-nocache # Other configuration details keepalive 20 60 persist-key persist-tun comp-lzo yes daemon user nobody group nobody # Path to the log file log-append /var/log/openvpn.log verb 3

তারপর ফাইলটি সেভ করুন। আমি আমার VPN সার্ভারের জন্য ডিফল্ট UDP পোর্ট 1194 নির্দিষ্ট করেছি, কিন্তু আপনি আপনার সার্ভারের যেকোনো ফ্রি পোর্ট নির্দিষ্ট করতে পারেন OpenVPN-এর জন্য।

এখন আপনাকে শুধু ফায়ারওয়াল রুলস সেট করতে হবে কানেকশন এবং সেগমেন্টের মধ্যে রাউটিং অনুমতি দিতে।

আপনি যদি firewalld ব্যবহার করেন, forwarding কার্নেল মডিউল প্রথমে এক্টিভেট করুন:

# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
# sysctl -p

net.ipv4.ip_forward = 1

firewalld-এ openvpn সার্ভিস যোগ করুন, এবং tun0 ইন্টারফেসকে trusted zone-এ যোগ করুন:

# firewall-cmd --permanent --add-service=openvpn
# firewall-cmd --permanent --zone=trusted --add-interface=tun0

firewalld trusted zone-এর জন্য ‘MASQUERADE’ এক্টিভেট করুন:
# firewall-cmd --permanent --zone=trusted --add-masquerade

NAT এক্টিভেট করুন:

# firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.1.2.0/24 -o Server_IP -j MASQUERADE
# firewall-cmd –reload

আপনি যদি firewalld ছাড়া iptables ব্যবহার করেন, তবে এই কমান্ডগুলো চালান:

# iptables -t nat -A POSTROUTING -s 10.1.2.0/24 -o eth0 -j MASQUERADE
# iptables -A INPUT -p udp –dport 1194 -j ACCEPT
# service iptables save

OpenVPN সার্ভিস চালু করুন এবং স্টার্টআপে যোগ করুন:

# systemctl start openvpn@server
# systemctl enable openvpn@server

নিশ্চিত হন যে udp\1194 পোর্ট openvpn সার্ভিস দ্বারা লিসেন করা হচ্ছে:

# lsof -i:1194

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME openvpn 12327 nobody 5u IPv4 45122 0t0 UDP *:openvpn

নেটওয়ার্ক ইন্টারফেসের IP সেটিংস চেক করুন:

# ip a

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100 link/none inet 10.1.2.1 peer 10.1.2.2/32 scope global tun0 valid_lft forever preferred_lft forever

আপনি দেখতে পাচ্ছেন, কনফিগারেশন সময় নির্দিষ্ট করা নেটওয়ার্ক tun0 ডিভাইসে যোগ হয়েছে।

এই হল আপনার OpenVPN কাজ করানোর জন্য ন্যূনতম সেটিংস।

OpenVPN ব্যবহার করে একাধিক অফিস (কম্পিউটার) সংযোগ কীভাবে করবেন?

দেখি কিভাবে NAT-এর পেছনে থেকে ইন্টারনেট অ্যাক্সেস পাওয়া দুটি রিমোট কম্পিউটার OpenVPN সার্ভারের সাথে সংযোগ করে একই নেটওয়ার্কে যোগ করা যায়। উইন্ডোজ চলমান একটি কম্পিউটার থেকে OpenVPN সার্ভারের সাথে সংযোগ করতে, আমি অফিসিয়াল ক্লায়েন্ট ব্যবহার করছি। আপনি অফিসিয়াল ওয়েবসাইট থেকে ডাউনলোড করতে পারেন, কিন্তু আমরা এটা বিস্তারিত বর্ণনা করব না, সরাসরি কনফিগারেশনে যাব।

ক্লায়েন্ট ইনস্টল করার পর, কনফিগারেশন ফাইল তৈরি করতে এখানে যান:

C:\Program Files\OpenVPN\config\

আমি client নামে একটি ফাইল তৈরি করেছি এবং এতে নিচের কন্টেন্ট যোগ করেছি:

client dev tun proto udp remote 112.113.114.15 1194 resolv-retry infinite nobind block-outside-dns persist-key persist-tun mute-replay-warnings remote-cert-tls server tls-client auth SHA512 tls-auth "C:\\Program Files\\OpenVPN\\config\\ta.key" 1 remote-cert-eku "TLS Web Server Authentication" ca "C:\\Program Files\\OpenVPN\\config\\ca.crt" cert "C:\\Program Files\\OpenVPN\\config\\admin1.crt" key "C:\\Program Files\\OpenVPN\\config\\admin1.key" cipher AES-256-CBC comp-lzo verb 3

এটি কনফিগার করতে, আমাদের আগে তৈরি করা ক্লায়েন্ট, সিকিউরিটি এবং সার্ভার সার্টিফিকেট লাগবে। আপনাকে সেগুলো আপনার সার্ভার থেকে ডাউনলোড করে একটি লোকাল ফোল্ডারে রাখতে হবে। তারপর OpenVPN ক্লায়েন্ট কনফিগারেশন ফাইলে সেগুলোর পাথ নির্দিষ্ট করুন।

তারপর ট্রে-এ OpenVPN আইকনে ক্লিক করে সার্ভারের সাথে সংযোগ করতে পারেন:

লিনাক্স CentOS/RHEL-এ OpenVPN সার্ভার ইনস্টল ও কনফিগারেশন

আমি সংযোগ করেছি এবং আমার ডিভাইসের জন্য নিচের IP ঠিকানা পেয়েছি:

IPv4 address. . . . . . . . . . . . : 10.1.2.14 Subnet mask . . . . . . . . . . : 255.255.255.0

দ্বিতীয় কম্পিউটারেও (NAT-এর পেছনে) আমি একই কাজ করেছি এবং আগে থেকে দ্বিতীয় ইউজারের জন্য সার্টিফিকেট তৈরি করেছিলাম। সংযোগের পর, দ্বিতীয় PC-ও VPN নেটওয়ার্ক থেকে একটি IP ঠিকানা পেয়েছে:

IPv4 address. . . . . . . . . . . . : 10.1.2.16 Subnet mask . . . . . . . . . . : 255.255.255.0

সংযোগের পর, দুটি কম্পিউটার একই নেটওয়ার্কে আছে এবং একে অপরকে দেখতে পাচ্ছে।

দ্বিতীয় PC-কে পিং করুন:

Pinging 10.1.2.16 with 32 bytes of data: Reply from 10.1.2.16: bytes=32 time=73ms TTL=127

প্রথম PC-এ পিং করুন:

Pinging 10.1.2.14 with 32 bytes of data: Reply from 10.1.2.14: bytes=32 time=79ms TTL=127

দুই কানেক্টেড VPN ক্লায়েন্ট একে অপরকে সরাসরি প্যাকেট পাঠাতে এবং ফাইল ট্রান্সফার করতে পারে। এভাবে, আমরা দেশের দুটি ভিন্ন জায়গায় ফিজিক্যালি অবস্থিত ডিভাইসগুলোকে একটি একক লোকাল নেটওয়ার্কে যোগ করতে পেরেছি।

আপনি আপনার OpenVPN সার্ভারে ইউজারদের জন্য যেকোনো সংখ্যক কি বা সার্টিফিকেট তৈরি করতে পারেন। আপনাকে নতুন সার্টিফিকেট প্রয়োজন হলে, /etc/openvpn/easy-rsa/3-এ এই কমান্ডগুলো চালান:

# ./easyrsa gen-req clientname nopass
# ./easyrsa sign-req client clientname

আপনার নেটওয়ার্ক সিকিউর রাখতে ব্যবহৃত না হওয়া ক্লায়েন্ট সার্টিফিকেট রিভোক করা ভুলবেন না।

  1. Void Linux কী এবং কীভাবে ইনস্টল করবেন

  2. লিনাক্সে Openbox উইন্ডো ম্যানেজার ইনস্টল ও কনফিগার করার পদ্ধতি

  3. লিনাক্স VPS-এ CS:GO সার্ভার তৈরির পদ্ধতি

  4. উচ্চ ট্রাফিক ওয়েবসাইটের জন্য লিনাক্স সার্ভারে Apache এবং PHP কনফিগার করা