Linux Server Build: OpenVPN From Scratch - Hak5 2019
HTML-код
- Опубликовано: 5 июл 2016
- Hak5 -- Cyber Security Education, Inspiration, News & Community since 2005:
____________________________________________
Today we're building an OpenVPN server from scratch in Linux!
-------------------------------
Shop: www.hakshop.com
Support: / threatwire
Subscribe: / hak5
Our Site: www.hak5.org
Contact Us: / hak5
------------------------------
Install and setup OpenVPN
apt-get update; apt-get install openvpn easy-rsa
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/server.conf
nano /etc/openvpn/server.conf
replace dh1024.pem with dh2048.pem
#uncomment push "redirect-gateway def1 bypass-dhcp"
#uncomment push "dhcp-option DNS" and replace IP addresses with your fav DNS
#uncomment user nobody
#uncomment group nogroup
#save and exit
Setup Firewall
#Enable IP forwarding
echo 1 /proc/sys/net/ipv4/ip_forward
nano /etc/sysctl.conf
#uncomment net.ipv4.ip_forward=1
#save and exit
#Configure firewall.
ufw status
ufw allow ssh
ufw allow 1194/udp
#Let packets forward through the VPS by changing for forward policy to accept
nano /etc/default/ufw
#replace DROP with ACCEPT in DEFAULT_FORWARD_POLICY="DROP"
#save and exit
#Enable NAT and IP masquerading for clients
nano /etc/ufw/before.rules
#Add the following near the top
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
ufw status
Setup Keys and Start the Server
cp -r /usr/share/easy-rsa/ /etc/openvpn
mkdir /etc/openvpn/easy-rsa/keys
nano /etc/openvpn/easy-rsa/vars
#change export KEY_* values
#set KEY_NAME to "server"
#save and exit
#Generate the 2048 bit Diffie-Hellman pem file we pointed to in the openvpn config
openssl dhparam -out /etc/openvpn/dh2048.pem 2048
#move to the easy-rsa directory
cd /etc/openvpn/easy-rsa
#Set the variables we configured
. ./vars
./clean-all
./build-ca #Accept all defaults
./build-key-server server #Accept all defaults
#Move the newly generated certificates to /etc/openvpn
cp /etc/openvpn/easy-rsa/keys/server.crt,server.key,ca.crt /etc/openvpn
#In /etc/openvpn we should have a server.conf, server.crt, server.key, ca.crt and dh2048.pem
#start the OpenVPN service
service openvpn start
service openvpn status
Setup keys for the first client
./build-key client
ls keys
#Make a new directory to merge the client configuration and keys
mkdir ~/client
#Copy the example client configuration renaming the file extension from conf to ovpn
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client/pineapple.ovpn
cd /etc/openvpn/easy-rsa/keys
cp client.crt client.key client.ovpn ~/client
cp /etc/openvpn/ca.crt ~/client
Securely copy client.crt, client.key, ca.crt and client.ovpn to your client device
cd ~/client
#determine public IP address
ifconfig
nano pineapple.ovpn
find remote and replace my-server-1 with IP address of VPN server
uncomment group nogroup
uncomment user nobody
comment out the ca, cert and key directives
save and exit
echo "ca" to pineapple.ovpn
cat ca.crt to pineapple.ovpn
echo "/ca" to pineapple.ovpn
echo "cert" to pineapple.ovpn
cat client.crt to pineapple.ovpn
echo "/cert" to pineapple.ovpn
echo "key" to pineapple.ovpn
cat client.key to pineapple.ovpn
echo "/key" to pineapple.ovpn
~-~~-~~~-~~-~
Please watch: "Bash Bunny Primer - Hak5 2225"
• Bash Bunny Primer - Ha...
~-~~-~~~-~~-~
____________________________________________
Founded in 2005, Hak5's mission is to advance the InfoSec industry. We do this through our award winning educational podcasts, leading pentest gear, and inclusive community - where all hackers belong. Наука
This was a great run through. Thanks so much for making this pretty straight forward. This gave me what I did not have before. Going through docs and tutorials and the like it always had a LOT of extra. This was just a handbook on "Lets just make this work." You rock!
Awesome episode, welcome back guys!
Darren did a really good job of keeping a 50+ minute setup and operation video interesting. I bet this is going to help a lot of people! Setting things up on my Pi 3 right now!
You guys rock. I just followed this video and set up an OpenVPN server on a Raspberry Pi on my home network. and it works. I must confess that I followed another of your vids about OpenVPS SA on a VPS, and that didn't work for me (I kept getting four different 10.x.x.x subnets, and the gateway at home (the Pi) and the client (a laptop) ended up on different subnets) , and the simplified script based setups out there in Internet Land didn't work for me either (I think it may have been routing issue). Anyway - it's working now. Great!
Keeps up the good work.
i love the way you put everything you used in the description makes it easier to refer to
This is very good and well done. Just very thorough IMAO. Been researching this for some days now and this is the best I have come across so far.
great show guys loved the detailed content and the long duration with comprehensive walk through. much appreciated.
You are by far the best teacher for soft soft . It's very complicated at first - overwhelming, actually - but, you make it doable for
I love my Pi, but i bought a refurbished HP ProLiant DL360 G7 for less than $200 off Amazon and this thing is a beast. I’m loading down every home service I need, from Plex-Media to DNS Blackhole. I’m looking forward to testing this OpenVPN install video when I get home tonight.
Thanks Hak5. As always, your tutorials are second to none. Fun, detailed, and insightful in ways only seasoned veterans of the field can provide.
Of all the effen tutorials, you guys got me up and running. Thank you!
I just fixed my own Pi3-based OpenVPN box thanks to your tips about the firewall.
Thank you very much!!
This is the first of your vids I've watched - you guys are super fun, subscribed.
Tried it out on a virtual machine first. Worked first time! Soon to be on my cloud server.
Nice one guys!
Yes vote for IPv6 episode in depth!
why you want to know about ipv6?
Thanks Darren, I was pulling what little hair I have left trying to configure an OpenVPN server.
Off to deploy this tech for my travels.
Snubs, the mnemonic helps me where the wrong character can make you elated or deflated.
Would love to see an in-depth IPv6 episode showing up! Keep up the good stuff! :)
an episode on ipv6 would be great. Thanks for the amazing video, guys.
I'm a total hacking noob, but this was so much fun to watch. I'll get this running, and I'll also enjoy seeing your videos about raspberry pi and RF. Keep up the good work!
This tutorial helped me out so much, both of you are great. Thanks!
You guys are lovely. Thank you for a great video, I learned a lot here.
Fantastic tutorial guys. Thank you for making this video.
Thanks for the kind words, I'm always happy to help! Let know if you'd like any videos on specific topics in the future. I wish you all the
Thanks for the tutorial , now I get the server running on my Rpi ! Feel for u guys and keep it up~
HEEELP!
at around 36:18, he says he gets the new tun0 network interface, because he had started the openVPN service, but I don't get that device when I type ifconfig...! :-\ Why is that...?
I am running Debian 8.6 on Pi
Welcome back Hak5, welcome back!
Great tutorial
A while ago I was looking for him
this is the best tutorial i have ever seen on the net.
The Best Explanation !!! I referred to many videos , but out of all tNice tutorials was the best I could find among all .... Also got to know many tNice tutorialngs
just 3 years away from 2026. You did great job regarding explanation.
Finally a complete step by step tutorial, and it works, got it working on a Ubuntu 16.04 desktop and a nVidia Jetson TK1. Awesome ! Thanks !
In fact it works well locally but not over the Internet. My client gives a TLS Error: TLS key negotiation failed to occur within 60 seconds.
It looks like a firewall issue on port 1194. Anyone got this error ?
Is it port forwarded?
You mean on the router? I have a basic router where I can only do simple port mapping : I can set a local IP address, a protocol, local port and public port. I set my vpn server local IP to UDP and both ports to 1194, but it is not working. Is there something I missed ? Or my router is not suitable ? Thanks!
Any router should have some form of port forwarding. What router do you have?
I have the Vodafone EasyBox 804. Do you recommend any router ?
Great job! You guys should do a video where you tunnel openvpn through Stunnel or any other methods that can bypass deep packet inspections. Getting Stunnel to work took me 10+ hours so I would love to see what other methods you guys can pull off!
I know, I know, 2 years later...
First, thanks for this - its very informative, and you'd be surprised how few VPN server setup walkthroughs there are out there. If you all are still paying attention to comments, it might be cool to give a refresher on why "allow ssh" on its own isn't very safe (just explain you're keeping your putty session active). Not sure if you guys have done a ssh keypair video but i'd love to see an updated/current one.
You guys are great! Keep up the good work!
i truly support ur programs guys because I am a unix guy.
i love you guys. thanks for the awesome videos
Thank you!! . gonna try this on my PI. I now know the steps I missed :D
good work and thank you so much, Greetings from Egypt
WOW, what a fantastic demo. I could follow every step. It was all crystal clear and matched my requirements precisely. Nice hats too.
All working perfectly after realising I'd messed up by uncommenting the line "tls-auth ta.key 0 #" as directed by some shoddier how-to page. My bad should have come here first!!!. But Seriously, this was great. Thank You Thank You Thank you.
you're doing great, thanks!
Literally the greatest
been waiting for this
Well said at the end.
I "hacked" my way through this alone. I wish this video was available when I was working this out. Needless to say my solution is functioning the same but I ended up making things a bit more complicated. Great job on this video!
I would like to see an ipv6 video.
lol
thanks a lot! you are a cool team!
love the hats!
Congratulations on the podcast Award.
Right here with ya, bro
Awesome tutorial 💯 thanks
+1 for an 'ipv6 for dummies'!!!
@Hak5 - I can't like this episode enough times!
I will be playing around with OpenVPN server running on OpenWRT to manage a few remote networks. I also loved episodes #2017 and #2018; I'm drafting some ideas for my backpack "Network pocket" (housing hotspot gear, and extra storage, etc)...
I'll publish a photo and tag yo guys. I need an extra nano =). #jokeNotjoke.
Anyway - Love your show. I've been a fan for over nine years!
Thanks a lot for your hak.
ty i love ur videos
Please do a Ipv6 episode!
Yes, do an IPv6 episode! We need more people to be aware of, and fluent with, IPv6!
this is fantastic!
I feel you!
this is great thanks
Lifesavers thanks
Yes, IPv6 and networking protocols please!
for all the raspberry pi users check out pivpn it is the easiest way to install openvpn
Hey!!! Just awesome
In 5 years I will come back to say that even though we have fireguard, this is still relevant
I would love a IPv6 video!
Please update this tutorial again. Make it based on new versions. Thanks. Awesome channel.
cool cool stuffs thanks guyss
Man I love when things are badly documented
thanks a lot + Please do a Ipv6 episode!
thank you!!!
Hey guys, been a real fan for a long time, quisck question... when you mentioned to be able to through this build into an arduino... any arduino specific in mind?
would like to see a ipv6 episode as well.
Bro it’s very intimidating! I’ve been slacking on it for a month now. The symbols are very confusing. You have to train your mind to
Thank that help alot
I would like an IPv6 episode
Also why the Return on empty lines between commands?
the empty lines is to keep things clean he always do that.
and build tracks from there and leave the rest for a later session. I did both but did the first way initially and it took a day to get through
IPv6 episode FTW!
I recomnd you two to buy the Producer Edition (And if you have got money, buy the Full Bundle)
Can you guys do an episode on how o set up openVPN with a connection tethered from your phone ? You mentioned that's how you operate at home, and so do I. Would hugely appreciate it... And yeah we don't mind long episodes :-)
IIIIIIIIIIII LOOOOOOOOOOOOOOOOOOOOOOOOOOVEEEEEE YOUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU I spent straight 3 hour on the Arch wiki and now it work omg I was so so close 17:41 I put tun0 instead of the real one lmaoooo i'm so glad it work
This was a great video. Any chance that this could be updated to reflect changes since 2016?
Not a lot of changes actually :) From what I know after a couple weeks extensive bed-time reading
Shannon's mike seemed a lot louder than Darren's in this ep, just me? great ep though (y)
Nice.
Yes IPv6 episode please!
@Darren! when going back and forth between directories, type cd -
If you’re getting a KEY_CONFIG error stating the openssl.cnf is not correct or similar, use this while in the specified directory of the issue (where build-ca is located): ln -s openssl-1.0.0.cnf openssl.cnf
ILOVE THIS GRIL !! SHE IS SUPER CUTE !!
please make the ipv6 video
Yes please.
Yes please ipv6 video i remember it is a bunch of hex bytes to write one ipv6 address and i hate hex i have ten fingers :(
I would like to see that as well. Its one of those things im not too keen on =/
: ) The trick is to use the ridges in your fingers, along with the top of each. We have 8 fingers with 4 bits on each half byte, or hex from 0-F on one hand and 00-F0 on the other. This makes thinking binary and hex a little easier. Look up the Hexadecimal finger-counting scheme.
anders ballegaard and I was feeling lost before you told me it gets more complicated.
It appears that there have been a number of changes since 2016. Wondering if you might do an update for 2019?
(I initially thought this was a 2019 tutorial because of the title.)
you can make alarms & notifications with iptables when can you do a tut on this? :) it takes some googling but last time i checked it got advanced lol
Great video! But, this means for every user I have to create a user account on that Linux server?
don't you have to port forward in you router ? i'm confused this is different from other OpenVPN setups
I did all of this and it's not what i'm looking for, BUT HEY I LEARNED SO MUCH ABOUT LINUX FROM THIS VIDEO !!! thanks guys.
Dear Hak5 Team, it was a great tutorial! It helped me learning the complete process of setting up VPN very clearly. But I was wondering how to scale it up? For example, the openvpn server is running in one instance now. But how to use another instance behind a DNS (or Load balancer) so that the IP remain same but my service can handle more clients? Need this concept for academic purpose. Will you please make a tutorial on this topic, it will be really helpful. Thanks
Edit :
My appologies. When using a config file, omit the leading double dash "--" for the command. Simply put tun-ipv6 in it, then follow the rest.
Original Post
"For IPv6, you need to add the --tun-ipv6 to the profile/config file. You then replace IPv4 addresses with IPv6 addresses.
Be warned. Most people are NOT on IPv6 yet, as most admins don't want to take the time to comprehend what the new formula is. Also, subnets become a thing of the past, due to the number of possible addresses being such that you could assign one to every grain of sand on Earth....
Option explained :
--tun-ipv6 Build a tun link capable of forwarding IPv6 traffic. Should be used in conjunction with --dev tun or --dev tunX. A warning will be displayed if no specific IPv6 TUN support for your OS has been compiled into OpenVPN."
Hey just finding you two and love the video. I just recently tried to install openvpn on my Ubuntu 16.1 laptop and had a couple of questions. 1. is this usefull when you're travelling a lot, or rather is it still affective? 2. not sure why but I can't see openvpn in the manager, have I done something wrong?
Can you guys do a video on NAT and port forwarding with IP tables??? Pleeeease??
awesome vidorial* (new word) anyways I have a problem setting up the tap0 device in openvpn since I running this from a rPi I have it connected through ethernet. is it the same as the tun setup?
2017 still relevant
yes
ip6 yes please
You could buy a external drive with either windows or Linux and your HDD with the opposite so you can switch easily. that's what I do ;)
And you can easily setup you laptop to boot from USB/external drive in the Bios
Have you guys done a segment on proxy-chaining ?
will you ever post an updated version of this? half of the commands just wont work at all since easy-rsa has updated so much.
and you are using sysV while 2020 pretty much uses systemd
I'd add one thing... you probably should put your CA on another server than your openvpn server, just in case it gets compremised.
else if the openvpn server gets cracked all they have is the CA's public key and not the private key to create their own valid vpn client confs
any recommendations on tutorials that show how to enable Internet connection tunneling through this vpn configuration?