Free-tier Tor bridges using AWS

Easily deploy a Tor bridge to AWS' free tier

View project on GitHub

Bridge Buttons logo, a blue bridge connected to a blue onion

Security Scan

Click here to jump straight to deploying your bridge!

Bridge Buttons are one of the easiest ways to stand up for the journalists, activists, and vulnerable citizens around the world that depend on Tor to use the internet safely. Tor is an anonymity network that helps keep its users anonymous by routing their internet traffic through multiple different machines run by volunteers, which conceals their location and identity. Unfortunately regimes around the world have blocked access to Tor, which is why Tor bridges were created. They are brand-new access points these regimes do not know about that can be rapidly deployed and torn down faster than they can be blocked, letting these users get back online!

Bridge Buttons let you deploy a Tor bridge with a single click to any Amazon Web Services (AWS) region. These bridges come pre-configured to stay within AWS’ free tier for one year! While you will be prompted for a payment method when first signing up for AWS, these bridges are configured to use a free-tier t3.micro instance running Ubuntu 24.04 LTS, install Tor from Tor Project’s package repository, and have a Tor configuration that caps the bandwidth passing through your bridge at under 15GB per month.

What is a Tor bridge?

You will be acting as an access point to the Tor network. Your bridge is a computer that will relay traffic for these users to their next Tor relay, but the key is that your bridge is never listed publicly. This makes it difficult for it to be blocked. It also helps hide that a user is connecting to Tor since they won’t be connecting to a machine publicly connected to Tor.

Is hosting a Tor bridge safe?

Yes! You may have heard that it can be potentially dangerous to run a Tor exit node, where traffic exits the Tor network. These are different from Tor bridges. Your bridge will not be publicly listed. Your bridge also is an entry point- an exit node makes the final connection to the website the user requests and therefore appears to be doing the “browsing”.

If my bridge isn’t publicly listed, how do people get to it?

Tor distributes bridges to users who request them over email, or via https://bridges.torproject.org/. This makes it difficult for adversaries to compile a list of all Tor bridges and block them, since the number that are distributed at a time is limited.

How do I deploy my bridge?

First, sign up for an AWS account here. While you will be prompted for payment information, your bridge is expected to run on the free tier.

Next, find the region you would like to deploy to in the world and click the corresponding button and then follow the instructions below. Consider deploying your bridge closer to a region that needs Tor bridges. For example, if you wish to help Iranian activists consider deploying to Bahrain.

Region Bridge Button
US East (Ohio) Create Bridge
US East (N. Virginia) Create Bridge
US West (N. California) Create Bridge
US West (Oregon) Create Bridge
Africa (Cape Town) Create Bridge
Asia Pacific (Hong Kong) Create Bridge
Asia Pacific (Jakarta) Create Bridge
Asia Pacific (Mumbai) Create Bridge
Asia Pacific (Osaka) Create Bridge
Asia Pacific (Seoul) Create Bridge
Asia Pacific (Singapore) Create Bridge
Asia Pacific (Sydney) Create Bridge
Asia Pacific (Tokyo) Create Bridge
Canada (Central) Create Bridge
Europe (Frankfurt) Create Bridge
Europe (Ireland) Create Bridge
Europe (London) Create Bridge
Europe (Milan) Create Bridge
Europe (Paris) Create Bridge
Europe (Stockholm) Create Bridge
Middle East (Bahrain) Create Bridge
Middle East (UAE) Create Bridge
South America (São Paulo) Create Bridge

On the next screen, ensure that the Amazon S3 URL is https://bridgebuttons.s3.amazonaws.com/tor-bridge-cloudformation.yml as below and then click “Next” at the bottom of the screen.

Create stack screen on the AWS console

On the next screen, you can customize your bridge’s settings:

  • Stack name: Modify your bridge’s name if you wish. This is optional and only makes it easier to find on the AWS console later.
  • BridgeNickname: A human-friendly nickname for your bridge on the Tor network (alphanumeric, up to 19 characters). It does not need to be unique. The default is “BridgeButtonsBridge”.
  • ContactInfo: Optionally provide an email address so the Tor Project can reach you if there are issues with your bridge. This is recommended but not required.

Click “Next”.

Specify stack screen on the AWS console

On the “Configure Stack” page leave all options alone and scroll to the bottom of the page. Click “Next”.

Configure stack screen on the AWS console

On the “Review” page, leave all options alone and scroll to the bottom of the page. Click “Submit”.

Review stack screen on the AWS console

You will then be brought to the CloudFormation screen where you can monitor your deployment. This will take several minutes. When finished, the status will change to green text that reads “Create Complete”. Your bridge is now up and running!

CloudFormation screen on the AWS console

Checking that your bridge is up

This stack does not open SSH to the internet. Instead, Bridge Buttons now waits for the instance to finish bootstrapping before CloudFormation reports Create Complete.

When the stack reaches Create Complete, the instance has already confirmed that:

  • Tor started successfully.
  • The bridge is listening on port 8000.
  • The obfs4 transport is listening on port 8080.

Click the “Outputs” tab in the CloudFormation console after deployment. You will see the public IP address of your bridge, the instance ID, and a BridgeReadiness value reported by the instance itself. BridgeReadiness reflects what bootstrap confirmed during deployment; it is not an ongoing health check.

CloudFormation screen on the AWS console

Even after bootstrap completes, it can still take 20 minutes to an hour for the Tor network to start distributing and using a new bridge, and Tor Metrics visibility can lag by many hours or sometimes a day or two.

Optional - verify through Tor Metrics

If you want a check from the Tor network’s point of view, use the BridgeHashedFingerprint and TorMetricsRelaySearchUrl outputs from CloudFormation.

Bridge searches on Tor Metrics use the hashed fingerprint, not the nickname. The nickname is only a human-friendly label.

CloudFormation displays the BridgeHashedFingerprint output as a JSON object keyed by the instance hostname. If the output looks like {"your-instance-hostname":"YOUR_HASHED_FINGERPRINT"}:

  • Search YOUR_HASHED_FINGERPRINT.
  • Do not search your-instance-hostname.
  • Do not paste the entire JSON object into Tor Metrics.

After the bridge has had time to publish, open the Tor Metrics relay search page and search for that hash value from your stack outputs. If it does not appear immediately, check again later. New bridges can take many hours, and sometimes a day or two, to show up there.

Optional - verify the ports from your own computer

If you want to perform an external connectivity check, replace <public-ip> with the PublicIp value from the CloudFormation outputs and run:

nc -vz <public-ip> 8000
nc -vz <public-ip> 8080

Both commands should report a successful TCP connection. These ports are not web endpoints, so checking them in a browser is not useful.

Troubleshooting

If the stack never reaches Create Complete, open the “Events” tab in CloudFormation. Bridge Buttons now waits for the instance to report successful Tor startup, so a CREATE_FAILED or rollback event means bootstrap did not complete.

If the stack reaches Create Complete but you still do not see activity immediately:

  • Confirm the EC2 instance has passed both EC2 status checks.
  • Confirm the BridgeReadiness output shows the expected bootstrap message. This confirms deployment-time checks only, not ongoing live bridge health.
  • Search Tor Metrics using the BridgeHashedFingerprint output after the bridge has had enough time to publish.
  • If Tor Metrics marks the bridge as Not Recommended, recreate or replace the instance with the latest template so it installs Tor from Tor Project’s current stable package repository.
  • Re-run the nc checks above after a few minutes.
  • Allow additional time for the Tor network to discover and distribute the bridge.