Contents
SafeLine is a WAF (web application firewall) that you place in front of your own web app. Requests from users pass through SafeLine first, and the ones it judges to be attacks are stopped before they reach the app.
This review is for people who run their own web apps, or who want hands-on experience with the defending side. After reading it, you can do the following:
- Install SafeLine on a Linux lab VM and sign in to the web console
- Put OWASP Juice Shop, a deliberately vulnerable practice app, behind SafeLine
- Find blocked requests in the console logs
What a WAF does
A WAF checks HTTP requests before they reach your app and drops the dangerous ones. It does not fix vulnerabilities in the app. Anything the WAF misses goes straight to the app, so you still need input validation and updates on the app side. SafeLine’s own documentation reports an attack-sample detection rate of 71.65% in balance mode and 76.17% in strict mode in its own tests. Treat it as an extra layer that reduces the attacks reaching your app, not as something that stops everything.
What SafeLine can do
According to the official documentation, SafeLine is an HTTP/HTTPS reverse proxy built on nginx. Its main features are:
- Blocking web attacks: SQL injection, XSS, code injection, OS command injection, XXE, SSRF, path traversal, and more
- Rate limiting: throttles traffic above limits you set, to slow brute-force attempts and traffic surges
- Anti-bot challenge: adds checks such as a CAPTCHA, letting people through and stopping crawlers and bots
- Authentication challenge: when turned on, only visitors who enter a password can see the site
- Dynamic protection: encrypts the HTML and JavaScript each time a page is served
On detection, the official website says SafeLine uses a semantic analysis engine that parses the meaning of HTTP traffic. The pricing table lists semantic analysis detection and rule-based protection in the free edition too.
License and editions
Both the GitHub repository label and the LICENSE file say GPL-3.0. The repository belongs to Chaitin Tech (chaitin) on GitHub, while the English website and paid editions are run under the CyberServal name. We could not confirm how the two are related. We also could not confirm whether the source for every component in the distributed Docker images is in this repository.
There are three editions:
| Edition | Price | Main differences |
|---|---|---|
| Personal | Free | Up to 10 apps. Single-thread mode |
| Lite | Paid | Up to 20 apps. Geo-blocking, attack log export, Discord and Telegram notifications |
| Pro | Paid | No app limit. Load balancing, multi-user management, ARM deployment, and more |
Running on an ARM server requires a Pro license, so use x86_64 for the free edition.
Trying it safely: put Juice Shop behind it
Use a lab VM that only you use. Connect it to a network the internet cannot reach, such as a host-only network. See Setting up a safe lab for how to build one.
-
Check the VM. The official minimum is Linux, x86_64 or arm64, 1 CPU core / 1 GB memory / 5 GB disk, a CPU with the ssse3 instruction, Docker 20.10.14 or later, and Docker Compose 2.0.0 or later.
-
Start OWASP Juice Shop with Docker on the same VM.
-
Install SafeLine with the official script. It needs root. Save the script and read it before you run it (see “Cautions” below).
bash -c "$(curl -fsSLk https://waf.chaitin.com/release/latest/manager.sh)" -- --en -
Generate the admin password and write it down.
docker exec safeline-mgt resetadmin -
Open
https://<VM IP>:9443/in a browser and sign in asadminwith the password from step 4. -
On the “Applications” page, click “Add Application”. Enter the domain to listen on (the VM’s IP works), a port such as 80, and Juice Shop’s address as the upstream (for example,
http://<VM IP>:3000). -
Open Juice Shop through SafeLine and check that the page loads normally.
Checking blocks in the logs
The official “Add Application” page has example test URLs for checking that blocking works. Try them only against your own Juice Shop.
- When a request is blocked, SafeLine returns its block page instead of Juice Shop.
- A new entry appears in the console’s attack list. Open “detail” to see the request.
- The official FAQ notes that the interception count and the number of attack log entries can differ. Requests stopped by rate limiting, bot checks, or the authentication challenge are not logged as attack events.
If a normal action shows the block page, that is a false positive. Find which action caused it in the logs before you change the settings.
Common tasks
| Task | How |
|---|---|
| Reset the admin password | docker exec safeline-mgt resetadmin |
| Re-bind the dynamic password (TOTP) | docker exec safeline-mgt resettotp |
| Change the console port | Add MGT_PORT to .env in the install directory, then run docker compose down && docker compose up -d |
| Stop and remove | Run docker compose down in the install directory, then delete the directory |
The console uses port 9443. SafeLine also uses 65508 (health check) and 65443 (custom pages).
Cautions
- The official install command fetches the script with
curl -k, which skips certificate checks. Rather than piping it straight into bash, save it to a file and read it first. The official docs also describe a manual install. - Do not expose the console (port 9443) to the internet. We did not find an official statement on this, but the console controls your WAF settings, so keep it reachable only from your own machine or a VPN.
- In production, visitors’ request contents are kept in the logs. Decide where logs are stored and who can read them before you go live.
- Send test attack requests only to your own environment or one you have written permission to test.
- The official FAQ warns that upgrading across several major versions can cause data incompatibility. Back up the whole install directory (default
/data/safeline) before upgrading.
Read next
Sources
- Official repository (README)github.com/chaitin/SafeLine
- Official repository: LICENSEgithub.com/chaitin/SafeLine/blob/main/LICENSE.md
- Docs: Overviewdocs.waf.chaitin.com/en/home
- Docs: Deploy SafeLinedocs.waf.chaitin.com/en/GetStarted/Deploy
- Docs: Add Applicationdocs.waf.chaitin.com/en/GetStarted/AddApplication
- Docs: Plan (editions and feature comparison)docs.waf.chaitin.com/en/License/Plan
- Docs: Verifying the effectiveness of SafeLinedocs.waf.chaitin.com/en/tutorials/Effect
- Docs: FAQdocs.waf.chaitin.com/en/faq/home
- Official website (plans and pricing)cyberserval.tech/landing/safeline
Checked on 2026-10-25
Similar tools
OWASP Juice Shop
Impact Local onlyAn intentionally vulnerable online shop for practice. Run it on your own computer to learn how web vulnerabilities work and to try out security testing tools.
- Purpose
- Learning
- Type
- Practice lab
- Difficulty
- Beginner
- License
- PermissiveMIT
- Category
- Learning and practice labs / Web security
ZAP
Impact Can harm othersA free web app scanner that sits between your browser and a web app, records the traffic, and looks for vulnerabilities. Formerly OWASP ZAP, now ZAP by Checkmarx.
- Purpose
- Audit
- Type
- Desktop app
- Difficulty
- Intermediate
- License
- PermissiveApache-2.0
- Category
- Web security / Vulnerability scanning