Create a complete Tor Onion Service with Docker and OpenSUSE in less than 15 minutes
CC Attribution 3.0 Unported:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal purpose as long as the work is attributed to the author in the manner specified by the author or licensor.
Evans, Jason S.
In a way, both Docker and Tor are shrouded in mystery. Containers have been the biggest thing in the IT field in the past few years and yet a lot of people don't know what they are good for. Why not just use a VM? Likewise, Tor is known only for the negative uses and connotations such as "The Dark Web" and "The Deep Web" meanwhile not many people know about the actual positives of the technology when it comes to secure communication and privacy. My presentation would be a short primer on both of these technologies followed by a 15-minute demonstration on how to create a Wordpress website, MariaDB Database, and Tor entry point with Docker on OpenSUSE Leap 15 that can be recreated on any hardware or VM even without an external IP and accessed anywhere in the world using the Tor Browser. There should also be time to take Q&A at the end. My docker-compose files, notes, and presentation will then be available on GitHub.
 All right, we're going to create a complete Tor Onion service with Docker and openSUSA in less than 15 minutes. Unfortunately, my presentation is a little longer than 15 minutes, but not much more, and I promise to keep my slide deck short. But first of all, what is Tor? Tor is a free software and an open network that helps you defend against traffic analysis, which is a form of network surveillance that threatens personal freedom and privacy, confidential business activities and relationships, and state security. How does Tor work? Tor works basically like this. So Alice's Tor network obtains a list of Tor nodes from the server directory. Her Tor client, which is normally the Tor browser, picks up a random path to the destination server. Green links are encrypted, red links are in the clear. So anything inside of the Tor network is encrypted. Doesn't matter if they're using HTTPS, HTTP, doesn't matter the protocol, it's encrypted. But once you leave the Tor network, then it's normal traffic. If at any time the user visits another site, Alice's Tor client selects a secondary random path. Again, the green links are encrypted, the red links are not. What isn't Tor? Now, if you read anything about InfoSec or about the security community, you're going to hear that Tor is a bad place. What isn't Tor? Tor isn't the dark web. Tor is a security and privacy network. It is used by normal people, journalists, activists, bloggers, law enforcement, business executives, militaries and IT professionals. I'm not going to go into this long spiel about each one of these, but I did leave a link here so you can actually see more about how different groups of people are using Tor. But it has problems. It's got bad neighbors. There are lots and lots of bad websites on the Tor network. We know what those are. Those are drug markets. Those are crime markets. Those are really bad. There are really bad things. And because of this, it's got a bad reputation. I would not do this presentation at Suzicon because in a corporate environment, people aren't going to want to hear about Tor because it sounds bad. It's got a bad reputation. It's edgy. It's also a little slow. Because of the encryption factor within Tor, where everything is encrypted at least three times to get from you to the outside internet via Tor, you're going to have lag. And there's no way around that. But we can help change the face of Tor network. We can encourage security and privacy advocates and users to harness the power of the network. We can encourage nonprofits to mirror their websites on Tor. We need good neighbors. And of course, you can build your own onion service. If you've got a blog or you're thinking about doing a blog, maybe put it on Tor or maybe mirror it on Tor. If you've got a nonprofit, especially a nonprofit that deals with information such as whistleblowers, mirror your website on Tor. Make sure that both you and your users get that extra level of security and privacy. How do containers fit in all this? And how are onion services made? Well, the old way, and this is not using containers, Bob wants to build an onion service. This is what we call the Tor website. He's got a website already, but wants to be available on Tor. This is to protect the privacy of his users. He installs a Tor service, Zipper and Tor. He's a good Linux user and uses OpenSusa. He edits his Tor RFC file and tells it to listen on port 80. He starts the service. He gets a new host name and anybody can go to that website via the Tor browser. The new way, Gecko wants to build an onion service, but he's very protective of his privacy. He's got ideas and information that he would like to share with the world, but he doesn't necessarily want people to know who he is for whatever reason. He creates a web container and attaches it to the Tor container, which is what we're going to do today. He never opens port 80, 443 or any other port locally. So if you do an in-map on his server, you're not going to see those ports open. They are not open. Apache thinks it's open and Apache will bring in traffic on those ports, but they're not really open. The Tor client or Tor server, Tor service will actually bring in that traffic and make Apache think it's coming in on port 80, but it's not really. He finds his new onion host name on the container. We're going to use a little script to do that for us, but it's going to be there. Accessing onion services. Alice here is about Bob and Gecko's websites. She installs the Tor browser. She's a good open-susi user. Zipper and Tor browser launcher. Anybody with a laptop here who is not, doesn't have Tor already installed, go ahead and do that because we're going to be doing some live exercises. It's not the fastest thing to download, but it's out there. Of course, it's free. She puts in the onion URL like any other. Neither Bob nor Gecko ever see who she is or any other information that she doesn't want to give. Matter of fact, if their website is just plain HTML files, no scripts, no JavaScript, nothing else, just plain HTML, there's nothing that he can see about her. There's nothing she can see about him. She doesn't know who Gecko is because he doesn't explicitly say. There's no easy way to find out because Gecko is not an idiot. Gecko doesn't go around on Reddit saying, hey, I've got this website. He just has it out there anonymously so that way he can give information that he wants to share. She appreciates that she can also view Bob's website securely and without fear of being monitored. What are Docker containers? We're going to get into the container part now. A container image is a lightweight, standalone, executable package of a piece of software that includes everything needed to run it. Code, runtime, system tools, system libraries and settings. How does this help us? It's easy to run several engine services at once. You don't have to know how to set up the individual pieces. You don't have to be an expert in MySQL. You don't have to be an expert in Apache or Internet. You focus on your content and not on your administration. Wouldn't a VM work also? Sure. There's nothing wrong with running a VM. However, if you don't want to research all of the running pieces or if you're new or if you're highly constrained, for example, you've only got a VM and you don't have the resources to create another VM inside of it, which is not usually a good idea, containers make more sense. Some comparisons between virtual machines and containers, isolation, portability, what they contain and the speed. I'm not going to go through all of this. The big thing to point out is that containers run a little faster. They have some limitations. VMs require more overhead. They run a little slower, but they also contain a full operating system and not just a piece of an operating system needed to run an application. So our demonstration. Today we're going to use three containers. The first one will be a web server running Apache, a web server running Apache on WordPress. The second will be a MySQL database and the third will be running Tor. For demonstration, I'll be using Docker images to create the containers and the Docker compose command to set up everything quickly and easily. Using these steps, you can replicate this example website on your own. The dependencies, all you have to do is zip around these commands, these applications, if you don't already have them already, the dependencies will take care of everything else. And here's my Git file, and I'm going to go ahead and make this smaller. I'm going to go ahead and get this in myself. Copy. By the way, is this big enough for everybody or do I need to make it bigger? Good? Great. So we've just done that part. Make this big again. Let's look at this Docker compose file that we just pulled down. One of the first talks about, even though in the previous slide I said it was going to be the Apache then MySQL then Tor, and the actual file I've written is Tor first because it's easier. So let's look at the Tor service. This Tor service is running off of an image called Goldy slash Tor in service latest. Goldy is actually pretty good in that his images are up to date, and he generally keeps the latest version of Tor in his image. This links to the WordPress image in that the WordPress image contains Apache, which is going to be listening on port 80, even though it's not really. It's going to save its hidden service keys into a local directory in the Tor directory. It's pseudo looking for ports on port 80, even though it's not really. The database image is running MariaDB. In this image we can predefined our variables. These are really crappy passwords I know. MySQL root, the name of the database, the user and the password of the user, and again we're going to save that configuration to a local file, so if we do crash this container, we can just bring it right back up and not lose any data. And then the WordPress container. We're using the standard generic WordPress image from hub.docker.com. We're going to link this to the database because the WordPress needs the database in order to work off of. The environment variables have to match what are here. So we know that the database name, user and password are here, and we have the same thing here. The database host, by the way, it knows that the name of the database is DB, so it's looking for DB on port 3306. This is, in this case it actually is a real port, but it's inside of Docker. It's never seen on the outside. We're not going to publish this on the outside, it's just inside of the containers. And then we just Docker compose up, minus D. Minus D will run this as a daemon, not live, so oh, yes. They are not. I do have a lamp stack image that I wrote myself, but I haven't gone through all of the work of rewriting all of them for OpenSusa. The Tor one is based off Alpine, which is the smallest distro right now for container images. The WordPress and MySQL are based off of Debian. I've rewritten the MySQL one for less ones, but I haven't rewritten it for OpenSusa. So we're going to start the containers. Docker compose up, minus D. And that's it. Docker PS. We have three containers running. They've been up for a few seconds. These are brand new, like as of now. So I've got a little command I'm going to run, little script, Docker exec. And then the OpenSusa Tor, a con Tor, Tor one container, and then onions. Onions is a little script that gives us the host name. And there's our host name. So anybody running the Tor browser should be able to open this and probably hack me. Not the fastest application. Or you can blame it on my laptop either way. And you might think, well, this is a VM. You're connecting from your browser to the VM. Big deal. No. I'm going from this browser to Germany to Ireland, Netherlands to my VM. Each of those hops has an extra layer of encryption. This is what's cool about this. This VM has a 192.168 IP. I don't have access to this building's router. I can't do any kind of port forwarding. What's happened is that the Tor service went out to the Tor network and said, hey, I'm here. Here's my host name. And this is what I'm listening on. The Tor browser went out and said, hey, I've got this host name. Can you send me there? And it does. It does not use real IP. This is actually running through UDP. So that's just a simple website. A simple WordPress installation, not the most interesting or secure setup. But it works. It works quickly. That's the power of containers. I didn't have to go here and set up a VM for you. And then I could use Salt. I could use Salt or whatever to set up everything for you really quickly. But in this case, setting up the container worked. And it worked well. But that's not all. At my home laptop, I'm running a Go for server on Tor. Why? Because. You want to run Tomcat? Again, very simple configuration. And we can look at that file. It's very similar. I am, Dr. Compose. Again, we're using the Goldie image for Tor. And we're using Tomcat, which is based off of OpenSusix. I wrote this. So you can run Tomcat. But don't just take my word for it. I know Tomcat normally runs on 8080, but I make it easy. It helps if I get the right pass IP or right host name. So we're running Tomcat over Tor. It's just a matter of bringing up the image and it works. And that's pretty much it. I promise to keep this short and sweet. And we did set up the entire website, the entire WordPress website in less than 15 minutes. If you want to play around with Tor, this is an easy way to do it, especially if you're concerned about security. Any questions? Yes? You're right. The best way to do it is to use a hardened web service like EngineX. Worker does have some hardened web services out there that you can look into. But it's really up to you. You need to do your own due diligence on that. Anybody else? Excuse me? There is. There has been some experimenting with Darker Swarm, but I haven't gone into it that much. I'm hoping this time next year I'll do one on how to do the same thing on Kubernetes. So we get through load balancing, through distribution. Yes? Excuse me? No. I have not advertised the physical location at all. Look for the fact that you know that I'm here and I'm doing it. But no, you need to be a government-level analyst to be able to find the physical location. What happened in the case of one of the dark net markets, the person who was running that gave a lot of clues about himself. If he had just stayed quiet about who he was, he probably wouldn't have been caught because it's very, very difficult to backtrace someone running a Tor service. The way they normally do that is either they do just normal detective work or there are ways such as finding a vulnerability in the Tor browser, hacking that, and then that gives them away. At least that's what the government has told us so far. There might be other ways, but that's what they've released so far. Anybody else? Okay. We're going to wrap it up then. I hope everybody has a great rest of the conference. Thank you very much. Thank you.
 All right, we're going to create a complete Tor Onion service with Docker and openSUSA  in less than 15 minutes.  Unfortunately, my presentation is a little longer than 15 minutes, but not much more,  and I promise to keep my slide deck short.  But first of all, what is Tor?  Tor is a free software and an open network that helps you defend against traffic analysis,  which is a form of network surveillance that threatens personal freedom and privacy, confidential  business activities and relationships, and state security.  How does Tor work?  Tor works basically like this.  So Alice's Tor network obtains a list of Tor nodes from the server directory.  Her Tor client, which is normally the Tor browser, picks up a random path to the destination  server.  Green links are encrypted, red links are in the clear.  So anything inside of the Tor network is encrypted.  Doesn't matter if they're using HTTPS, HTTP, doesn't matter the protocol, it's encrypted.  But once you leave the Tor network, then it's normal traffic.  If at any time the user visits another site, Alice's Tor client selects a secondary random  path.  Again, the green links are encrypted, the red links are not.  What isn't Tor?  Now, if you read anything about InfoSec or about the security community, you're going  to hear that Tor is a bad place.  What isn't Tor?  Tor isn't the dark web.  Tor is a security and privacy network.  It is used by normal people, journalists, activists, bloggers, law enforcement, business  executives, militaries and IT professionals.  I'm not going to go into this long spiel about each one of these, but I did leave a link  here so you can actually see more about how different groups of people are using Tor.  But it has problems.  It's got bad neighbors.  There are lots and lots of bad websites on the Tor network.  We know what those are.  Those are drug markets.  Those are crime markets.  Those are really bad.  There are really bad things.  And because of this, it's got a bad reputation.  I would not do this presentation at Suzicon because in a corporate environment, people  aren't going to want to hear about Tor because it sounds bad.  It's got a bad reputation.  It's edgy.  It's also a little slow.  Because of the encryption factor within Tor, where everything is encrypted at least three  times to get from you to the outside internet via Tor, you're going to have lag.  And there's no way around that.  But we can help change the face of Tor network.  We can encourage security and privacy advocates and users to harness the power of the network.  We can encourage nonprofits to mirror their websites on Tor.  We need good neighbors.  And of course, you can build your own onion service.  If you've got a blog or you're thinking about doing a blog, maybe put it on Tor or maybe  mirror it on Tor.  If you've got a nonprofit, especially a nonprofit that deals with information such as whistleblowers,  mirror your website on Tor.  Make sure that both you and your users get that extra level of security and privacy.  How do containers fit in all this?  And how are onion services made?  Well, the old way, and this is not using containers, Bob wants to build an onion service.  This is what we call the Tor website.  He's got a website already, but wants to be available on Tor.  This is to protect the privacy of his users.  He installs a Tor service, Zipper and Tor.  He's a good Linux user and uses OpenSusa.  He edits his Tor RFC file and tells it to listen on port 80.  He starts the service.  He gets a new host name and anybody can go to that website via the Tor browser.  The new way, Gecko wants to build an onion service, but he's very protective of his privacy.  He's got ideas and information that he would like to share with the world, but he doesn't  necessarily want people to know who he is for whatever reason.  He creates a web container and attaches it to the Tor container, which is what we're  going to do today.  He never opens port 80, 443 or any other port locally.  So if you do an in-map on his server, you're not going to see those ports open.  They are not open.  Apache thinks it's open and Apache will bring in traffic on those ports, but they're not  really open.  The Tor client or Tor server, Tor service will actually bring in that traffic and make  Apache think it's coming in on port 80, but it's not really.  He finds his new onion host name on the container.  We're going to use a little script to do that for us, but it's going to be there.  Accessing onion services.  Alice here is about Bob and Gecko's websites.  She installs the Tor browser.  She's a good open-susi user.  Zipper and Tor browser launcher.  Anybody with a laptop here who is not, doesn't have Tor already installed, go ahead and  do that because we're going to be doing some live exercises.  It's not the fastest thing to download, but it's out there.  Of course, it's free.  She puts in the onion URL like any other.  Neither Bob nor Gecko ever see who she is or any other information that she doesn't want  to give.  Matter of fact, if their website is just plain HTML files, no scripts, no JavaScript, nothing  else, just plain HTML, there's nothing that he can see about her.  There's nothing she can see about him.  She doesn't know who Gecko is because he doesn't explicitly say.  There's no easy way to find out because Gecko is not an idiot.  Gecko doesn't go around on Reddit saying, hey, I've got this website.  He just has it out there anonymously so that way he can give information that he wants  to share.  She appreciates that she can also view Bob's website securely and without fear of being  monitored.  What are Docker containers?  We're going to get into the container part now.  A container image is a lightweight, standalone, executable package of a piece of software  that includes everything needed to run it.  Code, runtime, system tools, system libraries and settings.  How does this help us?  It's easy to run several engine services at once.  You don't have to know how to set up the individual pieces.  You don't have to be an expert in MySQL.  You don't have to be an expert in Apache or Internet.  You focus on your content and not on your administration.  Wouldn't a VM work also?  Sure.  There's nothing wrong with running a VM.  However, if you don't want to research all of the running pieces or if you're new or  if you're highly constrained, for example, you've only got a VM and you don't have the  resources to create another VM inside of it, which is not usually a good idea, containers  make more sense.  Some comparisons between virtual machines and containers, isolation, portability, what  they contain and the speed.  I'm not going to go through all of this.  The big thing to point out is that containers run a little faster.  They have some limitations.  VMs require more overhead.  They run a little slower, but they also contain a full operating system and not just a piece  of an operating system needed to run an application.  So our demonstration.  Today we're going to use three containers.  The first one will be a web server running Apache, a web server running Apache on WordPress.  The second will be a MySQL database and the third will be running Tor.  For demonstration, I'll be using Docker images to create the containers and the Docker compose  command to set up everything quickly and easily.  Using these steps, you can replicate this example website on your own.  The dependencies, all you have to do is zip around these commands, these applications,  if you don't already have them already, the dependencies will take care of everything  else.  And here's my Git file, and I'm going to go ahead and make this smaller.  I'm going to go ahead and get this in myself.  Copy.  By the way, is this big enough for everybody or do I need to make it bigger?  Good?  Great.  So we've just done that part.  Make this big again.  Let's look at this Docker compose file that we just pulled down.  One of the first talks about, even though in the previous slide I said it was going  to be the Apache then MySQL then Tor, and the actual file I've written is Tor first  because it's easier.  So let's look at the Tor service.  This Tor service is running off of an image called Goldy slash Tor in service latest.  Goldy is actually pretty good in that his images are up to date, and he generally keeps  the latest version of Tor in his image.  This links to the WordPress image in that the WordPress image contains Apache, which  is going to be listening on port 80, even though it's not really.  It's going to save its hidden service keys into a local directory in the Tor directory.  It's pseudo looking for ports on port 80, even though it's not really.  The database image is running MariaDB.  In this image we can predefined our variables.  These are really crappy passwords I know.  MySQL root, the name of the database, the user and the password of the user, and again  we're going to save that configuration to a local file, so if we do crash this container,  we can just bring it right back up and not lose any data.  And then the WordPress container.  We're using the standard generic WordPress image from hub.docker.com.  We're going to link this to the database because the WordPress needs the database in order  to work off of.  The environment variables have to match what are here.  So we know that the database name, user and password are here, and we have the same thing  here.  The database host, by the way, it knows that the name of the database is DB, so it's looking  for DB on port 3306.  This is, in this case it actually is a real port, but it's inside of Docker.  It's never seen on the outside.  We're not going to publish this on the outside, it's just inside of the containers.  And then we just Docker compose up, minus D. Minus D will run this as a daemon, not live,  so oh, yes.  They are not.  I do have a lamp stack image that I wrote myself, but I haven't gone through all of the work  of rewriting all of them for OpenSusa.  The Tor one is based off Alpine, which is the smallest distro right now for container  images.  The WordPress and MySQL are based off of Debian.  I've rewritten the MySQL one for less ones, but I haven't rewritten it for OpenSusa.  So we're going to start the containers.  Docker compose up, minus D.  And that's it.  Docker PS.  We have three containers running.  They've been up for a few seconds.  These are brand new, like as of now.  So I've got a little command I'm going to run, little script, Docker exec.  And then the OpenSusa Tor, a con Tor, Tor one container, and then onions.  Onions is a little script that gives us the host name.  And there's our host name.  So anybody running the Tor browser should be able to open this and probably hack me.  Not the fastest application.  Or you can blame it on my laptop either way.  And you might think, well, this is a VM.  You're connecting from your browser to the VM.  Big deal.  No.  I'm going from this browser to Germany to Ireland, Netherlands to my VM.  Each of those hops has an extra layer of encryption.  This is what's cool about this.  This VM has a 192.168 IP.  I don't have access to this building's router.  I can't do any kind of port forwarding.  What's happened is that the Tor service went out to the Tor network and said, hey, I'm  here.  Here's my host name.  And this is what I'm listening on.  The Tor browser went out and said, hey, I've got this host name.  Can you send me there?  And it does.  It does not use real IP.  This is actually running through UDP.  So that's just a simple website.  A simple WordPress installation, not the most interesting or secure setup.  But it works.  It works quickly.  That's the power of containers.  I didn't have to go here and set up a VM for you.  And then I could use Salt.  I could use Salt or whatever to set up everything for you really quickly.  But in this case, setting up the container worked.  And it worked well.  But that's not all.  At my home laptop, I'm running a Go for server on Tor.  Why?  Because.  You want to run Tomcat?  Again, very simple configuration.  And we can look at that file.  It's very similar.  I am, Dr. Compose.  Again, we're using the Goldie image for Tor.  And we're using Tomcat, which is based off of OpenSusix.  I wrote this.  So you can run Tomcat.  But don't just take my word for it.  I know Tomcat normally runs on 8080, but I make it easy.  It helps if I get the right pass IP or right host name.  So we're running Tomcat over Tor.  It's just a matter of bringing up the image and it works.  And that's pretty much it.  I promise to keep this short and sweet.  And we did set up the entire website, the entire WordPress website in less than 15  minutes.  If you want to play around with Tor, this is an easy way to do it, especially if you're  concerned about security.  Any questions?  Yes?  You're right.  The best way to do it is to use a hardened web service like EngineX.  Worker does have some hardened web services out there that you can look into.  But it's really up to you.  You need to do your own due diligence on that.  Anybody else?  Excuse me?  There is.  There has been some experimenting with Darker Swarm, but I haven't gone into it that much.  I'm hoping this time next year I'll do one on how to do the same thing on Kubernetes.  So we get through load balancing, through distribution.  Yes?  Excuse me?  No.  I have not advertised the physical location at all.  Look for the fact that you know that I'm here and I'm doing it.  But no, you need to be a government-level analyst to be able to find the physical location.  What happened in the case of one of the dark net markets, the person who was running that  gave a lot of clues about himself.  If he had just stayed quiet about who he was, he probably wouldn't have been caught because  it's very, very difficult to backtrace someone running a Tor service.  The way they normally do that is either they do just normal detective work or there are  ways such as finding a vulnerability in the Tor browser, hacking that, and then that gives  them away.  At least that's what the government has told us so far.  There might be other ways, but that's what they've released so far.  Anybody else?  Okay.  We're going to wrap it up then.  I hope everybody has a great rest of the conference.  Thank you very much.  Thank you.
