- Create a Tor .onion website with a couple of static HTML pages
- Make it really easy to setup and maintain a Tor .onion website
- Include HTTPS with strong crypto and forward secrecy
- Make it decently secure out of the box (caveat emptor)
- Provide a basic level of anonymity for the visitors and webmaster
- Make it plug-and-play
- It ships with a couple of static HTML pages which you can use to provide some basic information about yourself, like your: email address, PGP key, XMPP address, OTR fingerprint, bitcoin address and services you provide.
- You can of course expand it to be a regular website or blog.
- You can run the .onion website from your own home without changing the firewall or NAT configuration of the router, but you can also run it on a remote server.
- Tor is used for setting up a Tor .onion website
- Nginx is used for serving webpages
- Ansible is used for automatic system configuration
- Automatic configuration of unique dhparam file
- Automatic configuration of self-signed certificates for .onion domains
- Automatic configuration of HSTS/STS (currently limited browser support for self-signed certificates)
- Automatic configuration of HPKP fingerprints (currently limited browser support for self-signed certificates)
- Automatic configuration of .onion subdomains with SSL fingerprints as the subdomains
- Automatic system hardening
- Automatic cleanup of unnecessary software
- Automatic installation of system updates
- Automatic cleanup of system logs
- Automatic system configuration checks with Ansible
- The firewall only allows Tor traffic in and out, with exception of DHCP traffic.
- Network card MAC address randomization
- Raspbian Jessie (lite)
- Debian Jessie
- The system runs on a Raspberry Pi, Beaglebone and other cheap hardware
- Any system with 512 MB RAM or more will probably do fine
- Anyone who wants to run their own .onion website
- Anyone who doesn't want to be dependent on (proprietary) third party services for a website
- Anyone who wants to take privacy and security into their own hands
- Anyone who is an crypto enthusiast
- Anyone who does not want to be listed as a Tor user.
- Anyone who's personal freedom depends on keeping their anonymity secure on the net. This product is too limited for that purpose.
- Consider the code to be public domain. If you or your jurisdiction do not accept that then consider the code to be released under Creative Commons 0 (CC0). If you or your jurisdiction do not accept that... well then settle for the MIT license. What we mean to say is that you are free to copy, modify and relicense the code by all means. But don't hold us liable for any damages incurred by using or abusing the software.
- Code which is copied from other projects remains under the original license.
- For maximum security of the encryption keys it is best to have complete control over the hardware. This probably means a compromise on anonymity for the webmaster.
- For maximum anonymity for the webmaster it is best to run the .onion website at a remote location. This probably means a compromise on system security. This is especially true when the system is run on a VPS. When the system in run on a VPS you have to assume that the encryption keys are compromised, because you have no control over the hardware.
- By default SSH is removed from the system for security reasons. To change this behavior you have to comment out the 'openssh-server-cleanup' role in /etc/ansible/localhost.yml.
- By default incoming SSH traffic is blocked by the firewall for security reasons. To change this behavior you have to change the default firewall rules to permit incoming SSH traffic. Edit /etc/ansible/roles/iptables-pre-tor/templates/iptables.conf.j2 and /etc/ansible/roles/iptables/templates/iptables-{distro}.conf.j2. Uncomment the 'Permit incoming SSH traffic' rule in both files.
- The system assumes only one network card is available.
-
Install the OS
-
Install Ansible and Git
sudo apt-get update && sudo apt-get install ansible git -y
-
Clone the git repository
sudo mv /etc/ansible /etc/ansible-orig sudo git clone https://github.com/garlicgambit/onion-website.git /etc/ansible
-
Set the correct time on the system for UTC 0
sudo date -s "dd mmm yyyy hh:mm:ss"
Example:
sudo date -s "01 Jan 2014 14:30:00"
-
Go to the Ansible configuration directory
cd /etc/ansible
-
Run Ansible as a user with administrative privileges
sudo ansible-playbook localhost.yml
-
On modern hardware the installation will take less then 5 minutes
-
After Ansible is done the system will automatically reboot
-
When the system is freshly booted you will have a .onion website running
-
Go to the Ansible configuration directory
cd /etc/ansible
-
Open the file group_vars/localhost with your favorite editor
sudo nano group_vars/localhost
-
To add an email address, look for contact_email: '' and add the email address between the single quotes.
Example:
contact_email: '[email protected]'
-
Repeat this process for other contact information you want to add.
-
Save the file
-
Run Ansible to immediately deploy the change
sudo ansible-playbook localhost.yml
-
Or wait for 30 minutes for automatic deployment
-
Make sure you verify the changes are correctly displayed on the .onion website
-
Put the GPG key on the .onion device
-
Move the key to /etc/ansible/roles/nginx/files/gpg.pub (or change the location in /etc/ansible/group_vars/localhost)
-
Run Ansible to immediately deploy the GPG key
sudo ansible-playbook localhost.yml
-
Or wait for 30 minutes for automatic deployment
-
It will now be available to download on the .onion website
-
Make sure you verify that the GPG key is available to download from the .onion website
Like this project? Help us out! Lots of work still needs to be done and any sort of help is appreciated:
- We really need more testers. Just grab the code, install it, run it, break it and send us feedback
- Contributions in all forms and sizes are greatly appreciated: ideas, comments, code, suggestions, donations, infrastructure, etc
If you have any questions, comments or suggestions you can contact us at: jmercier@openmailbox (dot) org
GPG key: 0xF7698FEE3295ABB5
Support this project by donating to: Bitcoin: 17P396Xc3cwMtBaa8bvznEHrLx42Y5NFEp Monero: 463DQj1ebHSWrsyuFTfHSTDaACx3WZtmMFMwb6QEX7asGyUBaRe2fHbhMchpZnaQ6XKXcHZLq8Vt1BRSLpbqdr283QinCRK