Category: FreeSocks

  • Internet Freedom is Here: FreeSocks v2

    The Internet as we know it is in danger and democracy is under attack. Around the world state censors are working to restrict access to information, and prevent people from sharing their own. With growing access to technology, we need to ensure that information remains free at serious infrastructure scale – and we think we can help.

    FreeSocks is our flagship VPN service that launched in 2023 with over 60,000 access keys issued to date. FreeSocks has helped tens of thousands of people access the open Internet through our open source control plane (freesocks-control-plane), and vast network of servers around the world. However, as censors began to crack down on the open Internet even more and begin to more effectively block VPN & proxy protocols designed to circumvent Internet censorship, we realized we needed to build FreeSocks from the ground up via a highly flexible system. It’s now time to release it and punch more holes in the closed Internet.

    FreeSocks v2 – the next generation

    v2 of the freesocks-control-plane (FCP), the system that orchestrates the issuance and management of access keys has evolved into a fully-fledged all-in-one VPN orchestration system. It’s built on Convex, an open-source reactive backend platform, using TypeScript – a complete shift away from our v1 architecture running on serverless platforms using JavaScript. Convex combines a transactional database, server functions, scheduling, and realtime data sync into a single system, which lets FCP v2 handle the entire lifecycle of an access key – issuance, monitoring, rotation, revocation and more – in one place instead of stitching together separate serverless services. Without the power of Convex, we’d spend more time writing migrations, trying to improve caching and general troubleshooting – but Convex just works.

    We self-host the Convex backend on our own infrastructure, so no part of FreeSocks depends on a third-party cloud platform anymore. Like v1, the entire control plane is open source under GPL-3.0, and it’s built so that anyone can deploy their own instance and run a FreeSocks-like service themselves. We think this is huge, and genuinely what makes our platform different than others. Whether you’re a single person, or a trusted organization running infrastructure at scale – you could run your own VPN-distribution platform. As time goes on, we plan to continue decoupling static components of the FCP and making them admin-configurable, essentially becoming a content management system (CMS) for VPN services.

    New protocols

    v1 of FreeSocks only supported Outline (Shadowsocks) proxies. Unfortunately, censors in several countries have gotten much better at detecting and blocking Shadowsocks traffic. FCP v2 supports pluggable proxy backends, and our primary backend is now Xray (managed via Remnawave), which supports multiple modern protocols that are much harder to detect and block. Outline is still supported, and we can run both side-by-side if needed.

    Once you have an account, you can choose between two connection modes for your key – one designed to circumvent censorship, and one designed for maximum privacy. You can also pick which server location your key lives on, or let the system automatically place your key on the least busy server. If the censors adapt and start blocking a protocol, we can adapt too, without rebuilding the whole system again.

    Client apps

    FreeSocks works with any compatible client app, and you’re free to use whichever one you prefer. After you create your key, the site suggests client apps to try for your platform, with notes on how easy each one is to set up and whether it’s open source. In the future, we intend to build our own native FreeSocks VPN app to make setup even easier – stay tuned!

    Hardware that we own

    FreeSocks v2 is launching fully on hardware that we own, colocated in Kansas City, MO. Over the past couple of years, we’ve been purchasing and colocating our own hardware instead of renting servers from hosting providers, and FreeSocks is now part of that effort. Many popular VPN providers host their infrastructure on rented servers. Owning the hardware means we have full control over the machines that power the service, even the network stack and down to the metal. Going forward, every new FreeSocks location we add will only use hardware that we own.

    Anonymous accounts

    v1 of FreeSocks had no accounts at all – you received an access key, it expired after a period of time, and you had to request a new one. v2 introduces member accounts, so that your key can be regenerated, moved to a different server, or switched to a different protocol whenever you need. We designed the account system to collect zero personal information. There is no email, no phone number, and no password.

    To create an account, your browser solves a small proof-of-work challenge from Cap, an open-source captcha alternative that we host ourselves. Once solved, you’re issued a randomly generated 32-digit account number. That account number is your only credential, and it’s shown to you exactly once – the site requires you to download it and paste it back before continuing, because if you lose it, we cannot recover it. On our side we only store a keyed hash of the account number, so our database contains nothing that can be used to sign in as you. There’s also a separate non-secret support ID that you can share with us if you ever need help, without exposing your account number. If you want the convenience, you can optionally add a passkey to your account to sign in with.

    No IP logging, anywhere

    In our original launch post we said that we don’t log the IPs of active users. In v2, we went much further. The application never stores a client IP address anywhere – not even hashed – and the reverse proxy and captcha service in front of it are explicitly configured to discard IPs as well. The rate limiting that prevents abuse of free account creation uses short-lived counters that expire on their own, so there is no lasting record tying an account to an IP address.

    This extends down to the proxy servers too. The control plane automatically inspects the logging configuration of our Xray panels and disables access logging if it’s found to be enabled. The full details, along with a checklist for anyone deploying their own instance, are documented in docs/privacy.md in the repository.

    CDN fronting, HPKE & proof-of-possession

    To stay reachable in heavily censored countries, the FreeSocks website and API are fronted through a large CDN. Blocking shared CDN IPs takes thousands of unrelated websites down along with ours – and while we’ve seen in Iran that censors are sometimes still willing to accept that damage, fronting makes blocking us much harder and much more costly for them. We also benefit from Encrypted Client Hello (ECH) when fronting through a CDN. Normally, the domain name you’re connecting to is sent in plaintext at the start of a TLS connection, even though everything after it is encrypted. ECH encrypts the domain name too, so a censor watching the wire can’t tell a connection to FreeSocks apart from a connection to any other website behind the same CDN.

    Beyond the CDN, the website depends on nothing external. There are no third-party scripts and no external fonts – the fonts, the captcha widget and its WebAssembly are all bundled and served by us under a strict content security policy. Third-party endpoints are a liability in censored countries; if a captcha or font provider is blocked, the website breaks for the people who need it most.

    Fronting through a CDN comes with a cost, though: the CDN terminates TLS, which means it can see the traffic between you and us in plaintext. Anyone who can read the CDN’s traffic – through stored logs, compelled disclosure, or an insider – could harvest the two most sensitive secrets FreeSocks handles: your account number and your VPN key. We built two layers of protection into v2 to mitigate this, and we think they’re pretty neat.

    The first layer is HPKE encryption of sensitive data. Your browser encrypts sensitive request bodies (such as your account number during login) directly to our server, and the server encrypts sensitive responses (such as your VPN key) back to a fresh one-time key that your browser generates for each request. A CDN in the middle only ever sees ciphertext, even if TLS is broken. The encryption uses X-Wing, a hybrid of classical X25519 and post-quantum ML-KEM-768, so an adversary recording traffic today and hoping to decrypt it once a quantum computer exists gets nothing – it stays secure as long as either algorithm holds up. On top of that, the server rotates short-lived encryption keys every 10 minutes and destroys the retired ones, so even a future compromise of our server keys can’t decrypt past logins.

    The second layer is proof-of-possession (PoP) sessions. A session cookie is normally a bearer credential – anyone who captures one can replay it. In v2, when you sign in, your browser generates a non-extractable signing key inside a Web Worker. The private key can never be read out, not even by our own JavaScript. Every authenticated request is then signed with that key, covering the request method, path, a hash of the exact request body, a timestamp and a single-use nonce. The server verifies the signature and burns the nonce, so a captured cookie is useless on its own and a captured request can’t be replayed. The same protection covers our admin dashboard, where sensitive actions like uploading server credentials are HPKE-encrypted as well.

    We want to be honest about what this does and doesn’t protect against. It defeats a passive observer – CDN logging, compelled disclosure, insiders – including the future quantum version of that adversary. It cannot, by itself, defeat an active CDN that rewrites the JavaScript we serve, because no browser-delivered cryptography can. To narrow that gap, our builds are reproducible (CI builds the site twice and asserts the output is byte-for-byte identical), every script the site loads is integrity-pinned, and the site includes a “Verify this connection” panel that displays the key fingerprints your browser is using, so they can be compared against the values we publish out-of-band. Our future native app will narrow it further – its code ships with the app instead of being delivered through the CDN, while its API traffic stays protected by the same encryption. For those interested in the technical side, the full threat model is documented in docs/threat-model-cdn-blinding.md.

    Memberships & donations

    FreeSocks is free, and it always will be. However, running a global proxy network costs a considerable amount of money. v2 introduces an optional membership at $5/mo that removes the traffic limits on your key, for those who want to support the service and get something extra in return.

    We built the payment system to store zero payer information. Payments happen entirely on processor-hosted pages – Bitcoin through our own self-hosted BTCPay Server, other cryptocurrencies, or card and PayPal – and the only thing that comes back to us is a signal that an order was paid. We never see or store names, emails or addresses. You can also purchase a membership as a gift code and give it to someone who can’t pay for one themselves.

    Donations made through FreeSocks work a little differently, and we’re really excited about this part: donations fund a shared monthly bandwidth bonus that is split across every free user on the service. When someone donates, everyone’s free traffic allowance goes up for that month. The public impact numbers show gigabytes and user counts, never dollar amounts.

    Translations

    In our 2023 launch post, we said we planned to translate the website so that people who can’t read English can use the service. FreeSocks is now available in English, Farsi, Arabic, Russian and Simplified Chinese, with full right-to-left support. A native-speaker review of the translations is in progress. We also said we planned to provide mirrors in case the main URL is inaccessible – members can now mirror their subscription across multiple storage providers directly from their account.

    Self-host your own FreeSocks

    Everything described above is open source and built to be self-hosted. If you’re an operator who wants to run a proxy distribution service for your own community, the repository includes documentation for deploying the whole stack with Docker, from a fresh install to a production cutover. We’d love to see others deploy it.

    If you find a security issue, please report it privately via SECURITY.md – this software protects people in high-risk environments.

    We need your help!

    Unredacted Inc is a 501(c)(3) non-profit organization, and we directly depend on generous donors like you to fund our operations. If you like what we do, and want to support our mission, please consider making a donation. With FreeSocks v2, every donation made through the service directly raises the free bandwidth of every free user each month.

    If you live in, or are visiting, a country with a heavily censored Internet – create an account and share FreeSocks with your friends who might be subjected to Internet censorship. If you use the service and have any trouble, please contact us.

    We’ve worked really hard on FreeSocks v2, and we hope that you can get good use out of the service!

  • FreeSocks is now open source

    Censorship on the Internet is getting worse, not better. The free flow of information is key to learning and making change. Because of this, we started FreeSocks, a service that provides free, open & uncensored Outline (Shadowsocks) proxies to people in countries experiencing a high level of Internet censorship late last year (2023).

    Since then, the service has seen a considerable amount of growth. Over 1,000 access keys have been issued to people all around the world wanting to hide their Internet traffic from oppressive governments, and access the open Internet without restriction. Seeing the impact that the service has made is inspiring, and it’s why we’ve been working towards something quite special. Today, we are open sourcing the code that makes FreeSocks work, the FreeSocks Control Plane (FCP), which runs entirely on the serverless Cloudflare Workers platform for free. This allows anyone to launch their own FreeSocks-like service.

    GitHub Repository: github.com/unredacted/freesocks-control-plane

    Understanding the FreeSocks flow

    A diagram showing how FreeSocks works

    Understanding the FreeSocks flow is key to understanding how FreeSocks really works. It’s designed with security in mind, while also being simple enough for any decently technical person to understand.

    Breaking down the flow:

    1. A user visits an HTTP endpoint such as freesocks.org/get on their web browser. The request is terminated in an edge network datacenter close to them.
    2. The user solves a captcha/challenge, and submits their request.
    3. The FCP calculates the latency between the edge network datacenter the user reached, and the available Outline servers by sending HTTP requests over QUIC tunnels to their API endpoints. The available endpoints are stored in and retrieved from a Workers KV namespace.
    4. The Outline server with the best latency and lowest access key count is chosen by the FCP.
    5. The FCP initiates another request to the Outline server’s API to create a new access key, which is returned to the user with a definable expiry date if they don’t use the access key at all.
    6. The user enters the access key in their Outline (or Shadowsocks) application and connects to the server, allowing them to access the open Internet. As long as they continue to use the access key, it won’t expire. If they stop using it, it will be deleted in definable number of days.

    FCP architectural design choices

    By now you know that the FCP is used for access key retrieval by users, and allows administrators to delete unused access keys from the Outline VPN servers they manage. The code behind it is written in JavaScript. The FCP is designed to be fast, flexible and expandable for the future.

    Operating the FreeSocks Control Plane (FCP) on top of a serverless platform was a core design choice for many reasons.

    • It allows others to run the FCP for free (as is the case with Cloudflare Workers).
    • It’s easy to stand up on multiple domains for optimal censor evasion. Let them play whack a mole.
    • It’s easier to manage with tools like Cloudflare Wrangler.
    • It’s more difficult for censors to block serverless edge networks, because they control a large portion of the Internet.
    • Serverless edge networks are beneficial in determining latency between edge and Outline servers to provide the lowest latency server to users without exposing servers to users. In that way, it’s hard for a censor to discover all available servers from their interaction with the FCP.

    While many may not trust large cloud providers to process potentially sensitive information, there’s no doubt that they make it harder for censors to block. FreeSocks is intended to circumvent censorship. At the same time, it makes the FCP very fast and efficient since requests are terminated all over the world in datacenters close to users. We believe the potential privacy tradeoff is worth it.

    While we have to place our trust in cloud infrastructure providers here, we can say with certainty that the FCP code itself does not trigger anything to store personally identifiable information (PII). This makes FreeSocks a fairly privacy friendly service to use.

    How can I run my own FreeSocks?

    Since the FCP is now open source, anyone can run their own FreeSocks-like platform to distribute access keys to people. As time goes on, we’ll write more documentation on how this can be done. For those that are tech-savvy enough, you might figure it out without our help. If you do, please let us know – we’re very interested in hearing your feedback. Contributions to the codebase are welcome too!

    Where does FreeSocks go from here?

    FreeSocks will continue to be developed and expanded based on demand. We’ll continue to gather user feedback, and implement features in the FCP so that we can fight censorship.

    However, we need your help! If you enjoy what we do, please consider making a donationUnredacted is a non-profit organization that provides free and open services that help people evade censorship and protect their right to privacy.

  • Introducing FreeSocks, proxies that circumvent censorship

    Easy censorship circumvention

    We despise censorship and human (& animal) rights abuses, and it’s time to fight back. In addition to Operation Envoy, our effort to provide stable and performant anti-censorship Tor bridges and snowflake proxies, we’re launching FreeSocks. FreeSocks is a free and open proxy service that aims provide an alternative to individuals that live in or are visiting countries with a heavily censored internet. With FreeSocks proxies, people that reside in countries with oppressive governments can access the open internet freely.

    An internet free of censorship is extremely important in countries where the internet is censored heavily. It provides access to information that individuals may never find out about, for example the Tiananmen Square massacre and countless other atrocities and injustices carried out by governments around the world. It also allows people to communicate freely amongst themselves, so that they’re not afraid to show their true selves. In the modern age, governments are only getting better at restricting access to content and services they deem ‘unpalatable’. China is one government which is particularly advanced in their censorship efforts, and is constantly tweaking their Great Firewall to block more and more content and services. This is why services like FreeSocks are important.

    A screenshot of the FreeSocks website

    Our tech stack

    The underlying technology that FreeSocks provides is Outline (Shadowsocks) proxies (deployed around the world), which encrypt and obfuscate user’s internet traffic. The website guides users on how they can retrieve and use the proxy access keys that we provide to them. We make an attempt to reduce the chance for abuse by preventing people from retrieving a proxy if they are not within an especially oppressive country. At a later date, we’ll detail exactly how we provide this service and the underlying code that FreeSocks uses. We think it’s pretty cool, as the functionality of retrieving and expiring proxy access keys (via the outline-server API) lives entirely on the Cloudflare Workers serverless platform. The entire FreeSocks platform is very flexible because of this. Something awesome is that our Workers cron triggers to expire access keys at defined intervals run only in datacenters that are powered by renewable energy.

    We do all of this in a privacy respecting way, and we don’t log the IPs of active users, or who might have even requested a proxy.

    Where do we go from here?

    We need your help to maintain FreeSocks, deploy more proxies and fight the censors! If you like to support organizations like ours, please consider making a donation.

    With your help we:

    • Plan to continuously deploy new Outline proxy servers in strategic locations.
    • Plan to translate all pages on the website to different languages, so that people who can’t translate or read English can use the service.
    • Plan to provide mirrors of the site in case the main URL is inaccessible.
    • Plan to extend the expiration time of access keys (30 days at the time of launch) based on reception and use.

    We’ve worked really hard on FreeSocks, and we hope that you can get good use out of the service. Share it with your friends who might be subjected to internet censorship. If you use the service, and have any trouble – please contact us.

Support Unredacted
Privacy Coins (Click to copy)
Donate