openSUSE_Conference_2018_-_Create_a_complete_Tor___iUxiTk6w1sc_0_143.png openSUSE_Conference_2018_-_Create_a_complete_Tor___iUxiTk6w1sc_144_2639.png openSUSE_Conference_2018_-_Create_a_complete_Tor___iUxiTk6w1sc_2640_2735.png openSUSE_Conference_2018_-_Create_a_complete_Tor___iUxiTk6w1sc_2736_6791.png openSUSE_Conference_2018_-_Create_a_complete_Tor___iUxiTk6w1sc_6792_7367.png openSUSE_Conference_2018_-_Create_a_complete_Tor___iUxiTk6w1sc_7368_7439.png openSUSE_Conference_2018_-_Create_a_complete_Tor___iUxiTk6w1sc_7440_7691.png openSUSE_Conference_2018_-_Create_a_complete_Tor___iUxiTk6w1sc_7692_14063.png openSUSE_Conference_2018_-_Create_a_complete_Tor___iUxiTk6w1sc_14064_14531.png openSUSE_Conference_2018_-_Create_a_complete_Tor___iUxiTk6w1sc_14532_16655.png openSUSE_Conference_2018_-_Create_a_complete_Tor___iUxiTk6w1sc_16656_17735.png openSUSE_Conference_2018_-_Create_a_complete_Tor___iUxiTk6w1sc_17736_17903.png openSUSE_Conference_2018_-_Create_a_complete_Tor___iUxiTk6w1sc_17904_18275.png openSUSE_Conference_2018_-_Create_a_complete_Tor___iUxiTk6w1sc_18276_19727.png openSUSE_Conference_2018_-_Create_a_complete_Tor___iUxiTk6w1sc_19728_23543.png openSUSE_Conference_2018_-_Create_a_complete_Tor___iUxiTk6w1sc_23544_23591.png openSUSE_Conference_2018_-_Create_a_complete_Tor___iUxiTk6w1sc_23592_23783.png openSUSE_Conference_2018_-_Create_a_complete_Tor___iUxiTk6w1sc_23784_24455.png openSUSE_Conference_2018_-_Create_a_complete_Tor___iUxiTk6w1sc_24456_26435.png openSUSE_Conference_2018_-_Create_a_complete_Tor___iUxiTk6w1sc_26436_26483.png openSUSE_Conference_2018_-_Create_a_complete_Tor___iUxiTk6w1sc_26484_30191.png openSUSE_Conference_2018_-_Create_a_complete_Tor___iUxiTk6w1sc_30192_32135.png openSUSE_Conference_2018_-_Create_a_complete_Tor___iUxiTk6w1sc_32136_32226.png