diff --git a/.gitbook/assets/!new.drawio.svg b/.gitbook/assets/!new.drawio.svg new file mode 100644 index 0000000..1001f09 --- /dev/null +++ b/.gitbook/assets/!new.drawio.svg @@ -0,0 +1,4 @@ + + + +
HTTPS
Wireguard
Internet
Public Proxy
VPN Gateway
Core
GRPC (TLS)
GRPC (TLS)
DMZ
firewall
Internal network
firewall
\ No newline at end of file diff --git a/.gitbook/assets/0257A34A-D5E0-4D6D-9627-EA5149B891A1.PNG b/.gitbook/assets/0257A34A-D5E0-4D6D-9627-EA5149B891A1.PNG new file mode 100644 index 0000000..73ba6d0 Binary files /dev/null and b/.gitbook/assets/0257A34A-D5E0-4D6D-9627-EA5149B891A1.PNG differ diff --git a/.gitbook/assets/1 (1).png b/.gitbook/assets/1 (1).png new file mode 100644 index 0000000..a903844 Binary files /dev/null and b/.gitbook/assets/1 (1).png differ diff --git a/.gitbook/assets/2.png b/.gitbook/assets/2.png new file mode 100644 index 0000000..938e5e6 Binary files /dev/null and b/.gitbook/assets/2.png differ diff --git a/.gitbook/assets/2fa-client.png b/.gitbook/assets/2fa-client.png new file mode 100644 index 0000000..fb18dc9 Binary files /dev/null and b/.gitbook/assets/2fa-client.png differ diff --git a/.gitbook/assets/3.png b/.gitbook/assets/3.png new file mode 100644 index 0000000..5f4b8f7 Binary files /dev/null and b/.gitbook/assets/3.png differ diff --git a/.gitbook/assets/3C830112-BE04-4B62-AFC3-0B8DF04D2C6B.PNG b/.gitbook/assets/3C830112-BE04-4B62-AFC3-0B8DF04D2C6B.PNG new file mode 100644 index 0000000..b70b8e2 Binary files /dev/null and b/.gitbook/assets/3C830112-BE04-4B62-AFC3-0B8DF04D2C6B.PNG differ diff --git a/.gitbook/assets/4.png b/.gitbook/assets/4.png new file mode 100644 index 0000000..14c3558 Binary files /dev/null and b/.gitbook/assets/4.png differ diff --git a/.gitbook/assets/5.png b/.gitbook/assets/5.png new file mode 100644 index 0000000..0e6519c Binary files /dev/null and b/.gitbook/assets/5.png differ diff --git a/.gitbook/assets/6.png b/.gitbook/assets/6.png new file mode 100644 index 0000000..b307bd6 Binary files /dev/null and b/.gitbook/assets/6.png differ diff --git a/.gitbook/assets/93A00C9F-4F80-4B55-8EEE-19A3AB957629.PNG b/.gitbook/assets/93A00C9F-4F80-4B55-8EEE-19A3AB957629.PNG new file mode 100644 index 0000000..fefedff Binary files /dev/null and b/.gitbook/assets/93A00C9F-4F80-4B55-8EEE-19A3AB957629.PNG differ diff --git a/.gitbook/assets/DEFGUARD_ENROLLMENT_URL (2).png b/.gitbook/assets/DEFGUARD_ENROLLMENT_URL (1) (1).png similarity index 100% rename from .gitbook/assets/DEFGUARD_ENROLLMENT_URL (2).png rename to .gitbook/assets/DEFGUARD_ENROLLMENT_URL (1) (1).png diff --git a/.gitbook/assets/F64A30B5-AD40-431A-A72E-467A7EAFDC1F (1).PNG b/.gitbook/assets/F64A30B5-AD40-431A-A72E-467A7EAFDC1F (1).PNG new file mode 100644 index 0000000..131710d Binary files /dev/null and b/.gitbook/assets/F64A30B5-AD40-431A-A72E-467A7EAFDC1F (1).PNG differ diff --git a/.gitbook/assets/F64A30B5-AD40-431A-A72E-467A7EAFDC1F.PNG b/.gitbook/assets/F64A30B5-AD40-431A-A72E-467A7EAFDC1F.PNG new file mode 100644 index 0000000..a608541 Binary files /dev/null and b/.gitbook/assets/F64A30B5-AD40-431A-A72E-467A7EAFDC1F.PNG differ diff --git a/.gitbook/assets/Run gateway modal.png b/.gitbook/assets/Run gateway modal.png deleted file mode 100644 index 874e9f3..0000000 Binary files a/.gitbook/assets/Run gateway modal.png and /dev/null differ diff --git a/.gitbook/assets/Screenshot 2025-07-29 at 17.32.51 (1).png b/.gitbook/assets/Screenshot 2025-07-29 at 17.32.51 (1).png deleted file mode 100644 index 0b16c5f..0000000 Binary files a/.gitbook/assets/Screenshot 2025-07-29 at 17.32.51 (1).png and /dev/null differ diff --git a/.gitbook/assets/Screenshot 2025-08-18 at 13.35.07.png b/.gitbook/assets/Screenshot 2025-08-18 at 13.35.07.png new file mode 100644 index 0000000..0917a65 Binary files /dev/null and b/.gitbook/assets/Screenshot 2025-08-18 at 13.35.07.png differ diff --git a/.gitbook/assets/Screenshot 2025-08-18 at 13.56.24.png b/.gitbook/assets/Screenshot 2025-08-18 at 13.56.24.png new file mode 100644 index 0000000..63b14e4 Binary files /dev/null and b/.gitbook/assets/Screenshot 2025-08-18 at 13.56.24.png differ diff --git a/.gitbook/assets/Screenshot 2025-08-18 at 13.56.49.png b/.gitbook/assets/Screenshot 2025-08-18 at 13.56.49.png new file mode 100644 index 0000000..304af87 Binary files /dev/null and b/.gitbook/assets/Screenshot 2025-08-18 at 13.56.49.png differ diff --git a/.gitbook/assets/Screenshot 2025-09-15 at 11.30.19.png b/.gitbook/assets/Screenshot 2025-09-15 at 11.30.19.png new file mode 100644 index 0000000..4291353 Binary files /dev/null and b/.gitbook/assets/Screenshot 2025-09-15 at 11.30.19.png differ diff --git a/.gitbook/assets/Screenshot 2025-09-23 at 22.09.36.png b/.gitbook/assets/Screenshot 2025-09-23 at 22.09.36.png new file mode 100644 index 0000000..e4fa86a Binary files /dev/null and b/.gitbook/assets/Screenshot 2025-09-23 at 22.09.36.png differ diff --git a/.gitbook/assets/Screenshot 2025-09-23 at 22.12.55.png b/.gitbook/assets/Screenshot 2025-09-23 at 22.12.55.png new file mode 100644 index 0000000..8240116 Binary files /dev/null and b/.gitbook/assets/Screenshot 2025-09-23 at 22.12.55.png differ diff --git "a/.gitbook/assets/Screenshot 2025-10-01 at 5.43.32\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-10-01 at 5.43.32\342\200\257PM.png" new file mode 100644 index 0000000..9a1cdcd Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-10-01 at 5.43.32\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-10-01 at 5.45.59\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-10-01 at 5.45.59\342\200\257PM.png" new file mode 100644 index 0000000..fbc3ed9 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-10-01 at 5.45.59\342\200\257PM.png" differ diff --git a/.gitbook/assets/Screenshot 2025-10-15 at 13.37.33.png b/.gitbook/assets/Screenshot 2025-10-15 at 13.37.33.png new file mode 100644 index 0000000..9c14a4f Binary files /dev/null and b/.gitbook/assets/Screenshot 2025-10-15 at 13.37.33.png differ diff --git a/.gitbook/assets/Screenshot 2025-10-15 at 13.37.55.png b/.gitbook/assets/Screenshot 2025-10-15 at 13.37.55.png new file mode 100644 index 0000000..d13a16e Binary files /dev/null and b/.gitbook/assets/Screenshot 2025-10-15 at 13.37.55.png differ diff --git a/.gitbook/assets/Screenshot 2025-10-24 at 11.20.24.png b/.gitbook/assets/Screenshot 2025-10-24 at 11.20.24.png new file mode 100644 index 0000000..cc49efc Binary files /dev/null and b/.gitbook/assets/Screenshot 2025-10-24 at 11.20.24.png differ diff --git a/.gitbook/assets/Screenshot 2025-10-29 at 13.14.01.png b/.gitbook/assets/Screenshot 2025-10-29 at 13.14.01.png new file mode 100644 index 0000000..20e5800 Binary files /dev/null and b/.gitbook/assets/Screenshot 2025-10-29 at 13.14.01.png differ diff --git a/.gitbook/assets/Screenshot 2025-12-01 at 14.22.10.png b/.gitbook/assets/Screenshot 2025-12-01 at 14.22.10.png new file mode 100644 index 0000000..b742936 Binary files /dev/null and b/.gitbook/assets/Screenshot 2025-12-01 at 14.22.10.png differ diff --git a/.gitbook/assets/Screenshot 2026-01-07 at 09.08.07.png b/.gitbook/assets/Screenshot 2026-01-07 at 09.08.07.png new file mode 100644 index 0000000..e07258c Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-01-07 at 09.08.07.png differ diff --git a/.gitbook/assets/Screenshot 2026-01-07 at 09.11.38.png b/.gitbook/assets/Screenshot 2026-01-07 at 09.11.38.png new file mode 100644 index 0000000..43ff2fb Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-01-07 at 09.11.38.png differ diff --git a/.gitbook/assets/Screenshot 2026-01-09 at 12.23.18.png b/.gitbook/assets/Screenshot 2026-01-09 at 12.23.18.png new file mode 100644 index 0000000..1c80c35 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-01-09 at 12.23.18.png differ diff --git a/.gitbook/assets/Screenshot 2026-02-08 at 22.29.27.png b/.gitbook/assets/Screenshot 2026-02-08 at 22.29.27.png new file mode 100644 index 0000000..abcd951 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-02-08 at 22.29.27.png differ diff --git a/.gitbook/assets/Screenshot 2026-02-08 at 22.29.56.png b/.gitbook/assets/Screenshot 2026-02-08 at 22.29.56.png new file mode 100644 index 0000000..e5e2d08 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-02-08 at 22.29.56.png differ diff --git a/.gitbook/assets/Screenshot 2026-02-08 at 22.30.27.png b/.gitbook/assets/Screenshot 2026-02-08 at 22.30.27.png new file mode 100644 index 0000000..2a4e4bd Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-02-08 at 22.30.27.png differ diff --git a/.gitbook/assets/Screenshot 2026-02-08 at 22.30.42.png b/.gitbook/assets/Screenshot 2026-02-08 at 22.30.42.png new file mode 100644 index 0000000..54f29d8 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-02-08 at 22.30.42.png differ diff --git a/.gitbook/assets/Screenshot 2026-02-08 at 23.07.31.png b/.gitbook/assets/Screenshot 2026-02-08 at 23.07.31.png new file mode 100644 index 0000000..dbf5208 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-02-08 at 23.07.31.png differ diff --git a/.gitbook/assets/Screenshot 2026-02-08 at 23.07.33.png b/.gitbook/assets/Screenshot 2026-02-08 at 23.07.33.png new file mode 100644 index 0000000..ad42f17 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-02-08 at 23.07.33.png differ diff --git a/.gitbook/assets/Screenshot 2026-02-08 at 23.08.14.png b/.gitbook/assets/Screenshot 2026-02-08 at 23.08.14.png new file mode 100644 index 0000000..57ba62f Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-02-08 at 23.08.14.png differ diff --git a/.gitbook/assets/Screenshot 2026-02-08 at 23.08.38.png b/.gitbook/assets/Screenshot 2026-02-08 at 23.08.38.png new file mode 100644 index 0000000..3932350 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-02-08 at 23.08.38.png differ diff --git a/.gitbook/assets/Screenshot 2026-02-08 at 23.08.41.png b/.gitbook/assets/Screenshot 2026-02-08 at 23.08.41.png new file mode 100644 index 0000000..0065792 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-02-08 at 23.08.41.png differ diff --git a/.gitbook/assets/Screenshot 2026-02-08 at 23.08.49.png b/.gitbook/assets/Screenshot 2026-02-08 at 23.08.49.png new file mode 100644 index 0000000..80809a6 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-02-08 at 23.08.49.png differ diff --git a/.gitbook/assets/Screenshot 2026-02-08 at 23.08.53.png b/.gitbook/assets/Screenshot 2026-02-08 at 23.08.53.png new file mode 100644 index 0000000..1e9a3a2 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-02-08 at 23.08.53.png differ diff --git a/.gitbook/assets/Screenshot 2026-02-08 at 23.09.05.png b/.gitbook/assets/Screenshot 2026-02-08 at 23.09.05.png new file mode 100644 index 0000000..a8379b9 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-02-08 at 23.09.05.png differ diff --git a/.gitbook/assets/Screenshot 2026-02-08 at 23.09.22.png b/.gitbook/assets/Screenshot 2026-02-08 at 23.09.22.png new file mode 100644 index 0000000..af8e4c1 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-02-08 at 23.09.22.png differ diff --git a/.gitbook/assets/Screenshot 2026-02-08 at 23.09.24.png b/.gitbook/assets/Screenshot 2026-02-08 at 23.09.24.png new file mode 100644 index 0000000..672054c Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-02-08 at 23.09.24.png differ diff --git a/.gitbook/assets/Screenshot 2026-02-08 at 23.09.37.png b/.gitbook/assets/Screenshot 2026-02-08 at 23.09.37.png new file mode 100644 index 0000000..0924185 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-02-08 at 23.09.37.png differ diff --git a/.gitbook/assets/Screenshot 2026-02-08 at 23.09.42.png b/.gitbook/assets/Screenshot 2026-02-08 at 23.09.42.png new file mode 100644 index 0000000..d775d6b Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-02-08 at 23.09.42.png differ diff --git a/.gitbook/assets/Screenshot 2026-02-08 at 23.37.27.png b/.gitbook/assets/Screenshot 2026-02-08 at 23.37.27.png new file mode 100644 index 0000000..6986f22 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-02-08 at 23.37.27.png differ diff --git a/.gitbook/assets/Screenshot 2026-02-08 at 23.38.28.png b/.gitbook/assets/Screenshot 2026-02-08 at 23.38.28.png new file mode 100644 index 0000000..5f57f18 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-02-08 at 23.38.28.png differ diff --git a/.gitbook/assets/Screenshot 2026-02-08 at 23.38.31.png b/.gitbook/assets/Screenshot 2026-02-08 at 23.38.31.png new file mode 100644 index 0000000..7df5069 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-02-08 at 23.38.31.png differ diff --git a/.gitbook/assets/Screenshot 2026-02-08 at 23.38.39.png b/.gitbook/assets/Screenshot 2026-02-08 at 23.38.39.png new file mode 100644 index 0000000..275ce89 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-02-08 at 23.38.39.png differ diff --git a/.gitbook/assets/Screenshot 2026-02-08 at 23.40.06.png b/.gitbook/assets/Screenshot 2026-02-08 at 23.40.06.png new file mode 100644 index 0000000..88a0c07 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-02-08 at 23.40.06.png differ diff --git a/.gitbook/assets/Screenshot 2026-02-08 at 23.41.04.png b/.gitbook/assets/Screenshot 2026-02-08 at 23.41.04.png new file mode 100644 index 0000000..bb2a8fe Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-02-08 at 23.41.04.png differ diff --git a/.gitbook/assets/Screenshot 2026-02-08 at 23.41.07.png b/.gitbook/assets/Screenshot 2026-02-08 at 23.41.07.png new file mode 100644 index 0000000..5d07d00 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-02-08 at 23.41.07.png differ diff --git a/.gitbook/assets/Screenshot 2026-02-08 at 23.42.14.png b/.gitbook/assets/Screenshot 2026-02-08 at 23.42.14.png new file mode 100644 index 0000000..5ffbff2 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-02-08 at 23.42.14.png differ diff --git a/.gitbook/assets/Screenshot 2026-03-12 at 13.54.36.png b/.gitbook/assets/Screenshot 2026-03-12 at 13.54.36.png new file mode 100644 index 0000000..b08d076 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-03-12 at 13.54.36.png differ diff --git a/.gitbook/assets/Screenshot 2026-03-12 at 20.59.40 (1).png b/.gitbook/assets/Screenshot 2026-03-12 at 20.59.40 (1).png new file mode 100644 index 0000000..43e606d Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-03-12 at 20.59.40 (1).png differ diff --git a/.gitbook/assets/Screenshot 2026-03-12 at 20.59.40.png b/.gitbook/assets/Screenshot 2026-03-12 at 20.59.40.png new file mode 100644 index 0000000..43e606d Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-03-12 at 20.59.40.png differ diff --git a/.gitbook/assets/Screenshot 2026-03-12 at 21.00.07.png b/.gitbook/assets/Screenshot 2026-03-12 at 21.00.07.png new file mode 100644 index 0000000..496838c Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-03-12 at 21.00.07.png differ diff --git a/.gitbook/assets/Screenshot 2026-03-12 at 21.00.27.png b/.gitbook/assets/Screenshot 2026-03-12 at 21.00.27.png new file mode 100644 index 0000000..bbb9290 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-03-12 at 21.00.27.png differ diff --git a/.gitbook/assets/Screenshot 2026-03-12 at 21.01.05.png b/.gitbook/assets/Screenshot 2026-03-12 at 21.01.05.png new file mode 100644 index 0000000..d6c7930 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-03-12 at 21.01.05.png differ diff --git a/.gitbook/assets/Screenshot 2026-03-12 at 21.01.10.png b/.gitbook/assets/Screenshot 2026-03-12 at 21.01.10.png new file mode 100644 index 0000000..d880f93 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-03-12 at 21.01.10.png differ diff --git a/.gitbook/assets/Screenshot 2026-03-12 at 21.01.14.png b/.gitbook/assets/Screenshot 2026-03-12 at 21.01.14.png new file mode 100644 index 0000000..cdb1898 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-03-12 at 21.01.14.png differ diff --git a/.gitbook/assets/Screenshot 2026-03-12 at 21.33.21.png b/.gitbook/assets/Screenshot 2026-03-12 at 21.33.21.png new file mode 100644 index 0000000..56390ad Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-03-12 at 21.33.21.png differ diff --git a/.gitbook/assets/Screenshot 2026-03-12 at 21.33.28 (1).png b/.gitbook/assets/Screenshot 2026-03-12 at 21.33.28 (1).png new file mode 100644 index 0000000..7656dbe Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-03-12 at 21.33.28 (1).png differ diff --git a/.gitbook/assets/Screenshot 2026-03-12 at 21.33.28.png b/.gitbook/assets/Screenshot 2026-03-12 at 21.33.28.png new file mode 100644 index 0000000..7656dbe Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-03-12 at 21.33.28.png differ diff --git a/.gitbook/assets/Screenshot 2026-04-15 at 16.08.26 (1).png b/.gitbook/assets/Screenshot 2026-04-15 at 16.08.26 (1).png new file mode 100644 index 0000000..861f226 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-04-15 at 16.08.26 (1).png differ diff --git a/.gitbook/assets/Screenshot 2026-04-15 at 16.08.26.png b/.gitbook/assets/Screenshot 2026-04-15 at 16.08.26.png new file mode 100644 index 0000000..861f226 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-04-15 at 16.08.26.png differ diff --git a/.gitbook/assets/Screenshot 2026-04-15 at 16.19.09.png b/.gitbook/assets/Screenshot 2026-04-15 at 16.19.09.png new file mode 100644 index 0000000..e72cae1 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-04-15 at 16.19.09.png differ diff --git a/.gitbook/assets/Screenshot 2026-04-15 at 16.26.43.png b/.gitbook/assets/Screenshot 2026-04-15 at 16.26.43.png new file mode 100644 index 0000000..051e2a0 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-04-15 at 16.26.43.png differ diff --git a/.gitbook/assets/Screenshot 2026-04-15 at 16.27.19 (1).png b/.gitbook/assets/Screenshot 2026-04-15 at 16.27.19 (1).png new file mode 100644 index 0000000..56bddf5 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-04-15 at 16.27.19 (1).png differ diff --git a/.gitbook/assets/Screenshot 2026-04-15 at 16.27.19.png b/.gitbook/assets/Screenshot 2026-04-15 at 16.27.19.png new file mode 100644 index 0000000..56bddf5 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-04-15 at 16.27.19.png differ diff --git a/.gitbook/assets/Screenshot 2026-04-15 at 16.51.43.png b/.gitbook/assets/Screenshot 2026-04-15 at 16.51.43.png new file mode 100644 index 0000000..1d8cefb Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-04-15 at 16.51.43.png differ diff --git a/.gitbook/assets/Screenshot 2026-04-16 at 13.57.10.png b/.gitbook/assets/Screenshot 2026-04-16 at 13.57.10.png new file mode 100644 index 0000000..34829d6 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-04-16 at 13.57.10.png differ diff --git a/.gitbook/assets/Screenshot 2026-04-16 at 14.00.44.png b/.gitbook/assets/Screenshot 2026-04-16 at 14.00.44.png new file mode 100644 index 0000000..6b1b1a6 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-04-16 at 14.00.44.png differ diff --git a/.gitbook/assets/Screenshot 2026-04-16 at 14.03.59.png b/.gitbook/assets/Screenshot 2026-04-16 at 14.03.59.png new file mode 100644 index 0000000..ab650a1 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-04-16 at 14.03.59.png differ diff --git a/.gitbook/assets/Screenshot 2026-04-16 at 14.06.32.png b/.gitbook/assets/Screenshot 2026-04-16 at 14.06.32.png new file mode 100644 index 0000000..b341bcf Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-04-16 at 14.06.32.png differ diff --git a/.gitbook/assets/Screenshot 2026-04-16 at 14.09.38.png b/.gitbook/assets/Screenshot 2026-04-16 at 14.09.38.png new file mode 100644 index 0000000..6410054 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-04-16 at 14.09.38.png differ diff --git a/.gitbook/assets/Screenshot 2026-04-16 at 14.10.35.png b/.gitbook/assets/Screenshot 2026-04-16 at 14.10.35.png new file mode 100644 index 0000000..5ec8ea3 Binary files /dev/null and b/.gitbook/assets/Screenshot 2026-04-16 at 14.10.35.png differ diff --git a/.gitbook/assets/Untitled Diagram.drawio (1).png b/.gitbook/assets/Untitled Diagram.drawio (1).png new file mode 100644 index 0000000..f1f2f47 Binary files /dev/null and b/.gitbook/assets/Untitled Diagram.drawio (1).png differ diff --git a/.gitbook/assets/Untitled Diagram.drawio (1).svg b/.gitbook/assets/Untitled Diagram.drawio (1).svg new file mode 100644 index 0000000..30400f2 --- /dev/null +++ b/.gitbook/assets/Untitled Diagram.drawio (1).svg @@ -0,0 +1,4 @@ + + + +
HTTPS
Wireguard
Internet
Public Proxy
VPN Gateway
Core
GRPC (TLS)
GRPC (TLS)
DMZ
firewall
Internal network
firewall
\ No newline at end of file diff --git a/.gitbook/assets/Untitled Diagram.drawio.png b/.gitbook/assets/Untitled Diagram.drawio.png new file mode 100644 index 0000000..d1ca18d Binary files /dev/null and b/.gitbook/assets/Untitled Diagram.drawio.png differ diff --git a/.gitbook/assets/Untitled Diagram.drawio.svg b/.gitbook/assets/Untitled Diagram.drawio.svg new file mode 100644 index 0000000..5c4c138 --- /dev/null +++ b/.gitbook/assets/Untitled Diagram.drawio.svg @@ -0,0 +1,4 @@ + + + +
HTTPS
HTTPS
Wireguard
Wireguard
DMZ Firewall
DMZ Firewall
Internal Network
Firewall
Internal Network...
GRPC (TLS)
GRPC (TLS)
GRPC (TLS)
GRPC (TLS)
Internet
Internet
Public proxy
Public proxy
VPN Gateway
VPN Gateway
Core
Core
\ No newline at end of file diff --git a/.gitbook/assets/add-device-tutorial (1).png b/.gitbook/assets/add-device-tutorial (1).png new file mode 100644 index 0000000..c78cba7 Binary files /dev/null and b/.gitbook/assets/add-device-tutorial (1).png differ diff --git a/.gitbook/assets/add-device-tutorial.png b/.gitbook/assets/add-device-tutorial.png new file mode 100644 index 0000000..c78cba7 Binary files /dev/null and b/.gitbook/assets/add-device-tutorial.png differ diff --git a/.gitbook/assets/add-instance-tutorial.png b/.gitbook/assets/add-instance-tutorial.png new file mode 100644 index 0000000..b450598 Binary files /dev/null and b/.gitbook/assets/add-instance-tutorial.png differ diff --git a/in-depth/puml/architecture-components.svg b/.gitbook/assets/architecture-components.svg similarity index 100% rename from in-depth/puml/architecture-components.svg rename to .gitbook/assets/architecture-components.svg diff --git a/in-depth/puml/architecture-containers.svg b/.gitbook/assets/architecture-containers.svg similarity index 100% rename from in-depth/puml/architecture-containers.svg rename to .gitbook/assets/architecture-containers.svg diff --git a/in-depth/puml/architecture-context.svg b/.gitbook/assets/architecture-context.svg similarity index 100% rename from in-depth/puml/architecture-context.svg rename to .gitbook/assets/architecture-context.svg diff --git a/.gitbook/assets/aws_cloudformation.png b/.gitbook/assets/aws_cloudformation.png new file mode 100644 index 0000000..bf2edcc Binary files /dev/null and b/.gitbook/assets/aws_cloudformation.png differ diff --git a/.gitbook/assets/aws_cloudformation_v2 (1).png b/.gitbook/assets/aws_cloudformation_v2 (1).png new file mode 100644 index 0000000..0c5de59 Binary files /dev/null and b/.gitbook/assets/aws_cloudformation_v2 (1).png differ diff --git a/.gitbook/assets/aws_cloudformation_v2.png b/.gitbook/assets/aws_cloudformation_v2.png new file mode 100644 index 0000000..0c5de59 Binary files /dev/null and b/.gitbook/assets/aws_cloudformation_v2.png differ diff --git a/.gitbook/assets/client-check-for-updates.png b/.gitbook/assets/client-check-for-updates.png new file mode 100644 index 0000000..e61c164 Binary files /dev/null and b/.gitbook/assets/client-check-for-updates.png differ diff --git a/.gitbook/assets/defguard (1) (1).png b/.gitbook/assets/defguard (3).png similarity index 100% rename from .gitbook/assets/defguard (1) (1).png rename to .gitbook/assets/defguard (3).png diff --git a/.gitbook/assets/defguard-architecture.drawio.svg b/.gitbook/assets/defguard-architecture.drawio.svg new file mode 100644 index 0000000..270daf6 --- /dev/null +++ b/.gitbook/assets/defguard-architecture.drawio.svg @@ -0,0 +1,4 @@ + + + +
HTTPS
Wireguard
DMZ
Internal network
GRPC (TLS)
GRPC (TLS)
Internet
Public proxy
VPN Gateway
Core
\ No newline at end of file diff --git a/.gitbook/assets/defguard-desktop-add-instance.png b/.gitbook/assets/defguard-desktop-add-instance.png deleted file mode 100644 index 1acd44d..0000000 Binary files a/.gitbook/assets/defguard-desktop-add-instance.png and /dev/null differ diff --git a/.gitbook/assets/defguard-desktop-provide-url.png b/.gitbook/assets/defguard-desktop-provide-url.png deleted file mode 100644 index 32cf10a..0000000 Binary files a/.gitbook/assets/defguard-desktop-provide-url.png and /dev/null differ diff --git a/.gitbook/assets/defguard-devices-fingerprint-icon.png b/.gitbook/assets/defguard-devices-fingerprint-icon.png new file mode 100644 index 0000000..8f0427d Binary files /dev/null and b/.gitbook/assets/defguard-devices-fingerprint-icon.png differ diff --git a/.gitbook/assets/defguard-enrollment-email-desktop.png b/.gitbook/assets/defguard-enrollment-email-desktop.png deleted file mode 100644 index 56d566f..0000000 Binary files a/.gitbook/assets/defguard-enrollment-email-desktop.png and /dev/null differ diff --git a/.gitbook/assets/defguard-location-overview-tutorial (1).png b/.gitbook/assets/defguard-location-overview-tutorial (1).png new file mode 100644 index 0000000..235f32b Binary files /dev/null and b/.gitbook/assets/defguard-location-overview-tutorial (1).png differ diff --git a/.gitbook/assets/defguard-location-overview-tutorial.png b/.gitbook/assets/defguard-location-overview-tutorial.png new file mode 100644 index 0000000..235f32b Binary files /dev/null and b/.gitbook/assets/defguard-location-overview-tutorial.png differ diff --git a/.gitbook/assets/defguard-mobile-biometry-enabled.png b/.gitbook/assets/defguard-mobile-biometry-enabled.png new file mode 100644 index 0000000..fd8b89a Binary files /dev/null and b/.gitbook/assets/defguard-mobile-biometry-enabled.png differ diff --git a/.gitbook/assets/defguard-mobile-biometry-fail.png b/.gitbook/assets/defguard-mobile-biometry-fail.png new file mode 100644 index 0000000..4f65e69 Binary files /dev/null and b/.gitbook/assets/defguard-mobile-biometry-fail.png differ diff --git a/.gitbook/assets/defguard-mobile-biometry-setup (1).png b/.gitbook/assets/defguard-mobile-biometry-setup (1).png new file mode 100644 index 0000000..d01d4ce Binary files /dev/null and b/.gitbook/assets/defguard-mobile-biometry-setup (1).png differ diff --git a/.gitbook/assets/defguard-mobile-biometry-setup.png b/.gitbook/assets/defguard-mobile-biometry-setup.png new file mode 100644 index 0000000..31df83b Binary files /dev/null and b/.gitbook/assets/defguard-mobile-biometry-setup.png differ diff --git a/.gitbook/assets/defguard-mobile-connect-mfa (1).png b/.gitbook/assets/defguard-mobile-connect-mfa (1).png new file mode 100644 index 0000000..0ac3a42 Binary files /dev/null and b/.gitbook/assets/defguard-mobile-connect-mfa (1).png differ diff --git a/.gitbook/assets/defguard-mobile-connect-mfa.png b/.gitbook/assets/defguard-mobile-connect-mfa.png index 0ac3a42..d23cce9 100644 Binary files a/.gitbook/assets/defguard-mobile-connect-mfa.png and b/.gitbook/assets/defguard-mobile-connect-mfa.png differ diff --git a/.gitbook/assets/defguard-mobile-connecting-to-mfa-location.png b/.gitbook/assets/defguard-mobile-connecting-to-mfa-location.png new file mode 100644 index 0000000..135fcc2 Binary files /dev/null and b/.gitbook/assets/defguard-mobile-connecting-to-mfa-location.png differ diff --git a/.gitbook/assets/defguard-vpn-overview (2).png b/.gitbook/assets/defguard-vpn-overview (2).png index 7eee1f5..e787b49 100644 Binary files a/.gitbook/assets/defguard-vpn-overview (2).png and b/.gitbook/assets/defguard-vpn-overview (2).png differ diff --git a/.gitbook/assets/defguard-vpn-overview (3).png b/.gitbook/assets/defguard-vpn-overview (3).png deleted file mode 100644 index e787b49..0000000 Binary files a/.gitbook/assets/defguard-vpn-overview (3).png and /dev/null differ diff --git a/screencasts/defguard.gif b/.gitbook/assets/defguard.gif similarity index 100% rename from screencasts/defguard.gif rename to .gitbook/assets/defguard.gif diff --git a/.gitbook/assets/defguard_datasheet 2.0.pdf b/.gitbook/assets/defguard_datasheet 2.0.pdf new file mode 100644 index 0000000..72c8177 Binary files /dev/null and b/.gitbook/assets/defguard_datasheet 2.0.pdf differ diff --git a/.gitbook/assets/detailed-view-instance (1).png b/.gitbook/assets/detailed-view-instance (1).png new file mode 100644 index 0000000..232eb5c Binary files /dev/null and b/.gitbook/assets/detailed-view-instance (1).png differ diff --git a/.gitbook/assets/detailed-view-instance.png b/.gitbook/assets/detailed-view-instance.png new file mode 100644 index 0000000..232eb5c Binary files /dev/null and b/.gitbook/assets/detailed-view-instance.png differ diff --git a/.gitbook/assets/device-list-biometry.png b/.gitbook/assets/device-list-biometry.png new file mode 100644 index 0000000..8c51c03 Binary files /dev/null and b/.gitbook/assets/device-list-biometry.png differ diff --git a/.gitbook/assets/device-name-tutorial.png b/.gitbook/assets/device-name-tutorial.png new file mode 100644 index 0000000..e2e483c Binary files /dev/null and b/.gitbook/assets/device-name-tutorial.png differ diff --git a/.gitbook/assets/enrollment_process_1 (1).png b/.gitbook/assets/enrollment_process_1 (1).png new file mode 100644 index 0000000..f681c0b Binary files /dev/null and b/.gitbook/assets/enrollment_process_1 (1).png differ diff --git a/.gitbook/assets/enrollment_process_1 (2).png b/.gitbook/assets/enrollment_process_1 (2).png new file mode 100644 index 0000000..f681c0b Binary files /dev/null and b/.gitbook/assets/enrollment_process_1 (2).png differ diff --git a/.gitbook/assets/enrollment_process_1.png b/.gitbook/assets/enrollment_process_1.png new file mode 100644 index 0000000..f681c0b Binary files /dev/null and b/.gitbook/assets/enrollment_process_1.png differ diff --git a/.gitbook/assets/enterprise-features.png b/.gitbook/assets/enterprise-features.png new file mode 100644 index 0000000..8f56940 Binary files /dev/null and b/.gitbook/assets/enterprise-features.png differ diff --git a/.gitbook/assets/finder-go-library.png b/.gitbook/assets/finder-go-library.png new file mode 100644 index 0000000..50a4c5c Binary files /dev/null and b/.gitbook/assets/finder-go-library.png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index 0232e5b..0000000 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index d7a0144..0000000 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index 0d50734..0000000 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index 554f85c..0000000 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index d535a09..0000000 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index b4c59b6..0000000 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index d8ceeb2..0000000 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index 62a91a2..0000000 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index e61b990..0000000 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1).png deleted file mode 100644 index 872c8db..0000000 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1).png deleted file mode 100644 index 72b6271..0000000 Binary files a/.gitbook/assets/image (1) (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1).png deleted file mode 100644 index 9bcef77..0000000 Binary files a/.gitbook/assets/image (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (1) (1).png b/.gitbook/assets/image (1) (1).png index 8d70d0e..4680580 100644 Binary files a/.gitbook/assets/image (1) (1).png and b/.gitbook/assets/image (1) (1).png differ diff --git a/.gitbook/assets/image (1).png b/.gitbook/assets/image (1).png index b187ad8..92cb752 100644 Binary files a/.gitbook/assets/image (1).png and b/.gitbook/assets/image (1).png differ diff --git a/.gitbook/assets/image (10) (1) (1) (1).png b/.gitbook/assets/image (10) (1) (1) (1).png deleted file mode 100644 index f0d6785..0000000 Binary files a/.gitbook/assets/image (10) (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (10) (1) (1).png b/.gitbook/assets/image (10) (1) (1).png deleted file mode 100644 index 3177367..0000000 Binary files a/.gitbook/assets/image (10) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (10) (1).png b/.gitbook/assets/image (10) (1).png deleted file mode 100644 index f54c60c..0000000 Binary files a/.gitbook/assets/image (10) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (10).png b/.gitbook/assets/image (10).png index 13ced10..b524788 100644 Binary files a/.gitbook/assets/image (10).png and b/.gitbook/assets/image (10).png differ diff --git a/.gitbook/assets/image (100).png b/.gitbook/assets/image (100).png index 34bd6e3..8364770 100644 Binary files a/.gitbook/assets/image (100).png and b/.gitbook/assets/image (100).png differ diff --git a/.gitbook/assets/image (101).png b/.gitbook/assets/image (101).png index 08c83c9..0232e5b 100644 Binary files a/.gitbook/assets/image (101).png and b/.gitbook/assets/image (101).png differ diff --git a/.gitbook/assets/image (102).png b/.gitbook/assets/image (102).png index 7ce4ea9..1311e08 100644 Binary files a/.gitbook/assets/image (102).png and b/.gitbook/assets/image (102).png differ diff --git a/.gitbook/assets/image (103).png b/.gitbook/assets/image (103).png index 7a016e7..b187ad8 100644 Binary files a/.gitbook/assets/image (103).png and b/.gitbook/assets/image (103).png differ diff --git a/.gitbook/assets/image (104).png b/.gitbook/assets/image (104).png index c9fd008..a159aea 100644 Binary files a/.gitbook/assets/image (104).png and b/.gitbook/assets/image (104).png differ diff --git a/.gitbook/assets/image (105).png b/.gitbook/assets/image (105).png index fc747af..eefc69c 100644 Binary files a/.gitbook/assets/image (105).png and b/.gitbook/assets/image (105).png differ diff --git a/.gitbook/assets/image (106).png b/.gitbook/assets/image (106).png index 12f0e5f..3ec0417 100644 Binary files a/.gitbook/assets/image (106).png and b/.gitbook/assets/image (106).png differ diff --git a/.gitbook/assets/image (10) (1) (1) (1) (1).png b/.gitbook/assets/image (107) (1).png similarity index 100% rename from .gitbook/assets/image (10) (1) (1) (1) (1).png rename to .gitbook/assets/image (107) (1).png diff --git a/.gitbook/assets/image (107).png b/.gitbook/assets/image (107).png index 009463b..12f0e5f 100644 Binary files a/.gitbook/assets/image (107).png and b/.gitbook/assets/image (107).png differ diff --git a/.gitbook/assets/image (108).png b/.gitbook/assets/image (108).png index 4f16049..009463b 100644 Binary files a/.gitbook/assets/image (108).png and b/.gitbook/assets/image (108).png differ diff --git a/.gitbook/assets/image (109).png b/.gitbook/assets/image (109).png index fe6ae12..4f16049 100644 Binary files a/.gitbook/assets/image (109).png and b/.gitbook/assets/image (109).png differ diff --git a/.gitbook/assets/image (11) (1).png b/.gitbook/assets/image (11) (1).png deleted file mode 100644 index c4eead5..0000000 Binary files a/.gitbook/assets/image (11) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (11).png b/.gitbook/assets/image (11).png index 0a4a4af..c083684 100644 Binary files a/.gitbook/assets/image (11).png and b/.gitbook/assets/image (11).png differ diff --git a/.gitbook/assets/image (110).png b/.gitbook/assets/image (110).png index 8ab0817..fe6ae12 100644 Binary files a/.gitbook/assets/image (110).png and b/.gitbook/assets/image (110).png differ diff --git a/.gitbook/assets/image (111).png b/.gitbook/assets/image (111).png index d2d027e..8ab0817 100644 Binary files a/.gitbook/assets/image (111).png and b/.gitbook/assets/image (111).png differ diff --git a/.gitbook/assets/image (112).png b/.gitbook/assets/image (112).png index 56b6ef6..d2d027e 100644 Binary files a/.gitbook/assets/image (112).png and b/.gitbook/assets/image (112).png differ diff --git a/.gitbook/assets/image (113).png b/.gitbook/assets/image (113).png index 710be56..56b6ef6 100644 Binary files a/.gitbook/assets/image (113).png and b/.gitbook/assets/image (113).png differ diff --git a/.gitbook/assets/image (114).png b/.gitbook/assets/image (114).png index ff1862a..710be56 100644 Binary files a/.gitbook/assets/image (114).png and b/.gitbook/assets/image (114).png differ diff --git a/.gitbook/assets/image (118).png b/.gitbook/assets/image (118).png index 5ecbcbc..5b06f11 100644 Binary files a/.gitbook/assets/image (118).png and b/.gitbook/assets/image (118).png differ diff --git a/.gitbook/assets/image (5) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (119).png similarity index 100% rename from .gitbook/assets/image (5) (1) (1) (1) (1) (1).png rename to .gitbook/assets/image (119).png diff --git a/.gitbook/assets/image (12) (1).png b/.gitbook/assets/image (12) (1).png deleted file mode 100644 index bbbb4a6..0000000 Binary files a/.gitbook/assets/image (12) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (12).png b/.gitbook/assets/image (12).png index 869d1d5..027adaf 100644 Binary files a/.gitbook/assets/image (12).png and b/.gitbook/assets/image (12).png differ diff --git a/.gitbook/assets/image (6) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (120).png similarity index 100% rename from .gitbook/assets/image (6) (1) (1) (1) (1) (1).png rename to .gitbook/assets/image (120).png diff --git a/.gitbook/assets/image (7) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (121).png similarity index 100% rename from .gitbook/assets/image (7) (1) (1) (1) (1) (1).png rename to .gitbook/assets/image (121).png diff --git a/.gitbook/assets/image (8) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (122).png similarity index 100% rename from .gitbook/assets/image (8) (1) (1) (1) (1) (1).png rename to .gitbook/assets/image (122).png diff --git a/.gitbook/assets/image (9) (1) (1) (1) (1).png b/.gitbook/assets/image (123).png similarity index 100% rename from .gitbook/assets/image (9) (1) (1) (1) (1).png rename to .gitbook/assets/image (123).png diff --git a/.gitbook/assets/image (11) (1) (1).png b/.gitbook/assets/image (124).png similarity index 100% rename from .gitbook/assets/image (11) (1) (1).png rename to .gitbook/assets/image (124).png diff --git a/.gitbook/assets/image (12) (1) (1).png b/.gitbook/assets/image (125).png similarity index 100% rename from .gitbook/assets/image (12) (1) (1).png rename to .gitbook/assets/image (125).png diff --git a/.gitbook/assets/image (14) (1).png b/.gitbook/assets/image (126).png similarity index 100% rename from .gitbook/assets/image (14) (1).png rename to .gitbook/assets/image (126).png diff --git a/.gitbook/assets/image (127) (1).png b/.gitbook/assets/image (127) (1).png new file mode 100644 index 0000000..e275a69 Binary files /dev/null and b/.gitbook/assets/image (127) (1).png differ diff --git a/.gitbook/assets/image (15) (1).png b/.gitbook/assets/image (127).png similarity index 100% rename from .gitbook/assets/image (15) (1).png rename to .gitbook/assets/image (127).png diff --git a/.gitbook/assets/image (16) (1).png b/.gitbook/assets/image (128).png similarity index 100% rename from .gitbook/assets/image (16) (1).png rename to .gitbook/assets/image (128).png diff --git a/.gitbook/assets/image (17) (1).png b/.gitbook/assets/image (129).png similarity index 100% rename from .gitbook/assets/image (17) (1).png rename to .gitbook/assets/image (129).png diff --git a/.gitbook/assets/image (13) (1).png b/.gitbook/assets/image (13) (1).png deleted file mode 100644 index 0d50734..0000000 Binary files a/.gitbook/assets/image (13) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (13).png b/.gitbook/assets/image (13).png index 7f3d6fc..02bd340 100644 Binary files a/.gitbook/assets/image (13).png and b/.gitbook/assets/image (13).png differ diff --git a/.gitbook/assets/image (130) (1).png b/.gitbook/assets/image (130) (1).png new file mode 100644 index 0000000..399ac16 Binary files /dev/null and b/.gitbook/assets/image (130) (1).png differ diff --git a/.gitbook/assets/image (18) (1).png b/.gitbook/assets/image (130).png similarity index 100% rename from .gitbook/assets/image (18) (1).png rename to .gitbook/assets/image (130).png diff --git a/.gitbook/assets/image (19) (1).png b/.gitbook/assets/image (131).png similarity index 100% rename from .gitbook/assets/image (19) (1).png rename to .gitbook/assets/image (131).png diff --git a/.gitbook/assets/image (132).png b/.gitbook/assets/image (132).png new file mode 100644 index 0000000..5594cc9 Binary files /dev/null and b/.gitbook/assets/image (132).png differ diff --git a/.gitbook/assets/image (133).png b/.gitbook/assets/image (133).png new file mode 100644 index 0000000..887dde0 Binary files /dev/null and b/.gitbook/assets/image (133).png differ diff --git a/.gitbook/assets/image (134).png b/.gitbook/assets/image (134).png new file mode 100644 index 0000000..8df7768 Binary files /dev/null and b/.gitbook/assets/image (134).png differ diff --git a/.gitbook/assets/image (135).png b/.gitbook/assets/image (135).png new file mode 100644 index 0000000..41c8cae Binary files /dev/null and b/.gitbook/assets/image (135).png differ diff --git a/.gitbook/assets/image (136) (1).png b/.gitbook/assets/image (136) (1).png new file mode 100644 index 0000000..c467b93 Binary files /dev/null and b/.gitbook/assets/image (136) (1).png differ diff --git a/.gitbook/assets/image (136).png b/.gitbook/assets/image (136).png new file mode 100644 index 0000000..ff094f1 Binary files /dev/null and b/.gitbook/assets/image (136).png differ diff --git a/.gitbook/assets/image (137).png b/.gitbook/assets/image (137).png new file mode 100644 index 0000000..5bd1afa Binary files /dev/null and b/.gitbook/assets/image (137).png differ diff --git a/.gitbook/assets/image (138).png b/.gitbook/assets/image (138).png new file mode 100644 index 0000000..87763ac Binary files /dev/null and b/.gitbook/assets/image (138).png differ diff --git a/.gitbook/assets/image (139).png b/.gitbook/assets/image (139).png new file mode 100644 index 0000000..3f4dedc Binary files /dev/null and b/.gitbook/assets/image (139).png differ diff --git a/.gitbook/assets/image (14).png b/.gitbook/assets/image (14).png index 79c8fc1..faf29fa 100644 Binary files a/.gitbook/assets/image (14).png and b/.gitbook/assets/image (14).png differ diff --git a/.gitbook/assets/image (140).png b/.gitbook/assets/image (140).png new file mode 100644 index 0000000..82fac13 Binary files /dev/null and b/.gitbook/assets/image (140).png differ diff --git a/.gitbook/assets/image (141).png b/.gitbook/assets/image (141).png new file mode 100644 index 0000000..e275a69 Binary files /dev/null and b/.gitbook/assets/image (141).png differ diff --git a/.gitbook/assets/image (142).png b/.gitbook/assets/image (142).png new file mode 100644 index 0000000..f96a713 Binary files /dev/null and b/.gitbook/assets/image (142).png differ diff --git a/.gitbook/assets/image (143).png b/.gitbook/assets/image (143).png new file mode 100644 index 0000000..399ac16 Binary files /dev/null and b/.gitbook/assets/image (143).png differ diff --git a/.gitbook/assets/image (144).png b/.gitbook/assets/image (144).png new file mode 100644 index 0000000..6168c8b Binary files /dev/null and b/.gitbook/assets/image (144).png differ diff --git a/.gitbook/assets/image (145).png b/.gitbook/assets/image (145).png new file mode 100644 index 0000000..7c27940 Binary files /dev/null and b/.gitbook/assets/image (145).png differ diff --git a/.gitbook/assets/image (146).png b/.gitbook/assets/image (146).png new file mode 100644 index 0000000..090f360 Binary files /dev/null and b/.gitbook/assets/image (146).png differ diff --git a/.gitbook/assets/image (147).png b/.gitbook/assets/image (147).png new file mode 100644 index 0000000..c467b93 Binary files /dev/null and b/.gitbook/assets/image (147).png differ diff --git a/.gitbook/assets/image (148).png b/.gitbook/assets/image (148).png new file mode 100644 index 0000000..97e8513 Binary files /dev/null and b/.gitbook/assets/image (148).png differ diff --git a/.gitbook/assets/image (149).png b/.gitbook/assets/image (149).png new file mode 100644 index 0000000..5b492f5 Binary files /dev/null and b/.gitbook/assets/image (149).png differ diff --git a/.gitbook/assets/image (15).png b/.gitbook/assets/image (15).png index b688551..dafc2e6 100644 Binary files a/.gitbook/assets/image (15).png and b/.gitbook/assets/image (15).png differ diff --git a/.gitbook/assets/image (150).png b/.gitbook/assets/image (150).png new file mode 100644 index 0000000..3b8dcbf Binary files /dev/null and b/.gitbook/assets/image (150).png differ diff --git a/.gitbook/assets/image (151).png b/.gitbook/assets/image (151).png new file mode 100644 index 0000000..1fb4197 Binary files /dev/null and b/.gitbook/assets/image (151).png differ diff --git a/.gitbook/assets/image (152).png b/.gitbook/assets/image (152).png new file mode 100644 index 0000000..66a70a9 Binary files /dev/null and b/.gitbook/assets/image (152).png differ diff --git a/.gitbook/assets/image (153).png b/.gitbook/assets/image (153).png new file mode 100644 index 0000000..b4babab Binary files /dev/null and b/.gitbook/assets/image (153).png differ diff --git a/.gitbook/assets/image (154).png b/.gitbook/assets/image (154).png new file mode 100644 index 0000000..d81f763 Binary files /dev/null and b/.gitbook/assets/image (154).png differ diff --git a/.gitbook/assets/image (155).png b/.gitbook/assets/image (155).png new file mode 100644 index 0000000..e84fd0d Binary files /dev/null and b/.gitbook/assets/image (155).png differ diff --git a/.gitbook/assets/image (156).png b/.gitbook/assets/image (156).png new file mode 100644 index 0000000..ab0cd35 Binary files /dev/null and b/.gitbook/assets/image (156).png differ diff --git a/.gitbook/assets/image (157).png b/.gitbook/assets/image (157).png new file mode 100644 index 0000000..99efc78 Binary files /dev/null and b/.gitbook/assets/image (157).png differ diff --git a/.gitbook/assets/image (158).png b/.gitbook/assets/image (158).png new file mode 100644 index 0000000..6e7e113 Binary files /dev/null and b/.gitbook/assets/image (158).png differ diff --git a/.gitbook/assets/image (159).png b/.gitbook/assets/image (159).png new file mode 100644 index 0000000..faec42b Binary files /dev/null and b/.gitbook/assets/image (159).png differ diff --git a/.gitbook/assets/image (16).png b/.gitbook/assets/image (16).png index bde9fbe..b00ba95 100644 Binary files a/.gitbook/assets/image (16).png and b/.gitbook/assets/image (16).png differ diff --git a/.gitbook/assets/image (160).png b/.gitbook/assets/image (160).png new file mode 100644 index 0000000..a6eacf8 Binary files /dev/null and b/.gitbook/assets/image (160).png differ diff --git a/.gitbook/assets/image (161).png b/.gitbook/assets/image (161).png new file mode 100644 index 0000000..28927b9 Binary files /dev/null and b/.gitbook/assets/image (161).png differ diff --git a/.gitbook/assets/image (162).png b/.gitbook/assets/image (162).png new file mode 100644 index 0000000..3f2ebef Binary files /dev/null and b/.gitbook/assets/image (162).png differ diff --git a/.gitbook/assets/image (163).png b/.gitbook/assets/image (163).png new file mode 100644 index 0000000..47cbfc9 Binary files /dev/null and b/.gitbook/assets/image (163).png differ diff --git a/.gitbook/assets/image (164).png b/.gitbook/assets/image (164).png new file mode 100644 index 0000000..58825bc Binary files /dev/null and b/.gitbook/assets/image (164).png differ diff --git a/.gitbook/assets/image (165).png b/.gitbook/assets/image (165).png new file mode 100644 index 0000000..0d1addf Binary files /dev/null and b/.gitbook/assets/image (165).png differ diff --git a/.gitbook/assets/image (166).png b/.gitbook/assets/image (166).png new file mode 100644 index 0000000..b8cc431 Binary files /dev/null and b/.gitbook/assets/image (166).png differ diff --git a/.gitbook/assets/image (167).png b/.gitbook/assets/image (167).png new file mode 100644 index 0000000..14c78bd Binary files /dev/null and b/.gitbook/assets/image (167).png differ diff --git a/.gitbook/assets/image (168).png b/.gitbook/assets/image (168).png new file mode 100644 index 0000000..ca7e7c2 Binary files /dev/null and b/.gitbook/assets/image (168).png differ diff --git a/.gitbook/assets/image (169).png b/.gitbook/assets/image (169).png new file mode 100644 index 0000000..9803d4b Binary files /dev/null and b/.gitbook/assets/image (169).png differ diff --git a/.gitbook/assets/image (17).png b/.gitbook/assets/image (17).png index aabb145..a6c695b 100644 Binary files a/.gitbook/assets/image (17).png and b/.gitbook/assets/image (17).png differ diff --git a/.gitbook/assets/image (170).png b/.gitbook/assets/image (170).png new file mode 100644 index 0000000..62af934 Binary files /dev/null and b/.gitbook/assets/image (170).png differ diff --git a/.gitbook/assets/image (171).png b/.gitbook/assets/image (171).png new file mode 100644 index 0000000..b597c19 Binary files /dev/null and b/.gitbook/assets/image (171).png differ diff --git a/.gitbook/assets/image (172).png b/.gitbook/assets/image (172).png new file mode 100644 index 0000000..3cf8333 Binary files /dev/null and b/.gitbook/assets/image (172).png differ diff --git a/.gitbook/assets/image (70) (1).png b/.gitbook/assets/image (173).png similarity index 100% rename from .gitbook/assets/image (70) (1).png rename to .gitbook/assets/image (173).png diff --git a/.gitbook/assets/image (174).png b/.gitbook/assets/image (174).png new file mode 100644 index 0000000..f066e0c Binary files /dev/null and b/.gitbook/assets/image (174).png differ diff --git a/.gitbook/assets/image (175).png b/.gitbook/assets/image (175).png new file mode 100644 index 0000000..3927591 Binary files /dev/null and b/.gitbook/assets/image (175).png differ diff --git a/.gitbook/assets/image (176).png b/.gitbook/assets/image (176).png new file mode 100644 index 0000000..3991cd4 Binary files /dev/null and b/.gitbook/assets/image (176).png differ diff --git a/.gitbook/assets/image (177).png b/.gitbook/assets/image (177).png new file mode 100644 index 0000000..203bf50 Binary files /dev/null and b/.gitbook/assets/image (177).png differ diff --git a/.gitbook/assets/image (178).png b/.gitbook/assets/image (178).png new file mode 100644 index 0000000..87dec64 Binary files /dev/null and b/.gitbook/assets/image (178).png differ diff --git a/.gitbook/assets/image (179).png b/.gitbook/assets/image (179).png new file mode 100644 index 0000000..89f60da Binary files /dev/null and b/.gitbook/assets/image (179).png differ diff --git a/.gitbook/assets/image (18).png b/.gitbook/assets/image (18).png index d0638ba..cf2fb76 100644 Binary files a/.gitbook/assets/image (18).png and b/.gitbook/assets/image (18).png differ diff --git a/.gitbook/assets/image (180).png b/.gitbook/assets/image (180).png new file mode 100644 index 0000000..035c95a Binary files /dev/null and b/.gitbook/assets/image (180).png differ diff --git a/.gitbook/assets/image (181).png b/.gitbook/assets/image (181).png new file mode 100644 index 0000000..6f62005 Binary files /dev/null and b/.gitbook/assets/image (181).png differ diff --git a/.gitbook/assets/image (182).png b/.gitbook/assets/image (182).png new file mode 100644 index 0000000..71d07d8 Binary files /dev/null and b/.gitbook/assets/image (182).png differ diff --git a/.gitbook/assets/image (183).png b/.gitbook/assets/image (183).png new file mode 100644 index 0000000..5f4070e Binary files /dev/null and b/.gitbook/assets/image (183).png differ diff --git a/.gitbook/assets/image (184).png b/.gitbook/assets/image (184).png new file mode 100644 index 0000000..1497608 Binary files /dev/null and b/.gitbook/assets/image (184).png differ diff --git a/.gitbook/assets/image (185).png b/.gitbook/assets/image (185).png new file mode 100644 index 0000000..70f2742 Binary files /dev/null and b/.gitbook/assets/image (185).png differ diff --git a/.gitbook/assets/image (186).png b/.gitbook/assets/image (186).png new file mode 100644 index 0000000..650dc2d Binary files /dev/null and b/.gitbook/assets/image (186).png differ diff --git a/.gitbook/assets/image (187).png b/.gitbook/assets/image (187).png new file mode 100644 index 0000000..1da67db Binary files /dev/null and b/.gitbook/assets/image (187).png differ diff --git a/.gitbook/assets/image (188) (1).png b/.gitbook/assets/image (188) (1).png new file mode 100644 index 0000000..002ca5a Binary files /dev/null and b/.gitbook/assets/image (188) (1).png differ diff --git a/.gitbook/assets/image (188).png b/.gitbook/assets/image (188).png new file mode 100644 index 0000000..a45d948 Binary files /dev/null and b/.gitbook/assets/image (188).png differ diff --git a/.gitbook/assets/image (189).png b/.gitbook/assets/image (189).png new file mode 100644 index 0000000..f940fe3 Binary files /dev/null and b/.gitbook/assets/image (189).png differ diff --git a/.gitbook/assets/image (19).png b/.gitbook/assets/image (19).png index 62a91a2..f0f8163 100644 Binary files a/.gitbook/assets/image (19).png and b/.gitbook/assets/image (19).png differ diff --git a/.gitbook/assets/image (190).png b/.gitbook/assets/image (190).png new file mode 100644 index 0000000..9b9d1d1 Binary files /dev/null and b/.gitbook/assets/image (190).png differ diff --git a/.gitbook/assets/image (191).png b/.gitbook/assets/image (191).png new file mode 100644 index 0000000..38acef8 Binary files /dev/null and b/.gitbook/assets/image (191).png differ diff --git a/.gitbook/assets/image (192).png b/.gitbook/assets/image (192).png new file mode 100644 index 0000000..317e723 Binary files /dev/null and b/.gitbook/assets/image (192).png differ diff --git a/.gitbook/assets/image (193).png b/.gitbook/assets/image (193).png new file mode 100644 index 0000000..002ca5a Binary files /dev/null and b/.gitbook/assets/image (193).png differ diff --git a/.gitbook/assets/image (194).png b/.gitbook/assets/image (194).png new file mode 100644 index 0000000..039cf1a Binary files /dev/null and b/.gitbook/assets/image (194).png differ diff --git a/.gitbook/assets/image (195).png b/.gitbook/assets/image (195).png new file mode 100644 index 0000000..1596b74 Binary files /dev/null and b/.gitbook/assets/image (195).png differ diff --git a/.gitbook/assets/image (196).png b/.gitbook/assets/image (196).png new file mode 100644 index 0000000..608256c Binary files /dev/null and b/.gitbook/assets/image (196).png differ diff --git a/.gitbook/assets/image (197).png b/.gitbook/assets/image (197).png new file mode 100644 index 0000000..f0fc4e9 Binary files /dev/null and b/.gitbook/assets/image (197).png differ diff --git a/.gitbook/assets/image (198).png b/.gitbook/assets/image (198).png new file mode 100644 index 0000000..cfda4c3 Binary files /dev/null and b/.gitbook/assets/image (198).png differ diff --git a/.gitbook/assets/image (199).png b/.gitbook/assets/image (199).png new file mode 100644 index 0000000..ad5d4e5 Binary files /dev/null and b/.gitbook/assets/image (199).png differ diff --git a/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index 0232e5b..0000000 Binary files a/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index 0591cec..0000000 Binary files a/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index 486c7bf..0000000 Binary files a/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index 7ae3c98..0000000 Binary files a/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (2) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (2) (1) (1) (1) (1) (1).png deleted file mode 100644 index a240ab7..0000000 Binary files a/.gitbook/assets/image (2) (1) (1) (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (2) (1) (1) (1) (1).png b/.gitbook/assets/image (2) (1) (1) (1) (1).png deleted file mode 100644 index b4c59b6..0000000 Binary files a/.gitbook/assets/image (2) (1) (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (2) (1) (1) (1).png b/.gitbook/assets/image (2) (1) (1) (1).png deleted file mode 100644 index 9fdd14b..0000000 Binary files a/.gitbook/assets/image (2) (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (2) (1) (1).png b/.gitbook/assets/image (2) (1) (1).png deleted file mode 100644 index 05db960..0000000 Binary files a/.gitbook/assets/image (2) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (2) (1).png b/.gitbook/assets/image (2) (1).png deleted file mode 100644 index 58e6366..0000000 Binary files a/.gitbook/assets/image (2) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (2).png b/.gitbook/assets/image (2).png index a159aea..fe0eb83 100644 Binary files a/.gitbook/assets/image (2).png and b/.gitbook/assets/image (2).png differ diff --git a/.gitbook/assets/image (20).png b/.gitbook/assets/image (20).png index 5594cc9..7f4e6c9 100644 Binary files a/.gitbook/assets/image (20).png and b/.gitbook/assets/image (20).png differ diff --git a/.gitbook/assets/image (200).png b/.gitbook/assets/image (200).png new file mode 100644 index 0000000..34bd6e3 Binary files /dev/null and b/.gitbook/assets/image (200).png differ diff --git a/.gitbook/assets/image (201).png b/.gitbook/assets/image (201).png new file mode 100644 index 0000000..08c83c9 Binary files /dev/null and b/.gitbook/assets/image (201).png differ diff --git a/.gitbook/assets/image (202).png b/.gitbook/assets/image (202).png new file mode 100644 index 0000000..7ce4ea9 Binary files /dev/null and b/.gitbook/assets/image (202).png differ diff --git a/.gitbook/assets/image (203).png b/.gitbook/assets/image (203).png new file mode 100644 index 0000000..7a016e7 Binary files /dev/null and b/.gitbook/assets/image (203).png differ diff --git a/.gitbook/assets/image (204).png b/.gitbook/assets/image (204).png new file mode 100644 index 0000000..c9fd008 Binary files /dev/null and b/.gitbook/assets/image (204).png differ diff --git a/.gitbook/assets/image (205).png b/.gitbook/assets/image (205).png new file mode 100644 index 0000000..fc747af Binary files /dev/null and b/.gitbook/assets/image (205).png differ diff --git a/.gitbook/assets/image (206).png b/.gitbook/assets/image (206).png new file mode 100644 index 0000000..38aaeba Binary files /dev/null and b/.gitbook/assets/image (206).png differ diff --git a/.gitbook/assets/image (207).png b/.gitbook/assets/image (207).png new file mode 100644 index 0000000..354b3a3 Binary files /dev/null and b/.gitbook/assets/image (207).png differ diff --git a/.gitbook/assets/image (208).png b/.gitbook/assets/image (208).png new file mode 100644 index 0000000..b13ec67 Binary files /dev/null and b/.gitbook/assets/image (208).png differ diff --git a/.gitbook/assets/image (209).png b/.gitbook/assets/image (209).png new file mode 100644 index 0000000..f16f4c1 Binary files /dev/null and b/.gitbook/assets/image (209).png differ diff --git a/.gitbook/assets/image (21).png b/.gitbook/assets/image (21).png index 887dde0..7f5f435 100644 Binary files a/.gitbook/assets/image (21).png and b/.gitbook/assets/image (21).png differ diff --git a/.gitbook/assets/image (210).png b/.gitbook/assets/image (210).png new file mode 100644 index 0000000..ae63f56 Binary files /dev/null and b/.gitbook/assets/image (210).png differ diff --git a/.gitbook/assets/image (211).png b/.gitbook/assets/image (211).png new file mode 100644 index 0000000..bfbbe71 Binary files /dev/null and b/.gitbook/assets/image (211).png differ diff --git a/.gitbook/assets/image (212).png b/.gitbook/assets/image (212).png new file mode 100644 index 0000000..bfbbe71 Binary files /dev/null and b/.gitbook/assets/image (212).png differ diff --git a/.gitbook/assets/image (213).png b/.gitbook/assets/image (213).png new file mode 100644 index 0000000..3b8701b Binary files /dev/null and b/.gitbook/assets/image (213).png differ diff --git a/.gitbook/assets/image (214).png b/.gitbook/assets/image (214).png new file mode 100644 index 0000000..2875bc4 Binary files /dev/null and b/.gitbook/assets/image (214).png differ diff --git a/.gitbook/assets/image (215).png b/.gitbook/assets/image (215).png new file mode 100644 index 0000000..4c3709e Binary files /dev/null and b/.gitbook/assets/image (215).png differ diff --git a/.gitbook/assets/image (216).png b/.gitbook/assets/image (216).png new file mode 100644 index 0000000..16fd48f Binary files /dev/null and b/.gitbook/assets/image (216).png differ diff --git a/.gitbook/assets/image (217).png b/.gitbook/assets/image (217).png new file mode 100644 index 0000000..406cf40 Binary files /dev/null and b/.gitbook/assets/image (217).png differ diff --git a/.gitbook/assets/image (218).png b/.gitbook/assets/image (218).png new file mode 100644 index 0000000..d5397d1 Binary files /dev/null and b/.gitbook/assets/image (218).png differ diff --git a/.gitbook/assets/image (219).png b/.gitbook/assets/image (219).png new file mode 100644 index 0000000..61765c7 Binary files /dev/null and b/.gitbook/assets/image (219).png differ diff --git a/.gitbook/assets/image (22).png b/.gitbook/assets/image (22).png index 8df7768..66abb0b 100644 Binary files a/.gitbook/assets/image (22).png and b/.gitbook/assets/image (22).png differ diff --git a/.gitbook/assets/image (220).png b/.gitbook/assets/image (220).png new file mode 100644 index 0000000..61765c7 Binary files /dev/null and b/.gitbook/assets/image (220).png differ diff --git a/.gitbook/assets/image (221).png b/.gitbook/assets/image (221).png new file mode 100644 index 0000000..cdc7ef3 Binary files /dev/null and b/.gitbook/assets/image (221).png differ diff --git a/.gitbook/assets/image (222).png b/.gitbook/assets/image (222).png new file mode 100644 index 0000000..5b61220 Binary files /dev/null and b/.gitbook/assets/image (222).png differ diff --git a/.gitbook/assets/image (223).png b/.gitbook/assets/image (223).png new file mode 100644 index 0000000..588b46e Binary files /dev/null and b/.gitbook/assets/image (223).png differ diff --git a/.gitbook/assets/image (224).png b/.gitbook/assets/image (224).png new file mode 100644 index 0000000..588b46e Binary files /dev/null and b/.gitbook/assets/image (224).png differ diff --git a/.gitbook/assets/image (225).png b/.gitbook/assets/image (225).png new file mode 100644 index 0000000..3177c67 Binary files /dev/null and b/.gitbook/assets/image (225).png differ diff --git a/.gitbook/assets/image (226).png b/.gitbook/assets/image (226).png new file mode 100644 index 0000000..0c18a81 Binary files /dev/null and b/.gitbook/assets/image (226).png differ diff --git a/.gitbook/assets/image (227).png b/.gitbook/assets/image (227).png new file mode 100644 index 0000000..0c18a81 Binary files /dev/null and b/.gitbook/assets/image (227).png differ diff --git a/.gitbook/assets/image (228).png b/.gitbook/assets/image (228).png new file mode 100644 index 0000000..8d4b2b8 Binary files /dev/null and b/.gitbook/assets/image (228).png differ diff --git a/.gitbook/assets/image (229).png b/.gitbook/assets/image (229).png new file mode 100644 index 0000000..0b065d2 Binary files /dev/null and b/.gitbook/assets/image (229).png differ diff --git a/.gitbook/assets/image (23).png b/.gitbook/assets/image (23).png index 41c8cae..cb712e1 100644 Binary files a/.gitbook/assets/image (23).png and b/.gitbook/assets/image (23).png differ diff --git a/.gitbook/assets/image (230).png b/.gitbook/assets/image (230).png new file mode 100644 index 0000000..10303d1 Binary files /dev/null and b/.gitbook/assets/image (230).png differ diff --git a/.gitbook/assets/image (231).png b/.gitbook/assets/image (231).png new file mode 100644 index 0000000..10303d1 Binary files /dev/null and b/.gitbook/assets/image (231).png differ diff --git a/.gitbook/assets/image (232).png b/.gitbook/assets/image (232).png new file mode 100644 index 0000000..d9e6776 Binary files /dev/null and b/.gitbook/assets/image (232).png differ diff --git a/.gitbook/assets/image (233).png b/.gitbook/assets/image (233).png new file mode 100644 index 0000000..d9e6776 Binary files /dev/null and b/.gitbook/assets/image (233).png differ diff --git a/.gitbook/assets/image (24).png b/.gitbook/assets/image (24).png index 41c8cae..cdb2478 100644 Binary files a/.gitbook/assets/image (24).png and b/.gitbook/assets/image (24).png differ diff --git a/.gitbook/assets/image (25).png b/.gitbook/assets/image (25).png index ff094f1..90c1d5c 100644 Binary files a/.gitbook/assets/image (25).png and b/.gitbook/assets/image (25).png differ diff --git a/.gitbook/assets/image (26).png b/.gitbook/assets/image (26).png index 5bd1afa..f7e0f69 100644 Binary files a/.gitbook/assets/image (26).png and b/.gitbook/assets/image (26).png differ diff --git a/.gitbook/assets/image (27).png b/.gitbook/assets/image (27).png index 87763ac..3e6fe2c 100644 Binary files a/.gitbook/assets/image (27).png and b/.gitbook/assets/image (27).png differ diff --git a/.gitbook/assets/image (28).png b/.gitbook/assets/image (28).png index 3f4dedc..2b4d387 100644 Binary files a/.gitbook/assets/image (28).png and b/.gitbook/assets/image (28).png differ diff --git a/.gitbook/assets/image (29).png b/.gitbook/assets/image (29).png index 82fac13..2d034d8 100644 Binary files a/.gitbook/assets/image (29).png and b/.gitbook/assets/image (29).png differ diff --git a/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index 0232e5b..0000000 Binary files a/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (3) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (3) (1) (1) (1) (1) (1).png deleted file mode 100644 index 2ef0b30..0000000 Binary files a/.gitbook/assets/image (3) (1) (1) (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (3) (1) (1) (1) (1).png b/.gitbook/assets/image (3) (1) (1) (1) (1).png deleted file mode 100644 index 1d25e0f..0000000 Binary files a/.gitbook/assets/image (3) (1) (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (3) (1) (1) (1).png b/.gitbook/assets/image (3) (1) (1) (1).png deleted file mode 100644 index df75d4d..0000000 Binary files a/.gitbook/assets/image (3) (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (3) (1) (1).png b/.gitbook/assets/image (3) (1) (1).png deleted file mode 100644 index bcae4d5..0000000 Binary files a/.gitbook/assets/image (3) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (3) (1).png b/.gitbook/assets/image (3) (1).png deleted file mode 100644 index 485d57b..0000000 Binary files a/.gitbook/assets/image (3) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (3).png b/.gitbook/assets/image (3).png index 8ca2d66..4411054 100644 Binary files a/.gitbook/assets/image (3).png and b/.gitbook/assets/image (3).png differ diff --git a/.gitbook/assets/image (30).png b/.gitbook/assets/image (30).png index e275a69..4680580 100644 Binary files a/.gitbook/assets/image (30).png and b/.gitbook/assets/image (30).png differ diff --git a/.gitbook/assets/image (31).png b/.gitbook/assets/image (31).png index e275a69..2d29ff3 100644 Binary files a/.gitbook/assets/image (31).png and b/.gitbook/assets/image (31).png differ diff --git a/.gitbook/assets/image (32).png b/.gitbook/assets/image (32).png index f96a713..cd8bf27 100644 Binary files a/.gitbook/assets/image (32).png and b/.gitbook/assets/image (32).png differ diff --git a/.gitbook/assets/image (33).png b/.gitbook/assets/image (33).png index 399ac16..f9141d5 100644 Binary files a/.gitbook/assets/image (33).png and b/.gitbook/assets/image (33).png differ diff --git a/.gitbook/assets/image (34).png b/.gitbook/assets/image (34).png index 399ac16..16f6463 100644 Binary files a/.gitbook/assets/image (34).png and b/.gitbook/assets/image (34).png differ diff --git a/.gitbook/assets/image (35).png b/.gitbook/assets/image (35).png index 6168c8b..45de2cb 100644 Binary files a/.gitbook/assets/image (35).png and b/.gitbook/assets/image (35).png differ diff --git a/.gitbook/assets/image (36).png b/.gitbook/assets/image (36).png index 7c27940..8166234 100644 Binary files a/.gitbook/assets/image (36).png and b/.gitbook/assets/image (36).png differ diff --git a/.gitbook/assets/image (37).png b/.gitbook/assets/image (37).png index 7c27940..5ecbcbc 100644 Binary files a/.gitbook/assets/image (37).png and b/.gitbook/assets/image (37).png differ diff --git a/.gitbook/assets/image (38).png b/.gitbook/assets/image (38).png index 090f360..8ca2d66 100644 Binary files a/.gitbook/assets/image (38).png and b/.gitbook/assets/image (38).png differ diff --git a/.gitbook/assets/image (39).png b/.gitbook/assets/image (39).png index c467b93..8d70d0e 100644 Binary files a/.gitbook/assets/image (39).png and b/.gitbook/assets/image (39).png differ diff --git a/.gitbook/assets/image (4) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (4) (1) (1) (1) (1) (1).png deleted file mode 100644 index 5b06f11..0000000 Binary files a/.gitbook/assets/image (4) (1) (1) (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (4) (1) (1) (1) (1).png b/.gitbook/assets/image (4) (1) (1) (1) (1).png deleted file mode 100644 index 7a40504..0000000 Binary files a/.gitbook/assets/image (4) (1) (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (4) (1) (1) (1).png b/.gitbook/assets/image (4) (1) (1) (1).png deleted file mode 100644 index 027a24b..0000000 Binary files a/.gitbook/assets/image (4) (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (4) (1) (1).png b/.gitbook/assets/image (4) (1) (1).png deleted file mode 100644 index dad40b6..0000000 Binary files a/.gitbook/assets/image (4) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (4) (1).png b/.gitbook/assets/image (4) (1).png index bb2e3ef..cd8bf27 100644 Binary files a/.gitbook/assets/image (4) (1).png and b/.gitbook/assets/image (4) (1).png differ diff --git a/.gitbook/assets/image (4).png b/.gitbook/assets/image (4).png index 34b8115..24a36c8 100644 Binary files a/.gitbook/assets/image (4).png and b/.gitbook/assets/image (4).png differ diff --git a/.gitbook/assets/image (40).png b/.gitbook/assets/image (40).png index c467b93..58e6366 100644 Binary files a/.gitbook/assets/image (40).png and b/.gitbook/assets/image (40).png differ diff --git a/.gitbook/assets/image (41).png b/.gitbook/assets/image (41).png index 97e8513..9bcef77 100644 Binary files a/.gitbook/assets/image (41).png and b/.gitbook/assets/image (41).png differ diff --git a/.gitbook/assets/image (42).png b/.gitbook/assets/image (42).png index 97e8513..72b6271 100644 Binary files a/.gitbook/assets/image (42).png and b/.gitbook/assets/image (42).png differ diff --git a/.gitbook/assets/image (43).png b/.gitbook/assets/image (43).png index 5b492f5..872c8db 100644 Binary files a/.gitbook/assets/image (43).png and b/.gitbook/assets/image (43).png differ diff --git a/.gitbook/assets/image (44).png b/.gitbook/assets/image (44).png index 5b492f5..e61b990 100644 Binary files a/.gitbook/assets/image (44).png and b/.gitbook/assets/image (44).png differ diff --git a/.gitbook/assets/image (45).png b/.gitbook/assets/image (45).png index 5b492f5..05db960 100644 Binary files a/.gitbook/assets/image (45).png and b/.gitbook/assets/image (45).png differ diff --git a/.gitbook/assets/image (46).png b/.gitbook/assets/image (46).png index 3b8dcbf..485d57b 100644 Binary files a/.gitbook/assets/image (46).png and b/.gitbook/assets/image (46).png differ diff --git a/.gitbook/assets/image (47).png b/.gitbook/assets/image (47).png index 3b8dcbf..34b8115 100644 Binary files a/.gitbook/assets/image (47).png and b/.gitbook/assets/image (47).png differ diff --git a/.gitbook/assets/image (48).png b/.gitbook/assets/image (48).png index 1fb4197..ca9674d 100644 Binary files a/.gitbook/assets/image (48).png and b/.gitbook/assets/image (48).png differ diff --git a/.gitbook/assets/image (49).png b/.gitbook/assets/image (49).png index 66a70a9..57a8797 100644 Binary files a/.gitbook/assets/image (49).png and b/.gitbook/assets/image (49).png differ diff --git a/.gitbook/assets/image (5) (1) (1) (1) (1).png b/.gitbook/assets/image (5) (1) (1) (1) (1).png deleted file mode 100644 index 615f80f..0000000 Binary files a/.gitbook/assets/image (5) (1) (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (5) (1) (1) (1).png b/.gitbook/assets/image (5) (1) (1) (1).png deleted file mode 100644 index 291e00c..0000000 Binary files a/.gitbook/assets/image (5) (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (5) (1) (1).png b/.gitbook/assets/image (5) (1) (1).png deleted file mode 100644 index 2da65ed..0000000 Binary files a/.gitbook/assets/image (5) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (5) (1).png b/.gitbook/assets/image (5) (1).png deleted file mode 100644 index bb2e3ef..0000000 Binary files a/.gitbook/assets/image (5) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (5).png b/.gitbook/assets/image (5).png index eefc69c..adf1d2b 100644 Binary files a/.gitbook/assets/image (5).png and b/.gitbook/assets/image (5).png differ diff --git a/.gitbook/assets/image (50).png b/.gitbook/assets/image (50).png index 66a70a9..b21aaf0 100644 Binary files a/.gitbook/assets/image (50).png and b/.gitbook/assets/image (50).png differ diff --git a/.gitbook/assets/image (51).png b/.gitbook/assets/image (51).png index b4babab..e2193d4 100644 Binary files a/.gitbook/assets/image (51).png and b/.gitbook/assets/image (51).png differ diff --git a/.gitbook/assets/image (52).png b/.gitbook/assets/image (52).png index d81f763..13ced10 100644 Binary files a/.gitbook/assets/image (52).png and b/.gitbook/assets/image (52).png differ diff --git a/.gitbook/assets/image (53).png b/.gitbook/assets/image (53).png index e84fd0d..0a4a4af 100644 Binary files a/.gitbook/assets/image (53).png and b/.gitbook/assets/image (53).png differ diff --git a/.gitbook/assets/image (54).png b/.gitbook/assets/image (54).png index ab0cd35..869d1d5 100644 Binary files a/.gitbook/assets/image (54).png and b/.gitbook/assets/image (54).png differ diff --git a/.gitbook/assets/image (55).png b/.gitbook/assets/image (55).png index 99efc78..7f3d6fc 100644 Binary files a/.gitbook/assets/image (55).png and b/.gitbook/assets/image (55).png differ diff --git a/.gitbook/assets/image (56).png b/.gitbook/assets/image (56).png index 6e7e113..79c8fc1 100644 Binary files a/.gitbook/assets/image (56).png and b/.gitbook/assets/image (56).png differ diff --git a/.gitbook/assets/image (57).png b/.gitbook/assets/image (57).png index faec42b..b688551 100644 Binary files a/.gitbook/assets/image (57).png and b/.gitbook/assets/image (57).png differ diff --git a/.gitbook/assets/image (58).png b/.gitbook/assets/image (58).png index a6eacf8..bde9fbe 100644 Binary files a/.gitbook/assets/image (58).png and b/.gitbook/assets/image (58).png differ diff --git a/.gitbook/assets/image (59).png b/.gitbook/assets/image (59).png index 28927b9..aabb145 100644 Binary files a/.gitbook/assets/image (59).png and b/.gitbook/assets/image (59).png differ diff --git a/.gitbook/assets/image (6) (1) (1) (1) (1).png b/.gitbook/assets/image (6) (1) (1) (1) (1).png deleted file mode 100644 index 119ce53..0000000 Binary files a/.gitbook/assets/image (6) (1) (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (6) (1) (1) (1).png b/.gitbook/assets/image (6) (1) (1) (1).png deleted file mode 100644 index 35e92a8..0000000 Binary files a/.gitbook/assets/image (6) (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (6) (1) (1).png b/.gitbook/assets/image (6) (1) (1).png deleted file mode 100644 index ed9aefd..0000000 Binary files a/.gitbook/assets/image (6) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (6) (1).png b/.gitbook/assets/image (6) (1).png deleted file mode 100644 index 4c9dd0a..0000000 Binary files a/.gitbook/assets/image (6) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (6).png b/.gitbook/assets/image (6).png index ca9674d..77580df 100644 Binary files a/.gitbook/assets/image (6).png and b/.gitbook/assets/image (6).png differ diff --git a/.gitbook/assets/image (60).png b/.gitbook/assets/image (60).png index 3f2ebef..d0638ba 100644 Binary files a/.gitbook/assets/image (60).png and b/.gitbook/assets/image (60).png differ diff --git a/.gitbook/assets/image (61).png b/.gitbook/assets/image (61).png index 47cbfc9..62a91a2 100644 Binary files a/.gitbook/assets/image (61).png and b/.gitbook/assets/image (61).png differ diff --git a/.gitbook/assets/image (62).png b/.gitbook/assets/image (62).png index 58825bc..9fdd14b 100644 Binary files a/.gitbook/assets/image (62).png and b/.gitbook/assets/image (62).png differ diff --git a/.gitbook/assets/image (63).png b/.gitbook/assets/image (63).png index 0d1addf..bcae4d5 100644 Binary files a/.gitbook/assets/image (63).png and b/.gitbook/assets/image (63).png differ diff --git a/.gitbook/assets/image (64).png b/.gitbook/assets/image (64).png index b8cc431..bb2e3ef 100644 Binary files a/.gitbook/assets/image (64).png and b/.gitbook/assets/image (64).png differ diff --git a/.gitbook/assets/image (65).png b/.gitbook/assets/image (65).png index 14c78bd..4c9dd0a 100644 Binary files a/.gitbook/assets/image (65).png and b/.gitbook/assets/image (65).png differ diff --git a/.gitbook/assets/image (66).png b/.gitbook/assets/image (66).png index ca7e7c2..c0288ec 100644 Binary files a/.gitbook/assets/image (66).png and b/.gitbook/assets/image (66).png differ diff --git a/.gitbook/assets/image (67).png b/.gitbook/assets/image (67).png index 9803d4b..f54c60c 100644 Binary files a/.gitbook/assets/image (67).png and b/.gitbook/assets/image (67).png differ diff --git a/.gitbook/assets/image (68).png b/.gitbook/assets/image (68).png index 62af934..d8ceeb2 100644 Binary files a/.gitbook/assets/image (68).png and b/.gitbook/assets/image (68).png differ diff --git a/.gitbook/assets/image (69).png b/.gitbook/assets/image (69).png index b597c19..b4c59b6 100644 Binary files a/.gitbook/assets/image (69).png and b/.gitbook/assets/image (69).png differ diff --git a/.gitbook/assets/image (7) (1) (1) (1) (1).png b/.gitbook/assets/image (7) (1) (1) (1) (1).png deleted file mode 100644 index 0d25390..0000000 Binary files a/.gitbook/assets/image (7) (1) (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (7) (1) (1) (1).png b/.gitbook/assets/image (7) (1) (1) (1).png deleted file mode 100644 index adc8355..0000000 Binary files a/.gitbook/assets/image (7) (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (7) (1) (1).png b/.gitbook/assets/image (7) (1) (1).png deleted file mode 100644 index 17210e9..0000000 Binary files a/.gitbook/assets/image (7) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (7) (1).png b/.gitbook/assets/image (7) (1).png deleted file mode 100644 index 4c9dd0a..0000000 Binary files a/.gitbook/assets/image (7) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (7).png b/.gitbook/assets/image (7).png index 57a8797..960376d 100644 Binary files a/.gitbook/assets/image (7).png and b/.gitbook/assets/image (7).png differ diff --git a/.gitbook/assets/image (70).png b/.gitbook/assets/image (70).png index 3cf8333..a240ab7 100644 Binary files a/.gitbook/assets/image (70).png and b/.gitbook/assets/image (70).png differ diff --git a/.gitbook/assets/image (71).png b/.gitbook/assets/image (71).png index f066e0c..d535a09 100644 Binary files a/.gitbook/assets/image (71).png and b/.gitbook/assets/image (71).png differ diff --git a/.gitbook/assets/image (72).png b/.gitbook/assets/image (72).png index 3ec0417..7ae3c98 100644 Binary files a/.gitbook/assets/image (72).png and b/.gitbook/assets/image (72).png differ diff --git a/.gitbook/assets/image (73).png b/.gitbook/assets/image (73).png index 3927591..df75d4d 100644 Binary files a/.gitbook/assets/image (73).png and b/.gitbook/assets/image (73).png differ diff --git a/.gitbook/assets/image (74).png b/.gitbook/assets/image (74).png index 12f0e5f..dad40b6 100644 Binary files a/.gitbook/assets/image (74).png and b/.gitbook/assets/image (74).png differ diff --git a/.gitbook/assets/image (75).png b/.gitbook/assets/image (75).png index 3991cd4..2da65ed 100644 Binary files a/.gitbook/assets/image (75).png and b/.gitbook/assets/image (75).png differ diff --git a/.gitbook/assets/image (76).png b/.gitbook/assets/image (76).png index 203bf50..ed9aefd 100644 Binary files a/.gitbook/assets/image (76).png and b/.gitbook/assets/image (76).png differ diff --git a/.gitbook/assets/image (77).png b/.gitbook/assets/image (77).png index 87dec64..17210e9 100644 Binary files a/.gitbook/assets/image (77).png and b/.gitbook/assets/image (77).png differ diff --git a/.gitbook/assets/image (78).png b/.gitbook/assets/image (78).png index 89f60da..66fcb0d 100644 Binary files a/.gitbook/assets/image (78).png and b/.gitbook/assets/image (78).png differ diff --git a/.gitbook/assets/image (79).png b/.gitbook/assets/image (79).png index 035c95a..538de99 100644 Binary files a/.gitbook/assets/image (79).png and b/.gitbook/assets/image (79).png differ diff --git a/.gitbook/assets/image (8) (1) (1) (1) (1).png b/.gitbook/assets/image (8) (1) (1) (1) (1).png deleted file mode 100644 index 8364770..0000000 Binary files a/.gitbook/assets/image (8) (1) (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (8) (1) (1) (1).png b/.gitbook/assets/image (8) (1) (1) (1).png deleted file mode 100644 index f81b5bb..0000000 Binary files a/.gitbook/assets/image (8) (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (8) (1) (1).png b/.gitbook/assets/image (8) (1) (1).png deleted file mode 100644 index 66fcb0d..0000000 Binary files a/.gitbook/assets/image (8) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (8) (1).png b/.gitbook/assets/image (8) (1).png deleted file mode 100644 index c0288ec..0000000 Binary files a/.gitbook/assets/image (8) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (8).png b/.gitbook/assets/image (8).png index b21aaf0..11d467d 100644 Binary files a/.gitbook/assets/image (8).png and b/.gitbook/assets/image (8).png differ diff --git a/.gitbook/assets/image (80).png b/.gitbook/assets/image (80).png index 6f62005..3177367 100644 Binary files a/.gitbook/assets/image (80).png and b/.gitbook/assets/image (80).png differ diff --git a/.gitbook/assets/image (81).png b/.gitbook/assets/image (81).png index 71d07d8..554f85c 100644 Binary files a/.gitbook/assets/image (81).png and b/.gitbook/assets/image (81).png differ diff --git a/.gitbook/assets/image (82).png b/.gitbook/assets/image (82).png index 5f4070e..486c7bf 100644 Binary files a/.gitbook/assets/image (82).png and b/.gitbook/assets/image (82).png differ diff --git a/.gitbook/assets/image (83).png b/.gitbook/assets/image (83).png index 1497608..1d25e0f 100644 Binary files a/.gitbook/assets/image (83).png and b/.gitbook/assets/image (83).png differ diff --git a/.gitbook/assets/image (84).png b/.gitbook/assets/image (84).png index 70f2742..027a24b 100644 Binary files a/.gitbook/assets/image (84).png and b/.gitbook/assets/image (84).png differ diff --git a/.gitbook/assets/image (85).png b/.gitbook/assets/image (85).png index 650dc2d..291e00c 100644 Binary files a/.gitbook/assets/image (85).png and b/.gitbook/assets/image (85).png differ diff --git a/.gitbook/assets/image (86).png b/.gitbook/assets/image (86).png index 1da67db..35e92a8 100644 Binary files a/.gitbook/assets/image (86).png and b/.gitbook/assets/image (86).png differ diff --git a/.gitbook/assets/image (87).png b/.gitbook/assets/image (87).png index a45d948..adc8355 100644 Binary files a/.gitbook/assets/image (87).png and b/.gitbook/assets/image (87).png differ diff --git a/.gitbook/assets/image (88).png b/.gitbook/assets/image (88).png index f940fe3..f81b5bb 100644 Binary files a/.gitbook/assets/image (88).png and b/.gitbook/assets/image (88).png differ diff --git a/.gitbook/assets/image (89).png b/.gitbook/assets/image (89).png index 9b9d1d1..f0d6785 100644 Binary files a/.gitbook/assets/image (89).png and b/.gitbook/assets/image (89).png differ diff --git a/.gitbook/assets/image (9) (1) (1) (1).png b/.gitbook/assets/image (9) (1) (1) (1).png deleted file mode 100644 index f81b5bb..0000000 Binary files a/.gitbook/assets/image (9) (1) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (9) (1) (1).png b/.gitbook/assets/image (9) (1) (1).png deleted file mode 100644 index 538de99..0000000 Binary files a/.gitbook/assets/image (9) (1) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (9) (1).png b/.gitbook/assets/image (9) (1).png deleted file mode 100644 index c0288ec..0000000 Binary files a/.gitbook/assets/image (9) (1).png and /dev/null differ diff --git a/.gitbook/assets/image (9).png b/.gitbook/assets/image (9).png index e2193d4..d8d2030 100644 Binary files a/.gitbook/assets/image (9).png and b/.gitbook/assets/image (9).png differ diff --git a/.gitbook/assets/image (90).png b/.gitbook/assets/image (90).png index 38acef8..c4eead5 100644 Binary files a/.gitbook/assets/image (90).png and b/.gitbook/assets/image (90).png differ diff --git a/.gitbook/assets/image (91).png b/.gitbook/assets/image (91).png index 317e723..bbbb4a6 100644 Binary files a/.gitbook/assets/image (91).png and b/.gitbook/assets/image (91).png differ diff --git a/.gitbook/assets/image (92).png b/.gitbook/assets/image (92).png index 002ca5a..0d50734 100644 Binary files a/.gitbook/assets/image (92).png and b/.gitbook/assets/image (92).png differ diff --git a/.gitbook/assets/image (93).png b/.gitbook/assets/image (93).png index 002ca5a..d7a0144 100644 Binary files a/.gitbook/assets/image (93).png and b/.gitbook/assets/image (93).png differ diff --git a/.gitbook/assets/image (94).png b/.gitbook/assets/image (94).png index 039cf1a..0591cec 100644 Binary files a/.gitbook/assets/image (94).png and b/.gitbook/assets/image (94).png differ diff --git a/.gitbook/assets/image (95).png b/.gitbook/assets/image (95).png index 1596b74..2ef0b30 100644 Binary files a/.gitbook/assets/image (95).png and b/.gitbook/assets/image (95).png differ diff --git a/.gitbook/assets/image (96).png b/.gitbook/assets/image (96).png index 608256c..7a40504 100644 Binary files a/.gitbook/assets/image (96).png and b/.gitbook/assets/image (96).png differ diff --git a/.gitbook/assets/image (97).png b/.gitbook/assets/image (97).png index f0fc4e9..615f80f 100644 Binary files a/.gitbook/assets/image (97).png and b/.gitbook/assets/image (97).png differ diff --git a/.gitbook/assets/image (98).png b/.gitbook/assets/image (98).png index cfda4c3..119ce53 100644 Binary files a/.gitbook/assets/image (98).png and b/.gitbook/assets/image (98).png differ diff --git a/.gitbook/assets/image (99).png b/.gitbook/assets/image (99).png index ad5d4e5..0d25390 100644 Binary files a/.gitbook/assets/image (99).png and b/.gitbook/assets/image (99).png differ diff --git a/.gitbook/assets/image-3.png b/.gitbook/assets/image-3.png deleted file mode 100644 index fbf7671..0000000 Binary files a/.gitbook/assets/image-3.png and /dev/null differ diff --git a/.gitbook/assets/image.png b/.gitbook/assets/image.png index 1311e08..54a920e 100644 Binary files a/.gitbook/assets/image.png and b/.gitbook/assets/image.png differ diff --git a/.gitbook/assets/image3333.png b/.gitbook/assets/image3333.png new file mode 100644 index 0000000..63384df Binary files /dev/null and b/.gitbook/assets/image3333.png differ diff --git a/.gitbook/assets/instance-grid-view-tutorial.png b/.gitbook/assets/instance-grid-view-tutorial.png new file mode 100644 index 0000000..a1e4137 Binary files /dev/null and b/.gitbook/assets/instance-grid-view-tutorial.png differ diff --git a/.gitbook/assets/internal-mfa-option.png b/.gitbook/assets/internal-mfa-option.png new file mode 100644 index 0000000..2691ee7 Binary files /dev/null and b/.gitbook/assets/internal-mfa-option.png differ diff --git a/.gitbook/assets/keepalive-interval.png b/.gitbook/assets/keepalive-interval.png new file mode 100644 index 0000000..392cb6f Binary files /dev/null and b/.gitbook/assets/keepalive-interval.png differ diff --git a/.gitbook/assets/location-overview-detailed-tutorial.png b/.gitbook/assets/location-overview-detailed-tutorial.png new file mode 100644 index 0000000..8c12efd Binary files /dev/null and b/.gitbook/assets/location-overview-detailed-tutorial.png differ diff --git a/.gitbook/assets/mfa-modal.png b/.gitbook/assets/mfa-modal.png new file mode 100644 index 0000000..08e3b61 Binary files /dev/null and b/.gitbook/assets/mfa-modal.png differ diff --git a/.gitbook/assets/mobile-client-desktop-modal (1).png b/.gitbook/assets/mobile-client-desktop-modal (1).png new file mode 100644 index 0000000..5924e08 Binary files /dev/null and b/.gitbook/assets/mobile-client-desktop-modal (1).png differ diff --git a/.gitbook/assets/mobile-client-desktop-modal.png b/.gitbook/assets/mobile-client-desktop-modal.png new file mode 100644 index 0000000..5924e08 Binary files /dev/null and b/.gitbook/assets/mobile-client-desktop-modal.png differ diff --git a/.gitbook/assets/new-mfa-method-mobile.png b/.gitbook/assets/new-mfa-method-mobile.png new file mode 100644 index 0000000..27f4f5a Binary files /dev/null and b/.gitbook/assets/new-mfa-method-mobile.png differ diff --git a/.gitbook/assets/obraz (1).png b/.gitbook/assets/obraz (1).png index 3ef48c4..897d626 100644 Binary files a/.gitbook/assets/obraz (1).png and b/.gitbook/assets/obraz (1).png differ diff --git a/.gitbook/assets/obraz (10).png b/.gitbook/assets/obraz (10).png index 07a0db2..104e1a5 100644 Binary files a/.gitbook/assets/obraz (10).png and b/.gitbook/assets/obraz (10).png differ diff --git a/.gitbook/assets/obraz (11).png b/.gitbook/assets/obraz (11).png index 8a2a114..5a56d90 100644 Binary files a/.gitbook/assets/obraz (11).png and b/.gitbook/assets/obraz (11).png differ diff --git a/.gitbook/assets/obraz (12).png b/.gitbook/assets/obraz (12).png index a736da3..bac0da8 100644 Binary files a/.gitbook/assets/obraz (12).png and b/.gitbook/assets/obraz (12).png differ diff --git a/.gitbook/assets/obraz (13).png b/.gitbook/assets/obraz (13).png index 507ffc8..3587d3a 100644 Binary files a/.gitbook/assets/obraz (13).png and b/.gitbook/assets/obraz (13).png differ diff --git a/.gitbook/assets/obraz (14).png b/.gitbook/assets/obraz (14).png new file mode 100644 index 0000000..5cc3571 Binary files /dev/null and b/.gitbook/assets/obraz (14).png differ diff --git a/.gitbook/assets/obraz (15).png b/.gitbook/assets/obraz (15).png new file mode 100644 index 0000000..07a0db2 Binary files /dev/null and b/.gitbook/assets/obraz (15).png differ diff --git a/.gitbook/assets/obraz (16).png b/.gitbook/assets/obraz (16).png new file mode 100644 index 0000000..8a2a114 Binary files /dev/null and b/.gitbook/assets/obraz (16).png differ diff --git a/.gitbook/assets/obraz (17).png b/.gitbook/assets/obraz (17).png new file mode 100644 index 0000000..a736da3 Binary files /dev/null and b/.gitbook/assets/obraz (17).png differ diff --git a/.gitbook/assets/obraz (18).png b/.gitbook/assets/obraz (18).png new file mode 100644 index 0000000..507ffc8 Binary files /dev/null and b/.gitbook/assets/obraz (18).png differ diff --git a/.gitbook/assets/obraz (19).png b/.gitbook/assets/obraz (19).png new file mode 100644 index 0000000..8c5653d Binary files /dev/null and b/.gitbook/assets/obraz (19).png differ diff --git a/.gitbook/assets/obraz (2) (1).png b/.gitbook/assets/obraz (2) (1).png deleted file mode 100644 index c1c7aab..0000000 Binary files a/.gitbook/assets/obraz (2) (1).png and /dev/null differ diff --git a/.gitbook/assets/obraz (2).png b/.gitbook/assets/obraz (2).png index f89c8a1..34b62f3 100644 Binary files a/.gitbook/assets/obraz (2).png and b/.gitbook/assets/obraz (2).png differ diff --git a/.gitbook/assets/obraz (20).png b/.gitbook/assets/obraz (20).png new file mode 100644 index 0000000..590163d Binary files /dev/null and b/.gitbook/assets/obraz (20).png differ diff --git a/.gitbook/assets/obraz (21).png b/.gitbook/assets/obraz (21).png new file mode 100644 index 0000000..6213653 Binary files /dev/null and b/.gitbook/assets/obraz (21).png differ diff --git a/.gitbook/assets/obraz (22).png b/.gitbook/assets/obraz (22).png new file mode 100644 index 0000000..011ec06 Binary files /dev/null and b/.gitbook/assets/obraz (22).png differ diff --git a/.gitbook/assets/obraz (23).png b/.gitbook/assets/obraz (23).png new file mode 100644 index 0000000..0fe74e2 Binary files /dev/null and b/.gitbook/assets/obraz (23).png differ diff --git a/.gitbook/assets/obraz (24).png b/.gitbook/assets/obraz (24).png new file mode 100644 index 0000000..87bd13b Binary files /dev/null and b/.gitbook/assets/obraz (24).png differ diff --git a/.gitbook/assets/obraz (25).png b/.gitbook/assets/obraz (25).png new file mode 100644 index 0000000..51c3bb7 Binary files /dev/null and b/.gitbook/assets/obraz (25).png differ diff --git a/.gitbook/assets/obraz (26).png b/.gitbook/assets/obraz (26).png new file mode 100644 index 0000000..b4ff0bd Binary files /dev/null and b/.gitbook/assets/obraz (26).png differ diff --git a/.gitbook/assets/obraz (27).png b/.gitbook/assets/obraz (27).png new file mode 100644 index 0000000..2711430 Binary files /dev/null and b/.gitbook/assets/obraz (27).png differ diff --git a/.gitbook/assets/obraz (28).png b/.gitbook/assets/obraz (28).png new file mode 100644 index 0000000..21d445e Binary files /dev/null and b/.gitbook/assets/obraz (28).png differ diff --git a/.gitbook/assets/obraz (29).png b/.gitbook/assets/obraz (29).png new file mode 100644 index 0000000..eace8c0 Binary files /dev/null and b/.gitbook/assets/obraz (29).png differ diff --git a/.gitbook/assets/obraz (1) (1).png b/.gitbook/assets/obraz (3) (1).png similarity index 100% rename from .gitbook/assets/obraz (1) (1).png rename to .gitbook/assets/obraz (3) (1).png diff --git a/.gitbook/assets/obraz (3).png b/.gitbook/assets/obraz (3).png index c1c7aab..21974b1 100644 Binary files a/.gitbook/assets/obraz (3).png and b/.gitbook/assets/obraz (3).png differ diff --git a/.gitbook/assets/obraz (30).png b/.gitbook/assets/obraz (30).png new file mode 100644 index 0000000..b397e22 Binary files /dev/null and b/.gitbook/assets/obraz (30).png differ diff --git a/.gitbook/assets/obraz (31).png b/.gitbook/assets/obraz (31).png new file mode 100644 index 0000000..af2c6a0 Binary files /dev/null and b/.gitbook/assets/obraz (31).png differ diff --git a/.gitbook/assets/obraz (4).png b/.gitbook/assets/obraz (4).png index fc325c7..92b82f7 100644 Binary files a/.gitbook/assets/obraz (4).png and b/.gitbook/assets/obraz (4).png differ diff --git a/.gitbook/assets/obraz (5).png b/.gitbook/assets/obraz (5).png index 104e1a5..e430233 100644 Binary files a/.gitbook/assets/obraz (5).png and b/.gitbook/assets/obraz (5).png differ diff --git a/.gitbook/assets/obraz (6).png b/.gitbook/assets/obraz (6).png index 5a56d90..3ef48c4 100644 Binary files a/.gitbook/assets/obraz (6).png and b/.gitbook/assets/obraz (6).png differ diff --git a/.gitbook/assets/obraz (7).png b/.gitbook/assets/obraz (7).png index bac0da8..f89c8a1 100644 Binary files a/.gitbook/assets/obraz (7).png and b/.gitbook/assets/obraz (7).png differ diff --git a/.gitbook/assets/obraz (8).png b/.gitbook/assets/obraz (8).png index 3587d3a..c1c7aab 100644 Binary files a/.gitbook/assets/obraz (8).png and b/.gitbook/assets/obraz (8).png differ diff --git a/.gitbook/assets/obraz (9).png b/.gitbook/assets/obraz (9).png index 5cc3571..fc325c7 100644 Binary files a/.gitbook/assets/obraz (9).png and b/.gitbook/assets/obraz (9).png differ diff --git a/.gitbook/assets/obraz.png b/.gitbook/assets/obraz.png index e430233..a2452fe 100644 Binary files a/.gitbook/assets/obraz.png and b/.gitbook/assets/obraz.png differ diff --git a/in-depth/puml/openid-flow.svg b/.gitbook/assets/openid-flow.svg similarity index 100% rename from in-depth/puml/openid-flow.svg rename to .gitbook/assets/openid-flow.svg diff --git a/.gitbook/assets/remote-desktop-enrollment (1).png b/.gitbook/assets/remote-desktop-enrollment (1).png new file mode 100644 index 0000000..4815f71 Binary files /dev/null and b/.gitbook/assets/remote-desktop-enrollment (1).png differ diff --git a/.gitbook/assets/remote-desktop-enrollment.png b/.gitbook/assets/remote-desktop-enrollment.png new file mode 100644 index 0000000..4815f71 Binary files /dev/null and b/.gitbook/assets/remote-desktop-enrollment.png differ diff --git a/.gitbook/assets/self-onboarding.png b/.gitbook/assets/self-onboarding.png new file mode 100644 index 0000000..3e5ee93 Binary files /dev/null and b/.gitbook/assets/self-onboarding.png differ diff --git a/.gitbook/assets/single-firewall.png b/.gitbook/assets/single-firewall.png new file mode 100644 index 0000000..fab4a6d Binary files /dev/null and b/.gitbook/assets/single-firewall.png differ diff --git a/.gitbook/assets/user-device-list-tutorial.png b/.gitbook/assets/user-device-list-tutorial.png new file mode 100644 index 0000000..475c55c Binary files /dev/null and b/.gitbook/assets/user-device-list-tutorial.png differ diff --git a/.github/workflows/puml.yaml b/.github/workflows/puml.yaml deleted file mode 100644 index 4be49ec..0000000 --- a/.github/workflows/puml.yaml +++ /dev/null @@ -1,21 +0,0 @@ -name: generate plantuml files -on: - push: - branches: - - docs -jobs: - generate_plantuml: - runs-on: ubuntu-latest - name: plantuml - steps: - - name: checkout - uses: actions/checkout@v1 - with: - fetch-depth: 1 - - name: plantuml - id: plantuml - uses: grassedge/generate-plantuml-action@v1.5 - with: - message: "Render PlantUML files" - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore deleted file mode 100644 index e43b0f9..0000000 --- a/.gitignore +++ /dev/null @@ -1 +0,0 @@ -.DS_Store diff --git a/README.md b/README.md index e529bae..a085a71 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,9 @@ +--- +metaLinks: + alternates: + - https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/ +--- + # Welcome Welcome to the Defguard documentation. Here, you'll learn how to explore the full capabilities of the platform, set up a quick demo instance, configure a production-ready deployment, and get your client application up and running. @@ -8,19 +14,19 @@ Welcome to the Defguard documentation. Here, you'll learn how to explore the ful Briefly describes Defguard and its features. * [Getting started](getting-started/one-line-install.md)\ Lets you quickly set up your own Defguard instance to explore its features an user interface. -* [Features and configuration](admin-and-features/overview.md)\ +* [Features and configuration](features/overview.md)\ Helps you, as a future Defguard administrator, get familiar with all of defguard's features and how to configure them to suit your needs. * [Deployment strategies](deployment-strategies/setting-up-your-instance.md)\ Walks you through the most common deployment strategies to help you set up your Defguard instance as a production-grade solution. -* [Enterprise](enterprise/enterprise-features.md)\ - Outlines the benefits, terms, and purchasing process for the Defguard Enterprise license. -* [Using Defguard (for end users)](help/overwiew.md)\ +* [License](/broken/pages/vEBaL5Pdry1nZO8V50bh)\ + Outlines the scope, limits, and purchasing process for the Defguard Enterprise license. +* [Using Defguard (for end users)](using-defguard-for-end-users/overwiew.md)\ Helps you, as a Defguard end user, get familiar with the client applications and their features so you can quickly connect to your Defguard instance. * [Tutorials](tutorials/step-by-step-setting-up-a-vpn-server/)\ A collection of step-by-step guides with clear examples and helpful screenshots to make the setup process smooth and enjoyable. -* [In depth](in-depth/architecture-decision-records/README.md)\ +* [In depth](in-depth/architecture-decision-records/)\ In-depth information about the platform and its development, reflecting our commitment to transparency. * [For developers](for-developers/contributing.md)\ All the information you need to become a Defguard contributor — join us in building a better solution. -* [Resources](resources/troubleshooting/README.md)\ +* [Resources](support-1/troubleshooting/)\ A collection of essential resources, including troubleshooting guides, API documentation, and more. diff --git a/SUMMARY.md b/SUMMARY.md index 93076b4..8cdc53b 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -12,127 +12,165 @@ * [One-line install script](getting-started/one-line-install.md) -## Features - -* [Overview](admin-and-features/overview.md) -* [Zero-Trust VPN with 2FA/MFA](admin-and-features/wireguard/README.md) - * [Create/Manage VPN Location](admin-and-features/wireguard/create-your-vpn-network.md) - * [Network overview](admin-and-features/wireguard/network-overview.md) - * [Executing custom gateway commands](admin-and-features/wireguard/executing-custom-gateway-commands.md) - * [Multi-Factor Authentication (MFA/2FA)](admin-and-features/wireguard/multi-factor-authentication-mfa-2fa/README.md) - * [MFA Architecture](admin-and-features/wireguard/multi-factor-authentication-mfa-2fa/architecture.md) - * [Remote desktop client configuration](admin-and-features/wireguard/remote-desktop-activation.md) - * [DNS and domains](admin-and-features/wireguard/dns-and-domains.md) - * [VPN & Client behaviour customization](admin-and-features/wireguard/behavior-customization.md) -* [Remote user enrollment](admin-and-features/remote-user-enrollment/README.md) - * [User onboarding after enrollment](admin-and-features/remote-user-enrollment/user-onboarding-after-enrollment.md) - * [Automatic (real time) desktop client configuration & sync](admin-and-features/remote-user-enrollment/automatic-real-time-desktop-client-configuration.md) -* [Internal SSO (OpenID Connect Provider)](admin-and-features/openid-connect/README.md) - * [Portainer](admin-and-features/openid-connect/portainer.md) - * [Grafana setup](admin-and-features/openid-connect/grafana-setup.md) - * [Proxmox](admin-and-features/openid-connect/proxmox.md) - * [Matrix / Synapse](admin-and-features/openid-connect/proxmox-1.md) - * [Django](admin-and-features/openid-connect/django.md) - * [MinIO](admin-and-features/openid-connect/minio.md) - * [Vault](admin-and-features/openid-connect/vault.md) -* [External SSO/OpenID providers](admin-and-features/external-openid-providers/README.md) - * [Google](admin-and-features/external-openid-providers/google.md) - * [Microsoft](admin-and-features/external-openid-providers/microsoft.md) - * [Okta](admin-and-features/external-openid-providers/okta.md) - * [JumpCloud](admin-and-features/external-openid-providers/jumpcloud.md) - * [Keycloak](admin-and-features/external-openid-providers/keycloak.md) - * [Zitadel](admin-and-features/external-openid-providers/zitadel.md) - * [Custom](admin-and-features/external-openid-providers/custom.md) - * [External OIDC secure enrollment](admin-and-features/external-openid-providers/external-oidc-secure-enrollment.md) -* [LDAP and Active Directory integration](admin-and-features/ldap-and-active-directory-integration/README.md) - * [Configuration](admin-and-features/ldap-and-active-directory-integration/configuration.md) - * [Settings table](admin-and-features/ldap-and-active-directory-integration/settings-table.md) - * [Two-way LDAP and Active Directory synchronization](admin-and-features/ldap-and-active-directory-integration/two-way-ldap-and-active-directory-synchronization.md) -* [Access Control List](admin-and-features/access-control-list/README.md) - * [ACL Aliases](admin-and-features/access-control-list/acl-aliases.md) - * [Implementation Details](admin-and-features/access-control-list/firewall-internals.md) -* [Network devices](admin-and-features/network-devices.md) -* [Activity & Audit logs](activity-log/README.md) - * [Audit Log Streaming to SIEM systems](activity-log/activity-log-streaming/README.md) - * [Supported SIEM systems integrations](activity-log/activity-log-streaming/activity-log-integrations/README.md) - * [Vector integration guide](activity-log/activity-log-streaming/activity-log-integrations/vector-integration-guide.md) - * [Logstash integration guide](activity-log/activity-log-streaming/activity-log-integrations/logstash-integration-guide.md) -* [Notifications](notifications/README.md) - * [Email notifications](notifications/setting-up-smtp-for-email-notifications.md) - * [Gateway notifications](notifications/gateway-notifications.md) - * [New version notifications](notifications/new-version-notifications.md) -* [Integrations](integrations/README.md) - * [Webhooks](integrations/webhooks.md) - * [REST API](integrations/api-tokens.md) -* [OPSense Configuartion](admin-and-features/setting-up-your-instance/gateway/README.md) -* [SSH Authentication](admin-and-features/ssh-authentication.md) -* [Forward auth](admin-and-features/forward-auth.md) -* [YubiKey Provisioning](admin-and-features/yubikey-provisioning.md) -* [User SNAT bindings](user-snat-bindings.md) +## Features + +* [Overview](features/overview.md) +* [Zero-Trust VPN with 2FA/MFA](features/wireguard/README.md) + * [Create/Manage VPN Location](features/wireguard/create-your-vpn-network.md) + * [Network overview](features/wireguard/network-overview.md) + * [Multi-Factor Authentication (MFA/2FA)](features/wireguard/multi-factor-authentication-mfa-2fa/README.md) + * [Internal SSO based MFA](features/wireguard/multi-factor-authentication-mfa-2fa/internal-sso-based-mfa.md) + * [External SSO based MFA](features/wireguard/multi-factor-authentication-mfa-2fa/external-sso-based-mfa.md) + * [Remote desktop client configuration](features/wireguard/remote-desktop-activation.md) + * [VPN & Client behaviour customization](features/wireguard/behavior-customization.md) + * [DNS and domains](features/wireguard/dns-and-domains.md) + * [Executing custom gateway commands](features/wireguard/executing-custom-gateway-commands.md) +* [Remote user enrollment](features/remote-user-enrollment/README.md) + * [User onboarding after enrollment](features/remote-user-enrollment/user-onboarding-after-enrollment.md) + * [Automatic (real time) desktop client configuration & sync](features/remote-user-enrollment/automatic-real-time-desktop-client-configuration.md) +* [Internal SSO (OpenID Connect Provider)](features/openid-connect/README.md) + * [Portainer](features/openid-connect/portainer.md) + * [Grafana setup](features/openid-connect/grafana-setup.md) + * [Proxmox](features/openid-connect/proxmox.md) + * [Matrix / Synapse](features/openid-connect/proxmox-1.md) + * [Django](features/openid-connect/django.md) + * [MinIO](features/openid-connect/minio.md) + * [Vault](features/openid-connect/vault.md) +* [External SSO/OpenID providers](features/external-openid-providers/README.md) + * [Google](features/external-openid-providers/google.md) + * [Microsoft](features/external-openid-providers/microsoft.md) + * [Okta](features/external-openid-providers/okta.md) + * [JumpCloud](features/external-openid-providers/jumpcloud.md) + * [Keycloak](features/external-openid-providers/keycloak.md) + * [Zitadel](features/external-openid-providers/zitadel.md) + * [Custom](features/external-openid-providers/custom.md) + * [External OIDC secure enrollment](features/external-openid-providers/external-oidc-secure-enrollment.md) +* [LDAP and Active Directory integration](features/ldap-and-active-directory-integration/README.md) + * [Configuration](features/ldap-and-active-directory-integration/configuration.md) + * [Settings table](features/ldap-and-active-directory-integration/settings-table.md) + * [Two-way LDAP and Active Directory synchronization](features/ldap-and-active-directory-integration/two-way-ldap-and-active-directory-synchronization.md) +* [Access Control List](features/access-control-list/README.md) + * [ACL Aliases](features/access-control-list/acl-aliases.md) + * [Implementation Details](features/access-control-list/firewall-internals.md) +* [Network devices](features/network-devices.md) +* [Activity & Audit logs](features/activity-log/README.md) + * [Audit Log Streaming to SIEM systems](features/activity-log/activity-log-streaming/README.md) + * [Supported SIEM systems integrations](features/activity-log/activity-log-streaming/activity-log-integrations/README.md) + * [Vector integration guide](features/activity-log/activity-log-streaming/activity-log-integrations/vector-integration-guide.md) + * [Logstash integration guide](features/activity-log/activity-log-streaming/activity-log-integrations/logstash-integration-guide.md) +* [Notifications](features/notifications/README.md) + * [Email notifications](features/notifications/setting-up-smtp-for-email-notifications.md) + * [Gateway notifications](features/notifications/gateway-notifications.md) + * [New version notifications](features/notifications/new-version-notifications.md) +* [Integrations](features/integrations/README.md) + * [Webhooks](features/integrations/webhooks.md) + * [REST API](features/integrations/api-tokens.md) +* [OPNSense Configuartion](features/gateway.md) +* [SSH Authentication](features/ssh-authentication.md) +* [Forward auth](features/forward-auth.md) +* [YubiKey Provisioning](features/yubikey-provisioning.md) +* [User SNAT bindings](features/user-snat-bindings.md) +* [Service locations](features/service-locations.md) +* [Desktop client auto-provisioning](features/desktop-client-auto-provisioning/README.md) + * [Auto-provisioning in Windows environments](features/desktop-client-auto-provisioning/auto-provisioning-in-windows-environments/README.md) + * [On-premise Active Directory](features/desktop-client-auto-provisioning/auto-provisioning-in-windows-environments/on-premise-active-directory-environments.md) + * [Entra ID](features/desktop-client-auto-provisioning/auto-provisioning-in-windows-environments/entra-id-environments.md) + * [Generating enrollment tokens with Defguard REST API](features/desktop-client-auto-provisioning/generating-enrollment-tokens-with-defguard-rest-api.md) +* [Static IP assignment](features/static-ip-assignment.md) ## Deployment strategies * [Overview](deployment-strategies/setting-up-your-instance.md) -* [Standalone package based installation](deployment-strategies/standalone-package-based-installation.md) -* [Docker images and tags](deployment-strategies/docker-images-and-tags.md) +* [Deploying to Production](deployment-strategies/deploying-to-production.md) +* [Hardware, OS, network and firewall recommendations](deployment-strategies/hardware-os-network-and-firewall-recommendations.md) +* [Standalone package based installation](deployment-strategies/standalone-package-based-installation/README.md) + * [Defguard APT repository](deployment-strategies/standalone-package-based-installation/defguard-apt-repository.md) * [Docker Compose](deployment-strategies/docker-compose.md) * [Kubernetes](deployment-strategies/kubernetes.md) * [Terraform](deployment-strategies/terraform.md) -* [AMIs and AWS CloudFormation](deployment-strategies/amis-and-aws-cloudformation.md) -* [High Availability and Failover](deployment-strategies/high-availability-and-failover.md) -* [Upgrading](deployment-strategies/upgrading.md) +* [OVA](deployment-strategies/ova.md) +* [Amazon Machine Image (AMI)](deployment-strategies/amis-and-aws-cloudformation/README.md) + * [Configuring HTTPS using AWS Certificate Manager](deployment-strategies/amis-and-aws-cloudformation/configuring-https-using-aws-certificate-manager.md) +* [Adding a location and getting a Gateway token](deployment-strategies/gateway.md) +* [Configuration](deployment-strategies/configuration.md) +* [Running Gateway on OPNsense firewall](deployment-strategies/running-gateway-on-opnsense-firewall.md) +* [Running Gateway on MikroTik routers](deployment-strategies/running-gateway-on-mikrotik-routers.md) +* [Reverse Proxy configuration using NGINX](deployment-strategies/reverse-proxy-configuration-using-nginx.md) +* [High Availability and Failover](deployment-strategies/high-availability-and-failover/README.md) + * [WireGuard UDP load-balancing](deployment-strategies/high-availability-and-failover/wireguard-udp-load-balancing.md) +* [Updating and version compatibility](deployment-strategies/updating-and-version-compatibility.md) +* [Migration guides](deployment-strategies/upgrading.md) +* [Using a userspace wireguard-go implementation](deployment-strategies/using-a-userspace-wireguard-go-implementation.md) * [Pre-production and development releases](deployment-strategies/pre-production-and-development-releases.md) -* [Gateway](deployment-strategies/gateway/README.md) - * [Running gateway on MikroTik routers](deployment-strategies/gateway/running-gateway-on-mikrotik-routers.md) * [Securing gRPC communication](deployment-strategies/grpc-ssl-communication.md) - -*** - -* [OpenID RSA key](openid-rsa-key.md) -* [Health check](health-check.md) -* [Configuration](configuration.md) - -## Enterprise - -* [License](enterprise/license.md) -* [Enterprise features](enterprise/enterprise-features.md) - -## Using Defguard (for end users) - -* [Overview](help/overwiew.md) -* [Mobile Client](help/mobile-client/README.md) - * [Adding new Instance](help/mobile-client/instance-adding.md) - * [Connecting to Instance](help/mobile-client/instance-connect.md) - * [Managing your Instance](help/mobile-client/instance-manage.md) -* [Desktop Client](help/desktop-client/README.md) - * [Instance configuration](help/desktop-client/instance-configuration.md) - * [Using Multi-Factor Authentication (MFA)](help/desktop-client/using-multi-factor-authentication-mfa.md) -* [CLI Client](help/cli-client.md) -* [Other WireGuard® Clients](help/adding-wireguard-devices/README.md) - * [Configuring a device for new VPN Location manually](help/adding-wireguard-devices/configuring-a-device-for-a-new-vpn-location.md) -* [Password change / Reset](help/changing-your-password.md) -* [Enrollment & Onboarding](help/enrollment/README.md) - * [With internal Defguard SSO](help/enrollment/with-internal-defguard-sso.md) - * [With external SSO (Google/Microsoft/Custom)](help/enrollment/with-external-sso-google-microsoft-custom.md) -* [Setting up 2FA/MFA](help/setting-up-2fa-mfa.md) +* [Using RSA instead of HMAC for OpenID key](deployment-strategies/openid-rsa-key.md) +* [Health check](deployment-strategies/health-check.md) +* [Production deployment verification guide](deployment-strategies/production-deployment-verification-guide.md) +* [Linux Kernel WireGuard tuning](deployment-strategies/linux-kernel-wireguard-tuning.md) +* [Previewing Defguard v2.0-alpha2](deployment-strategies/previewing-defguard-v2.0-alpha2.md) + +## License + +* [Purchasing and using the license](enterprise/license.md) + +## Using Defguard (for end users) + +* [Overview](using-defguard-for-end-users/overwiew.md) +* [Mobile Client](using-defguard-for-end-users/mobile-client/README.md) + * [Adding new Instance](using-defguard-for-end-users/mobile-client/instance-adding.md) + * [Connecting to Instance](using-defguard-for-end-users/mobile-client/instance-connect.md) + * [Managing your Instance](using-defguard-for-end-users/mobile-client/instance-manage.md) + * [Using Biometry as MFA method](using-defguard-for-end-users/mobile-client/using-biometry-as-mfa-method.md) +* [Desktop Client](using-defguard-for-end-users/desktop-client/README.md) + * [Instance configuration](using-defguard-for-end-users/desktop-client/instance-configuration.md) + * [Using Multi-Factor Authentication (MFA)](using-defguard-for-end-users/desktop-client/using-multi-factor-authentication-mfa.md) + * [MTU Setting](using-defguard-for-end-users/desktop-client/mtu-setting.md) +* [CLI Client](using-defguard-for-end-users/cli-client.md) +* [Other WireGuard® Clients](using-defguard-for-end-users/adding-wireguard-devices/README.md) + * [Configuring a device for new VPN Location manually](using-defguard-for-end-users/adding-wireguard-devices/configuring-a-device-for-a-new-vpn-location.md) +* [Password change / Reset](using-defguard-for-end-users/changing-your-password.md) +* [Enrollment & Onboarding](using-defguard-for-end-users/enrollment/README.md) + * [With internal Defguard SSO](using-defguard-for-end-users/enrollment/with-internal-defguard-sso.md) + * [With external SSO (Google/Microsoft/Custom)](using-defguard-for-end-users/enrollment/with-external-sso-google-microsoft-custom.md) +* [Setting up 2FA/MFA](using-defguard-for-end-users/setting-up-2fa-mfa.md) + +## Support + +* [How to submit an issue](support-1/how-to-submit-an-issue.md) +* [Troubleshooting Guide](support-1/troubleshooting/README.md) + * [Sending support information](support-1/troubleshooting/sending-support-info.md) + * [Client Windows installer exit codes](support-1/troubleshooting/windows-installer-exit-codes.md) + * [Client "All traffic" connection issues](support-1/troubleshooting/client-all-traffic-connection-issues.md) + * [WebAuthn security keys](support-1/troubleshooting/webauthn-security-keys.md) +* [Server migration and licence transfer](support-1/server-migration-and-licence-transfer.md) ## Tutorials * [Step by step setting up a VPN server](tutorials/step-by-step-setting-up-a-vpn-server/README.md) * [Adding additional VPN locations](tutorials/step-by-step-setting-up-a-vpn-server/adding-additional-vpn-locations.md) +## Compliance + +* [Defguard Compliance](compliance/defguard-compliance.md) + ## In depth +* [Secure by design](in-depth/secure-by-design.md) +* [Architecture](in-depth/architecture/README.md) + * [How do VPN statistics work](in-depth/architecture/how-do-vpn-statistics-work.md) + * [Security concepts](in-depth/architecture/security-concepts.md) + * [MFA Architecture](in-depth/architecture/architecture.md) * [Architecture Decision Records](in-depth/architecture-decision-records/README.md) + * [2.0](in-depth/architecture-decision-records/2.0.md) + * [1.6](in-depth/architecture-decision-records/1.6.md) * [1.5](in-depth/architecture-decision-records/1.5.md) * [1.4](in-depth/architecture-decision-records/1.4.md) * [1.3](in-depth/architecture-decision-records/1.3.md) * [Pre-1.3](in-depth/architecture-decision-records/pre-1.3.md) -* [Architecture](in-depth/architecture/README.md) - * [How do VPN statistics work](in-depth/architecture/how-do-vpn-statistics-work.md) - * [Security concepts](in-depth/architecture/security-concepts.md) -* [Roadmap](features/roadmap.md) -* [Release cycle](in-depth/release-cycle.md) +* [Client application feature compatibility](in-depth/client-application-feature-compatibility.md) +* [Defguard Open Organisation](in-depth/defguard-open-organisation/README.md) + * [Product Development Procedure](in-depth/defguard-open-organisation/product-development-procedure.md) + * [Roadmap](in-depth/defguard-open-organisation/roadmap.md) ## For Developers @@ -143,11 +181,3 @@ * [Adding translations](for-developers/dev-env-setup/translations-web/adding-translations.md) * [Translations (client)](for-developers/dev-env-setup/translations-client/README.md) * [Adding translations](for-developers/dev-env-setup/translations-client/adding-translations.md) - -## Resources - -* [Troubleshooting Guide](resources/troubleshooting/README.md) - * [Sending support information](resources/troubleshooting/sending-support-info.md) - * [Client Windows installer exit codes](resources/troubleshooting/windows-installer-exit-codes.md) - * [Client "All traffic" connection issues](resources/troubleshooting/client-all-traffic-connection-issues.md) - * [WebAuthn security keys](resources/troubleshooting/webauthn-security-keys.md) diff --git a/about/about-defguard.md b/about/about-defguard.md index 147ba9f..b20b1ad 100644 --- a/about/about-defguard.md +++ b/about/about-defguard.md @@ -1,48 +1,107 @@ -# About Defguard +--- +metaLinks: + alternates: + - https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/about/about-defguard +--- -{% embed url="https://www.youtube.com/watch?v=4PF7edMGBwk" %} +# About Defguard ## What is Defguard? -Defguard is a **comprehensive Remote Access Management solution** incorporating in one solution: +Defguard is an enterprise-ready platform built on top of WireGuard®, designed to make private networking simple, scalable, and secure. + +It integrates identity management, policy enforcement, and secure access provisioning into a single, cohesive system - whether you deploy it in your own infrastructure or in the cloud. + +Defguard helps organizations: + +* Manage VPN access for distributed teams. +* Integrate identity sources such as LDAP, Active Directory, or external OIDC providers. +* Enforce multi-factor authentication (MFA). +* Automate device enrollment. +* Simplify network segmentation and access control using policies. + +For a detailed list of features go to the [Features overview](https://github.com/DefGuard/docs/blob/v1.6/about/broken-reference/README.md) section. + +## Why choose Defguard? + +Defguard was built with security, transparency, and control at its core - more in our [Secure by design](../in-depth/secure-by-design.md) and [Architecture](../in-depth/architecture/) documentation. + +Here’s why organizations choose it over traditional VPN management or proprietary systems: + +#### 🏗️ Self-Hosted and Privacy-Focused + +Defguard can be deployed on your own infrastructure, giving you full ownership of data and keys. + +No external cloud relay, no hidden telemetry - your traffic and user data never leave your environment. + +#### 🔒 Zero Trust by Design + +Authentication and authorization with MFA happen continuously, not just at login. + +Access decisions are policy-driven and identity-based, reducing lateral movement risks and insider threats. + +#### 🔑 True MFA (Multi-Factor Authentication) for VPN Access + +Most applications provide MFA only when opening or logging into the app - not during the VPN connection itself. + +Defguard takes a different approach. + +Thanks to its internal Identity Provider (IdP), Defguard enforces real, [connection-level MFA](../in-depth/architecture/architecture.md), ensuring that multi-factor authentication is applied as part of the VPN handshake - not just the UI login step. + +Even when using [external OIDC](../features/external-openid-providers/) providers (Google, Microsoft, or a custom one supported by Defguard), Defguard still applies its internal IdP-based MFA for actual VPN session authentication. + +This design delivers true, end-to-end verification that protects both users and infrastructure from credential theft or token replay attacks. + +#### ⚙️ Open, Extensible, and Interoperable + +Defguard integrates cleanly with your existing identity stack - LDAP, AD, or OIDC - without forcing vendor lock-in. + +Its webhooks make it easy to extend or automate within DevOps workflows. -* True Zero-Trust [WireGuard® VPN with 2FA/Multi-Factor Authentication](../admin-and-features/wireguard/), -* Identity Management with [SSO based on OpenID Identity Provider](../admin-and-features/openid-connect/), -* Account Lifecycle management with [secure remote account onboarding](../help/enrollment/). +#### 🧭 Simple for Users, Powerful for Admins -*** +End users enjoy one-click VPN access via the Defguard apps, while admins gain granular control through a modern web interface. -**Our primary focus at Defguard is on prioritizing security. Then, we aim to make this challenging topic both useful and as easy to navigate as possible.** +#### 🧩 Modular and Scalable -*** +Each component (Core, Gateway, Proxy) can be deployed independently, allowing flexible scaling - from a single office setup to multi-region enterprise deployments. -Defguard is a true Zero-Trust [WireGuard® VPN with 2FA/Multi-Factor Authentication](../admin-and-features/wireguard/), as each connection requires MFA (and not only when logging in into the client application like other solutions): +#### 🧱 Security Built into the Development Process -
+Defguard follows modern software supply-chain and security best practices: -Having said that, this security platform is for building **secure** and **privacy-aware organizations,** as we put great effort not only on functionality but first and foremost on secure code, architecture and testing (application and security). +* Signed container images and binaries. +* Publishing SBOMs. +* Scanning for and reacting to vulnerabilities on a daily basis. +* Regular penetration testing. -### Basic security concept +#### 🌱 Open Source and Transparent by Design -The main architecture concept is that **all critical data should be in the internal (Intranet) network and not exposed in the public Internet** (contrary to typical and common cloud approach) and only services that need to be exposed to the Internet - should be exposed in a controled (DMZ) network segments: +Defguard is open source - you can inspect, audit, and contribute to the code that powers your infrastructure. -

Internet, DMZ & Internal network segments

+We believe transparency is a cornerstone of security and trust. -This approach is **vastly different from most (if not all) VPN/IdP solutions**, which are a simple or monolithic applications focus on functionalities and most of the time is publicly available in the Internet for any attacker to exploit. +Our approach goes beyond code: -Of course you can deploy Defguard in a typical scenario (all services on one server and even all publicly available) - but that should be **for you to decide!** +* Open organisation: we share our [development roadmap](https://github.com/orgs/DefGuard/projects/5), [security practices](https://defguard.net/security/), and [architecture decisions](../in-depth/architecture-decision-records/) publicly. +* Open processes: our builds, signing, and release workflows are verifiable end-to-end. +* Open security scans: we publish [penetration tests reports](https://defguard.net/pentesting/), and [daily SBOM CVE scan reports](https://defguard.net/sbom/). +* Community-driven development: [we welcome feedback](../support.md#found-a-bug-need-a-feature), issues, and [contributions from users](../for-developers/contributing.md) and integrators. +* No black boxes: every component, from Core to Gateway, can be deployed, configured, and verified independently. -### Incorporating IdP and VPN in one solution +Defguard’s openness ensures trust through verifiability, not promises — aligning with the principles of modern, transparent cybersecurity. -Incorporating IDM, ALM, VPN has also other advantages: +## How is Defguard built? -1. Internal IdP with 2FA/MFA enables us to provide [**real VPN 2FA/MFA**](../admin-and-features/wireguard/multi-factor-authentication-mfa-2fa/architecture.md) - and not like most applications just 2FA when opening the app (and not during the connection process). Even if you use [external OIDC](../admin-and-features/external-openid-providers/) (Google/Microsoft/Custom - which Defguard supports), we still use our internal IdP for 2FA/MFA. -2. Your organization may use just **one account** (login) for access control to all your applications as well as VPN. -3. It simplifies deployment, maintenance, audits. +Defguard consists of several modular services that can be deployed together or separately, depending on your architecture: -More about [defguard's architecture and security can be found here](../in-depth/architecture/). +* Core – the main service responsible for user management, authentication, configuration storage, and integrations. +* VPN Gateway – provides the VPN endpoint for clients; runs WireGuard and synchronizes configuration with Core. +* Public Proxy – an optional component that handles communication between the Core and external services or clients in restricted environments. +* Desktop and Mobile Apps – client applications for macOS, Windows, Linux, Android, and iOS, allowing users to connect easily and securely. -## Pentested! +This layered architecture with a strict division of responsibility guarantees maximum security (verified by multiple in-depth [penetration tests](https://defguard.net/pentesting/)). -**Checked by professional security researchers** (see [comprehensive security report](https://defguard.net/pdf/isec-defguard.pdf)) +
+For the reasoning behind this division, please refer to the [Architecture documentation](../in-depth/architecture/). diff --git a/about/features-overview.md b/about/features-overview.md index d195a04..9beef2a 100644 --- a/about/features-overview.md +++ b/about/features-overview.md @@ -1,32 +1,38 @@ +--- +metaLinks: + alternates: + - https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/about/features-overview +--- + # Features overview ### Remote Access with WireGuard® VPN 2FA/MFA: -* [**Multi-Factor Authentication**](../admin-and-features/wireguard/multi-factor-authentication-mfa-2fa/) using our [desktop client](https://defguard.net/client) +* [**Multi-Factor Authentication**](../features/wireguard/multi-factor-authentication-mfa-2fa/) using our [desktop client](https://defguard.net/client) * **Multiple VPN Locations** (networks/sites) - with defined access (all users or only Admin group) -* Multiple [Gateways](https://github.com/DefGuard/gateway) for each VPN Location ([**high availability/failover**](../deployment-strategies/high-availability-and-failover.md)) - supported on a cluster of routers/firewalls for Linux, FreeBSD/PFSense/OPNSense +* Multiple [Gateways](https://github.com/DefGuard/gateway) for each VPN Location ([**high availability/failover**](../deployment-strategies/high-availability-and-failover/)) - supported on a cluster of routers/firewalls for Linux, FreeBSD/PFSense/OPNSense * Import your current WireGuard server configuration (with a wizard!) * _Easy_ device setup by users themselves (self-service) * Automatic IP allocation * Kernel (Linux, FreeBSD/OPNSense/PFSense) & userspace WireGuard support -* [Dashboard and statistics overview](../admin-and-features/wireguard/network-overview.md) of connected users/devices for admins +* [Dashboard and statistics overview](../features/wireguard/network-overview.md) of connected users/devices for admins _Defguard is not an official WireGuard project, and WireGuard is a registered trademark of Jason A. Donenfeld._ -### [_Activity & Audit Logs_](../activity-log/) +### [_Activity & Audit Logs_](../features/activity-log/) * User event logging with detailed metadata * Advanced filtering and search by user, module, event type and time range * Role-based visibility - users can see only their events * Grouped logs by modules (Defguard, enrollment, VPN) -* Real-time [log streaming](../activity-log/activity-log-streaming/) to SIEM tools (Enterprise feature) +* Real-time [log streaming](../features/activity-log/activity-log-streaming/) to SIEM tools (Enterprise feature) ### OpenID Connect -* Defguard is an internal OIDC provider for [Single Sign-On](../admin-and-features/openid-connect/). -* Supports [external OpenID](../admin-and-features/external-openid-providers/) providers for user authentication. +* Defguard is an internal OIDC provider for [Single Sign-On](../features/openid-connect/). +* Supports [external OpenID](../features/external-openid-providers/) providers for user authentication. -### [Access Control List](../admin-and-features/access-control-list/) +### [Access Control List](../features/access-control-list/) * Access rules for VPN locations * Allow or deny access based on users or groups @@ -34,8 +40,8 @@ _Defguard is not an official WireGuard project, and WireGuard is a registered tr ### Identity Management: -* #### [OpenID Connect](https://openid.net/developers/how-connect-works/) based SSO -* External [OpenID providers for login/account creation (Google/Microsoft/Custom)](../admin-and-features/external-openid-providers/) +* [**OpenID Connect**](https://openid.net/developers/how-connect-works/) **based SSO** +* External [OpenID providers for login/account creation (Google/Microsoft/Custom)](../features/external-openid-providers/) * LDAP (tested on [OpenLDAP](https://www.openldap.org/)) synchronization * Nice UI to manage users * Users **self-service** (besides typical data management, users can revoke access to granted apps, MFA, WireGuard, etc.) @@ -54,9 +60,9 @@ _Defguard is not an official WireGuard project, and WireGuard is a registered tr ### Notifications -* [Email notifications ](../notifications/setting-up-smtp-for-email-notifications.md)via SMTP -* [Gateway disconnect/reconnect](../notifications/gateway-notifications.md) notifications -* [New version](../notifications/new-version-notifications.md) notifications +* [Email notifications ](../features/notifications/setting-up-smtp-for-email-notifications.md)via SMTP +* [Gateway disconnect/reconnect](../features/notifications/gateway-notifications.md) notifications +* [New version](../features/notifications/new-version-notifications.md) notifications ### YubiKey Provisioning @@ -64,6 +70,6 @@ _Defguard is not an official WireGuard project, and WireGuard is a registered tr ### Integrations -[Webhooks](../integrations/webhooks.md) & [REST API](../integrations/api-tokens.md) +[Webhooks](../features/integrations/webhooks.md) & [REST API](../features/integrations/api-tokens.md) Build with [Rust](https://www.rust-lang.org/) for portability, security, and speed diff --git a/admin-and-features/external-openid-providers/external-oidc-secure-enrollment.md b/admin-and-features/external-openid-providers/external-oidc-secure-enrollment.md deleted file mode 100644 index 3cebef5..0000000 --- a/admin-and-features/external-openid-providers/external-oidc-secure-enrollment.md +++ /dev/null @@ -1,11 +0,0 @@ -# External OIDC secure enrollment - -{% hint style="warning" %} -This is an enterprise feature. To use it, purchase our [enterprise license](../../enterprise/license.md) or ensure that your deployment does not exceed the [usage limits](../../enterprise/license.md#enterprise-is-free-up-to-certain-limits). -{% endhint %} - -When [External OIDC is enabled,](./) users have the possibility to [securely enroll (automatically create a Defguard account) and very easily configure their desktop client](../../help/enrollment/with-external-sso-google-microsoft-custom.md) just by logging in with the SSO provider: - -
- -For this to work, see [#openid-enrollment](./#openid-enrollment "mention"). diff --git a/admin-and-features/external-openid-providers/jumpcloud.md b/admin-and-features/external-openid-providers/jumpcloud.md deleted file mode 100644 index 7fb8a5c..0000000 --- a/admin-and-features/external-openid-providers/jumpcloud.md +++ /dev/null @@ -1,40 +0,0 @@ -# JumpCloud - -1. Login to your JumpCloud admin account. -2. Navigate to SSO Applications\\ - -
-3. Add a new SSO Application -4. Select "Custom" on this screen. - -
-5. Select "Configure SSO with OIDC". - -
-6. Fill the app's display label in the next form.\\ - -
-7. After finishing this configuration, you will be redirected to your newly created SSO Application's settings. Go to the "SSO" tab first. - -
-8. Configure as following: - -
- - Make sure to set the correct Redirect URI and Login URL that will reflect your Defguard's setup. If you access your Defguard dashboard at e.g. `https://defguard.example.net` your redirect URI will be `https://defguard.example.net/auth/callback` and the login URL `https://defguard.example.net/auth/login`. Additionally, if you are using a Defguard proxy to enrol users, you can also add another redirect URI in the form of `/openid/callback`, where the `` is the address at which your proxy enrollment page is accessible. -9. Next, select the profile scope and add an `email` user attribute mapping by hand, like so: - -
- - It's important **not** to select the email standard scope checkbox, as it will automatically add a constant `email_verified` field which doesn't conform to the OpenID standard and doesn't work with Defguard. You can see the following section for more information: [#jumpcloud](./#jumpcloud "mention"). -10. Click "Activate". You will be presented with a client ID and a secret. Copy both of them, as you will need to insert them in Defguard's settings. -11. Go to Defguard settings, OpenID tab, select a `Custom` provider tab and paste the copied values: - -
- - Set the base URL to `https://oauth.id.jumpcloud.com/`. The display name may be whatever you want. -12. Back in JumpCloud, make sure your users have access to the SSO Application. You can enable it by navigating to the `User groups` menu and selecting the group you want to enable logging in through JumpCloud for. Only users from this group will be able to log in to Defguard with JumpCloud. In this example, we will select the `All users` group, which is a dynamic group containing every user. -13. Now in the group settings menu, select the `Applications` tab and select the checkbox next to your newly created app, this will enable the app for that group. Click `Save group` when you finish. - -
-14. Now you should be able to log in to Defguard with JumpCloud. diff --git a/admin-and-features/overview.md b/admin-and-features/overview.md deleted file mode 100644 index a02c899..0000000 --- a/admin-and-features/overview.md +++ /dev/null @@ -1,16 +0,0 @@ -# Overview - -## Welcome to Defguard admin documentation - -This documentation walks you through all the administrative features of Defguard and how to configure them. - -We recommend setting up your own example instance using our [one-line install script](../getting-started/one-line-install.md) to explore these features firsthand. As you follow along, you can adjust the configuration directly within your instance to better understand each feature in action. - -### What you’ll learn - -As a future Defguard administrator, this documentation will help you: - -* Be aware of all the possibilities you have with Defguard. -* How to configure them to your needs. - -If you're more interested in different deployment strategies after using our [one-line install script](../getting-started/one-line-install.md), go to the [deployment strategies](broken-reference/) section. diff --git a/admin-and-features/remote-user-enrollment/README.md b/admin-and-features/remote-user-enrollment/README.md deleted file mode 100644 index 0260e74..0000000 --- a/admin-and-features/remote-user-enrollment/README.md +++ /dev/null @@ -1,84 +0,0 @@ -# Remote user enrollment - -By design **Defguard core** is meant to be deployed **securely** within your infrastructure and only accessible from within the internal network or by VPN. - -This introduces an issue with onboarding **new users** and forces the admin to choose an initial password, setup a VPN device for them, and pass on those details to the end user using possibly **insecure** channels. - -To avoid this issue you can deploy a **public** [Defguard proxy](https://github.com/DefGuard/proxy) which enables a **secure enrollment process:** - -
- -{% hint style="info" %} -The proxy is included when using the default [deployment instructions](../../deployment-strategies/setting-up-your-instance.md). - -Please also see the relevant configuration options for [core](../../configuration.md#enrollment-configuration) and the [proxy itself](../../configuration.md#enrollment-service). -{% endhint %} - -## Enrollment settings - -{% hint style="warning" %} -In order for the enrollment process to function correctly you must also [set up an SMTP server](../../notifications/setting-up-smtp-for-email-notifications.md) for delivering email notifications. -{% endhint %} - -As an admin, you can configure enrollment-related settings on the **Enrollment** page. This includes: - -* Making the VPN device step optional or mandatory in the enrollment wizard -* Customizing the user [onboarding messages](user-onboarding-after-enrollment.md). - -#### Message template tags - -There are several **template tags** (similar to [Jinja2](https://jinja.palletsprojects.com/en/3.1.x/) tags) that you can use in the onboarding messages to insert some dynamic content: - -* `{{ first_name }}` - newly created user first name -* `{{ last_name }}` - newly created user last name -* `{{ username }}` - newly created user username/login -* `{{ admin_first_name }}` - first name of the administrator who initiated the enrollment process -* `{{ admin_last_name }}` - last name of the administrator who initiated the enrollment process -* `{{ admin_phone }}`- phone number of the administrator who initiated the enrollment process -* `{{ admin_email }}`- email of the administrator who initiated the enrollment process -* `{{ defguard_url }}`- internal Defguard URL (your Defguard instance address) -* `{{ defguard_version }}` - -## Remote enrollment process - -### Starting remote enrollment (as an admin) - -* Go to **Users** page -* Click **Add new** user button -* Within the modal that appears fill in the new user's data as usual, but instead of entering a password check the **Use enrollment process** checkbox -* Click the **Add user** button -* In the next modal choose whether you want to **Send token by email** or **Deliver token yourself** -* If you choose to deliver the enrollment token by email provide an email address to which a notification will be sent - -{% hint style="info" %} -The email address you specify for delivering the enrollment token can be any email available to the user. It **does not** have to be the same one used when creating an account as we assume that a new user does not yet have access to their official company email account. -{% endhint %} - -* Click **Start enrollment** -* If you choose to deliver the token yourself you'll be shown a URL and token that you can copy and pass to the user - -### Restarting enrollment manually - -If there are any issues with the enrollment process (failed notification delivery, a lost token etc) you can restart it: - -* Go to **Users** page -* Find the relevant user and click on the **Action** button on the right -* A **Start enrollment** option should be available in the pop-over menu -* Clicking it will open the same **Start enrollment** modal where you can choose how to deliver the enrollment token - -### Performing remote enrollment (as a user) - -As a new user, after an admin starts the enrollment process, you will receive your enrollment token. - -If you receive an **email notification**, just click the link, and you'll be redirected to the enrollment wizard. - -If the admin decides to deliver your token through some other secure means, you'll have to go the specified enrollment page and enter the token **manually**. - -By following the **enrollment wizard,** you'll be able to do the following: - -* verify that your data is correct -* activate your user account -* choose your password -* add an initial device for VPN access - -After completing the wizard, you should be able to connect to the VPN and access the main Defguard web UI. diff --git a/admin-and-features/ssh-authentication.md b/admin-and-features/ssh-authentication.md deleted file mode 100644 index 2ab6d3d..0000000 --- a/admin-and-features/ssh-authentication.md +++ /dev/null @@ -1,67 +0,0 @@ -# SSH Authentication - -## Overview - -Defguard allows you to configure SSH authentication on your servers to use public SSH keys stored in your instance's database. This is possible by using the [AuthorizedKeysCommand option](http://man.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man5/sshd\_config.5#AuthorizedKeysCommand) in OpenSSH daemon configuration file. - -{% hint style="info" %} -Each user can manage their public SSH (and GPG keys) in their user profile. - -Also, when provisioning YubiKeys - those keys are also available in user profile (with info on which YK they are stored): - -![](../../.gitbook/assets/yk.png) -{% endhint %} - -The specific API endpoint used for this is `/api/v1/ssh_authorized_keys`. It returns a list of public keys, each in a new line. It allows you to filter you query by specifying a username, a group or a combination of both. - -## Setup - -There's no specific configuration to be performed in Defguard itself (aside from adding SSH keys for users of course), all the steps below are performed on the server you want to SSH into using defguard-supplied public keys: - -1. Add a script which fetches SSH keys from your Defguard instance - -```bash -#!/bin/sh - -curl defguard.example.com/api/v1/ssh_authorized_keys?username="${1}" -``` - -2. Make it executable, set correct ownership and permissions - -```sh -sudo chown root:root /usr/local/bin/get_ssh_keys.sh -sudo chmod 0755 /usr/local/bin/get_ssh_keys.sh -``` - -3. Update OpenSSH daemon config (`/etc/ssh/sshd_config`) to include following lines - -``` -AuthorizedKeysCommand /usr/local/bin/get_ssh_keys.sh -AuthorizedKeysCommandUser nobody -``` - -4. Restart OpenSSH daemon - -With this setup when a user `someuser` tries to log in with SSH to your server the script will make a `GET` request to your Defguard instance and fetch a list of keys assigned to `someuser` (if such a user exists). This list is then used to verify keys presented by the client. - -### Other examples - -Other script examples which can be useful in different server setups: - -* only allow users in the `admin` group to log in with SSH - -```bash -#!/bin/sh - -curl defguard.example.com/api/v1/ssh_authorized_keys?group=admin&username="${1}" -``` - -* allow all users in `admin` group to log in, but only to `adminuser` account - -```bash -#!/bin/sh - -test $# -ne 1 -o "${1}" != 'adminuser' && exit 1 - -curl defguard.example.com/api/v1/ssh_authorized_keys?group=admin -``` diff --git a/admin-and-features/wireguard/behavior-customization.md b/admin-and-features/wireguard/behavior-customization.md deleted file mode 100644 index f18ef9d..0000000 --- a/admin-and-features/wireguard/behavior-customization.md +++ /dev/null @@ -1,35 +0,0 @@ -# VPN & Client behaviour customization - -{% hint style="warning" %} -This is an enterprise feature. To use it, purchase our [enterprise license](../../enterprise/license.md) or ensure that your deployment does not exceed the [usage limits](../../enterprise/license.md#enterprise-is-free-up-to-certain-limits). -{% endhint %} - -After purchasing the Enterprise License the _Enterprise features_ **tab will be activated**, enabling the administrator to configure additional features: - -

Additional Enterprise Features

- -### Disable for users to manage their devices - -When this option is enabled, **only users in the Admin group can manage devices in user profile**, for any other users adding/editing/removing their VPN devices is disabled. - -### Disable ability to configure other VPN clients then Defguard desktop client - -If '_Disable users' ability to manually configure WireGuard client_' option is **enabled**, then any user **has only possibility to configure Defguard desktop client.** - -This option will not be available for users: - -
- -### Disable _All Traffic_ option in the desktop client - -One of Defguard desktop client unique features is the possibility for the user to automatically route **All network traffic** from their device **through the connected VPN Location**, when the user checks _All traffic_ option_**:**_ - -![](<../../.gitbook/assets/Screenshot 2024-10-14 at 12.49.30.png>) - -But there are scenarios that administrator would like that users have only access to the **predefined traffic** (meaning Allowed IPs in the Network VPN configuration) and the possibility to access all networks disabled. - -When enabling this option, users will only have _predefined traffic_ available in their desktop client and the _all traffic_ option disabled. - -{% hint style="warning" %} -Please note that this option is only client-side enforced, meaning the user may manually modify Wireguard interface to force all traffic to go through the VPN. -{% endhint %} diff --git a/admin-and-features/wireguard/multi-factor-authentication-mfa-2fa/README.md b/admin-and-features/wireguard/multi-factor-authentication-mfa-2fa/README.md deleted file mode 100644 index 4375b9a..0000000 --- a/admin-and-features/wireguard/multi-factor-authentication-mfa-2fa/README.md +++ /dev/null @@ -1,105 +0,0 @@ -# Multi-Factor Authentication (MFA/2FA) - -We support two types of Multi-Factor Authentication: - -1. Based on our [Internal OIDC/SSO](../../openid-connect/) - called [Internal MFA ](./#internal-mfa)- using this method the Desktop & Mobile clients authenticate with **TOTP & Email codes** and after that with **session keys based on Wireguard Pre-Shared Keys** (PSK). For more details about this please refer to the [architecture section](architecture.md). -2. Based on [External OIDC/SSO](../../external-openid-providers/) - called [External MFA](./#externa-mfa) - this method is supported from version 1.5 ([currently in alpha](../../../deployment-strategies/pre-production-and-development-releases.md)) and requires the External SSO to be configured in the system. Each connection when using this method will open a web browser with authentication session to the SSO (like Google/Microsoft Entra/Okta/....) and after successful authentication **session keys based on WireGuard Pre-Shared Keys** (PSK) are exchanged between the client and server (for more details about this please refer to the [architecture section](architecture.md)). - -{% hint style="success" %} -From version 1.5 ([currently in alpha](../../../deployment-strategies/pre-production-and-development-releases.md)) **each VPN Location can be configured to use either Internal or External MFA.** -{% endhint %} - -## Internal MFA - -Enabling Internal MFA for a desired VPN Location is done by: - -1. Going into Defguard to **VPN Overview** -2. Selecting the VPN Location from the dropdown list, and pressing the **Edit Location** button in the top right corner of the page -3. Check the "**Require MFA for this Location**" checkbox under the Location Configuration section -4. Set **peer disconnect threshold**, we recommend it to be min. 300 (5 min) - see chapter [below](./#peer-disconnect-threshold). -5. And **save changes**. - -

Example MFA Location configuration

- -### Peer disconnect **threshold** - -When MFA is enabled on a location, Defguard periodically (currently every **1 minute**) checks statistics if a client is connected and if the period of inactivity (defined in Peer disconnect threshold option) is met, a client is disconnected. - -Thus, the gateway needs to be configured to send statistics in that period. - -We recommend to set: - -* gateway to send statistics every 30sec -* Peer disconnect threshold we recommend it to be min. 300 (5 min) - -### Client update after enabling MFA - -{% hint style="warning" %} -When MFA configuration is changed, all clients must do an [Instance Update](../../../help/desktop-client/instance-configuration.md#updating-instance). -{% endhint %} - -### Testing MFA on Defguard client - -If a VPN has MFA enabled, before connecting you will be asked to complete the authentication step first: - -

MFA in Defguard desktop client

- -### Supported MFA methods - -For now, MFA is only available with the following methods: - -* [TOTP - Time-based one-time password](../../../help/setting-up-2fa-mfa.md#one-time-password) -* Email - requires [SMTP to be configured](../../../notifications/setting-up-smtp-for-email-notifications.md) - -{% hint style="warning" %} -Please remember to configure TOTP on you user account and/or SMTP settings for MFA on the desktop client to work.. -{% endhint %} - -### User MFA setup - -After enabling MFA for a given VPN, users will need to enable MFA for their accounts to be able to connect. This process is described in [setting-up-2fa-mfa.md](../../../help/setting-up-2fa-mfa.md "mention"). For simplicity & security, the desktop client uses the same MFA methods as the Defguard server. - -An error message will be shown if users attempt to select an MFA method that has not been enabled for their accounts: - -

Attempting to use an MFA method that has not been enabled on the user's account.

- -### Successful authentication - -If authentication succeeds, the VPN two-factor authentication modal will be closed and connection to the selected VPN will be attempted. Users will be asked to authenticate on every connection to a VPN with MFA enabled. - -## External MFA - -In order to enable the External MFA authentication: - -1. Your instance **must have** [external OIDC/SSO configured](../../external-openid-providers/). -2. Select the VPN Location from the dropdown list on the Network Overview, and pressing the **Edit Location** button in the top right corner of the page. -3. Select the External MFA in the menu. - -
- -#### Client disconnect threshold - -When MFA is enabled on a location, Defguard periodically (currently every **1 minute**) checks statistics if a client is connected and if the period of inactivity (defined in this option) is met, a client is disconnected. - -Thus, the gateway needs to be configured to send statistics in that period. - -{% hint style="info" %} -We recommend to set: - -* Gateway to send statistics every 30sec -* Peer disconnect threshold we recommend it to be min. 300 (5 min) -{% endhint %} - -### Testing MFA on Defguard client - -When a location has External MFA enabled, after clicking Connect in the Desktop client ([here you can find information about Mobile Client External MFA](../../../help/mobile-client/instance-connect.md#external-mfa)), there will be information displayed about authentication requirement: - -
- -In order to authenticate the user will be prompted to click on Authenticate with your configured OIDC (like Authenticate with Google) - which will open the browser and start the authentication session with your OIDC/SSO provider by the [Defguard Enrollment ](../../../help/enrollment/)service (which is the only public component). - -After successful authentication, the user will be informed by the enrollment service like so: - -
- -And the VPN should be connected. diff --git a/compliance/defguard-compliance.md b/compliance/defguard-compliance.md new file mode 100644 index 0000000..b09c39a --- /dev/null +++ b/compliance/defguard-compliance.md @@ -0,0 +1,9 @@ +# Defguard Compliance + +## Product Data Sheet + +{% file src="../.gitbook/assets/defguard_datasheet 2.0.pdf" %} + +## ISO 27001 + +
diff --git a/deployment-strategies/amis-and-aws-cloudformation.md b/deployment-strategies/amis-and-aws-cloudformation.md deleted file mode 100644 index 5031909..0000000 --- a/deployment-strategies/amis-and-aws-cloudformation.md +++ /dev/null @@ -1,396 +0,0 @@ -# AMIs and AWS CloudFormation - -{% hint style="warning" %} -This feature is still under development. The documentation may be incomplete or refer to resources that are not yet available. -{% endhint %} - -## AMIs (Amazon Machine Images) - -We provide an AMI for each Defguard component (Core, Gateway and Proxy) which can be used to launch instances in AWS. The AMIs are available in the following regions: - -* `us-east-1` (N. Virginia) -* `eu-west-1` (Ireland) -* `ap-northeast-1` (Tokyo) - -We recommend using the AMIs either with a CloudFormation template or with our Terraform module, as they will automatically configure the instances with the necessary settings. - -## CloudFormation Templates - -You can import the CloudFormation template from the AWS Marketplace or from our GitHub [deployment repository](https://github.com/DefGuard/deployment). - -The template consists of the following components: - -* **Defguard Core** -* **Defguard Gateway** - The template has only one Gateway instance, but Defguard supports running multiple Gateways if you need more VPN locations. -* **Defguard Proxy** -* **PostgreSQL Database** - -We recommend reading the [Architecture documentation](https://docs.defguard.net/in-depth/architecture) to understand how these components interact. - -The template has the following configurable parameters: - -### Core Instance - -* `CoreCookieInsecure` (optional): If set to `true`, Defguard Core will use insecure cookies. This is not recommended for production environments. Set it to `true` if you are using HTTP instead of HTTPS. -* `CoreGrpcPort` (optional): The gRPC port, default is `50051`. This is used for communication between Defguard components. -* `CoreHttpPort` (optional): The HTTP port on which Defguard Core should listen, default is `8000`. This is where the Defguard web UI will be accessible. -* `CoreInstanceType` (optional): The instance type (e.g., `t3.medium`, `m5.large`), default is `t3.micro`. -* `CoreLogLevel` (optional): The log level of Defguard Core, default is `info`. -* `CoreUrl` (required): The URL where Defguard Core will be accessible (e.g., `https://defguard.example.com`). This should be the URL that users will use to access the Defguard web interface. -* `CoreDefaultAdminPassword` (optional): The default password for the `admin` user, default is `pass123`. This should be changed to a more secure password in production environments. - -### Database - -* `DbInstanceClass` (optional): The instance class for the PostgreSQL database, default is `db.t3.micro`. -* `DbName` (optional): The name of the PostgreSQL database, default is `defguard`. -* `DbPassword` (optional): The password for the PostgreSQL database, default is `defguard`. This should be changed to a more secure password in production environments. -* `DbPort` (optional): The port on which the PostgreSQL database will listen, default is `5432`. -* `DbStorage` (optional): The storage size for the PostgreSQL database, default is `20`. This is the size in GB. -* `DbUsername` (optional): The username for the PostgreSQL database, default is `defguard`. - -### Gateway Instance - -* `GatewayInstanceType` (optional): The instance type for the Gateway, default is `t3.micro`. -* `GatewayLogLevel` (optional): The log level for the Gateway, default is `info`. -* `GatewaySecret` (required): The secret used to authenticate the Gateway with Defguard Core. This should be a strong, random string, 64 characters long. - -### Proxy Instance - -* `ProxyGrpcPort` (optional): The gRPC port for the Proxy, default is `50051`. -* `ProxyHttpPort` (optional): The HTTP port for the Proxy, default is `8000`. This is where the Defguard Proxy web UI will be accessible. The proxy UI is used for user enrollment. -* `ProxyInstanceType` (optional): The instance type for the Proxy, default is `t3.micro`. -* `ProxyLogLevel` (optional): The log level for the Proxy, default is `info`. -* `ProxyUrl` (required): The URL where the Defguard Proxy will be accessible (e.g., `https://proxy.defguard.example.com`). This should be the URL that users will use to access the Defguard Proxy web UI. - -### Network configuration - -* `VpcCidr` (optional): The CIDR block for the VPC in which Defguard will be deployed, default is `10.0.0.0/16`. -* `VpcName` (optional): The name of the VPC, default is `defguard-vpc`. - -### VPN Network (Location) configuration - -* `VpnNetworkAddress` (optional): The CIDR address for the VPN network, default is `10.10.10.1/24`. The VPN clients will receive IP addresses from this range. The gateway will have the first address in the range. -* `VpnNetworkName` (optional): The name of the VPN network (location). This is displayed both to the clients and in the Defguard web UI, default is `vpn1`. -* `VpnNetworkNat` (optional): If set to `true`, the VPN will have masquerading enabled, allowing clients to access other networks through the VPN (e.g., the internet). Default is `true`. -* `VpnNetworkPort` (optional): The UDP port on which the VPN will listen for incoming VPN connections, default is `51820`. - -### Customizing the deployment - -By default, the CloudFormation template will deploy Defguard with the settings according to the recommended architecture, that is: - -| Component | Port | Access allowed from | -| --------- | ------------ | ------------------- | -| Core | 8000 (HTTP) | Gateways | -| Core | 50055 (gRPC) | Gateways | -| Proxy | 50051 (gRPC) | Core | -| Proxy | 8000 (HTTP) | Anywhere | -| Gateway | 51820 (UDP) | Anywhere | - -You can customize the deployment by modifying the template or doing changes in the AWS Infrastructure Composer. - -To modify an existing stack deployed from the template, you can use the AWS Console, navigate to the CloudFormation service, select your stack, click on "Update stack" and then choose "Create a change set". - -![alt text](../.gitbook/assets/image-5.png) - -Next, select how you want to update the stack. If you want to modify the parameters, select "Use existing template". - -![alt text](../.gitbook/assets/image-8.png) - -If you want to modify the template itself, the easiest way is to edit it in the Infrastructure Composer: select "Edit in Infrastructure Composer" and click the "Edit in Infrastructure Composer" button. - -![alt text](../.gitbook/assets/image-9.png) - -#### Granting SSH access to the instances - -By default, the instances won't allow traffic on port 22. You can temporarily allow SSH access by modifying the security group of the instances. To do this, edit the template, and change the given component's security group to allow traffic on port 22 (ideally from your IP address). - -For example, you can add the following rule to the security group of the Core instance: - -```yaml - SecurityGroupIngress: - - IpProtocol: tcp - FromPort: !Ref CoreHttpPort - ToPort: !Ref CoreHttpPort - SourceSecurityGroupId: !Ref GatewaySecurityGroup - Description: HTTP access from gateways - - IpProtocol: tcp - FromPort: !Ref CoreGrpcPort - ToPort: !Ref CoreGrpcPort - SourceSecurityGroupId: !Ref GatewaySecurityGroup - Description: gRPC communication with gateways - - IpProtocol: tcp - FromPort: 22 - ToPort: 22 - CidrIp: /32 - Description: SSH access from your IP address -``` - -### Removing EIP - -By default, every component has an Elastic IP (EIP) assigned to it. This makes it easier to access them while setting everything up, but you might want to remove the EIP if you don't need it, especially if you plan to use a Reverse Proxy in front of the Defguard Core and Proxy. - -To remove the EIP, you can edit the template and remove the `ElasticIp`, `EipAssociation` resources and `DefguardPublicAddress` outputs from the template, where `` is one of `Core`, `Gateway` or `Proxy`. We do not recommend removing the EIP from the Gateway, as it should be accessible from the internet for VPN clients to connect to it. - -### Adding a Reverse Proxy/Load Balancer - -If you want to add a Reverse Proxy or Load Balancer in front of the Defguard Core and Proxy, you can do so by modifying the template. You can achieve this by adding two Application Load Balancers (ALBs) in front of the Core and Proxy components. One ALB (internal) will be used for the Core, and one (public) for the Proxy. - -Adding a Load Balancer will require making a second public subnet: - -```yaml - PublicSubnet2: - Type: AWS::EC2::Subnet - Properties: - VpcId: !Ref VPC - CidrBlock: 10.0.4.0/24 - AvailabilityZone: !Select - - 1 - - !GetAZs "" - MapPublicIpOnLaunch: true - Tags: - - Key: Name - Value: !Sub ${VpcName}-public-subnet-2 -``` - -And adding a route table association: - -```yaml - PublicSubnet2RouteTableAssociation: - Type: AWS::EC2::SubnetRouteTableAssociation - Properties: - SubnetId: !Ref PublicSubnet2 - RouteTableId: !Ref PublicRouteTable -``` - -Then, you can add the ALBs along with listeners and target groups: - -```yaml - ApplicationLoadBalancer: - Type: AWS::ElasticLoadBalancingV2::LoadBalancer - Properties: - Name: defguard-public-alb - Scheme: internet-facing - Type: application - IpAddressType: ipv4 - Subnets: - - !Ref PublicSubnet - - !Ref PublicSubnet2 - SecurityGroups: - - !Ref LoadBalancerSecurityGroup - Tags: - - Key: Name - Value: defguard-public-alb - InternalApplicationLoadBalancer: - Type: AWS::ElasticLoadBalancingV2::LoadBalancer - Properties: - Name: defguard-internal-alb - Scheme: internal - Type: application - IpAddressType: ipv4 - Subnets: - - !Ref PrivateSubnet1 - - !Ref PrivateSubnet2 - SecurityGroups: - - !Ref InternalLoadBalancerSecurityGroup - Tags: - - Key: Name - Value: defguard-internal-alb - ALBListener: - Type: AWS::ElasticLoadBalancingV2::Listener - Properties: - DefaultActions: - - Type: forward - TargetGroupArn: !Ref ProxyTargetGroup - LoadBalancerArn: !Ref ApplicationLoadBalancer - Port: 80 - Protocol: HTTP - InternalALBListener: - Type: AWS::ElasticLoadBalancingV2::Listener - Properties: - DefaultActions: - - Type: forward - TargetGroupArn: !Ref CoreTargetGroup - LoadBalancerArn: !Ref InternalApplicationLoadBalancer - Port: 80 - Protocol: HTTP - CoreListenerRule: - Type: AWS::ElasticLoadBalancingV2::ListenerRule - Properties: - Actions: - - Type: forward - TargetGroupArn: !Ref CoreTargetGroup - Conditions: - - Field: host-header - Values: - - !Select - - 2 - - !Split - - / - - !Ref CoreUrl - ListenerArn: !Ref InternalALBListener - Priority: 100 - ProxyListenerRule: - Type: AWS::ElasticLoadBalancingV2::ListenerRule - Properties: - Actions: - - Type: forward - TargetGroupArn: !Ref ProxyTargetGroup - Conditions: - - Field: host-header - Values: - - !Select - - 2 - - !Split - - / - - !Ref ProxyUrl - ListenerArn: !Ref ALBListener - Priority: 100 - CoreTargetGroup: - Type: AWS::ElasticLoadBalancingV2::TargetGroup - Properties: - Name: defguard-core-tg - Port: !Ref CoreHttpPort - Protocol: HTTP - VpcId: !Ref VPC - TargetType: instance - HealthCheckEnabled: true - HealthCheckPath: /api/v1/health - HealthCheckProtocol: HTTP - HealthCheckIntervalSeconds: 30 - HealthCheckTimeoutSeconds: 5 - HealthyThresholdCount: 2 - UnhealthyThresholdCount: 3 - Targets: - - Id: !Ref CoreInstance - Port: !Ref CoreHttpPort - Tags: - - Key: Name - Value: defguard-core-tg - ProxyTargetGroup: - Type: AWS::ElasticLoadBalancingV2::TargetGroup - Properties: - Name: defguard-proxy-tg - Port: !Ref ProxyHttpPort - Protocol: HTTP - VpcId: !Ref VPC - TargetType: instance - HealthCheckEnabled: true - HealthCheckPath: /health - HealthCheckProtocol: HTTP - HealthCheckIntervalSeconds: 30 - HealthCheckTimeoutSeconds: 5 - HealthyThresholdCount: 2 - UnhealthyThresholdCount: 3 - Targets: - - Id: !Ref ProxyInstance - Port: !Ref ProxyHttpPort - Tags: - - Key: Name - Value: defguard-proxy-tg -``` - -Then, modify the Core and Proxy security groups to allow traffic from the ALBs: - -```yaml - # Add this to Core security group - - IpProtocol: tcp - FromPort: !Ref CoreHttpPort - ToPort: !Ref CoreHttpPort - SourceSecurityGroupId: !Ref InternalLoadBalancerSecurityGroup - Description: HTTP access from internal load balancer - - # Add this to Proxy security group - - IpProtocol: tcp - FromPort: !Ref ProxyHttpPort - ToPort: !Ref ProxyHttpPort - SourceSecurityGroupId: !Ref LoadBalancerSecurityGroup - Description: HTTP access from load balancer -``` - -You should also remove the following rules to prevent direct access to the Core and Proxy components: - -```yaml - # Remove these rules from Core security group - - IpProtocol: tcp - FromPort: !Ref CoreHttpPort - ToPort: !Ref CoreHttpPort - SourceSecurityGroupId: !Ref GatewaySecurityGroup - Description: HTTP access from gateways - - # Remove these rules from Proxy security group - - IpProtocol: tcp - FromPort: !Ref ProxyHttpPort - ToPort: !Ref ProxyHttpPort - CidrIp: 0.0.0.0/0 - Description: HTTP access to proxy -``` - -Finally, configure the security groups of your ALBs: - -```yaml - LoadBalancerSecurityGroup: - Type: AWS::EC2::SecurityGroup - Properties: - GroupName: defguard-alb-sg - GroupDescription: Access to the Application Load Balancer - VpcId: !Ref VPC - SecurityGroupIngress: - - IpProtocol: tcp - FromPort: 80 - ToPort: 80 - CidrIp: 0.0.0.0/0 - Description: HTTP access from internet - - IpProtocol: tcp - FromPort: 443 - ToPort: 443 - CidrIp: 0.0.0.0/0 - Description: HTTPS access from internet - SecurityGroupEgress: - - IpProtocol: "-1" - CidrIp: 0.0.0.0/0 - Tags: - - Key: Name - Value: defguard-alb-sg - InternalLoadBalancerSecurityGroup: - Type: AWS::EC2::SecurityGroup - Properties: - GroupName: defguard-internal-alb-sg - GroupDescription: Access to the Internal Application Load Balancer - VpcId: !Ref VPC - SecurityGroupIngress: - - IpProtocol: tcp - FromPort: 80 - ToPort: 80 - CidrIp: !Ref VpcCidr - Description: HTTP access from internal VPC network - - IpProtocol: tcp - FromPort: 443 - ToPort: 443 - CidrIp: !Ref VpcCidr - Description: HTTPS access from internal VPC network - SecurityGroupEgress: - - IpProtocol: "-1" - CidrIp: 0.0.0.0/0 - Tags: - - Key: Name - Value: defguard-internal-alb-sg -``` - -To easily inspect the ALB DNS names, you can add the following outputs to your template: - -```yaml - LoadBalancerDNS: - Description: The DNS name of the Public Application Load Balancer - Value: !GetAtt ApplicationLoadBalancer.DNSName - Export: - Name: !Sub ${AWS::StackName}-alb-dns - InternalLoadBalancerDNS: - Description: The DNS name of the Internal Application Load Balancer - Value: !GetAtt InternalApplicationLoadBalancer.DNSName - Export: - Name: !Sub ${AWS::StackName}-internal-alb-dns -``` - -This setup will allow you to access the Defguard Core and Proxy through the Load Balancers, while keeping the components not directly accessible. Both ALBs act more as a reverse proxy, as they match requests based on the `host-header` and no balancing is performed. By making the Core load balancer internal, you can ensure that only the Proxy is accessible from the internet, while the Core access is restricted to the internal VPC network. - -To allow connected VPN clients access the Core web UI, you can enable the `VpnNetworkNat` option in the CloudFormation template, so the traffic going through the VPN will be NATed and routed to the Core. You will also need to add an allowed IP of your VPC network (or one of its subnets) in your Location configuration in Defguard Core to let the clients know to route the traffic destined to the VPC through the VPN. diff --git a/deployment-strategies/amis-and-aws-cloudformation/README.md b/deployment-strategies/amis-and-aws-cloudformation/README.md new file mode 100644 index 0000000..ba458a0 --- /dev/null +++ b/deployment-strategies/amis-and-aws-cloudformation/README.md @@ -0,0 +1,265 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/deployment-strategies/amis-and-aws-cloudformation +--- + +# Amazon Machine Image (AMI) + +This guide explains how to deploy Defguard on AWS using official Amazon Machine Images (AMIs) and a preconfigured CloudFormation template. It walks you through launching all required components - including Core, Gateway, Proxy, and the PostgreSQL database - in a production-ready architecture with minimal manual configuration. + +You will learn how to subscribe to the AMIs, deploy the stack, attach SSL certificates, configure domains, and gain initial VPN access. The goal is to provide a repeatable, secure deployment method that allows you to get Defguard running quickly while still enabling advanced customization for larger or more complex environments. + +## AMI architecture + +We recommend using the AMIs with our CloudFormation template as it will automatically configure all components. + +You can import the CloudFormation template from the AWS Marketplace or from our GitHub [deployment repository](https://github.com/DefGuard/deployment). + +The template consists of the following main components: + +* **Defguard Core** +* **Defguard Gateway** - The template has only one Gateway instance, but Defguard supports running multiple Gateways if you need more VPN locations. +* **Defguard Proxy** +* **PostgreSQL Database** + +We recommend reading the [Architecture documentation](https://docs.defguard.net/in-depth/architecture) to understand how these components interact. + +

Diagram showing how the components are deployed using the template

+ +## Installation guide + +{% hint style="info" %} +In order to use the CloudFormation template you need to subscribe to the Defguard AMI product. The most straightforward way to obtain the template is to select it during the product delivery after subscribing to the product on the marketplace. +{% endhint %} + +After the CloudFormation template is uploaded either manually or via the marketplace, you will be prompted to fill the details of your deployment. This guide will go over the most important settings that need to be filled for a functional deployment. + +#### Prerequisites + +* Two domains: one for accessing Defguard Core (the main dashboard) and one for accessing Defguard Proxy (for external enrollment and device configuration) +* AWS issued SSL certificates for the two domains. See [this page](configuring-https-using-aws-certificate-manager.md) for more information. +* An SSH key added to AWS. This will allow you to access the EC2 instances later on. + +#### Obtaining the template + +1. Subscribe to the product on AWS Marketplace.
+ +
+2. After subscription succeeds, click the launch your software button:
+ +
+ + +3. Select the CloudFormation option and click "Launch with CloudFormation"
+ +
+ + +4. On the "Create stack" screen click next and proceed to the next section ( [#template-parameters](./#template-parameters "mention")). + +#### Template parameters + +After you are presented with the template configuration screen, make sure to fill out the following parameters: + +
+ +Choose a name for the stack. This can be chosen freely but must be unique across your deployed stacks. + +
+ +The `CoreDefaultAdminPassword` will be the password used for logging to the Defguard Core dashboard for the `admin` user. + +
+ +The `CoreUrl` is the URL under which your Defguard Core dashboard will be accessible. This should be filled according to the domain you chose before ([#prerequisites](./#prerequisites "mention")). For example, if your domain for Defguard Core is `defguard.example.com`, insert `https://defguard.example.com` here. + +
+ +This is the database password. Select a relatively strong password here as a very weak password may be rejected by the database system and may result in a deployment failure. + +
+ +This is the URL under which the Defguard Proxy will be accessible to users. Fill the field just like the `CoreUrl` field, but this time use the domain you chose for the Defguard Proxy ([#prerequisites](./#prerequisites "mention")). + +
+ +Insert here the ARN of the certificate you prepared earlier ([#prerequisites](./#prerequisites "mention")). This will auto configure HTTPS for both Defguard Proxy and Core. + +
+ +Provide here the name of your SSH key. This is required for SSH access to the EC2 instances. Note that manual configuration of firewall access on the SSH port (22) is required after the deployment. + +
+ +The VPN parameters allow for configuring the details of your VPN network (location). You may want to change the name of the location to better suit your deployment. By default, NAT is enabled on the VPN Gateway instance so connecting clients can automatically reach servers inside your private network (this is required to reach Defguard Core dashboard, for example). If you disable NAT, you will need to configure routing rules yourself. + +Make sure to also check the rest of the pre-filled parameters, as you may want to change some of them. The full list is available in the [#template-parameters-1](./#template-parameters-1 "mention") section. + +#### Stack options + +Next, select the behavior on deployment failure: + +
+ +We recommend cleaning up everything after failed deployment, to keep a clean state when retrying. + +
+ +The template contains several IAM roles that are used to grant access required for interacting with the AWS SecretManager to pass secrets securely between components during the deployment. + +The template also consists of a lambda function along with an IAM role which is responsible for creating a token that can be used by an admin to access the VPN for the first time. + +This needs to be accepted to proceed further. + +Now wait for the deployment to finish. If all went OK, you should see _CREATE\_COMPLETE_ status. + +#### Outputs + +After the deployment completes, you will receive a set of outputs in the "outputs" tab. This values are required for further configuration. + +
+ +#### Setting up your domains + +The template will provision two domains: `InternalProxyALBDNSName` and `PublicProxyALBDNSName` . The public domain points to the Defguard Proxy instance's reverse proxy, and the internal one to Core's. + +
+ +
+ +You can use those domains to setup CNAME records in your DNS provider configuration, so the domains you defined in the `ProxyUrl` and `CoreUrl` point to the correct load balancers (reverse proxies) and in result, to the correct components: + +
Your domainCNAME responseTarget component
<YOUR_DEFGUARD_CORE_DOMAIN><InternalProxyALBDNSName>Defguard Core (internal)
<YOUR_DEFGUARD_PROXY_DOMAIN><PublicProxyALBDNSName>Defguard Proxy (public)
+ +#### Configuring you first device using the desktop client + +The stack is now fully set up and you can try to access it. The dashboard is not publicly available, so you'll need to configure access to the VPN first. + +Use the token displayed in the `AdminFirstDeviceToken` CloudFormation output to add your first device. + +
+ +Check this [guide](https://docs.defguard.net/using-defguard-for-end-users/desktop-client/instance-configuration#adding-instance) on adding a new instance in the Desktop client, to learn more about the process. As the instance URL, use the URL you defined in your Defguard Proxy instance configuration section of the CloudFormation template (`ProxyUrl`). + +#### Accessing the dashboard + +After you use the `AdminFirstDeviceToken` as described in the previous section you will gain access to the VPN network and (by default) the VPC network. To access the Defguard Core dashboard, navigate to the URL you defined in the `CoreUrl` parameter. + +To login, use the default `admin` username and the password defined in `CoreDefaultAdminPassword`. + +## Customisation + +### Template parameters + +#### General + +* `SshKeyName` (optional): EC2 Key Pair name for SSH access to instances. If not provided, SSH access will not be available. Requires a manual setup of SSH security group rules afterwards. +* `StackPrefix` (optional): The prefix that all the deployed components will receive, for example the Defguard core EC2 instance will be named <`StackPrefix>-core-instance`. +* `SSLCertificateArn` (optional): The ARN of the AWS issued certificate to use for setting up HTTPS for Core and Proxy. This certificate must be valid for the domains specified in `CoreUrl` and `ProxyUrl`. If left empty, HTTPS won't be configured automatically. + +#### Core Instance + +* `CoreCookieInsecure` (optional): If set to `true`, Defguard Core will use insecure cookies. This is not recommended for production environments. Set it to `true` if you are using HTTP instead of HTTPS. +* `CoreGrpcPort` (optional): The gRPC port, default is `50051`. This is used for communication between Defguard components. +* `CoreHttpPort` (optional): The HTTP port on which Defguard Core should listen, default is `8000`. This is where the Defguard web UI will be accessible. +* `CoreInstanceType` (optional): The instance type (e.g., `t3.medium`, `m5.large`), default is `t3.micro`. +* `CoreLogLevel` (optional): The log level of Defguard Core, default is `info`. You can also set it to `error`, `debug` or `trace`. +* `CoreUrl` (required): The URL where Defguard Core will be accessible (e.g., `https://defguard.example.com`). This should be the URL that users will use to access the Defguard web interface. +* `CoreDefaultAdminPassword`: The password for the default `admin` user. Used to login to the web dashhboard. + +#### Database + +* `DbInstanceClass` (optional): The instance class for the PostgreSQL database, default is `db.t3.micro`. +* `DbName` (optional): The name of the PostgreSQL database, default is `defguard`. +* `DbPassword`: The password for the PostgreSQL database. +* `DbPort` (optional): The port on which the PostgreSQL database will listen, default is `5432`. +* `DbStorage` (optional): The storage size for the PostgreSQL database, default is `20`. This is the size in GB. +* `DbUsername` (optional): The username for the PostgreSQL database, default is `defguard`. + +#### Gateway Instance + +* `GatewayInstanceType` (optional): The instance type for the Gateway, default is `t3.micro`. +* `GatewayLogLevel` (optional): The log level for the Gateway, default is `info`. You can also set it to `error`, `debug` or `trace`. +* `GatewaySecret` (required): The secret used to authenticate the Gateway with Defguard Core. This should be a strong, random string, 64 characters long. + +#### Proxy Instance + +* `ProxyGrpcPort` (optional): The gRPC port for the Proxy, default is `50051`. +* `ProxyHttpPort` (optional): The HTTP port for the Proxy, default is `8000`. This is where the Defguard Proxy web UI will be accessible. The proxy UI is used for user enrollment. +* `ProxyInstanceType` (optional): The instance type for the Proxy, default is `t3.micro`. +* `ProxyLogLevel` (optional): The log level for the Proxy, default is `info`. You can also set it to `error`, `debug` or `trace`. +* `ProxyUrl` (required): The URL where the Defguard Proxy will be accessible (e.g., `https://proxy.defguard.example.com`). This should be the URL that users will use to access the Defguard Proxy web UI. + +#### Network configuration + +* `VpcCidr` (optional): The CIDR block for the VPC in which Defguard will be deployed, default is `10.0.0.0/16`. +* `VpcName` (optional): The name of the VPC, default is `defguard-vpc`. +* `PublicSubnet1Cidr` (optional): CIDR block for one of the public subnets. This can be chosen arbitrarily as long as it's within the VPC CIDR range. +* `PublicSubnet2Cidr` (optional): CIDR block for one of the public subnets. This can be chosen arbitrarily as long as it's within the VPC CIDR range. +* `PrivateSubnet1Cidr` (optional): CIDR block for one of the private subnets. This can be chosen arbitrarily as long as it's within the VPC CIDR range. +* `PrivateSubnet2Cidr` (optional): CIDR block for one of the private subnets. This can be chosen arbitrarily as long as it's within the VPC CIDR range. + +#### VPN Network (Location) configuration + +* `VpnNetworkAddress` (optional): The CIDR address for the VPN network, default is `10.10.10.1/24`. The VPN clients will receive IP addresses from this range. The gateway will have the first address in the range. +* `VpnNetworkName` (optional): The name of the VPN network (location). This is displayed both to the clients and in the Defguard web UI, default is `vpn1`. +* `VpnNetworkNat` (optional): If set to `true`, the VPN will have masquerading enabled, allowing clients to access other networks through the VPN (e.g., the internet). Default is `true`. +* `VpnNetworkPort` (optional): The UDP port on which the VPN will listen for incoming VPN connections, default is `51820`. + +### Customizing the deployment + +By default, the CloudFormation template will deploy Defguard with the settings according to the recommended architecture, that is: + +| Component | Port | Access allowed from | +| --------- | ------------ | ------------------- | +| Core | 8000 (HTTP) | Gateways | +| Core | 50055 (gRPC) | Gateways | +| Proxy | 50051 (gRPC) | Core | +| Proxy | 8000 (HTTP) | Anywhere | +| Gateway | 51820 (UDP) | Anywhere | + +You can customize the deployment by modifying the template or doing changes in the AWS Infrastructure Composer. + +To modify an existing stack deployed from the template, you can use the AWS Console, navigate to the CloudFormation service, select your stack, click on "Update stack" and then choose "Create a change set". + +![alt text](../../.gitbook/assets/image-5.png) + +Next, select how you want to update the stack. If you want to modify the parameters, select "Use existing template". + +![alt text](../../.gitbook/assets/image-8.png) + +If you want to modify the template itself, the easiest way is to edit it in the Infrastructure Composer: select "Edit in Infrastructure Composer" and click the "Edit in Infrastructure Composer" button. + +![alt text](../../.gitbook/assets/image-9.png) + +### Accessing the EC2 instances + +After deploying the CloudFormation template, the newly created EC2 instances should be visible in the AWS console in your target region: + +
+ +To access the instances, use the key provided in the `SshKeyName` parameter. Note that you will need to allow SSH access to the EC2 instances using their respective AWS security groups. The default user is `admin`. + +## Upgrading components + +{% hint style="warning" %} +It's important to backup your database before performing a backup. Make sure to also check the [upgrading.md](../upgrading.md "mention") before upgrading to a newer version. +{% endhint %} + +All Defguard components are installed from the Defguard APT repository. The upgrade process is as follows: + +1. SSH into the given component's EC2 instance +2. Execute the following commands: + + ``` + sudo apt update + sudo apt install --only-upgrade + ``` + +The corresponding package names can be found in the [Defguard APT repository documentation](../standalone-package-based-installation/defguard-apt-repository.md). + +## Troubleshooting and common issues + +All Defguard components are deployed as systemd services. Their configuration files can be found on the respective host machine under `/etc/defguard`. diff --git a/deployment-strategies/amis-and-aws-cloudformation/configuring-https-using-aws-certificate-manager.md b/deployment-strategies/amis-and-aws-cloudformation/configuring-https-using-aws-certificate-manager.md new file mode 100644 index 0000000..b659865 --- /dev/null +++ b/deployment-strategies/amis-and-aws-cloudformation/configuring-https-using-aws-certificate-manager.md @@ -0,0 +1,32 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/deployment-strategies/amis-and-aws-cloudformation/configuring-https-using-aws-certificate-manager +--- + +# Configuring HTTPS using AWS Certificate Manager + +This guide explains how to secure your Defguard deployment with HTTPS by using a public TLS certificate issued by AWS Certificate Manager (ACM). You will request a certificate for the domains used by Defguard Core and Defguard Proxy, validate domain ownership via DNS, and attach the certificate to your CloudFormation stack using its ARN. + +Once completed, AWS will automatically manage certificate provisioning and renewal, ensuring your Defguard instance is encrypted and trusted without manual certificate handling. + +Go to AWS console and open the Certificate Manager service page. + +Request a new certificate (if you don't have one already). + +
+ +A public certificate is enough. + +
+ +Specify the domains you will want to use for your Defguard instance (for accessing Defguard Proxy and Defguard Core). Those domains should be the same as those you'll use in `ProxyUrl` and `CoreUrl`. + +
+ +Next, you will need to validate your domain ownership by adding appropriate CNAME records in your DNS provider. Use the _CNAME name_ and _CNAME value_ values provided in the AWS console and set them in you domain's DNS. + +After you complete this step, your certificate can be used. Copy the ARN of your certificate and paste it into the `SSLCertificateArn` parameter in the CloudFormation template. + +
diff --git a/configuration.md b/deployment-strategies/configuration.md similarity index 81% rename from configuration.md rename to deployment-strategies/configuration.md index 6a8202c..fe456ce 100644 --- a/configuration.md +++ b/deployment-strategies/configuration.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/deployment-strategies/configuration +--- + # Configuration Here you can find a list of all configurable things through environmental variables, options or configuration files for all Defguard components (each top-level section for a specific component): @@ -8,7 +15,7 @@ Here you can find a list of all configurable things through environmental variab * [YubiBridge config](configuration.md#yubibridge-configuration) {% hint style="info" %} -If you are using [one-line installation](getting-started/one-line-install.md), everything is generated and configured automatically. +If you are using [one-line installation](../getting-started/one-line-install.md), everything is generated and configured automatically. {% endhint %} ## Core @@ -49,8 +56,8 @@ You can generate random strings for secrets with e.g.: * `DEFGUARD_AUTH_COOKIE_TIMEOUT`: Cookie lifetime period, default: `7d` ([Humantime documentation](https://docs.rs/humantime/latest/humantime/struct.Duration.html)) * `DEFGUARD_MFA_CODE_TIMEOUT`: Email code lifetime period, default: `60s` ([Humantime documentation](https://docs.rs/humantime/latest/humantime/struct.Duration.html)) * `DEFGUARD_SESSION_TIMEOUT`: Session lifetime period, default: `7d` ([Humantime documentation](https://docs.rs/humantime/latest/humantime/struct.Duration.html)) -* `HTTP_BIND_ADDRESS`: The IP address that the HTTP should bind to (available since version 1.5.0) -* `GRPC_BIND_ADDRESS`: The IP address that the gRPC should bind to (available since version 1.5.0) +* `DEFGUARD_HTTP_BIND_ADDRESS`: The IP address that the HTTP should bind to +* `DEFGUARD_GRPC_BIND_ADDRESS`: The IP address that the gRPC should bind to ### Database configuration @@ -71,7 +78,7 @@ This is of course not recommended in production but can be useful when testing w {% endhint %} * `DEFGUARD_COOKIE_INSECURE`: set cookies without the `Secure` flag; use only in dev environments when serving Defguard without HTTPS -* `DEFGUARD_COOKIE_DOMAIN` (optional): set the domain for auth cookies. By default, it's the domain from `DEFGUARD_URL`. Must be changed to base URL if you want to use [forward auth](admin-and-features/forward-auth.md). +* `DEFGUARD_COOKIE_DOMAIN` (optional): set the domain for auth cookies. By default, it's the domain from `DEFGUARD_URL`. Must be changed to base URL if you want to use [forward auth](../features/forward-auth.md). ### Stats cleanup configuration @@ -92,7 +99,7 @@ This is of course not recommended in production but can be useful when testing w ### gRPC server configuration -[More on that in this help page.](deployment-strategies/grpc-ssl-communication.md) +[More on that in this help page.](grpc-ssl-communication.md) * `DEFGUARD_GRPC_PORT`: the port on which the gRPC server should listen, default is `50055`. This port is used by Defguard Gateways to connect to your Core instance. * `DEFGUARD_GRPC_CERT` (optional): path to TLS certificate file @@ -102,20 +109,22 @@ This is of course not recommended in production but can be useful when testing w ### Proxy connection configuration * `DEFGUARD_PROXY_URL` (optional): proxy service gRPC endpoint URL -* `DEFGUARD_PROXY_GRPC_CA`(optional): path to TLS root certificate file, required if connecting to proxy gRPC service with a custom CA ([More on that in this help page.](deployment-strategies/grpc-ssl-communication.md)) +* `DEFGUARD_PROXY_GRPC_CA`(optional): path to TLS root certificate file, required if connecting to proxy gRPC service with a custom CA ([More on that in this help page.](grpc-ssl-communication.md)) ## Proxy service -Here are proxy ENV variables. gRPC configuration is described more [on this help page.](deployment-strategies/grpc-ssl-communication.md) +Here are proxy ENV variables. gRPC configuration is described more [on this help page.](grpc-ssl-communication.md) * `DEFGUARD_PROXY_HTTP_PORT`: port the proxy API server and Web UI will listen on, default `8080` * `DEFGUARD_PROXY_GRPC_PORT`: port the gRPCS server will listen on, default `50051` * `DEFGUARD_PROXY_GRPC_CERT` (optional): path to TLS certificate file -* `DEFGUARD_PROXY_GRPC_KEY`(optional): path to TLS key file. [More on that in this help page.](deployment-strategies/grpc-ssl-communication.md) +* `DEFGUARD_PROXY_GRPC_KEY`(optional): path to TLS key file. [More on that in this help page.](grpc-ssl-communication.md) * `DEFGUARD_PROXY_URL` - if you wish to use External OIDC enrollment/desktop client configuration, please set this value to the same as `DEFGUARD_ENROLLMENT_URL` in core. This is the address at which the proxy Web UI is available. * `DEFGUARD_PROXY_LOG_LEVEL` : [Logger](https://crates.io/crates/log) log level, default: `info`, supported: `debug`, `warn`, `error` -* `HTTP_BIND_ADDRESS`: The IP address that the HTTP should bind to (available since version 1.5.0) -* `GRPC_BIND_ADDRESS`: The IP address that the gRPC should bind to (available since version 1.5.0) +* `DEFGUARD_HTTP_BIND_ADDRESS`: The IP address that the HTTP should bind to +* `DEFGUARD_GRPC_BIND_ADDRESS`: The IP address that the gRPC should bind to +* `DEFGUARD_PROXY_RATELIMIT_PERSECOND` - The (average) number of requests per second made without being eventually rate limited +* `DEFGUARD_PROXY_RATELIMIT_BURST` - The number of requests allowed to be made in a short amount of time before being rate limited ## Gateway Configuration @@ -123,26 +132,29 @@ Here are proxy ENV variables. gRPC configuration is described more [on this help If you're using docker image you can pass this value as environmental variables or on binary you can pass them as arguments -* `DEFGUARD_GRPC_URL` , `-g ` - Defguard Core gRPC endpoint URL. This is used by the gateway to connect to your Defguard Core instance. If you configured the `DEFGUARD_GRPC_URL` variable on your Core instance before (as described in the [#grpc-server-configuration](configuration.md#grpc-server-configuration "mention") section), use the same value here. Otherwise, provide an URL that will allow the Gateway to reach your Core instance, e.g. `http://localhost:50055` if both Core and Gateway are running on the same host. +* `DEFGUARD_GRPC_URL` , `-g ` - Defguard Core gRPC endpoint URL. This is used by the gateway to connect to your Defguard Core instance. If you configured the `DEFGUARD_GRPC_URL` variable on your Core instance before (as described in the [#grpc-server-configuration](configuration.md#grpc-server-configuration "mention") section), use the same value here. Otherwise, provide an URL that will allow the Gateway to reach your Core instance, e.g. `http://localhost:50055` if both Core and Gateway are running on the same host. * `DEFGUARD_TOKEN` ,`-t ` - Token displayed in the Defguard Core web UI after completing the network wizard. It can be copied from the "Authentication Token" section on the Location Settings page. -
+
* `DEFGUARD_USERSPACE` , `-u` - Use userspace wireguard implementation, useful on systems without native wireguard support -* `DEFGUARD_GRPC_CA - path to ca file` more on this topic can be found [on this help page.](deployment-strategies/grpc-ssl-communication.md) +* `DEFGUARD_GRPC_CA - path to ca file` more on this topic can be found [on this help page.](grpc-ssl-communication.md) * `DEFGUARD_STATS_PERIOD` ,`-p ` - Defines how often (seconds) should interface statistics be sent to the Defguard server * `DEFGUARD_GATEWAY_NAME`, `--name ` - (optional) human-readable gateway name that will be displayed in Defguard webapp * `-s, --use-syslog` - enable logging to syslog * `RUST_LOG` : Logger log level, default: `info`, supported: `debug`, `warn`, `error` * `DEFGUARD_MASQUERADE` - controls whether the gateway automatically applies masquerade NAT firewall rule; defaults to `false` -* `DEFGUARD_DISABLE_FW_MGMT` - disables all firewall management by the gateway; this overrides `DEFGUARD_MASQUERADE` setting; defaults to `false` +* `DEFGUARD_DISABLE_FW_MGMT` - disables all firewall management by the gateway; this overrides `DEFGUARD_MASQUERADE` setting; defaults to `false` {% hint style="info" %} -`DEFGUARD_DISABLE_FW_MGMT` is meant as a workaround for running in incompatible environments, where our [default firewall integration](admin-and-features/access-control-list/firewall-internals.md) is not supported. +`DEFGUARD_DISABLE_FW_MGMT` is meant as a workaround for running in incompatible environments, where our [default firewall integration](../features/access-control-list/firewall-internals.md) is not supported. -As a consequence, enabling this option disables [ACL functionality](admin-and-features/access-control-list/) on a given gateway. +As a consequence, enabling this option disables [ACL functionality](../features/access-control-list/) on a given gateway. {% endhint %} -* `HTTP_BIND_ADDRESS`: The IP address that the HTTP should bind to (available since version 1.5.0) +* `DEFGUARD_IFNAME` - The network interface that will be created and used for the VPN traffic +* `DEFGUARD_FW_PRIORITY` - The NFT forward chain priority, which handles traffic filtering when ACLs are configured. Defaults to 0. Useful if the Defguard's forward chain conflicts with other chains. +* `HEALTH_PORT` - (optional) If a port number is provided an [HTTP healthcheck server](health-check.md#gateway) will be started +* `DEFGUARD_HTTP_BIND_ADDRESS` - (optional) the IP address that the HTTP healthcheck server should bind to #### Executing custom commands on VPN up/down @@ -239,3 +251,21 @@ syslog_socket = "/var/run/log" * `-p ` , `--provision `: Provision YubiKey with the following data * `-w ` , `--worker-token `: Secret worker token to secure gRPC communication, available on provisioners page * `-c ` , `--command `: Run command after provisioning and pass created keys as arguments + +### Troubleshooting the configuration + +Common configuration issues. + +#### Gateway + +`Error: Syslog(Initialization(Io(Os { code: 111, kind: ConnectionRefused, message: "Connection refused" })))` + +The selected syslog socket may be wrong. See the `syslog_socket` configuration option for the gateway: [#config-file](configuration.md#config-file "mention"). Set it to a correct syslog socket on your operating system. The default socket is valid for FreeBSD. + +#### Core + +`Cookie “defguard_session” has been rejected for invalid domain.` (browser console error) + +This issue most often takes the form of not being able to login without any obvious cause. The login button doesn't redirect and no relevant error message is displayed in the Defguard Core logs. In this case we recommend checking the browser logs (usually right click > inspect should open the developer tools along with the browser console). If you can see the above error, this means that your `DEFGUARD_URL` configuration option doesn't match the URL you use to access the dashboard at the moment. + +For example, if your login screen is at `http://my.domain.com:8000/auth/login` set `DEFGUARD_URL` to `` http://my.domain.com:8000` `` . diff --git a/deployment-strategies/deploying-to-production.md b/deployment-strategies/deploying-to-production.md new file mode 100644 index 0000000..718be88 --- /dev/null +++ b/deployment-strategies/deploying-to-production.md @@ -0,0 +1,63 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/deployment-strategies/deploying-to-production +--- + +# Deploying to Production + +{% stepper %} +{% step %} +**Gain knowledge** + +Before you start your deployment, take a moment to learn about Defguard. + +The following articles will help you make deployment decisions and understand which features you may want to configure afterward. Make sure to read them carefully. + +* [Defguard's features](../about/features-overview.md) +* [Defguard's architecture](../in-depth/architecture/) +{% endstep %} + +{% step %} +**Choose your deployment strategy** + +Decide which deployment approach best fits your infrastructure and security requirements. Choose from different [deployment strategies](setting-up-your-instance.md#choose-your-deployment-strategy) and their recommended use cases. +{% endstep %} + +{% step %} +**Prepare your environment** + +Make sure your infrastructure meets all [system and network requirements](hardware-os-network-and-firewall-recommendations.md). +{% endstep %} + +{% step %} +**Deploy using the chosen strategy** + +Deploy your instance using the chosen [strategy](setting-up-your-instance.md#choose-your-deployment-strategy). Make sure to follow the right [deployment sequence](setting-up-your-instance.md#initial-deployment-sequence). +{% endstep %} + +{% step %} +**Test if everything works as expected** + +Follow our [guide](production-deployment-verification-guide.md) to test if your deployment in secure and works as expected. +{% endstep %} + +{% step %} +**Configure features** + +Follow detailed descriptions of [Defguard's features](https://github.com/DefGuard/docs/blob/v1.6/deployment-strategies/broken-reference/README.md). As you follow along, you can adjust the configuration directly within your instance. + +For a detailed list of all configurable things through environmental variables, options or configuration files follow [this reference](configuration.md). +{% endstep %} + +{% step %} +**Your secure infrastructure is ready for use** + +Optional but recommended additional steps: + +* [Securing internal gRPC communication](grpc-ssl-communication.md) +* [Configuring backups](setting-up-your-instance.md#backup) +* [Setting up for high availability and failover](high-availability-and-failover/) +{% endstep %} +{% endstepper %} diff --git a/deployment-strategies/docker-compose.md b/deployment-strategies/docker-compose.md index de594d4..8e73f5a 100644 --- a/deployment-strategies/docker-compose.md +++ b/deployment-strategies/docker-compose.md @@ -1,14 +1,56 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/deployment-strategies/docker-compose +--- + # Docker Compose -Here are basic and simple docker-compose configuration files that will enable you to quickly deploy your own instance manually. We also assume in this example, that all services will be deployed on dedicated servers/VMs - separating them physically, thus each compose is for a separate service. +## Introduction + +This document provides a complete example of how to deploy Defguard using Docker Compose, including configuration for all components - Core, Proxy, and Gateway. It covers Docker image tags, environment variables, and reverse-proxy setup examples to help you quickly launch a fully functional Defguard environment. + +We recommend deploying each Defguard service on a dedicated server or virtual machine to ensure better isolation, performance, and security. In this setup, each Docker Compose file should be used for a single service, keeping the Core, Proxy, and Gateway components physically separated. + +{% hint style="info" %} +Please note that we also offer docker-compose deployment with [_one-line quick deployment_](../getting-started/one-line-install.md)_,_ but this method is recommended for PoC/quick deployment as **it launches everything on one server and all services in one docker compose**. +{% endhint %} + +## Docker images and tags + +We use `latest` (latest production images) tags in the examples below, but you can use others. + +All docker images for Core, Gateway, and Proxy have these additional tags: -{% hint style="success" %} -Please not that we also offer docker-compose deployment with [_one-line quick deployment_](../getting-started/one-line-install.md)_,_ but this method is recommended for PoC/quick deployment as **it launches everything on one server and all services in one docker compose**. +* `latest` - the latest stable production release. +* `vX.Y`, `vX.Y.Z`, `vX.Y-alpha1` - fixed tags for specific stable and alpha releases. +* `pre-release`- the latest pre-production release (equivalent to vX.Y-alpha1). +* `dev` - the latest development build from the dev branch (experimental). + +{% hint style="warning" %} +We recommend always using fixed, stable tags (`vX.Y`, `vX.Y.Z`) for your production deployment. {% endhint %} -We use "latest" (latest production images) tags in the examples below, but you can use others - [more info here](docker-images-and-tags.md). +## Example Docker Compose deployment repository + +We prepared a [git repository](https://github.com/DefGuard/deployment) with and example Docker Compose configuration. -## Core +To run your services using this example prepare your .env file by copying the template: + +```bash +cp .env.template .env +``` + +Finally, run the service with Docker Compose: + +```bash +docker compose up +``` + +Below you'll find a detailed breakdown of configuration for different components: Core, Proxy and Gateway. + +## Deploying Core, database and reverse proxy services Here is the docker-compose.yaml for the core and database. Configuration is split to the `.env` file (see below): @@ -29,10 +71,10 @@ services: - db volumes: # more info here: - # https://docs.defguard.net/admin-and-features/setting-up-your-instance/openid-rsa-key + # https://docs.defguard.net/deployment-strategies/openid-rsa-key - ./rsakey.pem:/keys/rsakey.pem # more info about custom CA here: - # https://docs.defguard.net/admin-and-features/setting-up-your-instance/grpc-ssl-communication#custom-ssl-ca-and-certificates + # https://docs.defguard.net/deployment-strategies/grpc-ssl-communication#custom-ssl-ca-and-certificates - ./ca.pem:/keys/ca.pem db: @@ -41,6 +83,9 @@ services: env_file: .env volumes: - db:/var/lib/postgresql/data + +volumes: + db: ``` #### NGINX reverse-proxy @@ -79,13 +124,13 @@ server { } ``` -### The configuration +#### The configuration Here is the `.env` file with all configuration variables: ``` # please generate each secret with: -# openssl rand -base64 55 | tr -d "=+/" | tr -d '\n' | cut -c1-63 +# openssl rand -base64 55 | tr -d "=+/" | tr -d '\n' | cut -c1-64 DEFGUARD_SECRET_KEY= DEFGUARD_AUTH_SECRET= DEFGUARD_GATEWAY_SECRET= @@ -103,12 +148,12 @@ DEFGUARD_WEBAUTHN_RP_ID=defguard.secure-internal.net DEFGUARD_LOG_LEVEL=info # more info about custom CA here: -# https://docs.defguard.net/admin-and-features/setting-up-your-instance/grpc-ssl-communication#custom-ssl-ca-and-certificates +# https://docs.defguard.net/deployment-strategies/grpc-ssl-communication#custom-ssl-ca-and-certificates DEFGUARD_PROXY_GRPC_CA=/keys/ca.pem # gRPC URL of proxy (see proxy config) DEFGUARD_PROXY_URL=https://proxy.host:50051 # more details about RSA key here: -# https://docs.defguard.net/admin-and-features/setting-up-your-instance/openid-rsa-key +# https://docs.defguard.net/deployment-strategies/openid-rsa-key DEFGUARD_OPENID_KEY=rsakey.pem # the URL of your proxy - will be displayed during enrollment, email @@ -120,7 +165,7 @@ DEFGUARD_DB_HOST=db DEFGUARD_DB_PORT=5432 DEFGUARD_DB_USER=defguard # please generate password: -# openssl rand -base64 55 | tr -d "=+/" | tr -d '\n' | cut -c1-63 +# openssl rand -base64 55 | tr -d "=+/" | tr -d '\n' | cut -c1-64 DEFGUARD_DB_PASSWORD= DEFGUARD_DB_NAME=defguard @@ -132,7 +177,7 @@ POSTGRES_USER=defguard POSTGRES_PASSWORD=!SAME_AS-GENERATED-DEFGUARD_DB_PASSWORD! ``` -## Proxy +## Deploying Proxy and reverse proxy service Here is the docker-compose.yaml for the public proxy (enrollment service as well as desktop client configuration service). @@ -188,7 +233,9 @@ server { ``` -## Gateway +## Deploying Gateway service + +You'll need a token to deploy the Gateway service. You'll have to set it as DEFGUARD\_TOKEN environment variable. Details on how to obtain the token [here](gateway.md). For gateway to control the WireGuard kernel as well as network, it's recommended to run in the _host_ network mode as well as there are needed some docker CAPs: @@ -207,9 +254,8 @@ services: - DEFGUARD_GATEWAY_NAME=willBeVisibleInDefguardAsGWName volumes: # more info about custom CA here: - # https://docs.defguard.net/admin-and-features/setting-up-your-instance/grpc-ssl-communication#custom-ssl-ca-and-certificates + # https://docs.defguard.net/deployment-strategies/grpc-ssl-communication#custom-ssl-ca-and-certificates - ./ca.pem:/ca.pem cap_add: - NET_ADMIN ``` - diff --git a/deployment-strategies/docker-images-and-tags.md b/deployment-strategies/docker-images-and-tags.md deleted file mode 100644 index ac2a114..0000000 --- a/deployment-strategies/docker-images-and-tags.md +++ /dev/null @@ -1,7 +0,0 @@ -# Docker images and tags - -All docker images for gateway, core, and proxy have these additional tags: - -* `latest` - this tag is for the latest production release - aka `vX.Y.Z` from the `main` branch -* `pre-release`- this tag is for the latest pre-production release - aka `vX.Y.Z-alpha/beta/rcX` from the `main` branch -* `dev` - this tag is for the latest development release from the `dev` branch. diff --git a/deployment-strategies/gateway.md b/deployment-strategies/gateway.md new file mode 100644 index 0000000..6ddd31c --- /dev/null +++ b/deployment-strategies/gateway.md @@ -0,0 +1,59 @@ +--- +description: >- + This documentation will guide you through adding a new location and proceeding + with the Gateway deployment, enabling your devices to connect to it via VPN. +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/deployment-strategies/gateway +--- + +# Adding a location and getting a Gateway token + +## Adding a location in Defguard Core + +{% hint style="warning" %} +Please remember that **one gateway corresponds to one VPN location.** + +You can also deploy multiple gateways for one location for High Availability. +{% endhint %} + +Go to the address you set on `DEFGUARD_URL` with your browser and sign in using the credentials you set up during Core deployment. + +Go to the _VPN Overview_ module from the main menu and click the _Edit Locations settings_. + +

Adding a new location

+ +Then click the _Add new location tab_. + +
Adding a new location

Adding a new location

+ +Depending on what is more convenient for you, choose configuration from Wireguard file or do it manually. + +

Location wizard

+ +

Location configuration

+ +After saving configuration for location you should be redirect to Location overview page, where at the top right corner is `Edit Locations Settings` button, click on it. + +

Manual configuration

+ +In `Gateway server setup` copy two variables: `DEFGUARD_TOKEN` and `DEFGUARD_GRPC_URL` + +

Gateway server setup

+ +Also, if core has a custom SSL CA to secure gRPC communication, [you need the CA certificate (more here).](grpc-ssl-communication.md#custom-ssl-ca-and-certificates) + +## Deploy the Gateway service + +Proceed with deploying your Gateway service using the selected [deployment strategy](setting-up-your-instance.md#choose-your-deployment-strategy): + +* [package based](standalone-package-based-installation/#gateway-1) +* [Docker Compose](docker-compose.md#deploying-gateway-service) +* [Kubernetes](kubernetes.md#vpn-gateway-service) +* [Terraform](terraform.md#gateway-module) +* [AMIs and AWS CloudFormation](amis-and-aws-cloudformation/#gateway-instance) + +You can also check our guides on running Gateway on [OPNsense firewall](running-gateway-on-opnsense-firewall.md) or [MikroTik router](running-gateway-on-mikrotik-routers.md). + +If everything went well, Defguard Gateway should be connected to Defguard Core and you can start [adding new devices to your network](../features/network-devices.md#adding-a-new-network-device). diff --git a/deployment-strategies/gateway/README.md b/deployment-strategies/gateway/README.md deleted file mode 100644 index 3921a38..0000000 --- a/deployment-strategies/gateway/README.md +++ /dev/null @@ -1,148 +0,0 @@ -# Gateway - -{% hint style="info" %} -If you are looking for [gateway High Availability, go to this document.](../high-availability-and-failover.md#gateway-high-availability) -{% endhint %} - -## Pre-requirements - -{% hint style="warning" %} -Please remember that **one gateway corresponds to one VPN location.** - -You can also deploy multiple gateways for one location for High Availability. -{% endhint %} - -To deploy the gateway you need to have Defguard core running and know it's [gRPC url](../../configuration.md#core-configuration) (meaning what is the **host/ip** where the core is running and the **gRPC port** defined in core by DEFGUARD\_GRPC\_PORT configuration variable**)** and a **token.** - -**Token** can be obtained when you go to _VPN Locations -> Edit location settings (in top right corner) -> Select the desired location_ -> the right panel describes how to deploy the gateway for the location as well as lists the gateway authentication token: - -
- -Also, if core has a custom SSL CA to secure gRPC communication, [you need the CA certificate (more here).](../grpc-ssl-communication.md#custom-ssl-ca-and-certificates) - -## Package Install - -1. On the [release page](https://github.com/DefGuard/gateway/releases) find and download a correct software package for your system (currently DEB, RPM and TXZ are available). -2. Install the package using relevant system tools: - - **Ubuntu/Debian:** - - ```bash - sudo dpkg -i - ``` - - **Fedora/Red Hat Linux/SUSE:** - - ```bash - sudo rpm -i - ``` - - **FreeBSD:** - - ```bash - pkg add - ``` -3. Fill in the default configuration file (`/etc/defguard/gateway.toml`) with values corresponding to your Defguard installation (token and gRPC endpoint URL). -4. On systems with [systemd](https://systemd.io/), enable and start the **systemd** service: - - ```bash - sudo systemctl enable defguard-gateway.service - sudo systemctl start defguard-gateway.service - ``` - -On systems with rc.d (like FreeBSD, NetBSD), start the service. For example, on OPNsense: - -```bash -sudo /usr/local/etc/rc.d/defguard_gateway start -``` - -## Package Upgrade - -### FreeBSD/OPNsense - -1. Uninstall the current version. - - ```bash - pkg delete defguard-gateway - ``` -2. Install a newer version (as described above in [Package Install](./#package-install)). - - ```bash - pkg add - ``` -3. Restart Defguard Gateway service. - - ```bash - sudo /usr/local/etc/rc.d/defguard_gateway restart - ``` - -## Docker Compose - -To start Defguard Gateway using [Docker Compose](https://docs.docker.com/compose/): - -1. We prepared a [git repository](https://github.com/DefGuard/deployment) with Docker Compose configuration, clone it: - -``` -git clone --recursive https://github.com/DefGuard/deployment.git && cd deployment/gateway -``` - -2. Copy and fill in the .env file: - -```bash -cp .env.template .env -``` - -3. Finally, run the service with Docker Compose: - -```bash -docker compose up -``` - -If everything went well, Defguard Gateway should be connected to Defguard Core and you can start [adding new devices to your network](../../admin-and-features/network-devices.md#adding-a-new-network-device). - -## OPNsense plugin - -[OPNsense®](https://opnsense.org/) is an open source, feature rich firewall and routing platform, offering cutting-edge network protection. - -To start Defguard Gateway as OPNsense plugin: - -1. On the [release page](https://github.com/DefGuard/gateway/releases) find and download OPNsense package which will be named:\ - `defguard-gateway_VERSION_x86_64-unknown-opnsense.pkg` – this package **includes both Defguard Gateway and OPNsense plugin.** -2. Install the package: - -```bash -pkg add defguard-gateway_VERSION_x86_64-unknown-opnsense.pkg -``` - -3. Refresh your OPNsense UI by running command below: - -```bash -opnsense-patch -``` - -4. Go to your OPNsense UI and navigate to **VPN** > **Defguard Gateway**. - -
- -5. Fill out the form with appropriate values, click **Save**, and then click **Start/Restart.** - -{% hint style="info" %} -You can find detailed description of all fields [here](../../configuration.md#gateway-configuration). -{% endhint %} - -If everything went well, Defguard Gateway should be connected to Defguard Core and you can start [adding new devices to your network](../../admin-and-features/wireguard/remote-desktop-activation.md). - -See also: [how to configure Defguard in OPNsense](../../admin-and-features/setting-up-your-instance/gateway/) - -## Binary Install - -1. Checkout Gateway releases [here](https://github.com/DefGuard/gateway/releases) and download compatible binary from GitHub page. -2. Decompress and move to bin directory - -```sh -tar xcf ./gateway.tar.gz -sudo chmod +x gateway -sudo mv gateway /usr/bin/ -``` - -3. Start gateway `gateway -g -t ` diff --git a/deployment-strategies/grpc-ssl-communication.md b/deployment-strategies/grpc-ssl-communication.md index d49f719..ad2cbe6 100644 --- a/deployment-strategies/grpc-ssl-communication.md +++ b/deployment-strategies/grpc-ssl-communication.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/deployment-strategies/grpc-ssl-communication +--- + # Securing gRPC communication Defguard Core has two main communication endpoints: diff --git a/deployment-strategies/hardware-os-network-and-firewall-recommendations.md b/deployment-strategies/hardware-os-network-and-firewall-recommendations.md new file mode 100644 index 0000000..bb398c3 --- /dev/null +++ b/deployment-strategies/hardware-os-network-and-firewall-recommendations.md @@ -0,0 +1,126 @@ +--- +description: >- + Before Defguard can be deployed please get familiar with the following + recommendations +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/deployment-strategies/hardware-os-network-and-firewall-recommendations +--- + +# Hardware, OS, network and firewall recommendations + +## Server & environment requirements + +Defguard can be deployed on multiple servers (physical or virtual) or on a single server (which is not recommended). + +Recommended setup reflects the [general system architecture](../in-depth/architecture/) with components being split into three separate machines: + +1. **Dedicated server or Virtual Machine for Core (control plane)** - that is in the Intranet network segment, not exposed in the public Internet in any way. Core needs to be accessible from the local (secure) network and VPN (to access Defguard securely). Recommended hardware parameters: + 1. CPU: min. 1 CPU/vCPU per location - eg. if Defguard handles 2 VPN locations recommended is min. 2 CPU/vCPU + 2. RAM: min. 1GB per location + 3. Disk: min 8GB and more (since statistics will be gathered) +2. **Dedicated server or Virtual Machine for Edge (external and public enrollment service)** - this server/VM needs to be deployed in DMZ/public/external systems network segment - as this service will be exposed and must be available publicly from the Internet. Recommended hardware parameters: + 1. CPU: min. 1 CPU/vCPU per location + 2. RAM: min. 1GB + 3. Disk: min 1GB +3. **Dedicated server or Virtual Machine for Gateway -** this server/VM needs to be deployed in: + 1. DMZ/public/external systems network segment - as this service will be exposed and must be available publicly from the Internet. + 2. Has access on Internal network interfaces to all network segments that will be exposed from VPN for users. + 3. Recommended hardware parameters: + 1. CPU: min. 1 CPU/vCPU per location + 2. RAM: min. 1GB + 3. Disk: min 4GB (mostly for logs) + +In general the hardware requirements will also have to be adjusted based on the number of active users. The numbers above should serve as a baseline. + +### Operating system and software requirements + +#### Package based installation + +Package based install requires Debian GNU/Linux min. 13.x or Ubuntu Linux min. 24.04.x + +#### Docker based installation + +Docker deployment requires the system to have [official Docker Engine installation](https://docs.docker.com/engine/install/) (not distribution based packages). + +## Network IP & DNS setup + +### Gateway server - where WireGuard VPN tunnels itself will be launched + +* **The** [**Gateway address**](../features/wireguard/create-your-vpn-network.md#gateway-address) and[ **Gateway Port**](../features/wireguard/create-your-vpn-network.md#gateway-port) **must be publicly available from the Internet** + +{% hint style="warning" %} +The server on which the Gateway is installed does not need to have the IP address (the same as the Gateway Address) assigned to it - can have internal network address. + +The Gateway Address is the address specified in the clients’ configuration – therefore, if this address is assigned for example to a Firewall or Load Balancer rather than the server hosting the Gateway, **the port from this address (Gateway Port) must be forwarded (e.g., via NAT) to the Gateway Port on the server where the Gateway is installed.** +{% endhint %} + +* must have all networks on internal interfaces addresses configured, that should be accessible from VPN +* **Recommended:** to have a public domain assigned to this IP for VPN server, eg. _vpn.company.com._ + +More on ports and firewall can [be found below](hardware-os-network-and-firewall-recommendations.md#port-and-firewall-exposure-summary). + +### Edge - public web service for enrollment & desktop client configuration + +The server on which the Edge is installed does not need to have the IP address assigned to it which the **Public Edge Component URL domain** points to (_Settings -> General -> Instance settings_). + +If this address is assigned for example to a Firewall, Load Balancer or a Reverse Proxy rather than the server hosting the Edge then just [forward proper ports acording to instruction below](hardware-os-network-and-firewall-recommendations.md#port-and-firewall-exposure-summary). + +### Core & database server + +* should be internal / private IP addresses accessible only from Intranet and VPN +* must have internal domain name assigned in the local network DNS server, eg. _defguard.company.com_ + +## Firewall settings + +### Hardened and most secure architecture + +Below is a typical Enterprise network segmentation diagram showing the minimum required segments for a De-Militarized Zone (DMZ) and the Intranet, along with the recommended placement of Defguard components within this setup: + +
+ +### One firewall setup + +For organizations with simpler network setups, we recommend an architecture that isolates Defguard components using VLANs: + +
+ +### Port & Firewall exposure summary + +#### Gateway + +1. Please open the private **internal** **TCP port 50066** to which to which the Core can connect to and adopt and manage the Gateway automatically. +2. Please open the **public port you wish the WireGuard® VPN to be working on - eg. 50051** (default for new location) or **51820** (default for all-in-one Docker/OVA setup). + +#### Edge + +If you configured your own Reverse Proxy for Edge then expose the reverse proxy with your preference. + +If you have used Defguard's internal SSL termination please expose on the machine (or forward to Edge): + +1. Open the **public TCP 443 port** on the server (**https**). + 1. If you are using Defguard's automatic Let's Encrypt SSL certificate configuration please also open port TCP 80 (http) - as Let's Encrypt requires this port for validating the domain and obtaining the certificate. + + + +Please open an **internal TCP 50051 port** to which to which the Core can connect to and adopt and manage the Edge automatically. + +#### Core + +If you configured your own Reverse Proxy for Core then expose the reverse proxy in your internal network with your preference. + +If you have used Defguard's internal SSL termination please expose on the machine (or forward to Core): + +1. TCP 443 (https) port for web interface accessible only from local/VPN network. + +{% hint style="warning" %} +**Please make sure that Core can connect to Edge and Gateway internal ports mentioned above.** +{% endhint %} + +## Backup strategy + +In a production environment you should use your preferred backup solution to secure the following: + +* Gateway & Edge - **SSL certificate directory** - SSL certificates for those components were issued by Defguard's internal Certificate Authority and are used to secure, authenticate, and authorize component communication. They are stored localy on the server (and not in the main database). +* Core: **database** - preferably by doing a regular _pg\_dump_, not just a filesystem-level backup. diff --git a/deployment-strategies/health-check.md b/deployment-strategies/health-check.md new file mode 100644 index 0000000..8d6ba52 --- /dev/null +++ b/deployment-strategies/health-check.md @@ -0,0 +1,102 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/deployment-strategies/health-check +--- + +# Health check + +## Proxy + +[Proxy](https://github.com/defguard/proxy) provides health endpoint at `GET /api/v1/health` which checks whether the application is running. + +Example request: + +```sh +curl "https://enroll.example.com/api/v1/health" +``` + +Response: + +``` +"alive" - with status code 200 - Proxy is working +``` + +To verify gRPC services for **Proxy** are alive, there is endpoint at `GET /api/v1/health-grpc` that verify it. + +Example request: + +```bash +curl "https://enroll.example.com/api/v1/health-grpc" +``` + +Response: + +``` +"alive" with status code 200 - Proxy is working and is connected to CORE +"Not connected to Defguard Core" - with status code 503 - Proxy is working but is not connected to CORE +``` + +## Core + +To check if [**Core**](https://github.com/defguard/defguard) is working, you can use endpoint at `GET /api/v1/health` which verify it. + +Example request: + +```bash +curl "https://defguard.example.com/api/v1/health" +``` + +Response: + +``` +"alive" - with status code 200 - Core is working +``` + +To check if core gRPC service is alive, we recommend to use community tools like [grpc\_health\_probe](https://github.com/grpc-ecosystem/grpc-health-probe). + +Example request for core: + +```sh +./grpc_health_probe -addr=defguard.example.com:50055 +``` + +Example response: + +``` +status: SERVING +``` + +## Gateway + +You can enable in gateway config ([example config](https://github.com/DefGuard/gateway/blob/main/example-config.toml)) a health check port, by adding the following line: + +```toml +health_port = 55003 +``` + +In this example, gateway will open an additional HTTP port number 55003. Now we can use `GET /api/v1/health` endpoint to verify whether gateway is working correctly. + +If running in Docker you can also enable it by setting the `HEALTH_PORT` [environment variable](configuration.md#environmental-variables-arguments). + +By default the HTTP server will listen on all interfaces, but if you prefer to bind only a specific IP you can set it by using the `http_bind_address` config option (or `DEFGUARD_HTTP_BIND_ADDRESS` environment variable). For example: + +```toml +http_bind_address = 10.0.10.20 +``` + +Example request: + +```sh +curl "http://gateway.example.com:55003/api/v1/health" +``` + +Response: + +``` +"alive" - with status code 200 - Gateway is working and is connected to CORE +"Not connected to core" - with status code 503 - Gateway is working but is not connected to CORE +``` + +By default, no health check ports are open. diff --git a/deployment-strategies/high-availability-and-failover.md b/deployment-strategies/high-availability-and-failover.md deleted file mode 100644 index 488b3cd..0000000 --- a/deployment-strategies/high-availability-and-failover.md +++ /dev/null @@ -1,53 +0,0 @@ -# High Availability and Failover - -## Gateway - High Availability - -We support running multiple gateways for a single VPN instance or location, enabling active-passive configurations. Active-active configurations should also be possible but come with some caveats. Since our gateway uses a vanilla kernel WireGuard®, there are multiple approaches for implementation. - -{% hint style="info" %} -Please also see documentation of [Creating a New VPN location](../admin-and-features/wireguard/create-your-vpn-network.md) where each [location setting has information regarding high-availability](../admin-and-features/wireguard/create-your-vpn-network.md#vpn-location-settings). -{% endhint %} - -#### Deploying multiple gateways for one location - -To have a multi-gateway setup for a given location, you will need to [deploy the gateway on each one of your servers](gateway/) under the same location. - -If you already have a gateway deployed and want to add another one for the location, go to _VPN Overview_ -> Click: _Edit Location Settings (in the top right corner)_, then choose the location you want to add the new gateway to, and follow the deployment instructions: - -
- -Each gateway deployed for a given location will receive the same network configuration and will **bind to the defined port** in the location's _Gateway Port._ - -The only thing left to do is to point your traffic to those gateways, which can be accomplished in several ways: - -* Floating public IP - if you choose this scenario, please remember that the IP must be the IP specified in the Location _Gateway Address._ In this scenario, the floating IP switches between your gateway servers, directing the traffic to one of the two gateways. -* Proxy/load balancing - also remember that the proxy must be configured with the _Gateway Address and Gateway Port._ In this scenario, your clients connect to the proxy/load balancer, which direct the VPN traffic (UDP) to one of your gateway backends_._ - -#### Active-active setups - -Active-active setups should also be possible but come with some caveats. Here are the currently known issues with such configurations: - -* Multiple running gateways bound to one location with network traffic distributed between them may produce invalid network usage statistics, making the network usage graphs and displays on the dashboard unreliable. Related issue: [https://github.com/DefGuard/defguard/issues/1022](https://github.com/DefGuard/defguard/issues/1022) - -### Determining if multiple gateways are running - -All gateways that are successfully connected for the location are displayed under the Location in VPN Overview, here is an example for two gateways: - -
- -### What is the gateway peers persistence (if core/proxy services fail) - -1. For **VPN Locations without MFA** - it's persistent until the system reboot - _even if the gateway will not work_ - as the gateway configures WireGuard "in kernel". -2. For **VPN Locations with MFA**, this depends on the _Peer Disconnect Threshold (seconds)_ setting in the VPN Location settings. This setting specifies that if the peer is inactive for _(defined seconds)_, the gateway should remove it from the configuration. Therefore, if the proxy/core is not operational, MFA authentication will fail, and the peer will not be added if it is disconnected. - -## Core / Proxy - Failover - -The core service handles gateway states as well as core connects _**to the proxy**_. Since proxy serves HTTP based protocol communication and should be in the public Internet, it needs to be secure, thus core connects to the proxy. - -This way **core can be in an Intranet network segment and proxy can be in DMZ, making Core completely cut-off on firewall from the Internet** (you only can have only outgoing firewall rules from Intranet allowing only for core to connect to proxy). - -So **High Availability for core and proxy** gets complicated, with multiple proxies core needs to manage those connections. We already have most of the code for that ready, but it's not yet production ready. - -#### How to bullet-proof proxy & core with failover? - -We recommend to deploy them on a failover solution - like on a kubernetes cluster (even small one - like mini-kube) . This way, Kubernetes manages: healthchecks and does failover. You can have cluster N-nodes and if any VM/node with Core/Proxy goes offline or health checks fail - it's migrated to a new node. diff --git a/deployment-strategies/high-availability-and-failover/README.md b/deployment-strategies/high-availability-and-failover/README.md new file mode 100644 index 0000000..72ea433 --- /dev/null +++ b/deployment-strategies/high-availability-and-failover/README.md @@ -0,0 +1,60 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/deployment-strategies/high-availability-and-failover +--- + +# High Availability and Failover + +## Gateway - High Availability + +We support running multiple gateways within a single VPN location to achieve high availability. This configuration requires an Enterprise [Broken link](/broken/pages/vEBaL5Pdry1nZO8V50bh "mention"). + +### Deploying multiple gateways for one location + +You can add multiple gateways using the "Gateway setup" context menu in the "Locations" table + +
+ +
+ +Each gateway deployed for a given location will receive the same network configuration and will **bind to the defined port** in the location's _Gateway Port._ + +The only thing left to do is to point your traffic to those gateways, which can be accomplished in several ways: + +{% hint style="warning" %} +WireGuard is a stateful UDP protocol, so once a client establishes a session with a specific gateway, only that gateway can decrypt its traffic. In a multi-gateway setup, you must use a Layer 4 load balancer with properly configured **health checks** and **sticky sessions** to ensure traffic is consistently routed to a healthy instance and automatically redirected if a gateway fails. + +You can find example Envoy proxy configuration in our [deployment repository](https://github.com/DefGuard/deployment/tree/main/docker-compose2.0). + +More details regarding WireGuard load-balancing can be found here: [wireguard-udp-load-balancing.md](wireguard-udp-load-balancing.md "mention"). +{% endhint %} + +* **Proxy/load balancing** - The load balancer must be configured with the Gateway addresses and ports. Clients connect to the proxy, which forwards VPN (UDP) traffic to one of the gateway backends. The proxy must perform regular health checks and ensure that traffic from each client is consistently routed to a single gateway instance (sticky sessions). +* **Floating public IP** - In this scenario, the public IP configured as the Location Gateway Address is assigned to only one gateway at a time. If the active gateway becomes unavailable, the floating IP automatically moves to the standby gateway, ensuring that client traffic is redirected to the healthy server. + +### Determining if multiple gateways are running + +All gateways that are successfully connected for the location are displayed under the Location in VPN Overview and locations table, here is an example for two gateways: + +
+ +
+ +### What is the gateway peers persistence (if core/proxy services fail) + +1. For **VPN Locations without MFA** - it's persistent until the system reboot - _even if the gateway will not work_ - as the gateway configures WireGuard "in kernel". +2. For **VPN Locations with MFA**, this depends on the _Peer Disconnect Threshold (seconds)_ setting in the VPN Location settings. This setting specifies that if the peer is inactive for _(defined seconds)_, the gateway should remove it from the configuration. Therefore, if the proxy/core is not operational, MFA authentication will fail, and the peer will not be added if it is disconnected. + +## Core / Proxy - Failover + +The core service handles gateway states as well as core connects _**to the proxy**_. Since proxy serves HTTP based protocol communication and should be in the public Internet, it needs to be secure, thus core connects to the proxy. + +This way **core can be in an Intranet network segment and proxy can be in DMZ, making Core completely cut-off on firewall from the Internet** (you only can have only outgoing firewall rules from Intranet allowing only for core to connect to proxy). + +So **High Availability for core and proxy** gets complicated, with multiple proxies core needs to manage those connections. We already have most of the code for that ready, but it's not yet production ready. + +#### How to bullet-proof proxy & core with failover? + +We recommend to deploy them on a failover solution - like on a kubernetes cluster (even small one - like mini-kube) . This way, Kubernetes manages: healthchecks and does failover. You can have cluster N-nodes and if any VM/node with Core/Proxy goes offline or health checks fail - it's migrated to a new node. diff --git a/deployment-strategies/high-availability-and-failover/wireguard-udp-load-balancing.md b/deployment-strategies/high-availability-and-failover/wireguard-udp-load-balancing.md new file mode 100644 index 0000000..381c96d --- /dev/null +++ b/deployment-strategies/high-availability-and-failover/wireguard-udp-load-balancing.md @@ -0,0 +1,171 @@ +# WireGuard UDP load-balancing + +## The Nature of WireGuard (UDP + Stateful Crypto) + +WireGuard operates over UDP and establishes stateful cryptographic sessions between peers ([https://www.wireguard.com/protocol/](https://www.wireguard.com/protocol/)). + +Key properties relevant to HA: + +* WireGuard uses UDP (connectionless transport). +* Session keys are negotiated via handshake and stored in memory. +* Transport packets are encrypted using per-session symmetric keys. +* A transport packet can only be decrypted by the instance that holds the active session keys. + +### What this means for HA + +If a client completes a handshake with Gateway A: + +* Only Gateway A can decrypt subsequent packets. +* If packets are routed to Gateway B, they will be dropped. +* Recovery requires the client to initiate a new handshake. + +Therefore, simple round-robin load balancing is not sufficient. + +You need: + +* Health-aware load balancing +* Deterministic upstream selection (sticky routing) +* Fast backend ejection on failure + +## Why a Load Balancer with Health Checks Is Required + +WireGuard uses **UDP**, which is connectionless and provides no built-in failure detection. As a result: + +* UDP has no connection state, acknowledgements, or reset signals. +* If a gateway crashes, the load balancer does not automatically detect it. +* The load balancer may continue forwarding traffic to a dead gateway. +* This results in silent packet drops and delayed failover. + +To prevent this, a Layer 4 load balancer must: + +* Perform **active health checks** against each gateway. +* Immediately mark failed gateways as unhealthy. +* Re-route traffic to healthy instances. + +Without properly configured health checks, high availability cannot be reliably achieved in a multi-gateway WireGuard setup. + +## Why Sticky Sessions Are Mandatory + +WireGuard sessions are bound to a specific gateway instance. + +Once a client completes a handshake: + +* Subsequent transport packets must reach the same gateway. +* If packets are distributed per-packet or per-datagram, decryption will fail. +* This results in silent packet drops. + +Therefore, the load balancer must use deterministic routing: + +* Hash-based routing (e.g., source IP hashing) +* Ring-hash or consistent-hash load balancing +* Never per-packet load balancing + +Sticky routing ensures: + +* All packets from a client reach the same gateway +* Failover only occurs when the backend is unhealthy + +## Recommended Load Balancer: Envoy + +We recommend Envoy for UDP load balancing. + +Reasons: + +* Native UDP proxy support +* Health checks with fine-grained timing controls +* Proper backend ejection on failure +* Production-grade L4 behavior + +Recommended configuration characteristics: + +* lb\_policy: RING\_HASH +* hash\_policy: source\_ip +* Aggressive health check intervals +* Low fail thresholds for immediate failover + +Example configuration can be found [here](https://github.com/DefGuard/deployment/tree/main/docker-compose2.0). + +Envoy ensures: + +* Traffic is consistently routed to one backend +* Dead backends are removed quickly +* Failover happens reasonably fast + +## Operational Gotchas and Lessons Learned + +During implementation and testing, several subtle issues were discovered. + +This section documents them to prevent future confusion. + +#### Envoy Health Checks timing is state-dependent + +Envoy has multiple health-check timing parameters: + +* interval +* no\_traffic\_interval +* no\_traffic\_healthy\_interval +* unhealthy\_interval +* healthy\_edge\_interval +* unhealthy\_edge\_interval + +If only interval is configured, the effective behavior may differ depending on traffic state. + +Symptoms: + +* Backend appears healthy even when container is dead. +* Failover occurs only after long delays. + +**Solution: Explicitly configure all relevant health-check intervals to the same low value.** + +#### NGINX Is Not Suitable for This Use Case + +NGINX stream/UDP proxy: + +* Does not implement an active health-check mechanism, and therefore can't reliably detect UDP backend failure +* Does not reassign upstream without hard socket errors + +This results in traffic never being routed to healthy backend after failure. + +#### WireGuard May Require a Keepalive Interval to Fully Recover After Failover + +Even after the load balancer successfully redirects traffic to a healthy gateway, the tunnel may not resume immediately. + +Key points: + +* When a gateway fails, the existing WireGuard session becomes invalid. +* The new gateway cannot decrypt transport packets from the old session and drops them silently. +* A new handshake must be initiated by the client. +* WireGuard only attempts a new handshake when triggered by traffic or by the **PersistentKeepalive** interval. + +As a result: + +* Tunnel recovery may take up to the configured keepalive interval. +* Shorter keepalive intervals result in faster failover recovery. + +#### Expected Failover Behavior + +With proper configuration: + +1. Gateway A crashes. +2. Load-balancer health check marks it unhealthy within configured healthcheck interval. +3. Traffic is immediately routed to Gateway B. +4. Client initiates new WireGuard handshake. +5. Tunnel resumes operation. + +Typical recovery time: 3-30 seconds, depending on envoy interval settings and client keepalive interval. + +## Summary + +High availability for WireGuard gateways requires: + +* Layer 4 UDP load balancing +* Sticky sessions (consistent hashing) +* Aggressive health checks +* Correct dataplane-aware health endpoint +* Envoy with ring hash and properly configured health checks is the recommended solution. + +The key principle is: + +> WireGuard sessions are stateful and bound to a specific instance. HA must respect that constraint. + +With correct configuration, gateway failover can be fast and reliable. diff --git a/deployment-strategies/kubernetes.md b/deployment-strategies/kubernetes.md index b2c28dd..de2f186 100644 --- a/deployment-strategies/kubernetes.md +++ b/deployment-strategies/kubernetes.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/deployment-strategies/kubernetes +--- + # Kubernetes ## Prerequisites @@ -9,43 +16,46 @@ To deploy and use Defguard on your cluster, you'll need: * Helm binary https://github.com/helm/helm/releases/latest {% hint style="warning" %} -Our helm charts currently support only **Traefik ingress - which is relevant and affects exposing GRPC services (see below** `ingress.hosts.grpc`**`).`** +The Helm charts currently support only **Traefik ingress – which is relevant and affects exposing gRPC services (see below** `ingress.hosts.grpc`**`).`** {% endhint %} +Kubernetes configuration can be found in the [git repository](https://github.com/DefGuard/deployment). + ## Deployment -We prepared a [git repository](https://github.com/DefGuard/deployment) with Kubernetes configuration, clone it with: +Add Defguard Helm chart repository: -``` -git clone https://github.com/DefGuard/deployment.git && cd deployment/charts +```shell +helm repo add defguard https://defguard.github.io/deployment ``` -Then create a namespace for Defguard on your cluster: +In Kubernetes cluster, create a namespace for Defguard: -``` +```shell kubectl create namespace defguard ``` -Copy and fill in values file: +Examine available values for the Helm chart: +```shell +helm show values defguard/defguard ``` -cp defguard/values.yaml ./ -``` - -Required values (the rest should work if left as-is): -* `ingress.hosts.grpc`: GRPC ingress address - GRPC clients like Defguard **gateway**, yubi-bridge +To set some values, either crate a file named **values.yaml**, or use `--set` option for `helm` command. {% hint style="warning" %} -If you are configuring your gateway or yubi-bridge - please use this GRPC URL for communication. - -If you have other ingress controller than traefik - you need to configure GRPC ingress manually with corresponding to your setup. +If use other ingress controller than [Traefik](https://doc.traefik.io/traefik/), the configuration for gRPC ingresses (which use HTTP/2) may need to be adjusted accordingly. {% endhint %} -* `ingress.hosts.web`: Web ingress address - Defguard web app will be available here. -* `publicUrl`: Public URL your Defguard will be available under. Usually the same as ingress.hosts.web, but differs depending on your load balancer and/or reverse-proxy setup. +Install the Helm chart in the namespace: -If you want to deploy the enrollment service along with your Defguard instance, you also need to configure values related to the `defguard-proxy`subchart: +```shell +helm install --wait=true --namespace defguard defguard defguard -f values.yaml +``` + +### Defguard Edge + +If you want to deploy Defguard Edge service along with your Defguard instance, you also need to configure values related to the `defguard-proxy`subchart: * `defguard-proxy.enabled`: enable the enrollment service * `proxyUrl`: proxy gRPC endpoint URL (based on `defguard-proxy.ingress.grpc.host`) @@ -53,8 +63,8 @@ If you want to deploy the enrollment service along with your Defguard instance, * `defguard-proxy.ingress.web.host`: enrollment service web ingress address (the enrollment website) * `defguard-proxy.ingress.grpc.host`: enrollment service gRPC ingress address (for communicating with core) -And finally, install the Helm chart in the namespace: +### Defguard Gateway -``` -helm install --wait=true --namespace defguard defguard defguard -f values.yaml -``` +If you want to deploy Defguard Gateway service along with your Defguard instance, you need to configure values related to the `defguard-gateway` subchart: + +* `defguard-gateway.enabled`: enable the VPN gateway service diff --git a/deployment-strategies/linux-kernel-wireguard-tuning.md b/deployment-strategies/linux-kernel-wireguard-tuning.md new file mode 100644 index 0000000..c3e9f15 --- /dev/null +++ b/deployment-strategies/linux-kernel-wireguard-tuning.md @@ -0,0 +1,111 @@ +--- +description: >- + This technical guide addresses requirements regarding WireGuard VPN latency, + throughput, resilience, and scalability by tuning Linux Kernel parameters (as + WireGuard is part of Linux Kernel). +--- + +# Linux Kernel WireGuard tuning + +## Introduction + +WireGuard is widely praised for its lean codebase and efficiency. However, the default Linux kernel settings are often tuned for general-purpose computing, not for acting as a high-speed router handling encrypted UDP traffic at scale. + +Here are some tuning parameters to achieve maximum performance (low latency), stability across changing networks (roaming), and high concurrency, we must tune three distinct layers. + +{% hint style="info" %} +Kernel **sysctl** settings optimize how the Linux kernel schedules packets and manages memory buffers. Add the following to `/etc/sysctl.d/99-wireguard-tuning.conf`. or `/etc/sysctl.conf` +{% endhint %} + +## Kernel tuning + +### Congestion Control & Queuing (Latency & Throughput) + +To reduce bufferbloat (latency spikes under load) and maximize throughput, we replace the default CUBIC algorithm with BBR (Bottleneck Bandwidth and Round-trip propagation time), which is less sensitive to packet loss and more aggressively seeks the optimal congestion window. + +```ini +# Use BBR congestion control +net.core.default_qdisc = fq +net.ipv4.tcp_congestion_control = bbr +``` + +### Memory & Buffers (Throughput) + +WireGuard uses UDP for data transport. By default, Linux kernel UDP buffer sizes are often too small for high-speed transfers (1 Gbps+), causing packets to be dropped in the kernel before WireGuard can process them. + +```ini +# Increase default and max receive/send window sizes (approx 16MB) +net.core.rmem_max = 16777216 +net.core.wmem_max = 16777216 +net.core.rmem_default = 262144 +net.core.wmem_default = 262144 +net.ipv4.udp_mem = 4096 87380 16777216 + +``` + +### Packet Processing & Forwarding (Efficiency) + +These settings allow the kernel to process packets faster and handle bursts of traffic without dropping them. + +```ini +# Enable IP Forwarding (Required for VPN) +net.ipv4.ip_forward = 1 + +# Increase the maximum length of the processor input queue +# (Prevents drops during traffic bursts) +net.core.netdev_max_backlog = 5000 + +# Increase the maximum number of connections waiting for acceptance +net.core.somaxconn = 8192 + +``` + +### Packet buffering + +In Linux, network cards (NICs) use **NAPI** (New API) polling to handle incoming packets. When an interrupt fires, the kernel disables further interrupts and polls the NIC, processing packets in batches. + +`net.core.netdev_budget` limits how many packets the kernel may process in a single SoftIRQ cycle before yielding the CPU and it's default is: 300 packets. + +* Too low value - Under heavy load (e.g., 100+ streaming users), the kernel yields too early, packets back up in the NIC buffer, and drops occur. +* Too high value - The networking stack can monopolize a CPU core, starving userspace processes and increasing overall latency. + +For high-performance VPN servers, we increase `netdev_budget` to favor network throughput and tune the companion setting `netdev_budget_usecs` to cap CPU time per polling cycle. Below you wil find some recommended values for multiple scenarios. + +#### Home/Small Office + +Meaning around \~20 users: The default 300 is fine and changing it won't be noticeable. + +### 50 VPN users and above + +``` +# --- NAPI Polling Budget Tuning --- + +# Increase packet budget (Default: 300). +# Allow the CPU to process up to 600 packets in one cycle. +# Beneficial for high PPS (packets per second) environments. +net.core.netdev_budget = 600 + +# Increase the time budget (Default: 2000us or 2ms). +# Allow the NAPI cycle to run for up to 4ms before yielding. +# Prevents the loop from aborting prematurely during heavy traffic bursts. +net.core.netdev_budget_usecs = 4000 +``` + +#### High throughput ≥ 10Gbps + +You may need values as high as `netdev_budget = 1200`, assuming you have a powerful CPU with Receive Packet Steering (RPS) enabled. + +## Multiple connection concurrency (egress via VPN) + +WireGuard is stateless, but the Linux firewall tracking (used for Masquerade or DNAT when configuring connection tracking and egress through VPN) is stateful. + +Here is a formula how to optimize netfliter parameters based on the following assumptions that one connected device is a UDP stream (VPN) and multiple TCP streams that the user/device "uses" for browsing/apps "exiting" via VPN: + +{% hint style="warning" %} +**Assumptation**:\ +\ +1 active user generates \~50-100 simultaneous connections +{% endhint %} + +
Parameter (Sysctl)Description10 Devices(Home/SOHO)100 Devices(SMB/Office)1,000 Devices(Enterprise/ISP)10,000 Devices(Data Center)
net.netfilter.nf_conntrack_maxCRITICAL. Max concurrent connections tracked.655361310725242885242880
net.core.somaxconnMax pending connections in queue.409640961638465535
net.core.netdev_max_backlogMax packets queued if kernel is busy.100050001638465535
net.core.netdev_budgetMax packets processed in one CPU cycle.3006006001200
net.core.rmem_max (Bytes)Max OS receive buffer size (UDP).16 MB16 MB32 MB128 MB
net.core.wmem_max (Bytes)Max OS send buffer size (UDP).16 MB16 MB32 MB128 MB
fs.file-maxSystem-wide file descriptor limit.Default10000010000005000000
Required System RAMMinimum RAM needed for state tables.512 MB1 GB4 GB32 GB+
+ diff --git a/openid-rsa-key.md b/deployment-strategies/openid-rsa-key.md similarity index 71% rename from openid-rsa-key.md rename to deployment-strategies/openid-rsa-key.md index c7abd7d..14ba286 100644 --- a/openid-rsa-key.md +++ b/deployment-strategies/openid-rsa-key.md @@ -1,4 +1,11 @@ -# OpenID RSA key +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/deployment-strategies/openid-rsa-key +--- + +# Using RSA instead of HMAC for OpenID key By default, Defguard uses [HMAC](https://en.wikipedia.org/wiki/HMAC) algorithm for OIDC token validation and the. If you want to use [RSA](https://en.wikipedia.org/wiki/RSA_\(cryptosystem\)), you'll have to configure the Defguard core `DEFGUARD_OPENID_KEY` configuration variable with the path to the RSA private key. diff --git a/deployment-strategies/ova.md b/deployment-strategies/ova.md new file mode 100644 index 0000000..6c95908 --- /dev/null +++ b/deployment-strategies/ova.md @@ -0,0 +1,128 @@ +# OVA + +Defguard provides OVA images that can be imported into VMware, Proxmox, or any other solution that supports the standard OVA format. The image is based on Ubuntu 24 and supports configuration via `cloud-init`. It contains the full Defguard stack (Defguard Core, Edge, Gateway), a database, and a reverse proxy (NPM). + +The latest image can be downloaded here: [https://defguard-downloads.s3.eu-central-1.amazonaws.com/ova/defguard-latest.ova](https://defguard-downloads.s3.eu-central-1.amazonaws.com/ova/defguard-latest.ova) + +### Importing the image + +After importing the image, make sure to: + +1. Attach an appropriate network interface so the virtual machine can access your network. +2. If you would like to change default user/password you can [do so with cloud-init](https://docs.cloud-init.io/en/latest/reference/yaml_examples/set_passwords.html) - if not, default user ubuntu with pass ubuntu will be created. + +### Setting up Defguard + +Once booted, the virtual machine will have all Defguard components pre-configured. To complete the setup, simply visit the Defguard Core dashboard: http://\:8000. Follow the on-screen wizard to finalize your configuration. + +{% hint style="info" %} +For example setup walkthrough [see this guide](previewing-defguard-v2.0-alpha2.md#example-setup). +{% endhint %} + +If you would like to setup a reverse-proxy beforhand (which enables automated SSL Certificates with Let's Encrypt), [go to this section for more details](ova.md#setting-up-a-reverse-proxy). + +### Accessing the VM + +You can access the VM using the following default credentials (requires changing after first login): + +| Login | `ubuntu` | +| -------- | -------- | +| Password | `ubuntu` | + +#### Verifying the running Defguard stack + +When booting the machine for the first time, the whole Defguard stack will be launched using Docker Compose. All Defguard files (Docker compose, environment variables) can be found under the `/opt/stacks/defguard/` directory. + +To verify that Defguard is running, use the following command inside the VM: + +```bash +sudo docker ps +``` + +
+ +Here is the breakdown of accessible services deployed on the VM: + +
NamePortType
Core8000HTTP (web dashboard)
Edge8080HTTP (enrollment portal)
Gateway51820UDP (VPN port)
Nginx Proxy Manager80, 443, 81HTTP(S) and the management dashboard on port 81
+ +### Setting up a reverse proxy + +{% hint style="success" %} +Defguard has a built in SSL termination and can automatically obtain certificates from [https://letsencrypt.org/](https://letsencrypt.org/) (or issue own certificates from our CA) - but deploying a Reverse Proxy is always recommended. +{% endhint %} + +{% hint style="info" %} +Setting up a reverse proxy will require you to prepare two domains: one for Defguard Core (internal), one for Defguard Edge (public) +{% endhint %} + +To configure the reverse proxy, register an account in the NPM dashboard, accessible via `http://:81`. + +After creating your account, go to **Proxy Hosts** and configure the proxy for Core and Edge: + +
+ +
+ +
+ +This will allow you to access Core and Edge via your respective domains, using the standard HTTP/HTTPS ports. We also recommend setting up SSL. Please make sure you don't expose Defguard Core publicly. See [Architecture](../in-depth/architecture/) for details. + +### Managing and updating containers + +Containers can be updated using the following commands in the `/opt/stacks/defguard` directory: + +``` +sudo docker compose pull +sudo docker compose down +sudo docker compose up +``` + +This can also be achieved without accessing the VM using the Dockge dashboard, refer to [this section](ova.md#dockge) for more information. + +## Cloud-Init options + +### Selecting what components to run (Proxmox) + +As mentioned previously, the VM starts the full stack by default. If you would like to separate the components (which is the recommended [way of deploying Defguard](../in-depth/architecture/)), you can use custom `cloud-init` configuration to specify which component to run for a given VM instance. + +Create the following snippet. The content can be `core`, `edge`, or `gateway`: + +``` +#cloud-config +write_files: + - path: /opt/defguard/active-profiles + content: "core" +``` + +In Proxmox, save the snippet to (or your selected snippet directory, if you are using a non-standard one): + +``` +/var/lib/vz/snippets/defguard-core-userdata.yaml +``` + +Then attach it to the VM on which you want to run the selected Defguard component: + +```bash +qm set --cicustom "vendor=local:snippets/defguard-core-userdata.yaml" +``` + +Next, boot the VM. Now, only the selected component should run. + +Here is the full breakdown of what runs for each profile: + +
ProfileWhat runs
coreCore, database, NPM
edgeEdge, NPM
gatewayGateway
+ +Using different solution that Proxmox will require creating a custom cloud-init that will write one of the profiles above to the `/opt/defguard/active-profiles` file. + +### Dockge + +You can additionally enable [Dockge](https://github.com/louislam/dockge) to easily manage and update all Defguard containers. To do so, add the following to your cloud-init snippet (this was explained more in-depth in the [#selecting-what-components-to-run-proxmox](ova.md#selecting-what-components-to-run-proxmox "mention") section): + +``` +#cloud-config +write_files: + - path: /opt/stacks/defguard/enable-docker-management + content: "" +``` + +After the virtual machine starts, Dockge dashboard should be available at `http://:5001` . Access it in order to create a Dockge admin account. diff --git a/deployment-strategies/pre-production-and-development-releases.md b/deployment-strategies/pre-production-and-development-releases.md index 4aad002..3a549c2 100644 --- a/deployment-strategies/pre-production-and-development-releases.md +++ b/deployment-strategies/pre-production-and-development-releases.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/deployment-strategies/pre-production-and-development-releases +--- + # Pre-production and development releases To test any pre-production or development release: diff --git a/deployment-strategies/previewing-defguard-v2.0-alpha2.md b/deployment-strategies/previewing-defguard-v2.0-alpha2.md new file mode 100644 index 0000000..2cf6168 --- /dev/null +++ b/deployment-strategies/previewing-defguard-v2.0-alpha2.md @@ -0,0 +1,220 @@ +# Previewing Defguard v2.0-alpha2 + +This tutorial will help you test the new major update to Defguard - version 2.0. + +For the list of changes made in this version, go to our release blog post or release notes. + +{% hint style="danger" %} +This is an early alpha! Do not migrate from your previous production versions to this one! This release is only for setting up new, test instances. It's meant to preview the upcoming v2.0 and gather feedback. +{% endhint %} + +## Starting Defguard 2.0 + +We've prepared a convenient docker compose config file that allows you to easily set up the whole Defguard stack and test the new UI and functionalities. + +To start the Defguard v2.0 stack, do the following: + +``` +git clone https://github.com/DefGuard/deployment.git defguard-deployment +cd defguard-deployment/docker-compose2.0 +docker compose up -d +``` + +This will start 8 docker containers: + +* db - PostgreSQL database +* core - Defguard Core component (main control plane) +* edge1 - Defguard Edge (formerly Proxy) component +* gateway1 - Defguard Gateway components (VPN gateway) + +## Initial configuration wizard + +Notice that the Docker Compose file contains only minimal configuration parameters. This is one of the major changes in the new version. All configuration that was previously stored in environment variables or configuration files is now stored in the database and initialized using a convenient **setup wizard**. + +To begin the initial configuration, just visit this address http://localhost:8000/ after you started the stack with Docker Compose. Defguard will detect that this is a fresh instance and will welcome you with the setup wizard. + +The setup process contains several major steps: + +* Creating the first admin user +* Internal and external URL settings +* VPN public and internal settings +* Multi-factor authentication + +For the stable version of 2.0 we'll also add a **migration wizard** that will help you to upgrade from previous Defguard version to the latest one with ease. + +### Example setup + +{% stepper %} +{% step %} +#### Go to the Core Component UI + +Visit [http://localhost:8000](http://localhost:8000/) after starting the stack using Docker Compose. See the Initial Setup Wizard is being triggered automatically. Also notice that the Edge and Gateway component where automatically adopted.
+ +
+{% endstep %} + +{% step %} +#### Create admin user account + +
+{% endstep %} + +{% step %} +#### Provide internal and external URL settings + +You can set `http://localhost:8000` as the Defguard URL and `http://localhost:8080` as the _Public Edge Component URL._ + +
+{% endstep %} + +{% step %} +#### Configure external and internal VPN settings + +
+{% endstep %} + +{% step %} +#### Configure multi-factor authentication + +
+{% endstep %} + +{% step %} +#### Setup finished + +
+{% endstep %} + +{% step %} +#### Inspect the newly created Edge Component, Location and Gateway Component + +
+ +
+{% endstep %} +{% endstepper %} + +## Enjoy fully redesigned interface + +After finishing the initial setup, Defguard is fully operational. You can manage your instance using the fully redesigned UI/UX. + +You can also enrol users and connect to the newly crated Location. + +You'll notice changes in every part of the interface, but some areas changed in a very significant way. Check those modules for sure: + +* VPN overview - strictly a dashboard for the administrator, previously mixed with system configuration, which was confusing. Also, we've significantly refactored our statistics module to make sure the dashboard is responsive even for large deployments. +* Dedicated Locations page - previously hidden somewhere in the VPN overview page, mixed with dashboard, now a clear Location listing and management. +* Firewall (formerly ACL) - new nomenclature (Aliases, Destinations, Rules), brand-new Alias, Destination, and Rule form. The Rule form, despite realising a complex task of creating a firewall rule, is intuitive and guides the user through the process. +* Settings - since all the settings are now stored in the database, they can be managed with the UI. All system parameter got divided into logical sections, with broad descriptions, making it much easier to configure your system. +* Edge Components (formerly Proxy) page - brand-new page for managing Edge Components (exposing selected Core functionality to the internet while keeping the Core isolated). + +## High Availability of Edge and Gateway components + +{% hint style="info" %} +This is an Enterprise feature. [Enroll into Defguard PoC](https://defguard.net/evaluation-license/) and receive a 30 day Defguard Trial license with evaluation support. +{% endhint %} + +Another major feature of v2.0 is High Availability in active-active mode for the Edge and Gateway components. + +You can now add multiple Gateways to your Locations. Users will still connect to a single Gateway (using sticky sessions), but in the event of a Gateway failure, their VPN connection will remain active and be handled by another Gateway. + +You can also add multiple Edge components to ensure that enrollment, configuration updates, and MFA session initiation are fast and fail-safe. + +### Example setup + +{% stepper %} +{% step %} +#### Start the High Availability stack + +To start the Defguard v2.0 HA stack, do the following: + +``` +git clone https://github.com/DefGuard/deployment.git defguard-deployment +cd defguard-deployment/docker-compose2.0 +docker compose -f docker-compose.ha.yaml up -d +``` + +This will start 8 docker containers: + +* db - PostgreSQL database +* core - Defguard Core component (main control plane) +* edge1, edge2, edge-lb - two Defguard Edge (formerly Proxy) components with a NGINX-based load balancer (user enrolment and client app configuration) +* gateway1, gateway2, gateway-lb - two Defguard Gateway components with an Envoy-based load balancer (VPN gateways) +{% endstep %} + +{% step %} +#### Do the initial configuration + +Follow the same steps as in the [basic example](previewing-defguard-v2.0-alpha2.md#initial-configuration). You will then have a Defguard instance with a single Gateway and Edge component configured. +{% endstep %} + +{% step %} +#### Enter your Enterprise licence key + +Go to Settings -> License and enter your license key. [Enroll into Defguard PoC](https://defguard.net/evaluation-license/) and receive a 30 day Defguard Trial license if you don't have a key yet. +{% endstep %} + +{% step %} +#### Add another Edge Component + +If you've started the all the services from the provided Docker Compose configuration, the additional Edge Compoent service is already started and waiting to be adopted in Defguard Core. Both Edge Components are behind a basic NGINX-based load balancer. + +Use the Docker service name as the _IP or Domain_ while configuring the component. + +
+ +
+ +
+ +
+{% endstep %} + +{% step %} +#### Add another Gateway Component to your Location + +If you've started the all the services from the provided Docker Compose configuration, the additional Gateway Component service is already started and waiting to be adopted in Defguard Core. Both Gateway Components are behind a basic Envoy-based load balancer. + +Use the Docker service name as the _IP or Domain_ while configuring the component. + +
+ +
+ +
+ +
+{% endstep %} +{% endstepper %} + +### Test the High Availability and Failover + +#### Test HA for Edge Components + +1. Display logs of both Edge Components using `docker compose logs -f edge1 edge2` +2. Trigger enrolment or MFA VPN connection using the Defguard Desktop or Mobile Application. +3. Notice traffic being directed to both Edge Components using round robin strategy on the NGINX load balancer. +4. Stop one of the Edge Components using `docker compose stop edge1` +5. Notice the enrolment process or MFA VPN connections working as expected on the Edge Components that's left. + +#### Test HA for Gateway Components + +1. Display logs of both Gateway Components using `docker compose logs -f gateway1 gateway2` +2. Ping the VPN gateway using `ping 10.10.10.1`. Since the VPN connection is not active yet it should fail. Keep it running through the test. +3. Connect to the VPN Location. +4. Notice that the ping now succeeds. +5. Now play with stoping on of the gateways `docker compose stop gateway1` or `docker compose stop gateway2` . Make sure you don't stop both of them. +6. Notice that the VPN connection is alive the whole time (ping still succeeds). + +## Static IP assignment for devices + +Another hihly anticipated feature of the 2.0 is the Static IP assignment. System administrators can now assign static IPs for the selected devices in the selected networks. + +Start by going to the users list. You'll notice that there's a new item in the actions menu for a user. + +
+ +The administrator will then see a modal window with all the devices of the sleected user in each Location configured in the system. He can now enter the desired IP address for a device in any of the selected Locations. + +
+ diff --git a/deployment-strategies/production-deployment-verification-guide.md b/deployment-strategies/production-deployment-verification-guide.md new file mode 100644 index 0000000..093dfc5 --- /dev/null +++ b/deployment-strategies/production-deployment-verification-guide.md @@ -0,0 +1,201 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/deployment-strategies/production-deployment-verification-guide +--- + +# Production deployment verification guide + +This guide helps you verify that your Defguard instance is operational, reachable through the expected network paths, and properly secured. + +The process will consist of the following steps: + +1. Verifying the configuration of your firewall rules. +2. Verifying your DNS resolution. +3. Testing the whole configuration. + +## Prerequisites + +Before proceeding, ensure that you deployed your Defguard environment according to the [recommendations](hardware-os-network-and-firewall-recommendations.md) and that the following components are operational: + +* 1 server running Defguard Core + * Located in an internal network segment (not exposed to the Internet) + * Reachable internally under a domain such as defguard.example.com +* 1 server running Defguard Proxy + * Located in a DMZ network segment + * Publicly accessible from the Internet under a domain such as proxy.example.com +* 1 server running Defguard Gateway + * Located in a DMZ network segment + * Publicly accessible from the Internet under a domain such as vpn.example.com +* A workstation with the Defguard Desktop Client installed and configured to test VPN connectivity. + +## Verify firewall policies + +Confirm that your firewall rules align with Defguard’s secure deployment model. + +| Component | Allowed inbound | Blocked inbound | Notes | +| --------- | ------------------------------------------------------------------------------------------ | ------------------------- | ------------------------------------------------------ | +| Core |
  • TCP 443 (from internal/VPN only)
  • gRPC server port (from Gateway)
| All public traffic | Core should never be directly exposed to the Internet. | +| Proxy |
  • TCP 443 (from public Internet)
  • gRPC server port (from Core)
| All other inbound traffic | Used for enrollment and client configuration. | +| Gateway |
  • UDP VPN port (from public Internet)
| All other inbound traffic | Only VPN and Core communication should be allowed. | + +## Verify DNS resolution + +Proper DNS configuration ensures that each Defguard component resolves to the correct IP address and network zone. + +Run: + +``` +dig +short vpn.example.com +dig +short proxy.example.com +dig +short defguard.example.com +``` + +Expected results: + +| Domain | Expected IP Type | Description | +| -------------------- | ------------------- | ------------------------------------------------------ | +| vpn.example.com | Public IP | Gateway server reachable from the Internet | +| proxy.example.com | Public IP | Proxy server for enrollment and configuration | +| defguard.example.com | Private/Internal IP | Core server, accessible only from internal/VPN network | + +## Test the environment + +After you've confirmed the proper network segmentation it's time to test it. + +### Testing while disconnected from the VPN + +Perform the following tests from the workstation where the Defguard Desktop Client is installed. + +Make sure the client is disconnected before running any commands. + +In this state: + +* ❌ You should not be able to reach the Defguard Core server. +* ✅ You should be able to reach the Defguard Proxy server. +* ✅ You should be able to reach the Defguard Gateway server (UDP port for VPN). + +#### Test: Defguard Core server reachability and ports + +Check the open ports on your Defguard Core server (replace the example domain with your actual one): + +``` +sudo nmap -Pn -sS defguard.example.com +``` + +Expected output: + +``` +Failed to resolve "defguard.example.com". +``` + +Interpretation: + +* The Core server is not reachable when disconnected from the VPN, which is the expected and secure configuration. + +#### Test: Defguard Proxy Server Reachability and Ports + +Check the open ports on your Defguard Proxy server: + +``` +sudo nmap -Pn -sS proxy.example.com +``` + +Expected output: + +``` +Host is up (0.0082s latency). +PORT STATE SERVICE +443/tcp open https +``` + +Interpretation: + +* The host is reachable from the Internet. +* Only port 443/tcp is open, as expected for HTTPS access. + +#### Test: Defguard Gateway Server Reachability + +Check if the Defguard Gateway server is reachable: + +``` +sudo nmap -Pn -sS vpn.example.com +``` + +Expected output: + +``` +Host is up (0.0082s latency). +``` + +Interpretation: + +* The host is reachable. +* The list of open TCP ports should be empty, as the Gateway primarily uses UDP for VPN connections. +* You’ll verify the UDP port functionality in the next step by testing an actual VPN connection. + +### Connecting to the VPN + +1. Open the Defguard Desktop Client. +2. Connect to your configured location. + +#### Test: Verify VPN Connectivity + +Once connected: + +1. Open your browser and navigate to the Defguard Core interface, for example: + + https://defguard.example.com +2. Sign in using an administrator account. + +If you can access the web panel, your VPN connection is active and functioning. + +Then, in the Core UI: + +* Go to VPN Overview page. You should see your connected device listed there. + +
+ +### Testing While Connected to the VPN + +Perform the following tests again while the Defguard client remains connected. + +In this state: + +* ✅ You should be additionally able to reach the Defguard Core server. + +#### Test: Defguard Core Server Reachability and Ports + +Check the open ports on your Defguard Core server: + +``` +sudo nmap -Pn -sS defguard.example.com +``` + +Expected output: + +``` +Host is up (0.021s latency). +PORT STATE SERVICE +443/tcp open https +``` + +Interpretation: + +* The host is reachable via the VPN tunnel. +* Port 443/tcp (HTTPS web interface) is open, which confirms proper VPN routing and Core access. + +## Summary + +✅ Firewall policies restrict traffic to approved ports. + +✅ DNS records resolve to the expected internal and public addresses. + +✅ Core is unreachable from the Internet and reachable only via VPN. + +✅ Proxy is publicly reachable only on port 443. + +✅ Gateway responds correctly and allows VPN connections. + +When all verifications and tests pass, your Defguard deployment is operational, properly segmented, and production-ready. diff --git a/deployment-strategies/reverse-proxy-configuration-using-nginx.md b/deployment-strategies/reverse-proxy-configuration-using-nginx.md new file mode 100644 index 0000000..61b6167 --- /dev/null +++ b/deployment-strategies/reverse-proxy-configuration-using-nginx.md @@ -0,0 +1,228 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/deployment-strategies/reverse-proxy-configuration-using-nginx +--- + +# Reverse Proxy configuration using NGINX + +## Introduction + +This guide explains how to configure [NGINX](https://nginx.org/) as a reverse proxy for Defguard's components (Core and Proxy). The reverse proxy acts as an intermediary between users and Defguard services, handling HTTPS requests, routing internal gRPC communication, and ensuring encrypted connections between all components. + +To provide HTTPS encryption, this guide also uses [Certbot](https://certbot.eff.org/), a free, open-source tool from the [Let’s Encrypt](https://letsencrypt.org/) project. Certbot automatically issues and renews SSL/TLS certificates, allowing you to secure your Defguard domains without manual certificate management. + +### Installing NGINX and Certbot + +To install and prepare NGINX with Let’s Encrypt certificates: + +```bash +apt install nginx certbot +systemctl enable nginx.service +systemctl start nginx.service +``` + +Disable the default configuration to avoid conflicts: + +```bash +unlink /etc/nginx/sites-enabled/default +``` + +### Obtaining SSL Certificates + +Before configuring NGINX, issue valid SSL certificates for your domains.\ +In this example we use: + +* Core: **my-server.defguard.net** +* Enrollment (Proxy): **enroll.defguard.net** + +Generate certificates with Certbot: + +```bash +certbot certonly \ + --non-interactive \ + --agree-tos \ + --standalone \ + --email admin@yourdomain.com \ + -d my-server.defguard.net \ + -d enroll.defguard.net +``` + +Certbot will generate certificate in fullchain.pem and privkey.pem in the following paths: + +``` +/etc/letsencrypt/live/my-server.defguard.net +/etc/letsencrypt/live/enroll.defguard.net +``` + +### Defguard Core NGINX configuration + +Create a new configuration file for the Core service: + +`/etc/nginx/sites-available/my-server.defguard.net.conf` + +```nginx +upstream defguard { + server 127.0.0.1:8000; +} + +upstream defguard-grpc { + server 127.0.0.1:50055; +} + +server { + listen 443 ssl; + http2 on; + server_name my-server.defguard.net; + access_log /var/log/nginx/defguard.log; + error_log /var/log/nginx/defguard.e.log; + + ssl_certificate /etc/letsencrypt/live/my-server.defguard.net/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/my-server.defguard.net/privkey.pem; + ssl_trusted_certificate /etc/letsencrypt/live/my-server.defguard.net/fullchain.pem; + + client_max_body_size 128M; + + location / { + proxy_pass http://defguard; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + } +} + +server { + listen 444 ssl http2; + server_name my-server.defguard.net; + access_log /var/log/nginx/defguard-grpc.log; + error_log /var/log/nginx/defguard-grpc.e.log; + + ssl_certificate /etc/letsencrypt/live/my-server.defguard.net/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/my-server.defguard.net/privkey.pem; + + client_max_body_size 200m; + + location / { + grpc_pass grpc://defguard-grpc; + } +} +``` + +Enable the configuration and reload NGINX: + +```bash +ln -s /etc/nginx/sites-available/my-server.defguard.net.conf /etc/nginx/sites-enabled/my-server.defguard.net.conf + +systemctl reload nginx.service +``` + +To verify, run: + +```bash +curl https://my-server.defguard.net/api/v1/health +# Expected output: +alive +``` + +{% hint style="info" %} +If you use this simple setup and run all services on one server, you can use [NGINX access restrictions](https://docs.nginx.com/nginx/admin-guide/security-controls/controlling-access-proxied-tcp/) for securing core and allowing to access the _my-server.defguard.net_ only to selected networks - blocking the direct access from the Internet. +{% endhint %} + +### Defguard Proxy (Enrollment Service) NGINX configuration + +The Proxy service exposes APIs for enrollment, remote onboarding, and desktop client configuration.\ +Create its NGINX configuration file: + +`/etc/nginx/sites-available/enroll.defguard.net.conf` + +```nginx +upstream defguard-proxy { + server 127.0.0.1:8080; +} + +upstream proxy-grpc { + server 127.0.0.1:50051; +} + +server { + listen 443 ssl http2; + server_name enroll.defguard.net; + access_log /var/log/nginx/enroll.log; + error_log /var/log/nginx/enroll.e.log; + + ssl_certificate /etc/letsencrypt/live/enroll.defguard.net/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/enroll.defguard.net/privkey.pem; + + client_max_body_size 200m; + + location / { + proxy_http_version 1.1; + proxy_pass http://defguard-proxy; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_read_timeout 86400s; + proxy_send_timeout 86400s; + } +} + +server { + listen 444 ssl http2; + server_name enroll.defguard.net; + access_log /var/log/nginx/enroll-grpc.log; + error_log /var/log/nginx/enroll-grpc.e.log; + + ssl_certificate /etc/letsencrypt/live/enroll.defguard.net/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/enroll.defguard.net/privkey.pem; + + client_max_body_size 200m; + + location / { + grpc_pass grpc://proxy-grpc; + grpc_socket_keepalive on; + grpc_read_timeout 3000s; + grpc_send_timeout 3000s; + grpc_next_upstream_timeout 0; + + proxy_request_buffering off; + proxy_buffering off; + proxy_connect_timeout 3000s; + proxy_send_timeout 3000s; + proxy_read_timeout 3000s; + proxy_socket_keepalive on; + + keepalive_timeout 90s; + send_timeout 90s; + + client_body_timeout 3000s; + } +} +``` + +Enable and restart NGINX: + +```bash +ln -s /etc/nginx/sites-available/enroll.defguard.net.conf /etc/nginx/sites-enabled/enroll.defguard.net.conf + +systemctl restart nginx.service +``` + +### Security Recommendations + +* Only expose **HTTPS ports (443)** for web access. +* Do **not** expose internal **gRPC ports** (444, 50051, 50055) directly to the Internet. + +### Summary + +After completing the configuration: + +* Defguard Core is available at `https://my-server.defguard.net` +* Enrollment and onboarding services are available at `https://enroll.defguard.net` +* Both services are secured with SSL and reverse-proxied through NGINX. diff --git a/deployment-strategies/gateway/running-gateway-on-mikrotik-routers.md b/deployment-strategies/running-gateway-on-mikrotik-routers.md similarity index 90% rename from deployment-strategies/gateway/running-gateway-on-mikrotik-routers.md rename to deployment-strategies/running-gateway-on-mikrotik-routers.md index 8e802b0..46573cc 100644 --- a/deployment-strategies/gateway/running-gateway-on-mikrotik-routers.md +++ b/deployment-strategies/running-gateway-on-mikrotik-routers.md @@ -1,4 +1,11 @@ -# Running gateway on MikroTik routers +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/deployment-strategies/running-gateway-on-mikrotik-routers +--- + +# Running Gateway on MikroTik routers By leveraging the ability of some MikroTik routers to run Docker containers, it is possible to deploy the gateway directly on your router. @@ -9,9 +16,9 @@ Proceed with extra caution when working with your core infrastructure. All offic {% hint style="danger" %} Running the gateway on a MikroTik router is not fully supported. -Due to custom RouterOS kernel incompatibility this kind of deployment does not support [Access Control List](../../admin-and-features/access-control-list/) functionality. +Due to custom RouterOS kernel incompatibility this kind of deployment does not support [Access Control List](../features/access-control-list/) functionality. -To run the gateway you must explicitly disable firewall management using the [`DEFGUARD_DISABLE_FW_MGMT` option](../../configuration.md#gateway-configuration). +To run the gateway you must explicitly disable firewall management using the [`DEFGUARD_DISABLE_FW_MGMT` option](configuration.md#gateway-configuration). {% endhint %} ## Prerequisites @@ -19,7 +26,7 @@ To run the gateway you must explicitly disable firewall management using the [`D * RouterOS device with ARM or ARM64 architecture (popular home lab choices include RB4011 or RB5009) * `Container` package installed and enabled * Running Defguard core instance with a WireGuard location configured -* (optional) Self-signed certificate generated by following [gRPC SSL setup guide](../grpc-ssl-communication.md) +* (optional) Self-signed certificate generated by following [gRPC SSL setup guide](grpc-ssl-communication.md) ## Setup diff --git a/deployment-strategies/running-gateway-on-opnsense-firewall.md b/deployment-strategies/running-gateway-on-opnsense-firewall.md new file mode 100644 index 0000000..4994b2c --- /dev/null +++ b/deployment-strategies/running-gateway-on-opnsense-firewall.md @@ -0,0 +1,55 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/deployment-strategies/running-gateway-on-opnsense-firewall +--- + +# Running Gateway on OPNsense firewall + +## OPNsense plugin + +[OPNsense®](https://opnsense.org/) is an open source, feature rich firewall and routing platform, offering cutting-edge network protection. + +To start Defguard Gateway as OPNsense plugin: + +1. On the [release page](https://github.com/DefGuard/gateway/releases) find and download OPNsense package which will be named:\ + `defguard-gateway_VERSION_x86_64-unknown-opnsense.pkg` – this package **includes both Defguard Gateway and OPNsense plugin.** +2. Install the package: + +```bash +pkg add defguard-gateway_VERSION_x86_64-unknown-opnsense.pkg +``` + +3. Refresh your OPNsense UI by running command below: + +```bash +opnsense-patch +``` + +4. Go to your OPNsense UI and navigate to **VPN** > **Defguard Gateway**. + +
+ +5. Fill out the form with appropriate values, click **Save**, and then click **Start/Restart.** + +{% hint style="info" %} +You can find detailed description of all fields [here](configuration.md#gateway-configuration). +{% endhint %} + +If everything went well, Defguard Gateway should be connected to Defguard Core and you can start [adding new devices to your network](../features/wireguard/remote-desktop-activation.md). + +See also: [how to configure Defguard in OPNsense](../features/gateway.md) + +## Binary Install + +1. Checkout Gateway releases [here](https://github.com/DefGuard/gateway/releases) and download compatible binary from GitHub page. +2. Decompress and move to bin directory + +```sh +tar xcf ./gateway.tar.gz +sudo chmod +x gateway +sudo mv gateway /usr/bin/ +``` + +3. Start gateway `gateway -g -t ` diff --git a/deployment-strategies/setting-up-your-instance.md b/deployment-strategies/setting-up-your-instance.md index 8bedbe7..08b8912 100644 --- a/deployment-strategies/setting-up-your-instance.md +++ b/deployment-strategies/setting-up-your-instance.md @@ -1,75 +1,62 @@ +--- +description: >- + This documentation will guide you through the process of deploying your + Defguard instance. +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/deployment-strategies/setting-up-your-instance +--- + # Overview Welcome to the deployment strategies section of Defguard documentation. This guide covers the different ways you can deploy Defguard in your environment, from quick options using packages or Docker to more advanced setups with Kubernetes or Terraform. Whether you're running a small instance or preparing for a more complex production environment, this section will help you choose the deployment method that best fits your needs. -## Components - -Defguard comes with four main components: - -* **Core service** - main web UI and database -* **Proxy service** - used to safely expose a subset of public functionalities -* **VPN gateway server** - retrieves configuration from core and configures VPN interfaces on the gateway server -* **Provisioning station** - client application which can be started on any pc to auto-generate PGP keys for YubiKey - -There is one external component required: PostgreSQL database. - -## Hardware requirements - -All Defguard components are **very low resource-consuming**. All of them are written in [Rust](https://www.rust-lang.org) and are single binaries. As minimum setup as follows should be more than enough: - -| Resource | Minimum requirements | -| ------------ | ---------------------------- | -| CPU | 1 GHz | -| RAM | 2 GB (mostly for PostgreSQL) | -| Disk | 2 GB | -| Architecture | x86\_64, ARM64 | +## Before you begin -## Quick start +1. Make sure you understand [Defguard's architecture](../in-depth/architecture/), especially the division into the main components: Core, Proxy, Gateway. +2. Make sure your infrastructure is prepared by following our [recommendations](hardware-os-network-and-firewall-recommendations.md). -The easiest way to run your own Defguard instance is to use Docker and our [one-line install script](../getting-started/one-line-install.md). +## Initial deployment sequence -Just run the command below in your shell and follow the prompts: +Before deploying any Gateways, you must first install and configure the Core service. The Core acts as the central control plane - it manages configuration, authentication, and communication with all connected Gateways. -```bash -curl --proto '=https' --tlsv1.2 -sSf -L https://raw.githubusercontent.com/DefGuard/deployment/main/docker-compose/setup.sh -O && bash setup.sh -``` - -To learn more about the script and available options, please see the [documentation](../getting-started/one-line-install.md). - -## Manual deployment +Once the Core is running and accessible, log in to the admin interface and navigate to the Gateways section. Create a new Gateway entry to generate a unique registration token. This token will be used during the Gateway deployment process to securely link the Gateway instance with your Core. -If you prefer to configure and deploy Defguard manually, see the examples below: +After obtaining the token, proceed with deploying the Gateway service. During its initial setup, provide the generated token so that the Gateway can authenticate and register itself with the Core. Once registration is complete, the Gateway will appear in the Core dashboard and start receiving configuration updates automatically. -* [Docker Compose](docker-compose.md) -* [Kubernetes](kubernetes.md) +#### Long story short: -Client services +{% stepper %} +{% step %} +**Deploy Defguard Core service.** +{% endstep %} -* [Gateway](gateway/) -* [YubiBridge](../admin-and-features/yubikey-provisioning.md) +{% step %} +**Add a new location in Core's web interface and obtain a token.** -{% hint style="info" %} -On initial startup a new `admin` user will be created with a password which can be configured by the `DEFGUARD_DEFAULT_ADMIN_PASSWORD` environment variable (by default it's `pass123`). Use those credentials to log in and start exploring the system. -{% endhint %} +More on that [here](gateway.md). +{% endstep %} -### Tips +{% step %} +**Deploy Gateway configured with the token.** +{% endstep %} +{% endstepper %} -See our [Configuration](../configuration.md) document to check all configurable things before you start. And learn about our Architecture [here](../in-depth/architecture/) to see how it works. +## Choose your deployment strategy -## Updates +| Strategy name | Difficulty | Production readiness | Purpose | +| ------------------------------------------------------------- | ---------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | ------------------------------- | +| [One-line script](../getting-started/one-line-install.md) | :green\_circle: Easy, single command installation | :x: Doesn't follow the [recommendations](hardware-os-network-and-firewall-recommendations.md) | For testing purposes only | +| [Standalone packages](standalone-package-based-installation/) | :green\_circle: Easy, using apt and dpkg | :white\_check\_mark: If you followed the [recommendations](hardware-os-network-and-firewall-recommendations.md) | Small to medium deployment | +| [Docker Compose](docker-compose.md) | :yellow\_circle: Medium, Docker knowledge required | :white\_check\_mark: If you followed the [recommendations](hardware-os-network-and-firewall-recommendations.md) | Small to medium deployment | +| [Kubernetes](kubernetes.md) | :red\_circle: Advanced, requires a k8s cluster and administrator | :white\_check\_mark: If you followed the [recommendations](hardware-os-network-and-firewall-recommendations.md) | Large or enterprise deployments | +| [Terraform](terraform.md) | :red\_circle: Advanced, requires an AWS account and knowledge | :white\_check\_mark: | Large or enterprise deployments | +| [AMI and AWS CloudFormation](amis-and-aws-cloudformation/) | :red\_circle: Advanced, requires an AWS account and knowledge | :white\_check\_mark: | Large or enterprise deployments | -All services within the Defguard architecture can be updated independently, although it's recommended to always use newest version of services and update them all together to avoid situations like Core expecting some not existing feature in Gateway.\ -Check the GitHub repositories for each service to find their newest releases and release notes. +## Configure to your needs -* Docker - For Docker and Kubernetes based setup just change docker image version for service you want to update. -* Packages(DEB, RPM, etc.) - Currently we don't have any package repository so if you want to update your service installed as package you have to download new version from service repository. - -**GitHub Repositories:** - -* [Defguard Core](https://github.com/DefGuard/defguard/releases) -* [Defguard Proxy](https://github.com/DefGuard/proxy/releases) -* [Defguard Gateway](https://github.com/DefGuard/gateway/releases) -* [Defguard YubiBridge](https://github.com/DefGuard/YubiKey-Provision/releases) +See our [configuration documentation](configuration.md) to learn about all the settings you can change in your deployment. ## Backup @@ -84,4 +71,6 @@ docker exec {container_name} pg_dump -U {user_name} > {backup_file_name} ## Failover/HA/Clustering -For now the [Gateway](gateway/) can be deployed on multiple servers/firewall/routers for failover and HA - even if the connection to the Core will be lost, gateways will operate with their local cache/data and the VPN will be working. Same works the other way around if gateway don't work or is not available other features from Core like OpenID will be working. +The [Gateway](gateway.md) can be deployed on multiple servers, firewalls, or routers for failover and high availability (HA). Even if the connection to the Core is lost, gateways continue operating using their local cache and data, ensuring that the VPN remains functional. Conversely, if a gateway becomes unavailable, other Core features (such as OpenID) will continue to work normally. + +For details on deploying multiple Gateway to [High Availability and Failover](high-availability-and-failover/) documentation. diff --git a/deployment-strategies/standalone-package-based-installation.md b/deployment-strategies/standalone-package-based-installation/README.md similarity index 55% rename from deployment-strategies/standalone-package-based-installation.md rename to deployment-strategies/standalone-package-based-installation/README.md index ab387bc..7ca61ec 100644 --- a/deployment-strategies/standalone-package-based-installation.md +++ b/deployment-strategies/standalone-package-based-installation/README.md @@ -1,53 +1,42 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/deployment-strategies/standalone-package-based-installation +--- + # Standalone package based installation ## Introduction -This guide will walk you through the process of installing and running Debian packages (.deb) for **core, gateway, proxy** services on one server - as a **simple example**. - -{% hint style="warning" %} -For production deployment we would recommend to divide services to multiple servers, e.g.: - -* Defguard Proxy (used for remote enrollment, onboarding and configuring desktop clients) should be on a DMZ node that is exposed in the Internet -* Defguard Gateway should be on your firewall/router -* Defguard Core (the main control plain panel) - should be in internal network (intranet) and available only by intranet or VPN itself. -{% endhint %} +This guide will walk you through the process of installing and running Defguard using system packages. -We will cover system requirements, additional dependencies, installation steps, and examples of configuration files and step by step running all services. In this example we will use nginx for a web server (proxy) exposing and securing web based services. - -Examples will be made by using [**Debian 12**](https://www.debian.org/releases/stable/releasenotes) **and Ubuntu based system.** +We will cover system requirements, additional dependencies, installation steps, and examples of configuration files and step by step running all services. In this example we will use NGINX for a web server (proxy) exposing and securing web based services. {% hint style="info" %} -We also provide **RPM packages** - the procedure is similar to the one for installing DEB packages. If you need help installing RPM packages[ this guide offers help.](https://phoenixnap.com/kb/how-to-install-rpm-file-centos-linux) +Make sure you understand [Defguard's architecture](../../in-depth/architecture/), especially the division into the main components: Core, Proxy, Gateway. {% endhint %} -Please also remember to [secure the setup after installation](standalone-package-based-installation.md#securing-the-setup). - -### Hardware Requirements - -All Defguard components are **very low resource-consuming**. All of them are written in [Rust](https://www.rust-lang.org) and are single binaries. As minimum setup as follows should be more then enough: - -| Resource | Minimum requirements | -| ------------ | ---------------------------- | -| CPU | 1 GHz | -| RAM | 2 GB (mostly for PostgreSQL) | -| Disk | 2 GB | -| Architecture | x86\_64, ARM64 | +{% hint style="warning" %} +This is a simple guide installing all components on a single server. For production make sure your infrastructure is prepared by following our [recommendations](../hardware-os-network-and-firewall-recommendations.md). +{% endhint %} -### System Requirements +## System Requirements Before proceeding with the installation, ensure your system meets the following requirements: -* Debian-based operating system (Debian, Ubuntu, etc.). +* One of the installed: + * Debian/Ubuntu + * Fedora/Red Hat Linux/SUSE + * FreeBSD * Administrative (sudo) privileges. * A server with a public IP address (and you know what that IP address is and to which interface it's assigned) - in this example we use: 185.33.37.51. * You have a domain name and know how to assign IP and manage subdomains, in our example: Defguard main url will be _my-server.defguard.net_ (and the subdomain is pointed to 185.33.37.51). -* Defguard [enrollment service](https://defguard.gitbook.io/defguard/help/enrollment) (run by proxy) that will enable [remote onboarding, enrollment](https://defguard.gitbook.io/defguard/help/enrollment) and [easy configuration for our Desktop Clients (by adding Defguard instances)](../help/desktop-client/instance-configuration.md#adding-instance) with instance URL and one simple token - in this tutorial we use: _enroll.defguard.net_ (this subdomain also points to 185.33.37.51). -* If you have a **firewall**, we assume you have **open port 443** in order to expose both Defguard and enrollment service, but also to automatically issue for these domains SSL Certificates. Port 444 (used for internal GRPC communication) **should not be exposed public.** +* Defguard [enrollment service](https://defguard.gitbook.io/defguard/help/enrollment) (run by proxy) that will enable [remote onboarding, enrollment](https://defguard.gitbook.io/defguard/help/enrollment) and [easy configuration for our Desktop Clients (by adding Defguard instances)](../../using-defguard-for-end-users/desktop-client/instance-configuration.md#adding-instance) with instance URL and one simple token - in this tutorial we use: _enroll.defguard.net_ (this subdomain also points to 185.33.37.51). +* If you have a **firewall**, we assume you have **opened port 443** in order to expose both Defguard and enrollment service, but also to automatically issue for these domains SSL Certificates. Port 444 (used for internal GRPC communication) **should not be publicly exposed.** * System clock is synchronized using Network Time Protocol (NTP). This is important for time-based one-time password (TOTP) codes. -### Prerequisites - -#### PostgreSQL +## Installing a database Defguard Core uses [PostgreSQL](https://www.postgresql.org) database, so if you do not have installed and configured yet, you can do it in this section. For this tutorial we need to create **a user with superuser privileges and database**. @@ -77,37 +66,24 @@ defguard=# exit * we created `.pgpass` file that consist of `::::` * we connected into the `defguard` database to verify `defguard` user can communicate with the database -#### NGINX - -To expose our services in the server we need to configure a reverse proxy server. For this we will use nginx web server with ssl certificates for enabling https protocol. - -To get started, we need to install: - -``` -apt install nginx certbot -``` - -Enable nginx service +## Installing packages -``` -systemctl enable nginx.service -systemctl start nginx.service -``` +{% hint style="info" %} +Defguard also have public APT repository, if you want know how to set it up, follow [this guide](defguard-apt-repository.md). +{% endhint %} -Disable all default domains: +### Core -``` -unlink /etc/nginx/sites-enabled/default -``` +You can find the URL to your package from the releases of the Core component on [GitHub](https://github.com/DefGuard/defguard/releases). -## Installing packages +
OS distributionOS architectureRelease artifact naming convention
Debian/Ubuntux86defguard-X.Y.Z-x86_64-unknown-linux-gnu.deb
Fedora/Red Hat Linux/SUSEx86defguard-X.Y.Z-x86_64-unknown-linux-gnu.rpm
FreeBSDx86defguard-X.Y.Z_x86_64-unknown-freebsd.pkg
-### Core service +Choose the release you want to install, then choose the right package from the list of release's assets, and copy the package URL. -Navigate to [core repository release](https://github.com/DefGuard/defguard/releases) and choose version of core package that you want to obtain that has debian package and then swap `` in the following command: +Download the package to your server using `wget:` ``` -wget https://github.com/DefGuard/defguard/releases/download//defguard--x86_64-unknown-linux-gnu.deb +wget ``` Example: @@ -116,31 +92,41 @@ Example: wget https://github.com/DefGuard/defguard/releases/download/v0.11.0/defguard-0.11.0-x86_64-unknown-linux-gnu.deb ``` -You can also download directly from the Github realse page, but please note that you should know the path where this could be storead after downloading. Once the package is downloaded, install it using dpkg: +You can also download directly from the Github release page, but please note that you should know the path where this could be stored after downloading. + +Once the package appropriate for your distribution is downloaded, install it using the appropriate system tool: ``` -dpkg -i /defguard--x86_64-unknown-linux-gnu.deb -``` +# on Debian/Ubuntu +sudo dpkg -i /defguard-X.Y.Z-x86_64-unknown-linux-gnu.deb -Example: +# on Fedora/Red Hat Linux/SUSE +sudo rpm -i /defguard-X.Y.Z-x86_64-unknown-linux-gnu.rpm -``` -dpkg -i defguard-0.11.0-x86_64-unknown-linux-gnu.deb +# FreeBSD +pkg install openssl +pkg add /defguard-X.Y.Z_x86_64-unknown-freebsd.pkg ``` -You can check is core installed properly: +You can check if Defguard Core has been installed properly: ``` # defguard -V -defguard 0.11.0 +defguard_common 1.6.0 ``` -### Gateway service +### Gateway + +You can find the URL to your package from the releases of Defguard Gateway on [GitHub](https://github.com/DefGuard/gateway/releases). + +
OS discibutionOS architectureRelease artifact naming convention
Debian/Ubuntux86defguard-gateway_X.Y.Z_x86_64-unknown-linux-gnu.deb
Debian/UbuntuARMdefguard-gateway_X.Y.Z_aarch64-unknown-linux-gnu.deb
Fedora/Red Hat Linux/SUSEx86defguard-gateway_X.Y.Z_x86_64-unknown-linux-gnu.rpm
FreeBSDx86defguard-gateway_X.Y.Z_x86_64-unknown-freebsd.pkg
+ +Choose the release you want to install, then choose the right package from the list of release's assets, and copy the package URL. -Navigate to [gateway repository release](https://github.com/DefGuard/gateway/releases) and choose version of core package that you want to obtain that has debian package and then swap `` in the following command: +Download the package to your server using `wget:` ``` -# wget https://github.com/DefGuard/gateway/releases/download//defguard-gateway__x86_64-unknown-linux-gnu.deb +wget ``` Example: @@ -149,16 +135,26 @@ Example: # wget https://github.com/DefGuard/gateway/releases/download/v0.7.0/defguard-gateway_0.7.0_x86_64-unknown-linux-gnu.deb ``` -You can also download directly from the Github realse page, but please note that you should know the path where this could be storead after downloading. Once the package is downloaded, install it using dpkg: +You can also download directly from the Github release page, but please note that you should know the path where this could be stored after downloading. + +Once the package appropriate for your distribution is downloaded, install it using the appropriate system tool: ``` -dpkg -i /defguard-gateway__x86_64-unknown-linux-gnu.deb +# on Debian/Ubuntu +sudo dpkg -i /defguard-gateway-X.Y.Z-x86_64-unknown-linux-gnu.deb + +# on Fedora/Red Hat Linux/SUSE +sudo rpm -i /defguard-gateway-X.Y.Z-x86_64-unknown-linux-gnu.rpm + +# FreeBSD +pkg install openssl +pkg add /defguard-gateway-X.Y.Z_x86_64-unknown-freebsd.pkg ``` Example: ``` -dpkg -i defguard-gateway_0.7.0_x86_64-unknown-linux-gnu.deb +sudo dpkg -i defguard-gateway_0.7.0_x86_64-unknown-linux-gnu.deb ``` You can check is core installed properly: @@ -168,12 +164,18 @@ You can check is core installed properly: defguard-gateway 0.7.0 ``` -### Proxy service +### Proxy + +You can find the URL to your package from the releases of Defguard Proxy component on [GitHub](https://github.com/DefGuard/proxy/releases). + +
OS discibutionOS architectureRelease artifact naming convention
Debian/Ubuntux86defguard-proxy-X.Y.Z-x86_64-unknown-linux-gnu.deb
Fedora/Red Hat Linux/SUSEx86defguard-proxy-X.Y.Z-x86_64-unknown-linux-gnu.rpm
-Navigate to [proxy repository release](https://github.com/DefGuard/proxy/releases) and choose version of core package that you want to obtain that has debian package and then swap `` in the following command: +Choose the release you want to install, then choose the right package from the list of release's assets, and copy the package URL. + +Download the package to your server using `wget:` ``` -wget https://github.com/DefGuard/proxy/releases/download/>/defguard-proxy--x86_64-unknown-linux-gnu.deb +wget ``` Example: @@ -182,7 +184,9 @@ Example: wget https://github.com/DefGuard/proxy/releases/download/v0.5.0/defguard-proxy-0.5.0-x86_64-unknown-linux-gnu.deb ``` -You can also download directly from the Github realse page, but please note that you should know the path where this could be storead after downloading. Once the package is downloaded, install it using dpkg: +You can also download directly from the Github release page, but please note that you should know the path where this could be stored after downloading. + +Once the package appropriate for your distribution is downloaded, install it using the appropriate system tool: ``` dpkg -i /defguard-proxy--x86_64-unknown-linux-gnu.deb @@ -191,7 +195,17 @@ dpkg -i /defguard-proxy--x86_64-unknown-linux-gnu.deb Example: ``` -dpkg -i defguard-proxy-0.5.0-x86_64-unknown-linux-gnu.deb +# on Debian/Ubuntu +sudo dpkg -i /defguard-proxy-X.Y.Z-x86_64-unknown-linux-gnu.deb +# if you added apt repository +sudo apt install defguard-proxy + +# on Fedora/Red Hat Linux/SUSE +sudo rpm -i /defguard-proxy-X.Y.Z-x86_64-unknown-linux-gnu.rpm + +# FreeBSD +pkg install openssl +pkg add /defguard-proxy-X.Y.Z_x86_64-unknown-freebsd.pkg ``` You can check is core installed properly: @@ -203,21 +217,7 @@ defguard-proxy 0.5.0 ## Running Defguard -### Generating SSL Certificates with Let'sEncrypt - -Before we run Defguard and configure the reverse proxy, first let's prepare SSL certificates that will be used by the NGINX service. We will generate a certificate for two domains we use in this example: _my-service.defguard.net_ and _enroll.defguard.net_: - -``` -certbot certonly --non-interactive --agree-tos --standalone --email admin@teonite.com -d my-server.defguard.net -d enroll.defgurd.net -``` - -Certbot will generate certificate in fullchain.pem and privkey.pem in path: - -`/etc/letsencrypt/live/my-server.defguard.net` - -`/etc/letsencrypt/live/enrolldefguard.net` - -### Core - the control plain +### Core To run core service we need to configure `/etc/defguard/core.conf`. @@ -227,7 +227,7 @@ To generate any secret (which **we recommend to be 64 chars)**, use the followin `openssl rand -base64 55 | tr -d "=+/" | tr -d '\n' | cut -c1-64` {% endhint %} -As previously mentioned, in this tutorial we wil use server domain `my-server.defguard.net`. +As previously mentioned, in this tutorial we will use server domain `my-server.defguard.net`. Example `/etc/defguard/core.conf`: @@ -281,15 +281,19 @@ DEFGUARD_DB_PASSWORD="defguard" DATABASE_URL="postgresql://defguard:defguard@localhost/defguard" ``` -**If you have configured your postgres with different names than in** [**PostgreSQL guide**](standalone-package-based-installation.md#postgresql)**, you can change it in DB configuration part. LDAP configuration is not part of this tutorial, you can also commented those lines.** +**If you have configured PostgreSQL database with different names than in** [**PostgreSQL guide**](./#postgresql)**, you can change it in DB configuration part. LDAP configuration is not part of this tutorial, you can also commented those lines.** -**We will back to this configuration to connect Defguard core with proxy in the** [**Run proxy**](standalone-package-based-installation.md#run-proxy) **section. For now `DEFGUARD_PROXY_URL` is commented.** +**We will back to this configuration to connect Defguard core with proxy in the** [**Run proxy**](./#run-proxy) **section. For now `DEFGUARD_PROXY_URL` is commented.** -After changes, you can simply enable and start your Defguard core service: +After changes, you can simply enable and start your Defguard Core service: ``` +# on systems with systemd (like Debian, Ubuntu, Fedora/Red Hat Linux/SUSE) systemctl enable defguard.service systemctl start defguard.service + +# on systems with rc.d (like FreeBSD, NetBSD) +sudo /usr/local/etc/rc.d/defguard start ``` To see logs, type journalctl command: @@ -306,87 +310,7 @@ Jul 29 13:57:19 defguard-testing defguard[2776504]: 2024-07-29T11:57:19.747717Z Jul 29 13:57:19 defguard-testing defguard[2776504]: 2024-07-29T11:57:19.780563Z INFO defguard: Started web services ``` -#### Configuring NGINX reverse proxy with SSL - -Now, we are able to create our first nginx config for Defguard core service with _my-server.defguard.net_. - -Create config file `/etc/nginx/site-available/my-server.defguard.net.conf`, example config file for _my-server.defguard.ent_ should look like this: - -``` -upstream defguard { - server 127.0.0.1:8000; -} - -upstream defguard-grpc { - server 127.0.0.1:50055; -} - -server { - listen 443 ssl http2; - server_name my-server.defguard.net; - access_log /var/log/nginx/defguard.log; - error_log /var/log/nginx/defguard.e.log; - - ssl_certificate /etc/letsencrypt/live/my-server.defguard.net/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/my-server.defguard.net/privkey.pem; - ssl_trusted_certificate /etc/letsencrypt/live/my-server.defguard.net/fullchain.pem; - - client_max_body_size 128M; - - location / { - proxy_pass http://defguard; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - } -} - -server { - listen 444 ssl http2; - server_name my-server.defguard.net; - access_log /var/log/nginx/defguard-grpc.log; - error_log /var/log/nginx/defguard-grpc.e.log; - - ssl_certificate /etc/letsencrypt/live/my-server.defguard.net/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/my-server.defguard.net/privkey.pem; - - client_max_body_size 200m; - - location / { - grpc_pass grpc://defguard-grpc; - } -} -``` - -Link it to `/etc/nginx/site-available/` - -``` -ln -s /etc/nginx/sites-available/my-server.defguard.net.conf /etc/nginx/sites-enabled/my-server.defguard.net.conf -``` - -Restart nginx.service to activate changes: - -``` -systemctl reload nginx.service -``` - -Test your domain on another terminal tab - -``` -$ curl https://my-server.defguard.net/api/v1/health -alive -``` - -Success! We can move on to the next service. - -{% hint style="danger" %} -If you use this simple setup and run all services on one server, you can use [NGINX access restrictions](https://docs.nginx.com/nginx/admin-guide/security-controls/controlling-access-proxied-tcp/) for securing core and allowing to access the _my-server.defguard.net_ only to selected networks - blocking the direct access from the Internet. -{% endhint %} - -### Gateway - the WireGuard VPN service +### Gateway To run gateway, we should do two things: @@ -395,24 +319,7 @@ To run gateway, we should do two things: #### Setup location for gateway -Now, after setting up core service you should go to the website that you set on `DEFGUARD_URL`. The link should redirect you to login page. To log in type these credentials from `/etc/defguard/core.conf` - -* login: admin -* password: `DEFGUARD_DEFAULT_ADMIN_PASSWORD` (by default: pass123) - -Now we can configure our first location. Depends on what is more convenient for you, choose configuration from Wireguard file or do it manually. - -

Location wizard

- -

Location configuration

- -After saving configuration for location you should be redirect to Location overview page, where at the top right corner is `Edit Locations Settings` button, click on it. - -

Manual configuration

- -In `Gateway server setup` copy two variables: `DEFGUARD_TOKEN` and `DEFGUARD_GRPC_URL` - -

Gateway server setup

+Follow [this guide](../gateway.md) for setting up the location in Defguard Core web interface. You should leave the guide with a token for your new Gateway instance and use it in the following configuration. #### Create config file @@ -478,9 +385,18 @@ syslog_socket = "/var/run/log" Now we can run gateway service with configuration above: ``` -# systemctl enable defguard-gateway.service -# systemctl start defguard-gateway.service -# journalctl -u defguard-gateway.service | tail -n 50 +# on systems with systemd (like Debian, Ubuntu, Fedora/Red Hat Linux/SUSE) +systemctl enable defguard-gateway.service +systemctl start defguard-gateway.service + +# on systems with rc.d (like FreeBSD, NetBSD) +sudo /usr/local/etc/rc.d/defguard_gateway start +``` + +Check the logs of the gateway service: + +``` +journalctl -u defguard-gateway.service | tail -n 50 [2024-07-27T16:37:56Z INFO defguard_gateway::gateway] Starting defguard gateway version 0.7.0 with configuration: Config { token: "***", name: Some("Gateway on server X"), grpc_url: "https://my-server.defguard.net:444/", userspace: false, grpc_ca: None, stats_period: 60, ifname: "wg0", pidfile: None, use_syslog: false, syslog_facility: "LOG_USER", syslog_socket: "/var/run/log", config_path: None, pre_up: None, post_up: None, pre_down: None, post_down: None, health_port: None } [2024-07-27T16:37:56Z INFO defguard_gateway::gateway] gRPC server connection setup done. [2024-07-27T16:37:56Z INFO defguard_wireguard_rs::wgapi_linux] Creating interface wg0 @@ -502,13 +418,22 @@ On the other side, core service should print those informations: 2024-07-27T16:37:56.388810Z INFO defguard::grpc::gateway: Starting update stream to gateway: user, network [ID 1] Szczecin ``` -### Proxy - enrollment, onboardin and desktop configuration service +### Proxy + +To run proxy service (for [remote onboarding & enrollment](../../using-defguard-for-end-users/enrollment/)), we can do it by: + +``` +# on systems with systemd (like Debian, Ubuntu, Fedora/Red Hat Linux/SUSE) +systemctl enable defguard-proxy.service +systemctl start defguard-proxy.service + +# on systems with rc.d (like FreeBSD, NetBSD) +sudo /usr/local/etc/rc.d/defguard_proxy start +``` -To run proxy service (for [remote onboarding & enrollment](../help/enrollment/)), we can do it by: +Check the logs afterwards. Should look like this: ``` -# systemctl enable defguard-proxy.service -# systemctl start defguard-proxy.service # journalctl -u defguard-proxy.service | tail -n 50 2024-07-27T16:53:58.584154Z INFO defguard_proxy::tracing: Tracing initialized 2024-07-27T16:53:58.584233Z INFO defguard_proxy::http: Starting Defguard proxy server @@ -518,85 +443,15 @@ To run proxy service (for [remote onboarding & enrollment](../help/enrollment/)) 2024-07-27T16:53:58.585262Z INFO defguard_proxy::http: API web server is listening on 0.0.0.0:8080 ``` -#### Configuring NGiNX reverse proxy for enrollment +### Reverse proxy -{% hint style="info" %} -Please note that [we already have issued the enrollemnt domain SSL certificate](standalone-package-based-installation.md#generating-ssl-certificates). -{% endhint %} - -Create config file `/etc/nginx/sites-available/enroll.defguard.net.conf`, example config file for _enroll.defguard.net_ should look like this: - -``` -upstream defguard-proxy { - server 127.0.0.1:8080; -} - -upstream proxy-grpc { - server 127.0.0.1:50051; -} - -server { - listen 443 ssl http2; - server_name enroll.defguard.net; - access_log /var/log/nginx/enroll.log; - error_log /var/log/nginx/enroll.e.log; - - ssl_certificate /etc/letsencrypt/live/my-server.defguard.net/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/my-server.defguard.net/privkey.pem; - - client_max_body_size 200m; +The reverse proxy acts as an intermediary between users and Defguard services, handling HTTPS requests, routing internal gRPC communication, and ensuring encrypted connections between all components. - location / { - proxy_pass http://defguard-proxy; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - } -} +Follow our additional guide on [configuring reverse proxy for for Core and Proxy service](../reverse-proxy-configuration-using-nginx.md). After having the reverse proxy configured and running you can continue with this guide. -server { - listen 444 ssl http2; - server_name enroll.defguard.net; - access_log /var/log/nginx/enroll.log; - error_log /var/log/nginx/enroll.e.log; +### Enabling Proxy service in the Core - ssl_certificate /etc/letsencrypt/live/my-server.defguard.net/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/my-server.defguard.net/privkey.pem; - - client_max_body_size 200m; - - location / { - grpc_pass grpc://proxy-grpc; - grpc_socket_keepalive on; - grpc_read_timeout 3000s; - grpc_send_timeout 3000s; - grpc_next_upstream_timeout 0; - - proxy_request_buffering off; - proxy_buffering off; - proxy_connect_timeout 3000s; - proxy_send_timeout 3000s; - proxy_read_timeout 3000s; - proxy_socket_keepalive on; - - keepalive_timeout 90s; - send_timeout 90s; - - client_body_timeout 3000s; - } -} -``` - -Enable configuration and restart nginx: - -``` -ln -s /etc/nginx/sites-available/enroll.defguard.conf /etc/nginx/sites-enabled/enroll.defguard.conf -systemctl restart nginx.service -``` - -#### Enabling Proxy service in the Core - -Now, we can update our **core configuration** in `/etc/defguard/core.conf` by uncommenting `DEFGUARD_PROXY_URL` +Now, we can update our Core service configuration in `/etc/defguard/core.conf` to use the Proxy service by uncommenting `DEFGUARD_PROXY_URL` ``` # Proxy connection configuration @@ -666,9 +521,9 @@ systemctl restart defguard.service Now you have full working Defguard services 🥳 {% endhint %} -You can [configure your desktop client using the enrollment](../help/desktop-client/instance-configuration.md#adding-instance) service and use your VPN. +You can [configure your desktop client using the enrollment](../../using-defguard-for-end-users/desktop-client/instance-configuration.md#adding-instance) service and use your VPN. -If you would like to use the feature in the desktop client to route **All traffic** through the VPN please configure your firewall to enable Internet access through your VPN - [here you can find exaples how to do it](https://defguard.gitbook.io/defguard/tutorials/step-by-step-setting-up-a-vpn-server#enabling-to-access-internet-through-your-vpn). +If you would like to use the feature in the desktop client to route **All traffic** through the VPN please configure your firewall to enable Internet access through your VPN – [here you can find exaples how to do it](https://defguard.gitbook.io/defguard/tutorials/step-by-step-setting-up-a-vpn-server#enabling-to-access-internet-through-your-vpn). ## Securing the setup @@ -685,4 +540,38 @@ After the installation please make sure that **only the following ports are open * 50055 {% endhint %} -Also this setup provides only communication encryption between Defguard components, if you additionally like for core/proxy and gateway to have authorization - [please setup a custom SSL CA](grpc-ssl-communication.md#custom-ssl-ca-and-certificates). +Also this setup provides only communication encryption between Defguard components, if you additionally like for core/proxy and gateway to have authorization – [please setup a custom SSL CA](../grpc-ssl-communication.md#custom-ssl-ca-and-certificates). + +## Upgrading packages + +{% hint style="info" %} +If the new version introduces changes to the default configuration, the existing configuration file will not be overwritten. Instead, a separate file containing the updated default configuration will be created. +{% endhint %} + +#### FreeBSD/OPNsense + +1. Uninstall the current version. + + ```bash + # Core package + pkg delete defguard + + # or Gateway package + pkg delete defguard-gateway + + # or Proxy package + pkg delete defguard-proxy + ``` +2. Install a newer version (as described [above](./#installing-packages)). +3. Restart the service. + + ```bash + # Core service + sudo /usr/local/etc/rc.d/defguard restart + + # or Gateway service + sudo /usr/local/etc/rc.d/defguard_gateway restart + + # or Proxy service + sudo /usr/local/etc/rc.d/defguard_proxy restart + ``` diff --git a/deployment-strategies/standalone-package-based-installation/defguard-apt-repository.md b/deployment-strategies/standalone-package-based-installation/defguard-apt-repository.md new file mode 100644 index 0000000..681f810 --- /dev/null +++ b/deployment-strategies/standalone-package-based-installation/defguard-apt-repository.md @@ -0,0 +1,73 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/deployment-strategies/standalone-package-based-installation/defguard-apt-repository +--- + +# Defguard APT repository + +### Distribution + +Defguard APT repository provides packages for **Debian 12**, **Debian 13**, and **Ubuntu 22.04/24.04 LTS.**\ +Packages are available on the default `trixie` repository distribution. + +### Adding Defguard APT repository + +To add Defguard APT repository, run following commands in your terminal: + +```bash +sudo apt update +sudo apt install -y ca-certificates curl +#Add official Defguard public GPG key +sudo install -m 0755 -d /etc/apt/keyrings +sudo curl -fsSL https://apt.defguard.net/defguard.asc -o /etc/apt/keyrings/defguard.asc +sudo chmod a+r /etc/apt/keyrings/defguard.asc + +#Add APT repository +echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/defguard.asc] https://apt.defguard.net/ trixie release " | \ + sudo tee /etc/apt/sources.list.d/defguard.list > /dev/null + +sudo apt update +``` + +Afterward running these commands, you can install and update Defguard via APT. + +After new release, simply use `sudo apt update` to update repository. + +### Using pre-release builds + +Defguard has two separate components on one APT repository, **release** and **pre-release.** If you want to install packages from pre-release, simply change `release` to `pre-release` in the installation steps described above, or run the following line. + +```sh +echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/defguard.asc] https://apt.defguard.net/ trixie pre-release " | \ + sudo tee /etc/apt/sources.list.d/defguard.list > /dev/null + +sudo apt update +``` + +### Installing packages + +Defguard Core: + +```sh +sudo apt install defguard +``` + +Defguard Proxy: + +```sh +sudo apt install defguard-proxy +``` + +Defguard Gateway: + +```sh +sudo apt install defguard-gateway +``` + +Defguard Client: + +```sh +sudo apt install defguard-client +``` diff --git a/deployment-strategies/terraform.md b/deployment-strategies/terraform.md index 69637c2..dda954b 100644 --- a/deployment-strategies/terraform.md +++ b/deployment-strategies/terraform.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/deployment-strategies/terraform +--- + # Terraform {% hint style="info" %} @@ -232,54 +239,289 @@ ingress { } ``` -If you want to run Core web UI behind a reverse proxy (e.g. to enable HTTPS), you should modify the ingress rules to allow access from the reverse proxy server's IP address or security group: +If you want to run Core web UI behind a reverse proxy (e.g. to enable HTTPS), you would need to do the following: + +1. Prevent direct access to the services by removing their ingress rules: ```hcl +# This is in the Core security group block +[...] ingress { from_port = local.core_http_port to_port = local.core_http_port protocol = "tcp" - security_groups = [ ] - # OR - # cidr_blocks = ["/32"] + cidr_blocks = [ + for eip in aws_eip.defguard_gateway_endpoint : "${eip.public_ip}/32" + ] } ``` -You should then restrict Core access on your reverse proxy, so Core still stays accessible only through the VPN. - -For testing purposes, you can also allow access to the Core web UI from your public IP address by appending the following block to the "Core network configuration" section: - -````hcl +```hcl +# This is in the Proxy security group block +[...] ingress { - from_port = local.core_http_port - to_port = local.core_http_port + from_port = local.proxy_http_port + to_port = local.proxy_http_port protocol = "tcp" - cidr_blocks = ["/32"] + cidr_blocks = ["0.0.0.0/0"] } ``` -This will allow you to access the Core web UI from your public IP address. However, this is not recommended for production environments, as it exposes the Core web UI to the public. +2. Add a second public subnet (load balancers require it): + +```hcl +vpc_public_subnets = ["10.0.1.0/24", "10.0.4.0/24"] +``` + +3. Add the load balancer configuration + +```hcl +########################################################################### +###################### Load Balancer Configuration ####################### +########################################################################### + +# Load balancer security groups +resource "aws_security_group" "defguard_alb_sg" { + name = "defguard-alb-sg" + description = "Access to the Application Load Balancer" + vpc_id = module.vpc.vpc_id + + ingress { + from_port = 443 + to_port = 443 + protocol = "tcp" + cidr_blocks = ["0.0.0.0/0"] + description = "HTTPS access from internet" + } + + egress { + from_port = 0 + to_port = 0 + protocol = "-1" + cidr_blocks = ["0.0.0.0/0"] + } + + tags = { + Name = "defguard-alb-sg" + } +} + +resource "aws_security_group" "defguard_internal_alb_sg" { + name = "defguard-internal-alb-sg" + description = "Access to the Internal Application Load Balancer" + vpc_id = module.vpc.vpc_id + + ingress { + from_port = 443 + to_port = 443 + protocol = "tcp" + cidr_blocks = [local.vpc_cidr] + description = "HTTPS access from internal VPC network" + } + + egress { + from_port = 0 + to_port = 0 + protocol = "-1" + cidr_blocks = ["0.0.0.0/0"] + } + + tags = { + Name = "defguard-internal-alb-sg" + } +} + +# Public Application Load Balancer +resource "aws_lb" "defguard_public_alb" { + name = "defguard-public-alb" + internal = false + load_balancer_type = "application" + security_groups = [aws_security_group.defguard_alb_sg.id] + subnets = module.vpc.public_subnets + + enable_deletion_protection = false + + tags = { + Name = "defguard-public-alb" + } +} + +# Internal Application Load Balancer +resource "aws_lb" "defguard_internal_alb" { + name = "defguard-internal-alb" + internal = true + load_balancer_type = "application" + security_groups = [aws_security_group.defguard_internal_alb_sg.id] + subnets = module.vpc.private_subnets + + enable_deletion_protection = false + + tags = { + Name = "defguard-internal-alb" + } +} + +# Target Groups +resource "aws_lb_target_group" "defguard_core_tg" { + name = "defguard-core-tg" + port = local.core_http_port + protocol = "HTTP" + vpc_id = module.vpc.vpc_id + + health_check { + enabled = true + healthy_threshold = 2 + interval = 30 + matcher = "200" + path = "/api/v1/health" + port = "traffic-port" + protocol = "HTTP" + timeout = 5 + unhealthy_threshold = 3 + } + + tags = { + Name = "defguard-core-tg" + } +} + +resource "aws_lb_target_group" "defguard_proxy_tg" { + name = "defguard-proxy-tg" + port = local.proxy_http_port + protocol = "HTTP" + vpc_id = module.vpc.vpc_id + + health_check { + enabled = true + healthy_threshold = 2 + interval = 30 + matcher = "200" + path = "/api/v1/health" + port = "traffic-port" + protocol = "HTTP" + timeout = 5 + unhealthy_threshold = 3 + } + + tags = { + Name = "defguard-proxy-tg" + } +} + +# Target Group Attachments +resource "aws_lb_target_group_attachment" "defguard_core_attachment" { + target_group_arn = aws_lb_target_group.defguard_core_tg.arn + target_id = module.defguard_core.instance_id + port = local.core_http_port +} + +resource "aws_lb_target_group_attachment" "defguard_proxy_attachment" { + target_group_arn = aws_lb_target_group.defguard_proxy_tg.arn + target_id = module.defguard_proxy.instance_id + port = local.proxy_http_port +} + +# Listeners +resource "aws_lb_listener" "defguard_public_alb_listener" { + load_balancer_arn = aws_lb.defguard_public_alb.arn + port = "443" + protocol = "HTTPS" + + default_action { + type = "forward" + target_group_arn = aws_lb_target_group.defguard_proxy_tg.arn + } +} + +resource "aws_lb_listener" "defguard_internal_alb_listener" { + load_balancer_arn = aws_lb.defguard_internal_alb.arn + port = "443" + protocol = "HTTPS" + + default_action { + type = "forward" + target_group_arn = aws_lb_target_group.defguard_core_tg.arn + } +} + +# Listener Rules +resource "aws_lb_listener_rule" "defguard_proxy_rule" { + listener_arn = aws_lb_listener.defguard_public_alb_listener.arn + priority = 100 + + action { + type = "forward" + target_group_arn = aws_lb_target_group.defguard_proxy_tg.arn + } + + condition { + host_header { + values = [replace(local.proxy_url, "https://", "")] + } + } +} + +resource "aws_lb_listener_rule" "defguard_core_rule" { + listener_arn = aws_lb_listener.defguard_internal_alb_listener.arn + priority = 100 + + action { + type = "forward" + target_group_arn = aws_lb_target_group.defguard_core_tg.arn + } + + condition { + host_header { + values = [replace(local.core_url, "https://", "")] + } + } +} + +``` -You can modify the configuration further to fit your needs, be careful though when editing the "Security group rules essential for Defguard operation" sections, as they ensure that all the components may properly reach each other, for example: +4. Add load balancer ingress rules to your existing Proxy and Core groups: ```hcl -########## Security group rules essential for Defguard operation ########## +# HTTP access from internal load balancer (Core) +ingress { + from_port = local.core_http_port + to_port = local.core_http_port + protocol = "tcp" + security_groups = [aws_security_group.defguard_internal_alb_sg.id] + description = "HTTP access from internal load balancer" +} -# Internal communication with Defguard Core +# HTTP access from public load balancer (Proxy) ingress { - from_port = local.proxy_grpc_port - to_port = local.proxy_grpc_port + from_port = local.proxy_http_port + to_port = local.proxy_http_port protocol = "tcp" - security_groups = [aws_security_group.defguard_core_sg.id] + security_groups = [aws_security_group.defguard_alb_sg.id] + description = "HTTP access from public load balancer" } -```` -This block ensures that the Defguard Proxy gRPC port is accessible from the Defguard Core instance. +``` -After you apply the configuration, Defguard Core web UI should be accessible at the following URL: `http://:`. If you allowed access to the web UI from your public IP address, you should be able to access it directly. The proxy should also be available at `http://:` if you also allowed access to it. This is useful only to see if the deployment was successful, the next step should be to properly setup the domains and HTTPS, using e.g. a reverse proxy. +5. Finally, you can add the load balancer domain name to the output: + +```hcl +output "defguard_public_alb_dns" { + description = "The DNS name of the Public Application Load Balancer" + value = aws_lb.defguard_public_alb.dns_name +} + +output "defguard_internal_alb_dns" { + description = "The DNS name of the Internal Application Load Balancer" + value = aws_lb.defguard_internal_alb.dns_name +} +``` + +This setup will create two load balancers: one internal and one external. Both will act as a reverse proxy, routing the HTTPS traffic matching your domains to the backend servers (Proxy, Core). The next step would be to point your actual domains to the domain names generated by the load balancers in the output (CNAME) and to setup SSL certificates (e.g. via the AWS certificate manager). ### Troubleshooting and common issues +All components are deployed as systemd services on the host EC2. Their configuration files can be found at `/etc/defguard`. + #### Checking status of any component You can check the status of any Defguard component by SSHing into the corresponding EC2 instance and running the following command: diff --git a/deployment-strategies/updating-and-version-compatibility.md b/deployment-strategies/updating-and-version-compatibility.md new file mode 100644 index 0000000..132666d --- /dev/null +++ b/deployment-strategies/updating-and-version-compatibility.md @@ -0,0 +1,33 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/deployment-strategies/updating-and-version-compatibility +--- + +# Updating and version compatibility + +Each service in the Defguard stack can be updated independently, provided the components remain compatible. When components connect, Defguard automatically performs a version check. If an incompatibility is detected, the connection is refused and it will be clearly reported both in the log files and through a dialog in the core UI: + +
+ +{% hint style="warning" %} +**Note on Multiple Gateways per Location** + +If you configure more than one gateway for the same location, they will overwrite each other’s incompatibility data. This happens because location is currently used as the identifier for gateways. + +This limitation will be resolved once full high-availability (HA) support is implemented. +{% endhint %} + +It's recommended to always use newest version of services and update them all together to avoid incompatibility.\ +Check the GitHub repositories for each service to find their newest releases and release notes. + +* Docker - For Docker and Kubernetes based setup just change docker image version for service you want to update. +* Packages(DEB, RPM, etc.) - Currently we don't have any package repository so if you want to update your service installed as package you have to download new version from service repository. + +**GitHub Repositories:** + +* [Defguard Core](https://github.com/DefGuard/defguard/releases) +* [Defguard Proxy](https://github.com/DefGuard/proxy/releases) +* [Defguard Gateway](https://github.com/DefGuard/gateway/releases) +* [Defguard YubiBridge](https://github.com/DefGuard/YubiKey-Provision/releases) diff --git a/deployment-strategies/upgrading.md b/deployment-strategies/upgrading.md index ae098ad..8ddd07d 100644 --- a/deployment-strategies/upgrading.md +++ b/deployment-strategies/upgrading.md @@ -1,13 +1,134 @@ --- description: Notes on upgrading Defguard and its components +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/deployment-strategies/upgrading --- -# Upgrading +# Migration guides {% hint style="warning" %} Before doing any updates please remember to **backup your database.** {% endhint %} +## 1.6.x -> 2.0.0 + +### Core + +#### ACL Rules and Aliases + +Defguard 2.0 updates the ACL-related models to make rule configuration and management more explicit and reduce the number of possible edge-cases. The changes include: + +* adding explicit `any_address`, `any_port` and `any_protocol` toggles +* splitting alias kinds into separate sections in the UI (Aliases and Destinations) to introduce a clearer distinction between their roles +* making manual destination in Rules optional (explicitly allowing for rules using only predefined destinations) + +During instance upgrade a database migration is performed which backfills new fields for existing rules and aliases in such a way that the resulting firewall rules remain the same, maintaining current functionality. + +**No manual action should be necessary as part of the upgrade process.** + +For more details on the specific changes see [here](../in-depth/architecture-decision-records/2.0.md#access-control-list-changes). + +## 1.5.x -> 1.6.0 + +### Core + +#### Service locations + +A new feature has been introduced: [service-locations.md](../features/service-locations.md "mention"). This feature requires both Defguard Core and Proxy to be updated to the 1.6.0 version. Updating only one of those components will prevent this feature from working properly. + +### Proxy + +#### Service locations + +As mentioned in the Core migration section, this feature requires both Defguard Core and Proxy to be updated to the 1.6.0 version. + +### Desktop client + +#### Service locations + +The [service-locations.md](../features/service-locations.md "mention") feature currently only works on the Windows Desktop Client. Locations in the service location mode won't be sent to clients that don't support them (either are older than 1.6.0 or are on a different platform than Windows). + +To work properly, this feature requires the Desktop Client to be in version 1.6. Service locations won't show up or work in older clients. + +#### Force all traffic + +1.6 introduces the ability to "Force all traffic" as a [Client traffic policy](../features/wireguard/behavior-customization.md#client-traffic-policy-selection). However, this policy only works with desktop and mobile clients ≥ 1.6.0. Older clients (<1.6.0) will not respect the policy and will allow the users to select the "Predefined traffic" option. As an alternative, administrators can enforce all traffic by setting allowed ips: `0.0.0.0/0, ::/0`. + +#### macOS Client changes + +Desktop Client is now distributed in App Store and uses native VPN management. For these reasons, the user settings have moved from `~/Library/Application Support/net.defguard` to `~/Library/Containers/net.defguard/Data/Library/Application Support/net.defguard`. In order to preserve settings from v1.5.x, use one of the following guides to transfer the data: + +**Using Finder** + +1. In Finder, select the menu **Go**, press and hold _Alt_ key, then select **Library**, as depicted below. + +
+ +2. Move or copy the contents of _Application Support_ > _net.defguard_ to _Containers_ > _net.defguard_ > _Data_ > _Library_ > _Application Support_ > _net.defguard_ + +**Using Terminal** + +Open Terminal.app and execute + +```sh +rm -r ~/Library/Containers/net.defguard/Data/Library/Application\ Support/net.defguard +mv ~/Library/Application\ Support/net.defguard ~/Library/Containers/net.defguard/Data/Library/Application\ Support/ +``` + +#### Windows Client changes + +The Windows Desktop Client installer has changed. The installer is now provided in an `.msi` format. + +Installing the new 1.6.0 Client from the `.msi` will leave the previous Client version still installed. This can also cause old VPN connections to still be active until a next system restart is performed. + +To resolve this, before upgrading, we recommend first uninstalling the old Client. This will leave your configuration intact and it should carry over to the new Client after its installation, without the need to configure everything again. + +### Mobile client + +**Force all traffic** + +1.6 introduces the ability to "Force all traffic" as a [Client traffic policy](https://app.gitbook.com/o/Z3mGSAbEj9iLdZ7cNFlL/s/e86iamwJVSYnIRsyVEAV/features/wireguard/behavior-customization#client-traffic-policy-selection). However, this policy only works with desktop and mobile clients ≥ 1.6.0. Older clients (<1.6.0) will not respect the policy and will allow the users to select the "Predefined traffic" option. As an alternative, administrators can enforce all traffic by setting allowed ips: `0.0.0.0/0, ::/0`. + +## 1.4.x -> 1.5.0 + +### Core + +#### Version compatibility + +This release introduces a version checking system. All the Defguard system components (core, proxy, gateway and clients) are now version-aware and check their compatibility with the components their are communicating with. + +This might mean that until you upgrade all the components your web UI might indicate that your proxy or gateway is of an unknown version. + +#### Instance UUID bug + +A bug resulting in zeroing the UUID of a given instance has been found and resolved ([PR link](https://github.com/DefGuard/defguard/pull/1521)). + +This value is used by the desktop client to identify instances. The new client should gracefully handle migration to a new UUID if it has been zeroed out due to the bug mentioned above. + +#### Verify client disconnect threshold for your MFA locations + +In order to ensure that MFA works correctly with the new [mobile clients](../using-defguard-for-end-users/mobile-client/) please ensure that the [client disconnect threshold](../features/wireguard/create-your-vpn-network.md#client-disconnect-threshold) is set to at least 300s (5 minutes). + +### Proxy + +We've introduced a new functionality to Desktop Client - to authenticate [Multi-Factor connections using Mobile Client](../using-defguard-for-end-users/desktop-client/using-multi-factor-authentication-mfa.md). For this feature to work, Proxy (enrollment service) creates a Web-socket that the desktop client connects to while waiting for responses from the mobile client. + +{% hint style="warning" %} +If you have a reverse proxy for the enrollment service (which we highly recommend with SSL termination), please **make sure that web-sockets are enabled.** +{% endhint %} + +### Desktop client + +#### Unix socket IPC and new user group requirement (macOS & Linux) + +macOS and Linux clients now use Unix sockets for IPC. To securely access this socket the user must belong to a specific group as described in [client documentation](../using-defguard-for-end-users/desktop-client/). + +The change should require no additional steps for macOS users, but Linux users who install the client from official packages will need to log out and back in or reboot after install to refresh group membership. This will not be required on subsequent updates. + +Linux users who use release binaries will need to manually create the `defguard` group and adjust their group membership. + ## Any release <= 1.3 -> 1.4 1.4 release introduces changes related to multiple client IP addresses. To ensure compatibility, **all components must be updated** to v1.4 or higher: @@ -39,7 +160,7 @@ We've introduced some changes to the LDAP integration. We recommend reading [the * The LDAP integration has become an enterprise feature. You will need to purchase the enterprise license if you exceed the free limits. See [license.md](../enterprise/license.md "mention") for more information regarding the license. * If you used the LDAP integration previously, it will be off by default after upgrading. You will have to manually enable it in the settings in the LDAP tab:\\ -
+
## Any previous 1.3.0 alpha → 1.3.0 alpha 4 @@ -51,9 +172,9 @@ A new synchronization may cause some of your users to be re-added, which in turn Before an upgrade, turn off the two-way synchronization. After upgrading, you will have access to a new option, the RDN user attribute: -
+
-Set it according to your LDAP server setup. This should be the DN's leftmost component attribute, e.g. in the case of `cn=user1,cn=users,dc=ad,dc=example,dc=com` this would be "cn". This attribute is needed to properly identify users in your LDAP server. The username attribute will be mapped to Defguard usernames. Read [settings-table.md](../admin-and-features/ldap-and-active-directory-integration/settings-table.md "mention") for a description of those settings options. After you configured this value, you can re-enable the two-way synchronization. +Set it according to your LDAP server setup. This should be the DN's leftmost component attribute, e.g. in the case of `cn=user1,cn=users,dc=ad,dc=example,dc=com` this would be "cn". This attribute is needed to properly identify users in your LDAP server. The username attribute will be mapped to Defguard usernames. Read [settings-table.md](../features/ldap-and-active-directory-integration/settings-table.md "mention") for a description of those settings options. After you configured this value, you can re-enable the two-way synchronization. ## Any previous core release -> core 1.1.4 @@ -99,12 +220,12 @@ You will need to change a duplicate email address before the upgrade by hand via ### Desktop Client Real Time Sync -From 1.0.0 we have introduced [Enterprise features](broken-reference/), and one of them is [automatic and real-time desktop client configuration synchronization](../admin-and-features/remote-user-enrollment/automatic-real-time-desktop-client-configuration.md). +From 1.0.0 we have introduced [Enterprise features](https://github.com/DefGuard/docs/blob/docs/deployment-strategies/broken-reference/README.md), and one of them is [automatic and real-time desktop client configuration synchronization](../features/remote-user-enrollment/automatic-real-time-desktop-client-configuration.md). To enable this on an **already configured desktop client,** one must perform one time instance update, which will generate necessary tokens on the client to perform from now on automatic updates. In details: -1. The admin must generate a new token for the client -[ more details here](../admin-and-features/wireguard/remote-desktop-activation.md) (token can be sent over email or shared in any other secret way). -2. The user must perform the [Instance Update - more details here](../help/desktop-client/instance-configuration.md#updating-instance). +1. The admin must generate a new token for the client -[ more details here](../features/wireguard/remote-desktop-activation.md) (token can be sent over email or shared in any other secret way). +2. The user must perform the [Instance Update - more details here](../using-defguard-for-end-users/desktop-client/instance-configuration.md#updating-instance). {% hint style="warning" %} Any client that is configured from scratch has this done automatically and no actions needed to be done. diff --git a/deployment-strategies/using-a-userspace-wireguard-go-implementation.md b/deployment-strategies/using-a-userspace-wireguard-go-implementation.md new file mode 100644 index 0000000..566171b --- /dev/null +++ b/deployment-strategies/using-a-userspace-wireguard-go-implementation.md @@ -0,0 +1,46 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/deployment-strategies/using-a-userspace-wireguard-go-implementation +--- + +# Using a userspace wireguard-go implementation + +Gateway currently supports using `wireguard-go`, a userspace WireGuard implementation. This approach is **not recommended** on platforms where a native support exists (e.g. Linux). + +You can enable the userspace implementation by setting the `userspace` config option or a corresponding `DEFGUARD_USERSPACE` environment variable to `true`. + +Because `wireguard-go` is not bundled by default with Defguard, it must be installed separately. The `wireguard-go` binary/command must be available on the host machine for it to function properly. On Docker, this currently requires building a custom image, as the base gateway images also don't come with `wireguard-go` pre-installed. This can be achieved as follows: + +```docker +FROM golang:1.24.6-alpine AS builder +RUN apk add --no-cache git make + +RUN git clone https://git.zx2c4.com/wireguard-go /src/wireguard-go \ + && cd /src/wireguard-go \ + && make + +# Specify the desired Gateway's version here +FROM ghcr.io/defguard/gateway:latest + +COPY --from=builder /src/wireguard-go/wireguard-go /usr/local/bin/wireguard-go + +RUN chmod +x /usr/local/bin/wireguard-go +``` + +Note that when running the Docker container with a userspace implementation on a Linux host, the container requires a `NET_ADMIN` capability and access to `/dev/net/tun`, this can be set in a Docker compose: + +```yaml +# Docker compose + cap_add: + - NET_ADMIN + devices: + - /dev/net/tun +``` + +Or via the command line: + +```bash +docker run --cap-add=NET_ADMIN --device=/dev/net/tun [...] +``` diff --git a/draw.io/defguard-drawio-library.xml b/draw.io/defguard-drawio-library.xml deleted file mode 100644 index cd28b42..0000000 --- a/draw.io/defguard-drawio-library.xml +++ /dev/null @@ -1 +0,0 @@ -[{"xml":"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","w":328.2,"h":268.51,"aspect":"fixed","title":"AWS"},{"xml":"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","w":261.87,"h":229.88,"aspect":"fixed","title":"Azure"},{"xml":"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","w":280.21,"h":334.12,"aspect":"fixed","title":"Core"},{"xml":"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","w":184.51,"h":240.08,"aspect":"fixed","title":"Database"},{"xml":"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","w":297.96,"h":329.94,"aspect":"fixed","title":"Desktop App"},{"xml":"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","w":241.42,"h":286.13,"aspect":"fixed","title":"Docker"},{"xml":"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","w":247.87,"h":277.89,"aspect":"fixed","title":"Firewall"},{"xml":"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","w":226.88,"h":328.97,"aspect":"fixed","title":"FreeBSD"},{"xml":"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","w":272.53,"h":288.79,"aspect":"fixed","title":"Google cloud"},{"xml":"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","w":236.44,"h":278.69,"aspect":"fixed","title":"Google Workspace"},{"xml":"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","w":250.81,"h":186.12,"aspect":"fixed","title":"HTTPS"},{"xml":"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","w":271.8,"h":295.63,"aspect":"fixed","title":"Instalation package"},{"xml":"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","w":226.65,"h":226.65,"aspect":"fixed","title":"Internet"},{"xml":"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","w":242.15,"h":265.25,"aspect":"fixed","title":"Jumpcloud"},{"xml":"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","w":266.05,"h":302.68,"aspect":"fixed","title":"Kubernetes"},{"xml":"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","w":297.96,"h":308.82,"aspect":"fixed","title":"Laptop"},{"xml":"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","w":244.58,"h":324.93,"aspect":"fixed","title":"Linux"},{"xml":"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","w":272.27,"h":304.59,"aspect":"fixed","title":"Location"},{"xml":"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","w":246.7,"h":330.88,"aspect":"fixed","title":"Mobile"},{"xml":"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","w":286.16,"h":241.65,"aspect":"fixed","title":"Okta"},{"xml":"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","w":202.1,"h":272.58,"aspect":"fixed","title":"OpenID"},{"xml":"7L1bm9rW0i38a9a9OO29ctlusCNvJBYG3MF3Ns6LgW47zwKCpF//qarGqDklRNs5rPUm+ZInfmjQaWoeatZh1Kh/DO6filf/fv/Tp+zLxx8f/zGY/CO5+0c/af8/uP/3ly+nm4e7Lngq7n98fKz/3n38x2D8j7783tejL3/bfXp2n5/e//vHz6ff99b961vjaT//+O/Tj0Xzp/eP5x/tF/n/G5969f/xVD7iNsdP73+SP3dP77f15wt56G7z/nH6/sOPj//6ctyddl8+18c/fDmdvjzVJzzKgRfvN4ftv7+cP3+8//L45d96q8H/6H/RPe4ed1u59vTlp/rX98efftzIG/7PrvixfvkX+sg7/prwl/rvj+9P7/8xuLOv/ZfHn7f/6L8onupuu//X93n/Xfli+OGhOG+qZPf++zfJZvzl5+ng4+BjORpk5ejnzdPm52x/d8nuv6s+Pm126fefTh9ejarZ50/H9w+jf/9r8frLx+/fXGa7f/5cXzWYft5U06fvynflP4vZ8jCaDuy8dPei//7h7WD+9N3wX4v0ko7vttk+u0z3q146zi6z++ElL9O6bf969ebx3edM/vo+T358KB7/tbs7r/tFNV1Otj+WL57ePxTH2e7F+UN/9DgrX3yX3o/2H77PTtnisp0+5cdNmZTTe16THXk8v/fjvfT743YzeFN+6J8eZ7u7fdZfDbL+enTjfkm430raUH38/vXP7/urui8ez+8e8k91v203T9/1PjzN/29at7v++9/vFj1598f3T9/99GEfH0+8ndKOd0+Pxw/19R9/eH38f/e5XrP+IT29G7z+9O7V4+OHz/NTvjg0rover9meh8fkXX2f9w+9nz7W98yWd/F11Tc/b9d4Xj88bxONQXe/ze5f/N/01bufPry6/J/0+7flh/vt3vrpZTl9+FiuH9789O5hlEyX858a1y2+9bqscV39jvG86G2eLl/SfvHTh6e3nza73ufN08tDPffOH++T8v8tj9v/Wfh8Kr6xP1rPS+V5P2363x3XP7z56UN/+H/SV4/Vh37x6eOrVdxvRVZG73Sf7/Onee/dU+OcaG5Nkrg9af/d07t93N7VMbQh/nvdGJN6Pj5lD++e4jbn2o7vLuuH/KeP3x/qtgyL5jvpvD69/2F7Wj8Vj/U8refSd4d3yy/bDz+8PX589Xj58H1jThR5492y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","w":230.55,"h":308.07,"aspect":"fixed","title":"Opensense"},{"xml":"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","w":207.3,"h":279.48,"aspect":"fixed","title":"Other"},{"xml":"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","w":262.59,"h":328.96,"aspect":"fixed","title":"Proxy"},{"xml":"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","w":226.88,"h":328.96,"aspect":"fixed","title":"Server"},{"xml":"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","w":152.23,"h":206.58,"aspect":"fixed","title":"User"},{"xml":"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","w":222.92,"h":304.59,"aspect":"fixed","title":"WireGurad server"}] \ No newline at end of file diff --git a/enterprise/enterprise-features.md b/enterprise/enterprise-features.md deleted file mode 100644 index 6779848..0000000 --- a/enterprise/enterprise-features.md +++ /dev/null @@ -1,16 +0,0 @@ -# Enterprise features - -Here is a list of all Enterprise features: - -* [Ability to use external OIDC](../admin-and-features/external-openid-providers/) (Google/Microsoft/Okta/JumpCloud/Custom) to login or create Defguard account. - * Do Multi-Factor Authentication on selected VPN locations with External SSO on Desktop and Mobile clients (from version 1.5). -* [Two-way LDAP & Active Directory synchronization](../admin-and-features/ldap-and-active-directory-integration/two-way-ldap-and-active-directory-synchronization.md) -* [Real time sync for client configurations](../admin-and-features/remote-user-enrollment/automatic-real-time-desktop-client-configuration.md)! **First WireGuard client to support this feature!** -* Ability to define and enforce [Access Control List rules](../admin-and-features/access-control-list/) / firewall management -* Ability to [stream the Activity & Audit logs to external SIEM systems](../activity-log/activity-log-streaming/) -* Ability to use [external OIDC for secure remote enrollment and Desktop client configuration](../admin-and-features/external-openid-providers/external-oidc-secure-enrollment.md) -* Ability to [disable for users to manage their devices](../admin-and-features/wireguard/behavior-customization.md#disable-for-users-to-manage-their-devices) (just admin will have this possibility). -* Ability to [disable for users to configure WireGuard clients other then Defguard desktop client](../admin-and-features/wireguard/behavior-customization.md#disable-ability-to-configure-other-vpn-clients-then-defguard-desktop-client). -* Ability to [disable "All traffic" in the desktop client ](../admin-and-features/wireguard/behavior-customization.md#disable-all-traffic-option-in-the-desktop-client)- just "predefined" traffic by admins. -* Ability to integrate with external tooling using [REST API](../integrations/api-tokens.md). - diff --git a/enterprise/license.md b/enterprise/license.md index 380613e..e5aa332 100644 --- a/enterprise/license.md +++ b/enterprise/license.md @@ -1,16 +1,16 @@ -# License +--- +metaLinks: + alternates: + - https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/enterprise/license +--- -Defguard Enterprise offers a lot of functionalities that are not offered in the Open Source Open Core, like external OpenID Connect/SSO support, automatic\&real time desktop client synchronization and configuration, and much more (go to [All Enterprise Features](enterprise-features.md) to see more). +# Purchasing and using the license -### Enterprise is free up to certain limits +Defguard is available as an open-source solution with additional paid features. Some functionalities are available only with a valid license or are subject to usage limits, depending on the selected plan. Details about feature availability, limits, and pricing are provided on the [Pricing page](https://defguard.net/pricing/). -{% hint style="info" %} -From release 1.1.0 **all enterprise features up to the following limits are free and no license is required:** +### Paid features free up to certain limits -* 5 active users -* 10 devices -* 1 location -{% endhint %} +Some paid features are available for free up to certain limits. The exact limits are listed on the [Pricing page](https://defguard.net/pricing/). Those limits should be more than enough for small businesses, home-labs or just to test out Enterprise features before committing. @@ -27,7 +27,7 @@ If you would like to purchase a license, we offer two types of licenses: #### Subscription -You can buy a monthly (soon yearly) subscription on our website: [https://defguard.net/pricing/](https://defguard.net/pricing/). +You can buy a monthly or yearly subscription on our website: [https://defguard.net/pricing/](https://defguard.net/pricing/). After purchasing: diff --git a/admin-and-features/access-control-list/README.md b/features/access-control-list/README.md similarity index 87% rename from admin-and-features/access-control-list/README.md rename to features/access-control-list/README.md index f7a2458..57c2d2a 100644 --- a/admin-and-features/access-control-list/README.md +++ b/features/access-control-list/README.md @@ -1,7 +1,16 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/access-control-list +--- + # Access Control List {% hint style="warning" %} -This is an enterprise feature. To use it, purchase our [enterprise license](../../enterprise/license.md) or ensure that your deployment does not exceed the [usage limits](../../enterprise/license.md#enterprise-is-free-up-to-certain-limits). +#### Availability + +This feature is available in all plans, with usage limits. See the [pricing page](https://defguard.net/pricing/) for details. {% endhint %} {% hint style="warning" %} @@ -21,7 +30,7 @@ Access Control can be enabled for each location individually. To enable it: 2. In **Location configuration** section, select **Enable ACL for this location**. 3. Click on **Save changes**. -
+
**You should also set the default ACL policy for the location** (see below). @@ -40,11 +49,11 @@ Make sure ACL has been enabled (see above), otherwise the policy setting will no 2. In **Location configuration,** choose the desired option under **Default ACL Policy**. 3. Click on **Save changes**. -
+
## List of ACL rules -
+
**Access Control List** view displays all the rules defined in your system. The list is split into two sections. @@ -63,26 +72,26 @@ Defguard does not track rule application status per location. In the event of ne Use the **Deploy pending changes** button to apply all the rules from **Pending Changes** section. {% hint style="info" %} -#### Batch rule application +**Batch rule application** Defguard’s ACL functionality is designed to allow users to apply access control rules in batches. This approach minimizes the risk of transient network issues that could occur when deploying rules individually. By grouping changes and deploying them together, the system reduces the likelihood of connectivity hiccups or firewall disruptions. {% endhint %} The ACL list view also allows rule filtering by name, locations, and other attributes -
+
## How to add and modify ACL rules -To create a new rule, use the ![](<../../.gitbook/assets/image (6).png>) button in the [ACL List View](./#list-of-acl-rules). +To create a new rule, use the ![](<../../.gitbook/assets/image (48).png>) button in the [ACL List View](./#list-of-acl-rules). -You can edit an existing rule by using the ![](<../../.gitbook/assets/image (12).png>) context menu and selecting **"Edit"** in the [ACL List View](./#list-of-acl-rules)**.** +You can edit an existing rule by using the ![](<../../.gitbook/assets/image (54).png>) context menu and selecting **"Edit"** in the [ACL List View](./#list-of-acl-rules)**.** -

Rule context menu

+

Rule context menu

### Anatomy of an ACL rule -
+
The ACL form consists of three main sections: @@ -165,17 +174,17 @@ To do this, the following new rules have to be added: * Add desired users in the **"Allowed Users/Groups/Devices** > **Users**. * Click on the **Submit** button. -
+
You will be redirected back to the [ACL List View,](./#list-of-acl-rules) and the new rule should now be in the **Pending Changes** section. -
+
Now, click on **Deploy pending changes (1)** button. After that, the rule should be applied on the _Office-Berlin_ location. -
+
-(See [Implementation Details](../../enterprise/all-enteprise-features/access-control-list/firewall-internals.md) documentation to understand integration with system packet filtering.) +(See [Implementation Details](https://github.com/DefGuard/docs/blob/docs/enterprise/all-enteprise-features/access-control-list/firewall-internals.md) documentation to understand integration with system packet filtering.) #### Adding access exceptions for specific users @@ -200,4 +209,4 @@ Once you have created appropriate groups and assigned the users, let's update th * Instead of specific users in the **Allowed Users** input, we now select the _Staff-Berlin_ group in the **Allowed Groups** input * In **Denied Groups** input we should now select the _Externals_ group -
+
diff --git a/admin-and-features/access-control-list/acl-aliases.md b/features/access-control-list/acl-aliases.md similarity index 77% rename from admin-and-features/access-control-list/acl-aliases.md rename to features/access-control-list/acl-aliases.md index a1dd22d..234cf6a 100644 --- a/admin-and-features/access-control-list/acl-aliases.md +++ b/features/access-control-list/acl-aliases.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/access-control-list/acl-aliases +--- + # ACL Aliases ACL alias functionality allows administrators to create reusable elements which can then be used when defining a destination in multiple ACL rules. @@ -5,8 +12,12 @@ ACL alias functionality allows administrators to create reusable elements which For example, you can define aliases for commonly used ports (e.g. 22 for SSH) or for services within your infrastructure (e.g. 1.2.3.4:5432 for a particular PostgreSQL server). {% hint style="warning" %} -Access Control is an [enterprise feature](../../enterprise/license.md). To use it you'll need to [purchase a license](../../enterprise/license.md#purchasing-the-license) or ensure your deployment does not [exceed the limits](../../enterprise/license.md#enterprise-is-free-up-to-certain-limits). +#### Availability + +This feature is available in all plans, with usage limits. See the [pricing page](https://defguard.net/pricing/) for details. +{% endhint %} +{% hint style="warning" %} Access Control is available in Defguard version ≥ 1.3.0 and Gateway version ≥ 1.3.0 {% endhint %} @@ -16,7 +27,7 @@ All the aliases defined in your systems are displayed in the second tab of the * ### List of aliases -

ACL alias list

+

ACL alias list

Similarly to ACL rules themselves, the list is split into two sections: @@ -33,9 +44,9 @@ When the alias changes are deployed, firewall rules will be updated for all affe To create a new rule, use the **Add new** button on the list view. -You can edit an existing rule by using the ![](<../../.gitbook/assets/image (12).png>) context menu and selecting **Edit** in the list view. +You can edit an existing rule by using the ![](<../../.gitbook/assets/image (54).png>) context menu and selecting **Edit** in the list view. -

Alias creation form

+

Alias creation form

In the ACL alias form, you can specify alias name and [type](./#alias-types). @@ -53,19 +64,19 @@ Unlike ACL rules, newly created aliases have **Applied** status, since they do n To remove an alias, select the **Delete alias** option from the context menu. -
+
Unlike with ACL rules, alias deletion is not tracked as a modification. You cannot delete an alias if it's being used by any rules and deleting unused aliases is immediate, not requiring changes to be deployed. -

You cannot delete aliases used by ACL rules

+

You cannot delete aliases used by ACL rules

## Using aliases in ACL rules Aliases can be used to define an ACL rule destination by selecting them in the input within the **Destination** section: -

ACL rule Destination section with Aliases field

+

ACL rule Destination section with Aliases field

-

Alias select modal

+

Alias select modal

## Alias types @@ -78,7 +89,7 @@ Aliases are divided into two distinct types to handle various use-cases: Let's start with an ACL rule that defines a following destination: -
+
By itself, this rule allows specified users to access **all ports** and **all protocols** on the specified IP. @@ -86,7 +97,7 @@ By itself, this rule allows specified users to access **all ports** and **all pr Consider an **SSH** alias with a following definition: -

SSH component alias definition

+

SSH component alias definition

When used in the previously created ACL rule, port 22 will be added to manual inputs defined in the rule itself. @@ -96,7 +107,7 @@ In effect the rule will now grant access **only** to port 22 on 10.2.0.5, just l Now consider the following alias: -

Postgres server destination alias

+

Postgres server destination alias

When used in the previously defined ACL rule it will have the following effects: diff --git a/admin-and-features/access-control-list/firewall-internals.md b/features/access-control-list/firewall-internals.md similarity index 98% rename from admin-and-features/access-control-list/firewall-internals.md rename to features/access-control-list/firewall-internals.md index 3feb08d..4afae62 100644 --- a/admin-and-features/access-control-list/firewall-internals.md +++ b/features/access-control-list/firewall-internals.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/access-control-list/firewall-internals +--- + # Implementation Details {% hint style="info" %} @@ -170,7 +177,7 @@ Destination IPs for a given ACL can be configured in multiple ways: * Destination aliases * Component aliases -It is therefore possible to configure some overlapping destinations, for example a 10.0.20.0/24 subnet and then a specific IP like 10.0.20.17 in some alias. +It is therefore possible to configure some overlapping destinations, for example a 10.0.20.0/24 subnet and then a specific IP like 10.0.20.17 in some alias. When generating firewall rules, we have to be mindful of the following limitations regarding our specific implementation: diff --git a/activity-log/README.md b/features/activity-log/README.md similarity index 88% rename from activity-log/README.md rename to features/activity-log/README.md index 50b59d2..ae525d9 100644 --- a/activity-log/README.md +++ b/features/activity-log/README.md @@ -1,8 +1,10 @@ -# Activity & Audit logs +--- +metaLinks: + alternates: + - https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/activity-log +--- -{% hint style="info" %} -This feature is available starting from version 1.4 -{% endhint %} +# Activity & Audit logs The Activity Log provides a comprehensive view of user interactions within your Defguard instance. This allows you to monitor user behaviour, troubleshoot issues, and maintain an audit trail of important activities. @@ -12,7 +14,7 @@ Activity log is available as a dedicated page in Defguard core Web UI that's use To access it, click the `Activity log` button in the navbar. -

Activity log page

+

Activity log page

### Overview @@ -35,12 +37,12 @@ Currently, there are four modules: * **Defguard** - operations performed in the core Web UI (e.g. adding users, modifying devices, managing groups etc.) * **Client** - actions performed by desktop client applications -* **Enrollment** - events related to the [user enrollment](../help/enrollment/) process +* **Enrollment** - events related to the [user enrollment](../../using-defguard-for-end-users/enrollment/) process * **VPN -** events related to VPN clients (e.g. client connecting to a location) ### Filtering -

Event filter modal

+

Event filter modal

By clicking the `Filter` button above the list you can narrow down the displayed events based on following criteria: @@ -52,7 +54,7 @@ For each of those you can select multiple options. Filtering by date can be done by clicking the `Time range` button above the list. -

Time range filter modal

+

Time range filter modal

### Sorting diff --git a/activity-log/activity-log-streaming/README.md b/features/activity-log/activity-log-streaming/README.md similarity index 65% rename from activity-log/activity-log-streaming/README.md rename to features/activity-log/activity-log-streaming/README.md index bebce6f..880e1dd 100644 --- a/activity-log/activity-log-streaming/README.md +++ b/features/activity-log/activity-log-streaming/README.md @@ -3,16 +3,18 @@ description: >- This feature is designed to help teams centralize visibility into user actions, security events, and system behavior by integrating with tools they already use for monitoring and incident response. +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/activity-log/activity-log-streaming --- # Audit Log Streaming to SIEM systems {% hint style="warning" %} -This is an enterprise feature. To use it, purchase our [enterprise license](../../enterprise/license.md) or ensure that your deployment does not exceed the [usage limits](../../enterprise/license.md#enterprise-is-free-up-to-certain-limits). -{% endhint %} +#### Availability -{% hint style="info" %} -This feature is available starting from version 1.4 +This feature is available in all plans, with usage limits. See the [pricing page](https://defguard.net/pricing/) for details. {% endhint %} **Activity Log Streaming** allows you to forward real-time activity logs from your system to external SIEM (Security Information and Event Management) platforms. @@ -20,4 +22,3 @@ This feature is available starting from version 1.4 ### Supported integrations Check full list of where activity log can be seen here [activity-log-integrations](activity-log-integrations/ "mention"). - diff --git a/activity-log/activity-log-streaming/activity-log-integrations/README.md b/features/activity-log/activity-log-streaming/activity-log-integrations/README.md similarity index 81% rename from activity-log/activity-log-streaming/activity-log-integrations/README.md rename to features/activity-log/activity-log-streaming/activity-log-integrations/README.md index 2f9725b..d7b499d 100644 --- a/activity-log/activity-log-streaming/activity-log-integrations/README.md +++ b/features/activity-log/activity-log-streaming/activity-log-integrations/README.md @@ -1,5 +1,9 @@ --- description: List of supported services to stream activity logs into. +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/activity-log/activity-log-streaming/activity-log-integrations --- # Supported SIEM systems integrations @@ -12,4 +16,3 @@ The activity log can currently be sent to the following tools: * [Vector ](vector-integration-guide.md)- A lightweight tool for building observability pipelines. * [Logstash ](logstash-integration-guide.md)- An open-source server-side pipeline that ingests, transforms, and forwards data for logging and analysis. - diff --git a/activity-log/activity-log-streaming/activity-log-integrations/logstash-integration-guide.md b/features/activity-log/activity-log-streaming/activity-log-integrations/logstash-integration-guide.md similarity index 67% rename from activity-log/activity-log-streaming/activity-log-integrations/logstash-integration-guide.md rename to features/activity-log/activity-log-streaming/activity-log-integrations/logstash-integration-guide.md index 25b2ac2..c00e8a1 100644 --- a/activity-log/activity-log-streaming/activity-log-integrations/logstash-integration-guide.md +++ b/features/activity-log/activity-log-streaming/activity-log-integrations/logstash-integration-guide.md @@ -1,5 +1,9 @@ --- -description: How to stream activity logs to vector. +description: How to stream activity logs to logstash. +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/activity-log/activity-log-streaming/activity-log-integrations/logstash-integration-guide --- # Logstash integration guide @@ -42,13 +46,13 @@ Add Logstash service to the `docker-compose.yaml` and start it. In Defguard UI with an administrator account, go into settings page and choose `Activity log streaming`. -Click `Add new` and choose `Vector` destination. +Click `Add new` and choose `Logstash` destination. -
+
Fill out `Name` and `Url` fields and click **Submit**. -
+
That's it! Defguard should now be sending activity events to Logstash, and you should see them printed to `stdout` in the running Logstash container. @@ -78,8 +82,8 @@ output { Modify Logstash destination in settings and fill`username` and `password` in settings. -
+
### Logstash integration configuration -
NameExample valueRequiredLogstash related configurationDescription
NameLogstashtrueAssigned name for the destination.
Urlhttp(s)://127.0.0.1:8002truehost, portAddress of running vector HTTP source.
Usernamelogstashfalseuserusername for Basic Authentication
PasswordstrongPasswordfalsepasswordpassword for Basic Authentication
Certcontents of cert.pemfalsessl_certificateUsed for TLS connection
+
NameExample valueRequiredLogstash related configurationDescription
NameLogstashtrueAssigned name for the destination.
Urlhttp(s)://127.0.0.1:8002truehost, portAddress of running logstash HTTP source.
Usernamelogstashfalseuserusername for Basic Authentication
PasswordstrongPasswordfalsepasswordpassword for Basic Authentication
Certcontents of cert.pemfalsessl_certificateUsed for TLS connection
diff --git a/activity-log/activity-log-streaming/activity-log-integrations/vector-integration-guide.md b/features/activity-log/activity-log-streaming/activity-log-integrations/vector-integration-guide.md similarity index 90% rename from activity-log/activity-log-streaming/activity-log-integrations/vector-integration-guide.md rename to features/activity-log/activity-log-streaming/activity-log-integrations/vector-integration-guide.md index 354989d..b4fc55b 100644 --- a/activity-log/activity-log-streaming/activity-log-integrations/vector-integration-guide.md +++ b/features/activity-log/activity-log-streaming/activity-log-integrations/vector-integration-guide.md @@ -1,5 +1,9 @@ --- description: How to stream activity logs to vector. +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/activity-log/activity-log-streaming/activity-log-integrations/vector-integration-guide --- # Vector integration guide @@ -62,13 +66,13 @@ In Defguard UI with an administrator account, go into settings page and choose ` Click `Add new` and choose `Vector` destination. -
+
Fill out `Name` and `Url` of the form and click `Submit`. If your `defguard` instance is running in the same Docker Compose network as Vector, use `http://vector:8001` as the URL instead of `http://127.0.0.1`, since services in the same Compose network communicate by container name. -
+
That's it! Defguard should now be sending activity events to Vector, and you should see them printed to `stdout` in the running Vector container. @@ -93,7 +97,7 @@ sources: Next, add the configured `username` and `password` in Defguard settings to the Vector destination. -
+
### TLS @@ -139,7 +143,7 @@ sources: Next, copy the contents of `cert.pem` into the **Certificate** field in the Vector destination settings. Then, update the **URL** field to use the `https` scheme instead of `http`. -
+
### Vector integration configuration diff --git a/features/desktop-client-auto-provisioning/README.md b/features/desktop-client-auto-provisioning/README.md new file mode 100644 index 0000000..e838fba --- /dev/null +++ b/features/desktop-client-auto-provisioning/README.md @@ -0,0 +1,62 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/desktop-client-auto-provisioning +--- + +# Desktop client auto-provisioning + +## Overview + +The Defguard desktop client supports automated provisioning through a configuration file-based approach that enables it to work across all supported platforms. This feature streamlines client deployment in enterprise environments by automating the initial user enrollment and client configuration process. + +## Provisioning process overview + +While the provisioning process is dependent on your specific environment and tooling, there are some general steps to you'll probably follow: + +1. Generate enrollment tokens for your users. This can be automated by [leveraging our REST API](generating-enrollment-tokens-with-defguard-rest-api.md). +2. Transfer tokens to end-user machines as a [configuration file](./#provisioning-configuration-file). +3. Install Defguard desktop client on end-user machines. +4. On first startup the user will be redirected to the enrollment flow. + +### Windows platform + +We provide additional tooling and a [detailed guide](auto-provisioning-in-windows-environments/) for an end-to-end provisioning process on Windows platforms with on-premise Active Directory or Entra ID. + +## Client-Side Implementation Details + +Automated provisioning is enabled by a desktop client functionality which reads an optional configuration file and redirects the end user to the enrollment flow on first startup. + +### Initialization Check + +On startup, the desktop client performs an initialization check to determine if it has been previously configured. A client is considered initialized if at least one VPN instance has been configured. + +### Provisioning Configuration File + +If the client has not been initialized, it searches for a provisioning configuration file in the default application data directory (the same [location where the client database file resides](../../using-defguard-for-end-users/desktop-client/#storage)). + +**File location:** `/provisioning.json` + +**File format:** The configuration file is a JSON document containing two required fields: + +* `enrollment_token` - The enrollment token for the user +* `enrollment_url` - The URL of the Defguard instance + +**Example file content:** + +```json +{ + "enrollment_token": "6B8fg2wiyczb1uDCDwUyMsnYz6qQBVu0", + "enrollment_url": "https://proxy.example.com/" +} +``` + +These values are analogous to those used in the standard user enrollment process. + +### Client Provisioning Process + +1. If a `provisioning.json` file is found, the client reads the configurationThe client attempts to configure itself using the provided enrollment token +2. If the user has not yet completed enrollment, they are redirected to the enrollment screen +3. The user follows the standard enrollment process to finish setting up their account +4. Once enrollment is complete, the user can connect to VPN locations and access protected resources diff --git a/features/desktop-client-auto-provisioning/auto-provisioning-in-windows-environments/README.md b/features/desktop-client-auto-provisioning/auto-provisioning-in-windows-environments/README.md new file mode 100644 index 0000000..bb6ec68 --- /dev/null +++ b/features/desktop-client-auto-provisioning/auto-provisioning-in-windows-environments/README.md @@ -0,0 +1,97 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/desktop-client-auto-provisioning/auto-provisioning-in-windows-environments +--- + +# Auto-provisioning in Windows environments + +## Windows Auto-Provisioning + +At the moment the complete auto-provisioning process is officially supported on the Windows platform and handles both on-premise Active Directory as well as Entra ID environments. + +### MSI Installer Integration + +The official Defguard Windows [MSI installer](https://defguard.net/download/) includes a PowerShell [helper script](https://github.com/DefGuard/client/blob/2a348dc4e07c2cdf6284af998dc092c65dd7d2dc/src-tauri/resources-windows/scripts/Get-ProvisioningConfig.ps1) that enables automatic provisioning during installation. + +This script executes when the installer is run with the `PROVISIONING=1` argument provided. + +**Example installation command:** + +```powershell +msiexec /i defguard-client.msi PROVISIONING=1 +``` + +#### Domain Detection and Configuration Retrieval + +The provisioning script automatically detects whether the machine is joined to: + +* **On-premise Active Directory (AD)** +* **Microsoft Entra ID** (formerly Azure AD) + +If the machine is domain-joined, the script attempts to retrieve provisioning configuration from the appropriate directory service. + +If the machine is not joined to any domain the script exits gracefully. + +For hybrid-joined machines (joined to both Entra and AD) the script proceeds with executing the **Active Directory** flow. + +#### **Active Directory Configuration** + +For Active Directory environments, the provisioning configuration is expected to be stored as JSON in a single user attribute. The attribute name can be specified as an optional argument to the installer. + +**Script argument name**: `ADAttribute` + +**Default attribute name:** `defguardProvisioningConfig` + +**Example attribute value:** `{"enrollmentUrl":"https://proxy.example.com/","enrollmentToken":"DuK8xRes5zYqem0fcAViQPRvIrNkGz7S"}` + +**Example installation command:** + +```powershell +msiexec /i defguard-client.msi PROVISIONING=1 ADAttribute="extensionAttribute4" +``` + +#### **Entra ID Configuration** + +For Entra ID environments, provisioning data is retrieved from custom security attributes within a dedicated attribute group. + +**Attribute group name:** `Defguard` + +**Required attributes:** + +* `EnrollmentToken` - The user's enrollment token +* `EnrollmentUrl` - The Defguard instance URL + +#### Configuration File Creation + +After successfully retrieving provisioning data from AD or Entra ID, the script creates a `provisioning.json` file in the expected application data directory, making it available for the client to use on first launch. + +### Generalized Windows Auto-Provisioning Workflow + +This section gives a high-level overview of the provisioning workflow. For more specific instructions for specific Windows environments see dedicated guides: + +* [On-premise Active Directory environments](on-premise-active-directory-environments.md) + +#### Provisioning Steps + +1. **User Management** + * Add users to the Defguard instance using one of the following methods: + * Two-way LDAP synchronization (for Active Directory) + * OpenID directory synchronization (for Entra ID) +2. **Token Generation** + * Generate enrollment tokens for users + * This can be automated using the Defguard REST API + * API access requires an [authorization token](../../integrations/api-tokens.md#generating-api-token) +3. **Client Installation** + * Install the defguard-client application on user machines using the MSI installer + * Pass the `PROVISIONING=1` argument to enable automatic provisioning + * Example command: `msiexec /i defguard-client.msi PROVISIONING=1 ADAttribute="description"` +4. **Automatic Configuration** + * During installation, the bundled script fetches provisioning configuration from Active Directory or Entra ID + * The configuration is written to the client's [data directory](../../../using-defguard-for-end-users/desktop-client/#storage) as explained [above](./#configuration-file-creation) +5. **User Enrollment** + * When the user launches the client for the first time, they are guided through the enrollment process + * The enrollment uses the pre-configured token and URL from the provisioning file +6. **Client Ready** + * Once enrollment is complete, the user can establish VPN connections and access protected resources diff --git a/features/desktop-client-auto-provisioning/auto-provisioning-in-windows-environments/entra-id-environments.md b/features/desktop-client-auto-provisioning/auto-provisioning-in-windows-environments/entra-id-environments.md new file mode 100644 index 0000000..7c32f95 --- /dev/null +++ b/features/desktop-client-auto-provisioning/auto-provisioning-in-windows-environments/entra-id-environments.md @@ -0,0 +1,81 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/desktop-client-auto-provisioning/auto-provisioning-in-windows-environments/entra-id-environments +--- + +# Entra ID + +## Overview + +This guide desctibes an example desktop client provisioning scenario in an Entra ID environment. + +The guide assumes that our goal is to provision desktop clients for a set of users in a specific Entra group. + +Please note that it is just a reference, you should adjust it to work with your specific environment and preferred tooling. + +## Generating enrollment tokens + +To automate the process as much as possible we've prepared an example PowerShell script which can be used to generate enrollment tokens for all users in a specified group. + +The script can be downloaded [here](https://github.com/DefGuard/client/blob/555fb727d3599264996ee1ac99f5124026083146/src-tauri/resources-windows/admin-scripts/GenerateEnrollmentTokensEntraID.ps1). + +The assumption is that this script will be run by an Entra administrator on a domain-joined machine. + +### Prerequisites + +* network access to a Defguard instance +* Defguard user account with admin privileges +* domain-joined machine +* Entra user account with `User Administrator` and `Attribute Assignment Administrator` roles +* custom security attribute set (default expected name is `Defguard`, but a different one can be used) with following attributes defined in Entra: + * `EnrollmentUrl` (String) + * `EnrollmentToken` (String) + +### Defguard authentication + +To securely access your Defguard instance's REST API you need to generate an [API Token](../../integrations/api-tokens.md#generating-api-token). + +### Entra authentication + +By default the script will use current user's credentials for Entra authentication. + +It will present an interactive propmt for selecting a user account. If this fails the script will attempt the device code auth flow as a fallback. + +### Required parameters + +* `Url` - URL of your Defguard instance +* `ApiToken` - your API token for Defguard API access +* `GroupName` - name of user group for which to generate enrollment tokens + +### Optional parameters + +* `AttributeSetName` - name of custom security attribute set where the provisioning config data will be stored +* `EnrollmentTokenExpirationTime` - how long should the generated enrollment tokens be valid for (default is 24h); should be specified as human-readable string, e.g 24h, 1d, 2w etc + +### Example script execution command + +`.\GenerateEnrollmentTokensEntraID.ps1 -Url "https://defguard.example.com" -ApiToken "dg-your-generated-token" -GroupName "DgProvisioning"` + +## Client provisioning scenario + +1. **Setup target users** + * prepare a user group containing all the users you intend to perform client provisioning for +2. **User synchronization** + * Configure OpenID directory synchronization as described [here](../../external-openid-providers/microsoft.md) + * **IMPORTANT**: enable the `Prefetch users` option to create directory users in Defguard +3. **Token Generation** + * Generate enrollment tokens for users using the [helper script](entra-id-environments.md#generating-enrollment-tokens) +4. **Client Installation** + * Install the `defguard-client` application on user machines using the [MSI installer](../#msi-installer-integration) + * Pass the `PROVISIONING=1` argument to execute provisioning script during installation + * Example command: `msiexec /i defguard-client.msi PROVISIONING=1 ADAttribute="description"` +5. **Automatic Configuration** + * During installation, the bundled script fetches [provisioning configuration](../#active-directory-configuration) from Entra ID + * The configuration is written to the client's [data directory](../../../using-defguard-for-end-users/desktop-client/#storage) as explained [here](../#configuration-file-creation) +6. **User Enrollment** + * When the user launches the client for the first time, they are guided through the enrollment process + * The enrollment uses the pre-configured token and URL from the provisioning file +7. **Client Ready** + * Once enrollment is complete, the user can establish VPN connections and access protected resources diff --git a/features/desktop-client-auto-provisioning/auto-provisioning-in-windows-environments/on-premise-active-directory-environments.md b/features/desktop-client-auto-provisioning/auto-provisioning-in-windows-environments/on-premise-active-directory-environments.md new file mode 100644 index 0000000..2a55c74 --- /dev/null +++ b/features/desktop-client-auto-provisioning/auto-provisioning-in-windows-environments/on-premise-active-directory-environments.md @@ -0,0 +1,73 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/desktop-client-auto-provisioning/auto-provisioning-in-windows-environments/on-premise-active-directory-environments +--- + +# On-premise Active Directory + +## Overview + +This guide desctibes an example desktop client provisioning scenario in an on-premise Active Directory environment. + +The guide assumes that our goal is to provision desktop clients for a set of users in a specific AD group. + +Please note that it is just a reference, you should adjust it to work with your specific environment and preferred tooling. + +## Generating enrollment tokens + +To automate the process as much as possible we've prepared an example PowerShell script which can be used to generate enrollment tokens for all users in a specified group. The script can be downloaded [here](https://github.com/DefGuard/client/blob/555fb727d3599264996ee1ac99f5124026083146/src-tauri/resources-windows/admin-scripts/GenerateEnrollmentTokensAD.ps1). + +### Prerequisites + +* network access to both a Defguard instance and AD Domain controller +* `ActiveDirectory` PowerShell module; to install you can run the following command in an admin shell: `Get-WindowsCapability -Name RSAT.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0 -Online | Add-WindowsCapability -Online` + +### Defguard authentication + +To securely access your Defguard instance's REST API you need to generate an [API Token](../../integrations/api-tokens.md#generating-api-token). + +### Active Directory authentication + +By default the script will use current user's credentials for AD authentication. + +Alternatively if you specify a username by the `ADUsername` parameter you'll be prompted for a password. + +### Required parameters + +* `Url` - URL of your Defguard instance +* `ApiToken` - your API token for Defguard API access +* `GroupName` - name of user group for which to generate enrollment tokens +* `ADAttribute` - name of AD attribute where the provisioning config data will be stored + +### Optional parameters + +* `ADUsername` - username for domain controller authentication +* `DomainController` - your AD domain controller URL +* `EnrollmentTokenExpirationTime` - how long should the generated enrollment tokens be valid for (default is 24h); should be specified as human-readable string, e.g 24h, 1d, 2w etc + +### Example script execution command + +`.\GenerateEnrollmentTokens.ps1 -Url "https://defguard.example.com" -ApiToken "dg-your-generated-token" -GroupName "DgProvisioning" -ADAttribute "extensionAttribute3" -ADUsername "administrator" -DomainController "ad.example.com"` + +## Client provisioning scenario + +1. **Setup target users** + * prepare a user group containing all the users you intend to perform client provisioning for +2. **User synchronization** + * Configure two-way Active Directory synchronization as described [here](../../ldap-and-active-directory-integration/two-way-ldap-and-active-directory-synchronization.md) +3. **Token Generation** + * Generate enrollment tokens for users using the [helper script](on-premise-active-directory-environments.md#generating-enrollment-tokens) +4. **Client Installation** + * Install the `defguard-client` application on user machines using the [MSI installer](../#msi-installer-integration) + * Pass the `PROVISIONING=1` argument to execute provisioning script during installation + * Example command: `msiexec /i defguard-client.msi PROVISIONING=1 ADAttribute="description"` +5. **Automatic Configuration** + * During installation, the bundled script fetches [provisioning configuration](../#active-directory-configuration) from Active Directory + * The configuration is written to the client's [data directory](../../../using-defguard-for-end-users/desktop-client/#storage) as explained [here](../#configuration-file-creation) +6. **User Enrollment** + * When the user launches the client for the first time, they are guided through the enrollment process + * The enrollment uses the pre-configured token and URL from the provisioning file +7. **Client Ready** + * Once enrollment is complete, the user can establish VPN connections and access protected resources diff --git a/features/desktop-client-auto-provisioning/generating-enrollment-tokens-with-defguard-rest-api.md b/features/desktop-client-auto-provisioning/generating-enrollment-tokens-with-defguard-rest-api.md new file mode 100644 index 0000000..8973d12 --- /dev/null +++ b/features/desktop-client-auto-provisioning/generating-enrollment-tokens-with-defguard-rest-api.md @@ -0,0 +1,134 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/desktop-client-auto-provisioning/generating-enrollment-tokens-with-defguard-rest-api +--- + +# Generating enrollment tokens with Defguard REST API + +To automate generating enrollment tokens for a large number of users you can leverage the [REST API ](../integrations/api-tokens.md)provided by your Defguard instance. + +This guilde explains how to do that with the assumption that your goal is to generate enrollment tokens for all users in a specific Defguard group. + +In real world scenarios this group might be synchronized with some external identity provider like in our [example Windows scripts](generating-enrollment-tokens-with-defguard-rest-api.md#example-windows-scripts). + +## Step-by-step overview + +Regardless of the specific scripting language or automation tool you'll be using, the general process will probably follow similar steps: + +1. Fetch all members of the target group +2. Iterate over all members and generate an enrollment token for each one +3. Store the tokens to transfer them to end-user machines as [configuration files](./#provisioning-configuration-file) + +## Relevant API endpoints + +### GET api/v1/group/{groupname} + +This endpoint retrieves detailed info about a group, including a list of usernames which can be used for generating tokens. + +#### Parameters + +* `groupname` - name of the target group + +#### Example response + +The response is a JSON object. Usernames can be found in the `members` property: + +```json +{ + "is_admin": false, + "members": [ + "user", + "user2", + "user3" + ], + "name": "name", + "vpn_locations": [ + "location" + ] +} +``` + +### POST api/v1/user/{username}/start\_enrollment + +This endpoint is used to start the enrollment process for a user. It generates an enrollment token and marks the user as pending enrollment. + +Please note that by default an enrollment token is valid for 24h and cannot be used later. If you expect your users to need more time, use the `token_expiration_time` option described below. + +#### Parameters + +* `username` - name of the target user + +#### Request body + +All fields are optional and can be set to `null`. + +If `send_enrollment_notification` is set to `true`, an email address must be provided. In this case a notification with an enrollment link will be sent to the specified address. If no token expiration time is specified, the default of 24 hours will be used. + +`token_expration_time` is configured as a human-readable string. For example: + +* 1w - one week +* 3d - three days +* 12h - twelve hours + +```json +{ + "email": "user@example.com", + "send_enrollment_notification": true, + "token_expiration_time": "1w" +} +``` + +#### Example response + +The response is a JSON object: + +```json +{ + "enrollment_token": "NotAnActualEnrollmentToken", + "enrollment_url": "https://enrollment.example.com" +} +``` + +### GET api/v1/user/{username} + +Fetches user details. This can be useful if you need some other user parameter (like email address) to integrate with other parts of your environment (for example Entra ID). + +#### Parameters + +* `username` - name of the target user + +#### Example response + +The response is a JSON object: + +```json +{ + "biometric_enabled_devices": [], + "devices": [], + "security_keys": [], + "user": { + "authorized_apps": [], + "email": "mail@defguard.net", + "email_mfa_enabled": false, + "enrolled": true, + "first_name": "first_name", + "groups": [], + "id": 2, + "is_active": true, + "is_admin": false, + "last_name": "last_name", + "ldap_pass_requires_change": false, + "mfa_enabled": false, + "mfa_method": "None", + "phone": "000000000", + "totp_enabled": false, + "username": "username" + } +} +``` + +## Example Windows scripts + +We provide pre-made PowerShell scripts for generating tokens and storing them in [Active Directory](auto-provisioning-in-windows-environments/on-premise-active-directory-environments.md#generating-enrollment-tokens) or [Entra ID](auto-provisioning-in-windows-environments/entra-id-environments.md#generating-enrollment-tokens). They can be used as reference and adjusted for your specific needs. diff --git a/admin-and-features/external-openid-providers/README.md b/features/external-openid-providers/README.md similarity index 63% rename from admin-and-features/external-openid-providers/README.md rename to features/external-openid-providers/README.md index 3ac2918..f541e06 100644 --- a/admin-and-features/external-openid-providers/README.md +++ b/features/external-openid-providers/README.md @@ -1,7 +1,16 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/external-openid-providers +--- + # External SSO/OpenID providers {% hint style="warning" %} -This is an enterprise feature. To use it, purchase our [enterprise license](../../enterprise/license.md) or ensure that your deployment does not exceed the [usage limits](../../enterprise/license.md#enterprise-is-free-up-to-certain-limits). +#### Availability + +This feature is available in all plans, with usage limits. See the [pricing page](https://defguard.net/pricing/) for details. {% endhint %} Defguard, [apart from being an identity provider itself](../openid-connect/), supports logging in through external OpenID providers. All providers that support standard and common **code authorization flow should work.** @@ -59,7 +68,7 @@ These URIs will need to be provided in your provider's configuration. See [#exam In order to configure the external OpenID provider login, go to the settings in the Defguard admin dashboard. -
+
Everything related to the external OpenID configuration can be found in the OpenID tab of the settings page. The first thing to do here would be to pick your provider using the dropdown menu under the "Provider" label. Next, fill out the required information with values acquired from your provider. If you picked "Microsoft" or "Custom", make sure to also make corresponding changes in the "Base URL" field. After you are done, click "Save changes" to keep your changes. @@ -67,7 +76,7 @@ You may have also noticed the checkbox option on the right. By default, when a n ### OpenID enrollment -When you configure your provider, the proxy will automatically allow enrolling users through it. See [with-external-sso-google-microsoft-custom.md](../../help/enrollment/with-external-sso-google-microsoft-custom.md "mention") for the process from the user's point of view. +When you configure your provider, the proxy will automatically allow enrolling users through it. See [with-external-sso-google-microsoft-custom.md](../../using-defguard-for-end-users/enrollment/with-external-sso-google-microsoft-custom.md "mention") for the process from the user's point of view. For this to work, make sure you have the following two things set: @@ -76,7 +85,15 @@ For this to work, make sure you have the following two things set: #### Disabling automatic account creation -
+{% hint style="warning" %} +In order for users to be created in Defguard they must have the following attributes set: + +* email +* first name +* last name +{% endhint %} + +
If you disable the option above, new users won't be able to automatically go through the enrollment. You will need to create their accounts by hand (with the same email address as the one they have set on your OIDC provider's side) and only then they will have an option to activate it by logging through the provider. @@ -98,7 +115,7 @@ Defguard doesn't automatically create users based on the users in your provider' The menu can be found in Defguard settings by navigating to the "OpenID" tab. -
+
The following configuration options are currently available in the directory synchronization menu for all providers: @@ -118,18 +135,91 @@ If you want to delete your users based on the state of your provider we recommen #### Currently supported providers * [Google](google.md#directory-synchronization) -* Microsoft +* [Microsoft](microsoft.md) +* [Okta](okta.md#directory-synchronization) +* [JumpCloud](jumpcloud.md#directory-synchronization) ## Known issues +### Email conflict between user accounts + +In scenario where: + +* User1 exists in Defguard +* User2 has email: User1@domain + +User2 will not be able to authenticate using OpenID. + +This is not a system error, but an administrator’s negligence. The login (as well as the part of the company email corresponding to the login) must be unique, and the administrator is responsible for maintaining user data. + ### JumpCloud +#### Issues with logging in + When setting up JumpCloud you can encounter an error when attempting to log in with a message `Failed to parse payload JSON: Error(\\\"invalid type: string...`. This is because JumpCloud is returning a token that doesn't conform fully to the OpenID standard. You can try working around this issue by removing the `email_verified` field in your SSO application configuration in JumpCloud. In order to do this, edit your SSO Application and **deselect** the email scope: -
+
Then, add the email below by hand: -
+
Double check that the `email_verified` field is gone from the constant attributes section. The issue should be gone now. + +#### 401 error code when testing Directory synchronization + +Currently the integration doesn't work for accounts that chose to use the JumpCloud EU data center. See relevant [issue](https://github.com/DefGuard/defguard/issues/2756) for more information. + +### Request to the provider times out + +If the requests made to your provider time out you should check if the Defguard Core server has access to your provider. This can be done for example by running the `curl` command to one of the provider's endpoint from the machine/container on which the Defguard Core is running on. The request may time out either if: + +* The resource is not accessible because it's blocked by a firewall or other network configuration +* The response is taking too long (more than 10s), making Defguard Core terminate the request. + +#### Docker + +If your Defguard Core instance is running inside a Docker container, you should first obtain the container's name: + +``` +docker container ls +``` + +``` +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +42986c3e772j postgres:15-alpine "docker-entrypoint.s…" 10 days ago Up 5 hours 0.0.0.0:5432->5432/tcp defguard-db-1 +c4000t32936a ghcr.io/defguard/defguard:main "./defguard" 4 weeks ago Up 19 minutes 0.0.0.0:8000->8000/tcp, 0.0.0.0:50055->50055/tcp defguard-core-1 +``` + +In this case, the container name is `defguard-core-1`. + +Now, open a shell inside the container: + +``` +docker exec -it /bin/bash +``` + +While inside the container, you will need to first temporarily install the `curl` command as its not available by default: + +``` +apt update && apt install curl +``` + +#### Non-docker deployments + +Make sure you have the curl command installed and you are running the command from the same server on which the Defguard Core is running. + +Use the `curl` command to query one of your provider endpoints: + +* **Microsoft:** `https://login.microsoftonline.com//oauth2/v2.0/token` +* **JumpCloud:** `https://console.jumpcloud.com/api/v2` +* **Google:** `https://oauth2.googleapis.com/token` +* **Okta:** `/oauth2/v1/token` + +E.g. for Microsoft you can do: + +``` +curl -s -w "\nResponse Code: %{http_code} Time: %{time_total}\n" -X Post https://login.microsoftonline.com//oauth2/v2.0/token +``` + +Which should both print the response, the response code and the time it took for the request to complete. If the command doesn't complete or takes longer than 10s, the timeout issue may be related to your network/firewall configuration which makes the requests fail from the machine or take longer than expected. Please note that it's expected for this command to return an HTTP error code (4xx) as we are only testing connectivity (the ability to reach given endpoint). diff --git a/admin-and-features/external-openid-providers/custom.md b/features/external-openid-providers/custom.md similarity index 92% rename from admin-and-features/external-openid-providers/custom.md rename to features/external-openid-providers/custom.md index 80c6eba..023f711 100644 --- a/admin-and-features/external-openid-providers/custom.md +++ b/features/external-openid-providers/custom.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/external-openid-providers/custom +--- + # Custom {% hint style="warning" %} diff --git a/features/external-openid-providers/external-oidc-secure-enrollment.md b/features/external-openid-providers/external-oidc-secure-enrollment.md new file mode 100644 index 0000000..a00b9ee --- /dev/null +++ b/features/external-openid-providers/external-oidc-secure-enrollment.md @@ -0,0 +1,20 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/external-openid-providers/external-oidc-secure-enrollment +--- + +# External OIDC secure enrollment + +{% hint style="warning" %} +#### Availability + +This feature is available in all plans, with usage limits. See the [pricing page](https://defguard.net/pricing/) for details. +{% endhint %} + +When [External OIDC is enabled,](./) users have the possibility to [securely enroll (automatically create a Defguard account) and very easily configure their desktop client](../../using-defguard-for-end-users/enrollment/with-external-sso-google-microsoft-custom.md) just by logging in with the SSO provider: + +
+ +For this to work, see [#openid-enrollment](./#openid-enrollment "mention"). diff --git a/admin-and-features/external-openid-providers/google.md b/features/external-openid-providers/google.md similarity index 73% rename from admin-and-features/external-openid-providers/google.md rename to features/external-openid-providers/google.md index d0e2578..52400ad 100644 --- a/admin-and-features/external-openid-providers/google.md +++ b/features/external-openid-providers/google.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/external-openid-providers/google +--- + # Google {% hint style="info" %} @@ -7,27 +14,27 @@ Here is [full Google documentation](https://developers.google.com/identity/openi 1. The Google OpenID Connect can be configured in the [Google Cloud Console](https://console.cloud.google.com) 2. If you don't have any project setup already (or you want to create a new one for this purpose), create it by clicking the dropdown menu here: -
+
If you already have project, make sure to select it in the above dropdown menu. 3. Now, navigate to [`APIs & Services`](https://console.cloud.google.com/apis) 4. We will focus on the consent screen first, select `OAuth consent screen` 5. Pick the User Type according to your needs, this example will focus on the internal type -
+
6. Fill in all required details. Make sure to fill the correct domain. This should be the top domain under which your Defguard dashboard can be accessed, not the subdomain (e.g. `defguard.example.com` -> `example.com`). 7. On the scopes config screen, click `ADD OR REMOVE SCOPES`, Defguard requires at least the following scopes: -
+
8. Proceed until the end and return to the OAuth consent screen dashboard. 9. Now, go to [`Credentials`](https://console.cloud.google.com/apis/credentials), click `CREATE CREDENTIALS` and choose `OAuth client ID` -
+
10. On the next screen, fill out all required information: -
+
- Make sure to select "Web application" as the application type. The other thing to note here is the redirect URI. It is the URI to which the user will be redirected from the external provider's authorization. This URI is in the form of `/auth/callback`. Replace `` with the URL under which your dashboard is accessible, e.g. `https://defguard.example.com`. If you'd like to use OpenID enrollment through proxy, make sure to enter an additional URI here in the form of `/openid/callback`. + Make sure to select "Web application" as the application type. The other thing to note here is the redirect URI. It is the URI to which the user will be redirected from the external provider's authorization. This URI is in the form of `/auth/callback`. Replace `` with the URL under which your dashboard is accessible, e.g. `https://defguard.example.com`. If you'd like to use OpenID enrollment through proxy (and MFA , make sure to enter an additional URIs here in the form of `/openid/callback` , and if you use External MFA please add also: `/openid/mfa/callback` 11. After you proceed further, you will be presented with a popup containing your `Client ID` and `Client Secret`, copy them and paste on the Defguard OpenID configuration page.
@@ -48,7 +55,7 @@ This documentation concerns only the Google directory synchronization. For more The menu can be found in Defguard settings by navigating to the "OpenID" tab. -
+
The following configuration options are currently available in the directory synchronization menu specifically for the Google provider: @@ -59,40 +66,27 @@ To learn more about the rest of the configuration options, see the [general dire #### Directory synchronization setup -1. Navigate to [Service Accounts](https://console.cloud.google.com/iam-admin/serviceaccounts) in the Google Cloud console\ - - -
- +1. Navigate to [Service Accounts](https://console.cloud.google.com/iam-admin/serviceaccounts) in the Google Cloud console\\ +
2. Click "Create service account" -3. Give your service account a descriptive name\ - - -
- +3. Give your service account a descriptive name\\ +
4. Skip step 2 and 3 if you are not sure what to configure there. -5. Go to your newly created service account and add a new key in the "KEYS" tab.\ - - -
- +5. Go to your newly created service account and add a new key in the "KEYS" tab.\\ +
6. A JSON file will be downloaded after you click "CREATE". Store it securely as it may grant access to your Google Workspace directory. 7. Next, navigate to the "DETAILS" tab and copy the unique ID of your service account. 8. Open the Advanced settings and under Domain-wide delegation click "View google workspace admin console" -9. Now in the admin console, navigate to [API controls](https://admin.google.com/u/1/ac/owl)\ - - -
- +9. Now in the admin console, navigate to [API controls](https://admin.google.com/u/1/ac/owl)\\ +
10. In the API controls, click "Manage domain wide delegation" -11. On the next screen, add a new API client\ - +11. On the next screen, add a new API client\\ -
+
Specify the following scopes for your client:\ `openid, email, profile, https://www.googleapis.com/auth/admin.directory.customer.readonly, https://www.googleapis.com/auth/admin.directory.group.readonly, https://www.googleapis.com/auth/admin.directory.user.readonly` diff --git a/features/external-openid-providers/jumpcloud.md b/features/external-openid-providers/jumpcloud.md new file mode 100644 index 0000000..595c866 --- /dev/null +++ b/features/external-openid-providers/jumpcloud.md @@ -0,0 +1,70 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/external-openid-providers/jumpcloud +--- + +# JumpCloud + +1. Login to your JumpCloud admin account. +2. Navigate to SSO Applications\\ + +
+3. Add a new SSO Application +4. Select "Custom" on this screen. + +
+5. Select "Configure SSO with OIDC". + +
+6. Fill the app's display label in the next form.\\ + +
+7. After finishing this configuration, you will be redirected to your newly created SSO Application's settings. Go to the "SSO" tab first. + +
+8. Configure as following: + +
+ + Make sure to set the correct Redirect URI and Login URL that will reflect your Defguard's setup. If you access your Defguard dashboard at e.g. `https://defguard.example.net` your redirect URI will be `https://defguard.example.net/auth/callback` and the login URL `https://defguard.example.net/auth/login`. Additionally, if you are using a Defguard proxy to enroll users, you can also add another redirect URI in the form of `/openid/callback` and `/openid/mfa/callback` if you wish to use the [External MFA feature](../wireguard/multi-factor-authentication-mfa-2fa/#external-mfa) ( `` is the address at which your Proxy enrollment page is accessible). +9. Next, select the profile scope and add an `email` user attribute mapping by hand, like so: + +
+ + It's important **not** to select the email standard scope checkbox, as it will automatically add a constant `email_verified` field which doesn't conform to the OpenID standard and doesn't work with Defguard. You can see the following section for more information: [#jumpcloud](./#jumpcloud "mention"). +10. Click "Activate". You will be presented with a client ID and a secret. Copy both of them, as you will need to insert them in Defguard's settings. +11. Go to Defguard settings, OpenID tab, select `JumpCloud` provider tab and paste the copied values: + +
+12. Back in JumpCloud, make sure your users have access to the SSO Application. You can enable it by navigating to the `User groups` menu and selecting the group you want to enable logging in through JumpCloud for. Only users from this group will be able to log in to Defguard with JumpCloud. In this example, we will select the `All users` group, which is a dynamic group containing every user. +13. Now in the group settings menu, select the `Applications` tab and select the checkbox next to your newly created app, this will enable the app for that group. Click `Save group` when you finish. + +
+14. Now you should be able to log in to Defguard with JumpCloud. + +### Directory synchronization + +Defguard supports synchronizing groups' and users' states based on your JumpCloud directory. + +Make sure to check the [general guide to directory synchronization](./#directory-synchronization) to learn more about the available configuration options. + +#### Setup + +{% hint style="warning" %} +Because JumpCloud API keys are bound to users and they don't support granular permissions nor generating more than one at a time, we recommend generating the API key for a user with read only permissions, as Defguard doesn't require write permissions to your directory. +{% endhint %} + +1. Login to your [JumpCloud admin portal](https://console.jumpcloud.com/) +2. Generate a new API key (or use an existing one). This can be done by clicking your user icon in the upper right corner and selecting "My API key"\\ + +
+3. If you already generated an API key, you will have to regenerate it here (please note that regenerating the API key may break your existing integrations that already use it).\\ + +
+4. Copy the newly generated API key and navigate to your Defguard instance's settings. +5. Paste the key into the "JumpCloud API key" field\\ + +
+6. The JumpCloud directory synchronization should now work and your users' state and group memberships should be periodically synchronized. diff --git a/admin-and-features/external-openid-providers/keycloak.md b/features/external-openid-providers/keycloak.md similarity index 57% rename from admin-and-features/external-openid-providers/keycloak.md rename to features/external-openid-providers/keycloak.md index bbd3b56..36935c2 100644 --- a/admin-and-features/external-openid-providers/keycloak.md +++ b/features/external-openid-providers/keycloak.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/external-openid-providers/keycloak +--- + # Keycloak A basic guide about securing applications using Keycloack can be found [here](https://www.keycloak.org/getting-started/getting-started-docker#_secure_the_first_application). diff --git a/admin-and-features/external-openid-providers/microsoft.md b/features/external-openid-providers/microsoft.md similarity index 64% rename from admin-and-features/external-openid-providers/microsoft.md rename to features/external-openid-providers/microsoft.md index 69add5d..7bbfcf8 100644 --- a/admin-and-features/external-openid-providers/microsoft.md +++ b/features/external-openid-providers/microsoft.md @@ -1,14 +1,21 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/external-openid-providers/microsoft +--- + # Microsoft 1. Go to [https://portal.azure.com/](https://portal.azure.com) 2. Navigate to Microsoft Entra ID 3. In the Microsoft Entra ID, click Manage and select App registrations from the menu on the left. -
+
4. Click "Make new registration" 5. Fill out the form, like in the example: -
+
Make sure the Redirect URL you insert here is correct. Replace `defguard.example.com` with the domain you use for your Defguard dashboard. If you'd like to use OpenID enrollment through proxy, make sure to enter an additional URI here in the form of `/openid/callback`. @@ -18,15 +25,15 @@ Make sure the Redirect URL you insert here is correct. Replace `defguard.example 7. Go to Defguard settings, click the OpenID tab and paste the copied client ID. The tenant ID should be inserted instead of the `` placeholder in the base URL field. 8. Now back in Microsoft Entra ID, still in your newly created application, go to **Certificates & Secrets** -
+
9. Click Client secrets and create a new client secret. Copy its **value** and paste it in your Defguard OpenID settings. 10. Go to Token configuration (in the menu on the left) and add a new optional token claim. 11. Make sure to select the ID token type and the following claims: -
+
12. Accept the popup or configure the API permissions manually. -
+
13. Now you should be good to go. A new login button should appear on the login screen. @@ -47,32 +54,40 @@ Make sure to check the [general guide to directory synchronization](./#directory #### Setup 1. Go back to your app registrations in Microsoft Entra ID and select the app you registered during the provider setup. -2. Navigate to API permissions\ - - -
- - -3. Click "Add a permission", then select "Microsoft Graph"\ - - -
- - -4. Select "Application permissions", as Defguard will perform the synchronization in the background.\ +2. Navigate to API permissions\\ +
+3. Click "Add a permission", then select "Microsoft Graph"\\ -
- +
+4. Select "Application permissions", as Defguard will perform the synchronization in the background.\\ +
5. Assign the following permissions: * `GroupMember.Read.All` * `Group.Read.All` * `User.Read.All` -6. Now grant admin consent for the permissions using the "Grant admin consent for" button\ +6. Now grant admin consent for the permissions using the "Grant admin consent for" button\\ + +
+7. You should be good to go now. Navigate to the directory sync settings in Defguard and try to test your setup using the test connection button. +#### Creating Defguard users -
+{% hint style="warning" %} +In order for Entra users to be created in Defguard they must have the following attributes set: +* email (or otherMails) +* first name +* last name +{% endhint %} -7. You should be good to go now. Navigate to the directory sync settings in Defguard and try to test your setup using the test connection button. +By default directory sync guaranteed only that the state and group membership of Defguard users also present in the directory is up-to-date. It does not create Defguard users until they log in using an External OpenID provider. + +{% hint style="info" %} +Currently creating Deguard users during directory synchronization is only available for the Microsoft provider. +{% endhint %} + +To create Defguard users during directory sync enable the `Prefetch users` option:\\ + +
diff --git a/admin-and-features/external-openid-providers/okta.md b/features/external-openid-providers/okta.md similarity index 83% rename from admin-and-features/external-openid-providers/okta.md rename to features/external-openid-providers/okta.md index 4431ea6..58f1947 100644 --- a/admin-and-features/external-openid-providers/okta.md +++ b/features/external-openid-providers/okta.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/external-openid-providers/okta +--- + # Okta 1. First, navigate in your Okta dashboard to "Applications" and create a new app integration here: @@ -26,8 +33,6 @@ The base URL will be based on your Okta domain. In the case of this example, the `-admin` part of the URL had to be additionally removed. To additionally verify if your Base URL is correct, you can navigate to `/.well-known/openid-configuration`. The issuer field here should be the same as the Base URL. - - ### Directory synchronization {% hint style="info" %} @@ -40,7 +45,7 @@ This documentation concerns only the Okta directory synchronization. For more ge The menu can be found in Defguard settings by navigating to the "OpenID" tab. -
+
The following configuration options are currently available in the directory synchronization menu specifically for the Okta provider: @@ -55,39 +60,26 @@ To learn more about the rest of the configuration options, see the [general dire This feature is currently technically limited to 10000 members or groups. High user or group counts may still trigger your provider API limits even below this threshold. If you have many users (200+), we recommend you test this feature first before you decide to turn on automatic user deletion. {% endhint %} -1. Go to the Okta admin dashboard and navigate to the Applications menu\ - - -
- +1. Go to the Okta admin dashboard and navigate to the Applications menu\\ +
2. Make a completely new app integration by clicking "Create App Integration". This app will be solely responsible for communicating with Okta API. -3. Select "API services"\ - - -
- +3. Select "API services"\\ +
4. Name your app integration, e.g. "Defguard directory sync" -5. Go to your newly created app integration settings and change the client authentication to "Public key / Private key"\ - - -
- +5. Go to your newly created app integration settings and change the client authentication to "Public key / Private key"\\ +
6. Next, click "Add key" and generate a new key pair. 7. Copy the generated private key in the JSON format to your clipboard 8. Paste the copied key in the Defguard Okta directory sync settings in the "Directory Sync Private Key" field. 9. Go back to Okta again. Save your new Okta configuration along with the newly generated keys. Now, copy the app integration's client ID. Paste it in the "Directory Sync Client ID" field in Defguard Okta directory sync settings. Save your Defguard settings. -10. Return to Okta and under "General settings" turn off the "Require Demonstrating Proof of Possession (DPoP) header in token requests" option. Save your changes.\ - - -
-11. Now, navigate to the Okta API scopes tab.\ - - -
+10. Return to Okta and under "General settings" turn off the "Require Demonstrating Proof of Possession (DPoP) header in token requests" option. Save your changes.\\ +
+11. Now, navigate to the Okta API scopes tab.\\ +
12. Grant the `okta.groups.read` and `okta.users.read` scopes. 13. Everything should be set now. Try testing your provider connection in Defguard directory synchronization settings. diff --git a/admin-and-features/external-openid-providers/zitadel.md b/features/external-openid-providers/zitadel.md similarity index 91% rename from admin-and-features/external-openid-providers/zitadel.md rename to features/external-openid-providers/zitadel.md index 9b8ecd0..08a25bd 100644 --- a/admin-and-features/external-openid-providers/zitadel.md +++ b/features/external-openid-providers/zitadel.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/external-openid-providers/zitadel +--- + # Zitadel {% hint style="info" %} diff --git a/admin-and-features/forward-auth.md b/features/forward-auth.md similarity index 88% rename from admin-and-features/forward-auth.md rename to features/forward-auth.md index fd5e0b4..730aa01 100644 --- a/admin-and-features/forward-auth.md +++ b/features/forward-auth.md @@ -1,3 +1,9 @@ +--- +metaLinks: + alternates: + - https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/forward-auth +--- + # Forward auth Defguard supports [forward auth](https://app.gitbook.com/o/Z3mGSAbEj9iLdZ7cNFlL/s/hM5HQk0xXl585Dm4YMUV/~/changes/48/features/forward-auth) integration with popular reverse proxies (tested with [traefik](https://doc.traefik.io/traefik/) and [caddy](https://caddyserver.com/)). This allows you to use Defguard to secure services which don't provide their own authorization or OAuth integration. @@ -7,7 +13,7 @@ In order for forward auth to work the services you are trying to protect must be For example if you are serving your Defguard UI at `id.yourdomain.com`, then your services must use other subdomains of `yourdomain.com`, e.g. ``app1.yourdomain.com, `service.yourdomain.com` etc``. -Additionally you have to update your [Defguard config](../configuration.md#auth-cookies-configuration) to set the cookies domain to `yourdomain.com`. +Additionally you have to update your [Defguard config](../deployment-strategies/configuration.md#auth-cookies-configuration) to set the cookies domain to `yourdomain.com`. {% endhint %} ## Example configurations diff --git a/admin-and-features/setting-up-your-instance/gateway/README.md b/features/gateway.md similarity index 76% rename from admin-and-features/setting-up-your-instance/gateway/README.md rename to features/gateway.md index 20ea005..5c9d5f7 100644 --- a/admin-and-features/setting-up-your-instance/gateway/README.md +++ b/features/gateway.md @@ -1,3 +1,9 @@ +--- +metaLinks: + alternates: + - https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/gateway +--- + # OPSense Configuartion [OPNsense®](https://opnsense.org/) is an open source, feature rich firewall and routing platform, offering cutting-edge network protection. @@ -9,10 +15,10 @@ This instruction helps configure Defguard Gateway in OPNsense. This is based on ### Configure Defguard Gateway plugin 1. Go to **VPN → Defguard Gateway** -2. Fill out the appropriate values in the form. You can read more about the available configuration options here: [#gateway-configuration](../../../configuration.md#gateway-configuration "mention") +2. Fill out the appropriate values in the form. You can read more about the available configuration options here: [#gateway-configuration](../deployment-strategies/configuration.md#gateway-configuration "mention") 3. Eventually, **Start/Restart** the service. -
OPNSense plugin
+
OPNSense plugin
### Assign a network interface to Defguard @@ -21,7 +27,7 @@ This instruction helps configure Defguard Gateway in OPNsense. This is based on 3. Add a description, for example _ParisOfficeVPN_ 4. Click **Add** -
Interface Assignments
+
Interface Assignments
5. Select the newly create interface by clicking on its name (in this example _\[ParisOfficeVPN]_). 6. Select **Enable Interface** @@ -38,7 +44,7 @@ This instruction helps configure Defguard Gateway in OPNsense. This is based on 6. Select **Source address** – this should be interface name assigned above plus _net_, e.g. _ParisOfficeVPN net_. 7. Click **Save**, and then **Apply changes** -
Outbound NAT rule
+
Outbound NAT rule
### Add firewall rules to allow WireGuard traffic in @@ -51,4 +57,4 @@ This instruction helps configure Defguard Gateway in OPNsense. This is based on 7. Set **Destination** to **WAN address** and port to the port number provided in Defguard Core: _Location configuration → Gateway port_ 8. Click **Save**, and then **Apply changes** -
Firewall rule
+
Firewall rule
diff --git a/features/integrations/README.md b/features/integrations/README.md new file mode 100644 index 0000000..4a013f3 --- /dev/null +++ b/features/integrations/README.md @@ -0,0 +1,8 @@ +--- +metaLinks: + alternates: + - https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/integrations +--- + +# Integrations + diff --git a/features/integrations/api-tokens.md b/features/integrations/api-tokens.md new file mode 100644 index 0000000..f13b5bc --- /dev/null +++ b/features/integrations/api-tokens.md @@ -0,0 +1,99 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/integrations/api-tokens +--- + +# REST API + +{% hint style="warning" %} +#### Availability + +This feature is available in all plans, with usage limits. See the [pricing page](https://defguard.net/pricing/) for details. +{% endhint %} + +{% hint style="warning" %} +API functionality: + +1. requires Defguard version 1.2.4+ +2. is also **available without enterprise license**, if your instance does not exceed the limits [described here](../../enterprise/license.md#enterprise-is-free-up-to-certain-limits). +{% endhint %} + +## REST API documentation + +You can explore the Defguard REST API using [Swagger UI](https://swagger.io/tools/swagger-ui/) by going to `/api-docs`. + +API specification JSON in OpenAPI format can also be fetched from `/api/v1/api-docs`. + +Admin users can generate API tokens to enable request authentication for custom external tools which use Defguard REST API. + +Tokens retain the same access permissions as their owner, so be careful when sharing them with others. + +## Generating API token + +## Setup + +To generate a new API token, go to your profile page and click the `Add new API Token`button: + +
+ +Fill in your chosen token name and submit form: + +
+ +Copy generated token. This is the only time the token will be available in plain text form. If you lose it you will have to generate a new one. + +
+ +In the API token list you can later rename or delete a token: + +
+ +## Usage + +Defguard API uses a standard **Bearer token authentication** scheme. + +This means that an API token can be passed in the `Authorization` header to authenticate a given request instead of a session cookie used by the web UI: + +```bash +Authorization: Bearer +``` + +Example GET request: + +```bash +curl -H "Authorization: Bearer " /api/v1/me +``` + +## Swagger UI + +### Using API token in Swagger + +After opening Swagger UI you can add your `API token` and try out available endpoints. + +1. Open Swagger UI and click **Authorize** button. + +
+ +2. Paste your `API token.` + +
+ +3. Click on endpoint and select **Try it out** option. + +
+ +4. If endpoint requires a path or request body, enter it. + +
+ +5. Click **Execute** and scroll down, you will see response body. + +
+ +### Schemas + +If you are looking for definitions of types, you can scroll down to **Schemas** section. + +
diff --git a/integrations/webhooks.md b/features/integrations/webhooks.md similarity index 92% rename from integrations/webhooks.md rename to features/integrations/webhooks.md index ce223e9..30c6d0e 100644 --- a/integrations/webhooks.md +++ b/features/integrations/webhooks.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/integrations/webhooks +--- + # Webhooks ## Basic idea @@ -8,7 +15,7 @@ The basic idea of webhooks is to send user data to external systems in order to On the left side of Defguard navigation, you'll find webhooks page -![New webhook form](../.gitbook/assets/webhookform.png) +![New webhook form](../../.gitbook/assets/webhookform.png) On the form above, you'll see inputs like URL description token and triggers diff --git a/admin-and-features/ldap-and-active-directory-integration/README.md b/features/ldap-and-active-directory-integration/README.md similarity index 75% rename from admin-and-features/ldap-and-active-directory-integration/README.md rename to features/ldap-and-active-directory-integration/README.md index 6d9a428..16bd124 100644 --- a/admin-and-features/ldap-and-active-directory-integration/README.md +++ b/features/ldap-and-active-directory-integration/README.md @@ -1,7 +1,16 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/ldap-and-active-directory-integration +--- + # LDAP and Active Directory integration {% hint style="warning" %} -This is an enterprise feature. To use it, purchase our [enterprise license](../../enterprise/license.md) or ensure that your deployment does not exceed the [usage limits](../../enterprise/license.md#enterprise-is-free-up-to-certain-limits). +#### Availability + +This feature is available in all plans, with usage limits. See the [pricing page](https://defguard.net/pricing/) for details. {% endhint %} Defguard supports integration with LDAP and Microsoft Active Directory (AD), enabling seamless connectivity with your existing directory infrastructure. This integration allows organizations to centralize user management, streamline authentication processes, and synchronize user and group data between Defguard and external directory services. diff --git a/admin-and-features/ldap-and-active-directory-integration/configuration.md b/features/ldap-and-active-directory-integration/configuration.md similarity index 83% rename from admin-and-features/ldap-and-active-directory-integration/configuration.md rename to features/ldap-and-active-directory-integration/configuration.md index 48baa43..cb76103 100644 --- a/admin-and-features/ldap-and-active-directory-integration/configuration.md +++ b/features/ldap-and-active-directory-integration/configuration.md @@ -1,5 +1,9 @@ --- description: How to configure connection between Defguard instance and LDAP. +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/ldap-and-active-directory-integration/configuration --- # Configuration @@ -16,7 +20,7 @@ If you are using the integration across multiple nested organizational units, pl First, navigate to the settings page and select the LDAP tab. -
+
Now change fields according to your LDAP instance. @@ -40,11 +44,11 @@ After enabling the LDAP integration, you will gain the ability to log in to Defg ### Example Active Directory configuration -
+
-
+
-
+
This is an example configuration for a default Active Directory setup on a Windows Server 2022. The most important aspect is setting the "LDAP server is Active Directory" setting, as AD support won't work otherwise. Additionally, `ldaps` has been configured as AD requires an encrypted connection in order for Defguard to be allowed to send user passwords, which is critical if you expect to create users/set passwords through Defguard. @@ -52,16 +56,14 @@ The "cn" attribute has been configured as the user's RDN as that's what used in ### Example OpenLDAP configuration -
+
-
+
-
+
This is an example configuration for an OpenLDAP server integrated with Samba (hence `sambaSamAccount` object class). The `inetOrgPerson` has been set as the user structural class which adds attributes to the LDAP user like `email` or `mobile`. `simpleSecurityObject` class has been added for the ability to set passwords in LDAP. - - ## Known issues ### Multiple nested OUs @@ -76,9 +78,8 @@ If you are using an older version of Defguard, using the integration with multip * Limiting synchronization to selected groups may not work if your user's DN doesn't match the user search base: * Search base: `OU=ou,DC=example` - * User's DN: `CN=user1,OU=ou1,OU=ou,DC=example` + * User's DN: `CN=user1,OU=ou1,OU=ou,DC=example` In this example, the user's DN has deeper nesting than the search base, preventing matching them during the group members lookup. To fix this problem, you should limit the search base to one organizational unit only, if possible. - diff --git a/admin-and-features/ldap-and-active-directory-integration/settings-table.md b/features/ldap-and-active-directory-integration/settings-table.md similarity index 95% rename from admin-and-features/ldap-and-active-directory-integration/settings-table.md rename to features/ldap-and-active-directory-integration/settings-table.md index 75adfa4..256e3d6 100644 --- a/admin-and-features/ldap-and-active-directory-integration/settings-table.md +++ b/features/ldap-and-active-directory-integration/settings-table.md @@ -1,5 +1,9 @@ --- description: List with description of settings for LDAP found in settings page. +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/ldap-and-active-directory-integration/settings-table --- # Settings table @@ -39,16 +43,15 @@ Changing the RDN attribute may cause your users to be re-added to Defguard, caus * `User RDN attribute`: The attribute used in your user's DN. It will be used to link users between LDAP and Defguard. Depending on your setup, it may be different from the attribute used for usernames. If left empty, your username attribute will be used instead. For example:\ Given a user DN of `cn=user1,cn=users,dc=ad,dc=example,dc=com` you would set the RDN attribute to `cn`. * `Username attribute`: The username attribute, which will be used to set the username of a Defguard user. The following restrictions apply: - * Only alphanumeric characters except for ., - or \_ + * Only alphanumeric characters except for ., - or \_ * At least 1 and at most 64 characters * Must be unique across all users {% hint style="danger" %} -To use this feature, your LDAP user entries must posses the "memberOf" attribute (or it's equivalent, defined using the member attribute), which may not be available by default on your LDAP server. This may require enabling an appropriate module. +To use this feature, your LDAP user entries must posses the "memberOf" attribute (or it's equivalent, defined using the member attribute), which may not be available by default on your LDAP server. This may require enabling an appropriate module. {% endhint %} * `Limit synchronization to these groups`: limits the synchronization scope to only the members of the selected groups, this works both ways: * Changes in Defguard will be propagated to LDAP only if a user belongs to a given group in Defguard. * If the two-way synchronization is enabled, only the users belonging to the specified groups will be fetched from the LDAP server. * Adding a user to one of the synchronization groups in Defguard will automatically create that user in LDAP if they don't exist yet. If they already exist, their LDAP data (e.g. the email address) will be overwritten with the data in Defguard if only the one way synchronization (Defguard -> LDAP) is enabled. Otherwise, if the two-way synchronization is enabled, the selected authority server will be respected. - diff --git a/admin-and-features/ldap-and-active-directory-integration/two-way-ldap-and-active-directory-synchronization.md b/features/ldap-and-active-directory-integration/two-way-ldap-and-active-directory-synchronization.md similarity index 92% rename from admin-and-features/ldap-and-active-directory-integration/two-way-ldap-and-active-directory-synchronization.md rename to features/ldap-and-active-directory-integration/two-way-ldap-and-active-directory-synchronization.md index 26548f0..4aa3a15 100644 --- a/admin-and-features/ldap-and-active-directory-integration/two-way-ldap-and-active-directory-synchronization.md +++ b/features/ldap-and-active-directory-integration/two-way-ldap-and-active-directory-synchronization.md @@ -1,7 +1,16 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/ldap-and-active-directory-integration/two-way-ldap-and-active-directory-synchronization +--- + # Two-way LDAP and Active Directory synchronization {% hint style="warning" %} -This is an enterprise feature. To use it, purchase our [enterprise license](../../enterprise/license.md) or ensure that your deployment does not exceed the [usage limits](../../enterprise/license.md#enterprise-is-free-up-to-certain-limits). +#### Availability + +This feature is available in all plans, with usage limits. See the [pricing page](https://defguard.net/pricing/) for details. {% endhint %} {% hint style="warning" %} @@ -37,13 +46,13 @@ For OpenLDAP: First, you will need to configure your LDAP connection. Refer to [configuration.md](configuration.md "mention") for instructions. Here is an example configuration for an OpenLDAP server without SSL/TLS: -
+
-Make sure you selected "Enable LDAP integration" as without it, the two-way synchronization won't work. After you fill out all the fields, test your configuration using the button. +Make sure you selected "Enable LDAP integration" as without it, the two-way synchronization won't work. After you fill out all the fields, test your configuration using the button. The LDAP two-way synchronization has the following options available: -
+
* **Enable LDAP two-way synchronization** - enables the two-way synchronization. Check it if you want to pull changes from LDAP. * **Consider the following source as the authority** - makes the selected server the source of truth. See [#authority-and-full-synchronization](two-way-ldap-and-active-directory-synchronization.md#authority-and-full-synchronization "mention") for more details. @@ -59,7 +68,7 @@ Before enabling this feature, check if you meet requirements described in [setti If you want to synchronize only selected users, you can specify the groups of which members should be synchronized. -
+
This can be useful if you have a lot of users in your LDAP server and want to synchronize/pull only users belonging to a given group, e.g. `defguard-sync`. @@ -78,9 +87,9 @@ The following advice should be applied only when you are using LDAP as the autho After you change your synchronization groups, users not belonging to the new groups won't be automatically deleted. This may be an issue if you first used the two-way synchronization without any synchronization groups, effectively synchronizing everyone and decided later to narrow the scope of synchronization. This can result in many redundant, not synchronized user records in your Defguard instance lying around. If you want to prune your Defguard users to only those who are in your synchronization group, you can follow these steps (assuming you have already set your synchronization groups): 1. Wait for a two-way periodic synchronization to complete, you can recognize it by the `LDAP sync completed` log message. -2. Temporarily disable the whole LDAP integration in the settings ![](<../../.gitbook/assets/image (96).png>) +2. Temporarily disable the whole LDAP integration in the settings ![](<../../.gitbook/assets/image (196).png>) 3. In the Defguard user's list, bulk assign all users one of your synchronization groups, to bring them into the scope of synchronization. You may want to leave out all users which you don't want to be ever touched by the LDAP integration, e.g. the default admin user or other users you want to keep only in Defguard. -4. Enable the LDAP integration in the settings +4. Enable the LDAP integration in the settings 5. Now, the next two-way synchronization will remove all users from Defguard who have the synchronization group you just assigned in Defguard but don't have it in LDAP, effectively leaving you only with users that have the group in both sources. ## Synchronization mechanism overview @@ -115,7 +124,7 @@ The full synchronization takes both sources, compares them and produces changes With LDAP authority: -* `user3` will be removed from Defguard (since he is not in LDAP), +* `user3` will be removed from Defguard (since he is not in LDAP), * `user1` will be added to Defguard (since he is not in there but is in LDAP) With Defguard authority: @@ -138,9 +147,9 @@ As passwords are stored as hashes with possibly incompatible hashing algorithm b #### Defguard → LDAP -Passwords are set in LDAP only on Defguard user account creation, enrollment, password change or reset. Basically when the password is explicitly provided by the user with the intent to set or change it. +Passwords are set in LDAP only on Defguard user account creation, enrollment, password change or reset. Basically when the password is explicitly provided by the user with the intent to set or change it. -This means that if you want to import to LDAP all Defguard users who were created before enabling LDAP integration, they will have to change their passwords in Defguard in order for it to be propagated and set in LDAP. +This means that if you want to import to LDAP all Defguard users who were created before enabling LDAP integration, they will have to change their passwords in Defguard in order for it to be propagated and set in LDAP. Because some LDAP implementations will require password on user creation, Defguard will set a temporary, long, random text as the LDAP user password until it's not changed/set/reset by the user in Defguard. @@ -168,7 +177,7 @@ Otherwise, report it on our GitHub along with any appropriate logs. #### Something wasn't updated in LDAP -If you notice that your Defguard change isn't propagated properly to LDAP, run Defguard with debug logs enabled (`DEFGUARD_LOG_LEVEL=debug` environment variable). Some LDAP errors may be not reported as errors by the LDAP server but most of the operations outputs are logged in the debug logs to help you narrow down the issue. +If you notice that your Defguard change isn't propagated properly to LDAP, run Defguard with debug logs enabled (`DEFGUARD_LOG_LEVEL=debug` environment variable). Some LDAP errors may be not reported as errors by the LDAP server but most of the operations outputs are logged in the debug logs to help you narrow down the issue. #### Defguard logs suggest that it uses LDAP authority during synchronization despite setting something different in the settings @@ -179,4 +188,3 @@ Incremental synchronization (as opposed to the full synchronization) internally #### SysErr: DSID-031A1262, problem 22 (Invalid argument) You are trying to synchronize a Defguard user with username longer than 20 characters, which [AD doesn't support](https://learn.microsoft.com/en-us/windows/win32/adschema/a-samaccountname?redirectedfrom=MSDN). - diff --git a/admin-and-features/network-devices.md b/features/network-devices.md similarity index 78% rename from admin-and-features/network-devices.md rename to features/network-devices.md index 917c01d..acbaa17 100644 --- a/admin-and-features/network-devices.md +++ b/features/network-devices.md @@ -1,6 +1,12 @@ +--- +metaLinks: + alternates: + - https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/network-devices +--- + # Network devices -Network devices are like regular user devices but can only be managed by admins and have access to only one network. They are designed to be used with the [Defguard CLI client](../../help/cli-client.md). +Network devices are like regular user devices but can only be managed by admins and have access to only one network. They are designed to be used with the [Defguard CLI client](../using-defguard-for-end-users/cli-client.md). ### Adding a new network device @@ -8,14 +14,14 @@ In order to add a new network device, navigate to the network device menu (selec While in the network device menu, click the "Add new" button. You will be presented with a popup prompting you to select your method of setting up the network device. -* **Defguard Command Line Client -** choose it to automatically configure your device with the [Defguard CLI client](../../help/cli-client.md) +* **Defguard Command Line Client -** choose it to automatically configure your device with the [Defguard CLI client](../using-defguard-for-end-users/cli-client.md) * **Manual WireGuard Client** - choose it if you don't want to use the Defguard CLI client. You will need to configure your network device manually with a WireGuard config file. #### Using the Defguard CLI client After selecting the first option you will be presented with the initial setup screen. -
+
You can specify here the following settings: @@ -24,13 +30,13 @@ You can specify here the following settings: * **Assigned IP Address** - automatically suggested IP address, you may change it as needed, * **Description** - the description to help you identify the device, it will be displayed in the device list. -After you've finished setting those values, proceed to the next step. You will be presented with an enrollment command. Learn more about further steps from the [CLI client documentation](../../help/cli-client.md). +After you've finished setting those values, proceed to the next step. You will be presented with an enrollment command. Learn more about further steps from the [CLI client documentation](../using-defguard-for-end-users/cli-client.md). #### Using the Manual WireGuard client The screen here is similar to that of the CLI client configuration, except for the additional public key field. -
+
The fields are as follows: @@ -45,9 +51,9 @@ On the next screen you will be presented with the WireGuard configuration file. ### Displaying network device configuration and enrollment token -After you've configured your network device, you can display its enrollment token again, by interacting with the following menu: +After you've configured your network device, you can display its enrollment token again, by interacting with the following menu: -
+
* Selecting "Generate auth token" will re-generate the enrollment token and will allow you to enroll your CLI client again. Use it if you want to manually pull the newest network configuration for your client. * Selecting the "View config" option will display the WireGuard configuration file (without the private key, as Defguard doesn't store it). diff --git a/features/notifications/README.md b/features/notifications/README.md new file mode 100644 index 0000000..03172dd --- /dev/null +++ b/features/notifications/README.md @@ -0,0 +1,8 @@ +--- +metaLinks: + alternates: + - https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/notifications +--- + +# Notifications + diff --git a/notifications/gateway-notifications.md b/features/notifications/gateway-notifications.md similarity index 71% rename from notifications/gateway-notifications.md rename to features/notifications/gateway-notifications.md index 2cd310a..545813d 100644 --- a/notifications/gateway-notifications.md +++ b/features/notifications/gateway-notifications.md @@ -1,6 +1,13 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/notifications/gateway-notifications +--- + # Gateway notifications -You can configure automatic e-mail notifications when one of your gateways disconnects. +You can configure automatic e-mail notifications when one of your gateways disconnects. ### Requirements @@ -10,7 +17,7 @@ You can configure automatic e-mail notifications when one of your gateways disco In order to configure the notifications, navigate to the "Gateway notifications" settings tab. -
+
The configuration options are as follows: diff --git a/notifications/new-version-notifications.md b/features/notifications/new-version-notifications.md similarity index 55% rename from notifications/new-version-notifications.md rename to features/notifications/new-version-notifications.md index 4c01e61..d401fa2 100644 --- a/notifications/new-version-notifications.md +++ b/features/notifications/new-version-notifications.md @@ -1,13 +1,20 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/notifications/new-version-notifications +--- + # New version notifications Defguard will periodically (every 6 hours) check for a new version, If there is one that is newer than the current one, a toast will be displayed in the admin dashboard. -
+
You can display the release notes by clicking "See what's new". -
+
If the update is considered critical (e.g. fixes a vulnerability) it will have the "critical update" badge. -If you dismiss the update, it won't be shown again for that version for the +If you dismiss the update, it won't be shown again for that version for the diff --git a/notifications/setting-up-smtp-for-email-notifications.md b/features/notifications/setting-up-smtp-for-email-notifications.md similarity index 67% rename from notifications/setting-up-smtp-for-email-notifications.md rename to features/notifications/setting-up-smtp-for-email-notifications.md index 05fa37d..6ae0a37 100644 --- a/notifications/setting-up-smtp-for-email-notifications.md +++ b/features/notifications/setting-up-smtp-for-email-notifications.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/notifications/setting-up-smtp-for-email-notifications +--- + # Email notifications In **Settings > SMTP** tab you can setup a connection to an SMTP server. diff --git a/admin-and-features/openid-connect/README.md b/features/openid-connect/README.md similarity index 97% rename from admin-and-features/openid-connect/README.md rename to features/openid-connect/README.md index 5e8e056..539a0d4 100644 --- a/admin-and-features/openid-connect/README.md +++ b/features/openid-connect/README.md @@ -1,3 +1,9 @@ +--- +metaLinks: + alternates: + - https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/openid-connect +--- + # Internal SSO (OpenID Connect Provider) ## OpenID Connect @@ -8,21 +14,19 @@ OpenID Connect is an identity layer built on top of OAuth2, it allows third-part ### Defguard as an OpenID Connect Provider -Defguard is a full-featured OIDC provider enabling SSO (Single Sign-On) across third-party applications. Apps can authenticate users through Defguard identity system using standard [OIDC flow](./#defguard-openid-flow). +Defguard is a full-featured OIDC provider enabling SSO (Single Sign-On) across third-party applications. Apps can authenticate users through Defguard identity system using standard [OIDC flow](./#defguard-openid-flow). Example:
- - ### How Defguard implements OpenID? As an identity provider, one of our core features is Login with Defguard which allows you to log into other websites using your Defguard account so you don't have to care about multiple passwords and leaks. At this point you may have concern and ask is it safe? Yes, it's completely safe cause all information third party app will receive is the information that you allowed on the redirect page. This information then are sent to third party app as IDToken which is basically JSON Web Token with additional claims like first name or email. Your password isn't sent in any step of this. ### Defguard OpenID flow -![OpenID flow](../../in-depth/puml/openid-flow.svg) +![OpenID flow](../../.gitbook/assets/openid-flow.svg) ### How to enable login with Defguard using OpenID? diff --git a/admin-and-features/openid-connect/django.md b/features/openid-connect/django.md similarity index 94% rename from admin-and-features/openid-connect/django.md rename to features/openid-connect/django.md index c4d2c30..9df18e8 100644 --- a/admin-and-features/openid-connect/django.md +++ b/features/openid-connect/django.md @@ -1,5 +1,9 @@ --- hidden: true +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/openid-connect/django --- # Django @@ -125,9 +129,9 @@ We need to register our Django application as an OpenID client in Defguard. To do that, navigate to OpenID panel and add new client as shown below. -
+
-
+
Redirect URL should point to **http://localhost:9000/oauth/redirect** @@ -213,7 +217,7 @@ Either provide them as environment variables or modify the views file and pass t Both Client **ID** and **Secret** can be found on OpenID apps page in Defguard, **click** our Django app **row** on the list and you will be able to copy needed values from the opened modal. -
+
### URLS @@ -414,10 +418,10 @@ After accessing _http://localhost:9000/admin we should see our custom login page Button "_Login with Defguard_" should redirect us to our Defguard instance. Depending on if Defguard session is active or not we should be able to see app authorization page or login page. -
+
-
+
-
+
When we authorize Django App to our Defguard account we are redirected back to our Django admin and logged in with a user from Defguard. diff --git a/admin-and-features/openid-connect/grafana-setup.md b/features/openid-connect/grafana-setup.md similarity index 92% rename from admin-and-features/openid-connect/grafana-setup.md rename to features/openid-connect/grafana-setup.md index 6717eea..619c209 100644 --- a/admin-and-features/openid-connect/grafana-setup.md +++ b/features/openid-connect/grafana-setup.md @@ -1,5 +1,9 @@ --- hidden: true +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/openid-connect/grafana-setup --- # Grafana setup diff --git a/admin-and-features/openid-connect/minio.md b/features/openid-connect/minio.md similarity index 95% rename from admin-and-features/openid-connect/minio.md rename to features/openid-connect/minio.md index c65547e..d805d79 100644 --- a/admin-and-features/openid-connect/minio.md +++ b/features/openid-connect/minio.md @@ -1,5 +1,9 @@ --- hidden: true +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/openid-connect/minio --- # MinIO @@ -32,7 +36,7 @@ Navigate to the OpenID page in Defguard and add MinIO to the client's list. Redi http://localhost:9001/oauth_callback ``` -
+
## MinIO Configuration diff --git a/admin-and-features/openid-connect/portainer.md b/features/openid-connect/portainer.md similarity index 91% rename from admin-and-features/openid-connect/portainer.md rename to features/openid-connect/portainer.md index 68022eb..b066916 100644 --- a/admin-and-features/openid-connect/portainer.md +++ b/features/openid-connect/portainer.md @@ -1,5 +1,9 @@ --- hidden: true +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/openid-connect/portainer --- # Portainer diff --git a/admin-and-features/openid-connect/proxmox-1.md b/features/openid-connect/proxmox-1.md similarity index 93% rename from admin-and-features/openid-connect/proxmox-1.md rename to features/openid-connect/proxmox-1.md index 1997aef..3269fc3 100644 --- a/admin-and-features/openid-connect/proxmox-1.md +++ b/features/openid-connect/proxmox-1.md @@ -1,5 +1,9 @@ --- hidden: true +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/openid-connect/proxmox-1 --- # Matrix / Synapse diff --git a/admin-and-features/openid-connect/proxmox.md b/features/openid-connect/proxmox.md similarity index 93% rename from admin-and-features/openid-connect/proxmox.md rename to features/openid-connect/proxmox.md index 6df5b10..436942d 100644 --- a/admin-and-features/openid-connect/proxmox.md +++ b/features/openid-connect/proxmox.md @@ -1,5 +1,9 @@ --- hidden: true +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/openid-connect/proxmox --- # Proxmox diff --git a/features/openid-connect/synology-dsm.md b/features/openid-connect/synology-dsm.md deleted file mode 100644 index 45a2f04..0000000 --- a/features/openid-connect/synology-dsm.md +++ /dev/null @@ -1,48 +0,0 @@ -# Synology DSM - -{% hint style="warning" %} -For Synology SSO Client to work with Defguard you have to run your instance with [RSA signing key](../setting-up-your-instance/docker-compose.md#openid-rsa-setup). -{% endhint %} - -{% hint style="warning" %} -It's important to note that this integration does not create user accounts. To authorize with Defguard you have to create Synology users with matching usernames. -{% endhint %} - -## Add Synology app in defguard - -* in Defguard web UI go to OpenID Apps and click `Add new` button -* fill in the form - * **App name**: Synology (or whatever you prefer) - * **Redirect URL 1**: URL of your Synology NAS web interface (DSM), for example `https://dsm.example.com` - * **Scopes**: select `OpenID` and `Profile` -* submit the form - -After successfully adding your app you can see it in the OpenID apps list. When you click on it you will be redirected to the client details page. From this page copy Client ID and Client secret values for later. - -## Configure SSO Client in Synology DSM - -* log into your Synology NAS web UI using an account with admin permissions -* got to **Control Panel** > **Domain/LDAP** > **SSO Client** -* check `Enable OpenID Connect SSO service` and open SSO Settings\ - - -
-* fill in and save the settings form - * **Profile**: OIDC - * **Account type**: Domain/LDAP/local - * **Name**: Defguard (or whatever you prefer, this will be used on login screen) - * **Well-known URL**: `/.well-known/openid-configuration`, for example `https://id.example.com/.well-known/openid-configuration` - * **Application ID**: copied from client app details in defguard - * **Application secret**: copied from client app details in defguard - * **Redirect URI**: address of your Synology NAS, for example https://dsm.example.com - * **Authorization scope**: `openid profile` - * **Username claim**: `preferred_username`\ - - -
- -After this a new tab should be added to the DSM login form: - -
- -You can also make Defguard the default login option in SSO client settings. diff --git a/admin-and-features/openid-connect/vault.md b/features/openid-connect/vault.md similarity index 95% rename from admin-and-features/openid-connect/vault.md rename to features/openid-connect/vault.md index d78317d..4f63c6c 100644 --- a/admin-and-features/openid-connect/vault.md +++ b/features/openid-connect/vault.md @@ -1,5 +1,9 @@ --- hidden: true +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/openid-connect/vault --- # Vault diff --git a/features/overview.md b/features/overview.md new file mode 100644 index 0000000..676da9a --- /dev/null +++ b/features/overview.md @@ -0,0 +1,22 @@ +--- +metaLinks: + alternates: + - https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/overview +--- + +# Overview + +## Welcome to Defguard admin documentation + +This documentation walks you through all the administrative features of Defguard and how to configure them. + +We recommend having your own Defguard instance set up to explore these features firsthand. As you follow along, you can adjust the configuration directly within your instance to better understand each feature in action. + +If you don't have your instance yet, start it easily using our [one-line install script](../getting-started/one-line-install.md). + +### What you’ll learn + +As a future Defguard administrator, this documentation will help you: + +* Be aware of all the possibilities you have with Defguard. +* How to configure them to your needs. diff --git a/features/remote-user-enrollment/README.md b/features/remote-user-enrollment/README.md new file mode 100644 index 0000000..f34003f --- /dev/null +++ b/features/remote-user-enrollment/README.md @@ -0,0 +1,145 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/remote-user-enrollment +--- + +# Remote user enrollment + +By design, **Defguard Core** is meant to be deployed **securely** within your infrastructure and only accessible from within the internal network or by VPN. + +This introduces an issue with onboarding **new users** and forces the admin to choose an initial password, set up a VPN device for them, and pass on those details to the end user using possibly **insecure** channels. + +To avoid this issue you can deploy a **public** [Defguard Edge](https://github.com/DefGuard/proxy) (formerly Proxy) which enables a **secure enrollment process.** + +**Here is a video showcasing:** + +* how admin adds a user with secure remote enrollment +* then how the enrollment process looks like for the user + +{% embed url="https://www.youtube.com/watch?v=-mj0bMojm8U" %} + +{% hint style="info" %} +Edge is included when using the default [deployment instructions](../../deployment-strategies/setting-up-your-instance.md). + +Please also see the relevant configuration options for [core](../../deployment-strategies/configuration.md#enrollment-configuration) and the [edge itself](../../deployment-strategies/configuration.md#enrollment-service). +{% endhint %} + +## How to initiate user secure enrollment + +When adding a new user please choose "Add user with self-enrolment option" + +
+ +{% hint style="info" %} +**By choosing this option, the admin will only provide the user data and will not be able to set the user’s password, the user will create their own password during the enrollment process in the desktop client.** +{% endhint %} + +If [SMTP](../notifications/setting-up-smtp-for-email-notifications.md) is configured, you will see "**Send enrollment details to user by email"** checkbox. + +
+ +{% hint style="info" icon="lightbulb" %} +If **"Send enrollment details to user by email"** is checked - the user will receive an email with all enrollment instructions +{% endhint %} + +If you don't have any [SMTP](../notifications/setting-up-smtp-for-email-notifications.md) configuration, `Defguard instance URL` and `Activation token` must be handed over to the user personally. + +{% hint style="info" %} +The email address you specify for delivering the enrollment token can be any email available to the user. It **does not** have to be the same one used when creating an account as we assume that a new user does not yet have access to their official company email account. +{% endhint %} + +When the user adds a Defguard instance in the Desktop client using the received token, not only is the VPN client configured, but the user can also: + +* set up their password +* configure [MFA](../wireguard/multi-factor-authentication-mfa-2fa/), which is required to connect to MFA-protected locations + +This means the user may not even have access to Defguard itself, but can still configure both VPN and MFA! + +{% hint style="danger" %} +**For MFA configuration to be mandatory during the enrollment process, there must be at least one VPN location with MFA enabled. Otherwise, MFA setup will remain optional.** +{% endhint %} + +## Restarting enrollment manually + +If there are any issues with the enrollment process (failed notification delivery, a lost token etc) you can restart it: + +* Go to **Users** page +* Find the relevant user and click on the **"…"** button on the right +* An **Initiate self-enrollment** option should be available in the pop-over menu + +
+ +* Clicking it will open the same modal as before. + +
+ +## Performing remote enrollment (as a user) + +#### **Obtaining token manually (e.g., via encrypted chat)** + +1. Go to Edge page + +
+ +2. Enter your enrollment token and click "Continue" button + +
+ +3. Download **Desktop Client** compatible with your Operating System. + +
+ +4. Now, enrollment can be performed in **Desktop Client** + +
+ +Now you can click **"One-Click Configuration"** which will open **Desktop Client** and enter credentials for you. + +#### **Obtaining token via email** + +1. Click **"Enroll with desktop client"**, or copy `URL`/`Token` manually to **Desktop Client** + +
+ +Entering URL/Token inside **Desktop Client** will trigger user enrollment process. + +
+ +By following the **enrollment wizard** in **Desktop Client**, you'll be able to do the following: + +* verify that your data is correct +* activate your user account +* choose your password +* setup MFA method +* add an initial device for VPN access + +After completing enrolment process, you will be able to connect to the VPN. + +## Enrollment settings + +As an admin, you can configure enrolment-related settings on the **Enrollment** page. This includes: + +* Setting token validity time +* Enrollment session duration + +
+ +* Customizing the user [onboarding messages](user-onboarding-after-enrollment.md). + +
+ +#### Message template tags + +There are several **template tags** (similar to [Jinja2](https://jinja.palletsprojects.com/en/3.1.x/) tags) that you can use in the onboarding messages to insert some dynamic content: + +* `{{ first_name }}` - newly created user first name +* `{{ last_name }}` - newly created user last name +* `{{ username }}` - newly created user username/login +* `{{ admin_first_name }}` - first name of the administrator who initiated the enrollment process +* `{{ admin_last_name }}` - last name of the administrator who initiated the enrollment process +* `{{ admin_phone }}`- phone number of the administrator who initiated the enrollment process +* `{{ admin_email }}`- email of the administrator who initiated the enrollment process +* `{{ defguard_url }}`- internal Defguard URL (your Defguard instance address) +* `{{ defguard_version }}` - Defguard version diff --git a/admin-and-features/remote-user-enrollment/automatic-real-time-desktop-client-configuration.md b/features/remote-user-enrollment/automatic-real-time-desktop-client-configuration.md similarity index 73% rename from admin-and-features/remote-user-enrollment/automatic-real-time-desktop-client-configuration.md rename to features/remote-user-enrollment/automatic-real-time-desktop-client-configuration.md index 726403e..dcf3c7a 100644 --- a/admin-and-features/remote-user-enrollment/automatic-real-time-desktop-client-configuration.md +++ b/features/remote-user-enrollment/automatic-real-time-desktop-client-configuration.md @@ -1,7 +1,16 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/remote-user-enrollment/automatic-real-time-desktop-client-configuration +--- + # Automatic (real time) desktop client configuration & sync {% hint style="warning" %} -This is an enterprise feature. To use it, purchase our [enterprise license](../../enterprise/license.md) or ensure that your deployment does not exceed the [usage limits](../../enterprise/license.md#enterprise-is-free-up-to-certain-limits). +#### Availability + +This feature is available in all plans, with usage limits. See the [pricing page](https://defguard.net/pricing/) for details. {% endhint %} When initially configuring Defguard desktop client, all available locations for the user (with all location settings) are automatically configured (which is one of Defguard's unique functionalities). @@ -10,7 +19,7 @@ In the course of time: new locations can be added by administrators, existing on In order to reconfigure a user's desktop client, the administrator has two possibilities: -1. If using the **Open Source Open Core** - the administrator needs to send a new configuration token to each user affected, and the user needs to [update the instance](../../help/desktop-client/instance-configuration.md#updating-instance) in the desktop client with the new obtained token. +1. If using the **Open Source Open Core** - the administrator needs to send a new configuration token to each user affected, and the user needs to [update the instance](../../using-defguard-for-end-users/desktop-client/instance-configuration.md#updating-instance) in the desktop client with the new obtained token. 2. Obtain the **Enterprise License**, then each user desktop client (and all Locations) are **reconfigured automatically in real time** (propagation takes around 30 seconds to 1 minute) whenever any VPN Location is reconfigured or the user is assigned to a different group. {% hint style="warning" %} diff --git a/admin-and-features/remote-user-enrollment/user-onboarding-after-enrollment.md b/features/remote-user-enrollment/user-onboarding-after-enrollment.md similarity index 83% rename from admin-and-features/remote-user-enrollment/user-onboarding-after-enrollment.md rename to features/remote-user-enrollment/user-onboarding-after-enrollment.md index 8fcf4a1..da70b82 100644 --- a/admin-and-features/remote-user-enrollment/user-onboarding-after-enrollment.md +++ b/features/remote-user-enrollment/user-onboarding-after-enrollment.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/remote-user-enrollment/user-onboarding-after-enrollment +--- + # User onboarding after enrollment After the [enrollment](./) process is done, you can easily share with new users **any relevant company information, links to company systems, security guidelines**, etc. In the [enrollment module](./#enrollment-settings), you can write **custom messages** using Markdown that will be shown on the last step of the enrollment process and/or sent to the user via email: diff --git a/features/roadmap.md b/features/roadmap.md deleted file mode 100644 index b700958..0000000 --- a/features/roadmap.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -description: This is a high-level project roadmap of planned features. ---- - -# Roadmap - -A detailed [Roadmap with **all functionalities** is on GitHub](https://github.com/orgs/DefGuard/projects/5/views/1) - here is a high level roadmap with major features planned. - -For already implemented features, go to [GitHub release page](https://github.com/DefGuard/defguard/releases). - - - diff --git a/features/service-locations.md b/features/service-locations.md new file mode 100644 index 0000000..341f55d --- /dev/null +++ b/features/service-locations.md @@ -0,0 +1,132 @@ +--- +metaLinks: + alternates: + - https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/service-locations +--- + +# Service locations + +{% hint style="warning" %} +#### Availability + +This feature is available in Enterprise plan. See the [pricing page](https://defguard.net/pricing/) for details. +{% endhint %} + +{% hint style="warning" %} +Service locations are currently only supported with Defguard Client for Windows. +{% endhint %} + +Service locations are a special kind of locations that allow establishing automatic VPN connections on system boot. + +There are currently two modes of service locations: + +* **Pre-logon**: the VPN connection to the location is established on system boot and is terminated when the user completes login to their system account. This may be used when your users need to authorize with some external identity provider (for example Active Directory) in order to successfully login and later don't require constant access to the VPN location. +* **Always on**: the VPN connection to the location is established on system boot and is never terminated, unless: + + * The network configuration of this location is changed (connection is re-established, to apply new changes) + * The client is reinstalled (connection is re-established during the reinstallation) + * The service location mode is changed or is disabled (connection is terminated) + + This mode may be used when your users require constant access to a given VPN location. + +## Creating service locations + +1. Go to locations page, click "**Add location**" + +
+ +2. Select "**Service location (Windows only)**" + +
+ +3. The process of creating a location will be exactly the same up to the “Service Location Settings” step +4. During "Service Location Settings" step, select "[Pre-logon](service-locations.md#pre-logon)" or "[Always on](service-locations.md#always-on)" connection type + +
+ +Once you've completed the Wizard and adopted the Gateway, your service location will start working + +## Managing service locations + +After going to "**Locations**" page, you can see type of each location. + +
+ + + +If you want to edit your service location, click "**…**" and select "**Edit"** + +
+ +Scroll down, you will see "**Location type (Windows only)**" section + +
+ +Here you can change service location mode, and confirm with "**Save changes**" button. + +{% hint style="warning" %} +If your location is MFA protected, you won't be able to set is as a service location. The location must have MFA disabled in order to use service location mode. +{% endhint %} + +After the configuration of the Defguard client is updated for your instance, the location will be hidden in the client's UI. The connection to the location will be established in the background without any user input. + +## Network configuration updates + +If you have enterprise features enabled, the Defguard Client periodically updates its network configuration if it's changed in Defguard Core. This also applies to service locations, but in order for the configuration update to happen for a service location, the Defguard Client must be open. This means that the configuration won't be updated when the user hasn't logged in yet, since the Client is not running at that point. In other words, **the user must first log in and start the Client for a configuration update to automatically happen**. + +## Service location connection management in depth + +{% hint style="info" %} +This section describes the current behavior of the Defguard Client on Windows. +{% endhint %} + +Service locations are managed by a background service (`defguard-service`) responsible for managing VPN connections. The background service is running independently from the Desktop Client and is always active. The service is responsible for establishing the connection on system boot and terminating/restarting it under specific circumstances (e.g. when user logs in if using the pre-logon mode). + +### Pre-logon + +If you selected the pre-logon mode, the connection will be established on system boot. If the service detects a login event, the connection will be terminated. + +After login, the connection won't be established unless a system logoff event is detected. In such case, the connection is established again until another login event occurs. + +### Always-on + +If you selected the always-on mode, the connection will be established on system boot. + +The connection won't be terminated or restarted unless the Desktop Client receives a network update or is uninstalled. + +## Troubleshooting + +### Restarting the background service + +In order to force a reconnect to the service location, you can restart the background service that manages it. To do this on Windows, go to search and open `services.msc` as an administrator. + +
+ +Next, find a service called "Defguard Service". Right click on it and select the restart option. + +
+ +
+ +This will restart the background service and re-connect to the service location. + +### Checking if connection is established + +This can be checked either by: + +1. Going to the Defguard Core web interface and checking if the given Client is connected. This is a less reliable way as it can report the status with a delay. We recommend checking the status directly on the given machine. +2. On the given Windows machine: + 1. Go to "Settings" + +
+ 2. Network & Internet + +
+ 3. Change adapter settings + +
+ 4. The VPN connection should be visible here, if it's established (for example in the case of an always on mode). + +### Network change + +If the network you use to access the internet (or more specifically, the VPN gateway) changes (for example, you switch Wi-Fi's while the service location connection is established, the connection will stop working. To resolve this issue, you will need to restart your device or restart the service responsible for management of the service locations, so the connection is re-established. diff --git a/features/ssh-authentication.md b/features/ssh-authentication.md new file mode 100644 index 0000000..40a2a96 --- /dev/null +++ b/features/ssh-authentication.md @@ -0,0 +1,94 @@ +--- +metaLinks: + alternates: + - https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/ssh-authentication +--- + +# SSH Authentication + +## Overview + +Defguard allows configuring your servers to use public SSH keys stored in your instance's database. This is possible by using the [AuthorizedKeysCommand option](http://man.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man5/sshd_config.5#AuthorizedKeysCommand) in OpenSSH daemon configuration file. + + + +Each user can manage their public SSH (and GPG keys) in profile: + +
+ +API endpoint used for this is `/api/v1/ssh_authorized_keys`. It returns a list of public keys, each in a new line. It allows filtering by specifying a username, group, or combination of both. + +```bash +# All keys for the user “Bob” +GET /api/v1/ssh_authorized_keys?username=bob + +# All user keys in the “devops” group +GET /api/v1/ssh_authorized_keys?group=devops + +# All keys belonging to the user “Bob” in the “devops” group +GET /api/v1/ssh_authorized_keys?username=bob&group=devops +``` + +Example: + +```bash +admin > curl http://defguard.mydomain.net/api/v1/ssh_authorized_keys?group=ssh-access +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBm40yVaGA40oLf7AsNBoD2y95+dzGtNehvDfVaZ6Yg9 +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID4oi5NlaShRVXG6nZa4jqB6kO3sYeGd4Nhe5Tfr6EPm% +``` + +## Setup + +There are no need in configuring Defguard itself (aside from adding SSH keys for users). All the steps below are performed on the server you intend to access via SSH using public keys provided by Defguard. + +1. Create a group in Defguard, in this example it will be called `ssh-access` +2. Add group to a user +3. Add SSH key to a user. +4. Create `get_ssh_keys.sh` file. + +Paste this example. This script fetches users SSH keys in specified group from Defguard instance. + +```bash +#!/bin/sh +curl defguard.example.com/api/v1/ssh_authorized_keys?group=ssh-access +``` + +5. Make it executable, set correct ownership and permissions + +```sh +sudo chown root:root /usr/local/bin/get_ssh_keys.sh +sudo chmod 0755 /usr/local/bin/get_ssh_keys.sh +``` + +6. Update OpenSSH daemon config (`/etc/ssh/sshd_config`) to include following lines + +``` +AuthorizedKeysCommand /usr/local/bin/get_ssh_keys.sh +AuthorizedKeysCommandUser nobody +``` + +7. Restart OpenSSH daemon + +With this setup when a user in group `ssh-access` tries to log in with SSH to your server the script will make a `GET` request to your Defguard instance and fetch a list of keys. This list is then used to verify keys presented by the client. + +### Other examples + +Other script examples which can be useful in different server setups: + +* only allow user `admin` SSH keys to be used in authorization process + +```bash +#!/bin/sh + +curl defguard.example.com/api/v1/ssh_authorized_keys?username=admin +``` + +* allow all users in `admin` group to log in, but only to `adminuser` account + +```bash +#!/bin/sh + +test $# -ne 1 -o "${1}" != 'adminuser' && exit 1 + +curl defguard.example.com/api/v1/ssh_authorized_keys?group=admin +``` diff --git a/features/static-ip-assignment.md b/features/static-ip-assignment.md new file mode 100644 index 0000000..f7e4594 --- /dev/null +++ b/features/static-ip-assignment.md @@ -0,0 +1,39 @@ +# Static IP assignment + +Defguard allows you to manually assign static IPs to user devices in the VPN network. + +Assigned IPs don't change unless one of the following scenarios occurs: + +* The network address is changed and the assigned IP no longer fits. This causes the IP address to change to the next available IP in the new address space. +* The user is disabled and then enabled. +* The user's access to a network is modified in any way. For example, a user is removed and then re-added to an allowed group, or an allowed group is removed and later added to a network. + +### Changing IP of all user devices + +To change the IP address of any user device, navigate to the user list. + +
+ +Then, open the context menu next to a given user and select "User devices IP settings". + +
+ +Here you can manage all IP assignments for all devices belonging to that user in all networks. + +
+ +### Changing IP address of a specific device + +To change the IP address of a specific device, navigate to a user's profile page. + +Next, go to the "Devices" tab. + +
+ +Open the context menu for a selected device and choose "Device IP settings". + +
+ +Here you can manage all IPs for the selected device. + +
diff --git a/user-snat-bindings.md b/features/user-snat-bindings.md similarity index 89% rename from user-snat-bindings.md rename to features/user-snat-bindings.md index 1e6f4dd..156196c 100644 --- a/user-snat-bindings.md +++ b/features/user-snat-bindings.md @@ -1,7 +1,15 @@ +--- +metaLinks: + alternates: + - https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/user-snat-bindings +--- + # User SNAT bindings {% hint style="warning" %} -This is an enterprise feature. To use it, purchase our [enterprise license](enterprise/license.md) or ensure that your deployment does not exceed the [usage limits](enterprise/license.md#enterprise-is-free-up-to-certain-limits). +#### Availability + +This feature is available in all plans, with usage limits. See the [pricing page](https://defguard.net/pricing/) for details. {% endhint %} {% hint style="info" %} diff --git a/admin-and-features/wireguard/README.md b/features/wireguard/README.md similarity index 92% rename from admin-and-features/wireguard/README.md rename to features/wireguard/README.md index 3a5160e..488a6c4 100644 --- a/admin-and-features/wireguard/README.md +++ b/features/wireguard/README.md @@ -1,3 +1,9 @@ +--- +metaLinks: + alternates: + - https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/wireguard +--- + # Zero-Trust VPN with 2FA/MFA ## Defguard is based on WireGuard® @@ -12,4 +18,3 @@ WireGuard® compared to any other VPN solution on the market provides: ## Zero-Trust with 2FA/MFA Defguard introduces unique Multi-Factor Authentication (MFA) for the WireGuard® VPN protocol, ensuring every connection requires authorization with MFA (human factor + session keys) enhancing security with an added layer of user verification to support compliance with GDPR, HIPAA, PCI DSS, NIST, FISMA, and CMMC standards. - diff --git a/features/wireguard/behavior-customization.md b/features/wireguard/behavior-customization.md new file mode 100644 index 0000000..c4ad13d --- /dev/null +++ b/features/wireguard/behavior-customization.md @@ -0,0 +1,51 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/wireguard/behavior-customization +--- + +# VPN & Client behaviour customization + +{% hint style="warning" %} +#### Availability + +This feature is available in all plans, with usage limits. See the [pricing page](https://defguard.net/pricing/) for details. +{% endhint %} + +After purchasing the Enterprise License the _Enterprise features_ **tab will be activated**, enabling the administrator to configure additional features: + +
+ +### Disable for users to manage their devices + +When this option is enabled, **only users in the Admin group can manage devices in user profile**, for any other users adding/editing/removing their VPN devices is disabled. + +### Disable ability to configure other VPN clients then Defguard desktop client + +If '_Disable users' ability to manually configure WireGuard client_' option is **enabled**, then any user **has only possibility to configure Defguard desktop client.** + +This option will not be available for users: + +
+ +### Client traffic policy selection + +One of the unique features of Defguard desktop client is the ability for users to choose whether to route only **predefined network traffic** or **all traffic** from their device through a connected VPN location. + +
+ +However, in some cases administrators may want to enforce a specific behavior - allowing access only to predefined traffic or requiring all traffic to pass through the VPN. + +

+ +\ +The **Client Traffic Policy** setting enables administrators to control this behavior as needed. The available options are: + +* **None** - Users can freely choose between routing predefined traffic or all traffic through the VPN. +* **Disable all traffic** - Only predefined traffic is allowed, the "All traffic" option is disabled for users. +* **Force all traffic** - All traffic is routed through the VPN, the "All traffic" option is enforced and cannot be changed by users. + +{% hint style="warning" %} +Please note that this option is only client-side enforced, meaning the user may manually modify Wireguard interface to force all traffic to go through the VPN. +{% endhint %} diff --git a/admin-and-features/wireguard/create-your-vpn-network.md b/features/wireguard/create-your-vpn-network.md similarity index 85% rename from admin-and-features/wireguard/create-your-vpn-network.md rename to features/wireguard/create-your-vpn-network.md index 88a4407..4270aa9 100644 --- a/admin-and-features/wireguard/create-your-vpn-network.md +++ b/features/wireguard/create-your-vpn-network.md @@ -1,6 +1,13 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/wireguard/create-your-vpn-network +--- + # Create/Manage VPN Location -A VPN location is a VPN network to which users can connect to. Every location has a [dedicated gateway](../../deployment-strategies/gateway/) (or [multiple gateways if you deploy a high-availability solution](../../deployment-strategies/high-availability-and-failover.md#gateway-high-availability)). +A VPN location is a VPN network to which users can connect to. Every location has a [dedicated gateway](../../deployment-strategies/gateway.md) (or [multiple gateways if you deploy a high-availability solution](../../deployment-strategies/high-availability-and-failover/#gateway-high-availability)). {% hint style="success" %} Defguard supports **multiple locations**, for each location to work you need to configure it and deploy a dedicated gateway. @@ -33,7 +40,7 @@ By providing the VPN IPs/masks, you are configuring both: **the VPN internal net This field can contain multiple IP addresses (both IPv4 and IPv6), separated by a comma (e.g. `10.10.20.1/24,fc00::abcd:0:1/96`). {% hint style="info" %} -### Dual-stack VPN networks +**Dual-stack VPN networks** Defguard supports dual-stack VPN networks, allowing simultaneous assignment of both IPv4 and IPv6 addresses to clients. Each VPN network can include multiple IPv4 and IPv6 subnets, and connected clients will automatically receive one address from each defined subnet. This enables seamless communication over both IP versions within a single VPN session. {% endhint %} @@ -81,6 +88,14 @@ Right now Defguard only manages routing of Allowed IPs (adding to routing table If you want the _All Traffic_ to work in the desktop client you need to also configure MASQUARED/NAT for the VPN interface. [Example of that here.](../../tutorials/step-by-step-setting-up-a-vpn-server/#enabling-to-access-internet-through-your-vpn) {% endhint %} +{% hint style="info" %} +## Allowed IPs with exceptions + +If you use broad _Allowed IPs_ (for example `0.0.0.0/0`) and want to exclude specific networks, note that WireGuard does not support explicit exclusions. Instead, the allowed range must be split into multiple CIDR blocks that cover everything except the excluded subnets. + +To simplify this, you can use an **Allowed IPs calculator** to generate the correct set of CIDR blocks for your intended traffic routing. +{% endhint %} + ### DNS This specifies DNS resolvers and search domains. Supported format is by comma separation, e.g.: @@ -104,7 +119,7 @@ By defining a group, assigning users to that group and then choosing this group( By enabling this setting, this location **will require Multi-Factor Authentication** on each connection to this location. {% hint style="danger" %} -This feature is only supported in [**Defguard Desktop Client**](../../help/desktop-client/)**.** +This feature is only supported in [**Defguard Desktop Client**](../../using-defguard-for-end-users/desktop-client/)**.** {% endhint %} Each connection in the client: @@ -115,15 +130,15 @@ Each connection in the client: {% hint style="warning" %} For this feature to work, the user must: -1. configure their [TOTP settings in the profile](../../help/setting-up-2fa-mfa.md#one-time-password) -2. [SMTP settings needs to be set up](../../notifications/setting-up-smtp-for-email-notifications.md) and the user must enable Email tokens in their profile. +1. configure their [TOTP settings in the profile](../../using-defguard-for-end-users/setting-up-2fa-mfa.md#one-time-password) +2. [SMTP settings needs to be set up](../notifications/setting-up-smtp-for-email-notifications.md) and the user must enable Email tokens in their profile. {% endhint %} #### Keep alive interval Configurable time interval (in seconds) used to send periodic packets to ensure that the connection remains active. This is particularly useful in environments like NAT (Network Address Translation) or firewalls that may close idle connections. -**Peer disconnect threshold** +#### **Client disconnect threshold** Since Multi-Factor Authentication (MFA) is used to enforce zero-trust security, a peer (user) that remains inactive for a specified time interval (defined in seconds within the settings) will be disconnected. Additionally, the session configuration will be removed from the gateway. This ensures that when the peer reconnects, they must complete the MFA process again. diff --git a/admin-and-features/wireguard/dns-and-domains.md b/features/wireguard/dns-and-domains.md similarity index 52% rename from admin-and-features/wireguard/dns-and-domains.md rename to features/wireguard/dns-and-domains.md index 2a8cf0c..cc9b206 100644 --- a/admin-and-features/wireguard/dns-and-domains.md +++ b/features/wireguard/dns-and-domains.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/wireguard/dns-and-domains +--- + # DNS and domains To change / add DNS settings or a DNS search domain: @@ -8,4 +15,4 @@ To change / add DNS settings or a DNS search domain: For example: -
+
diff --git a/admin-and-features/wireguard/executing-custom-gateway-commands.md b/features/wireguard/executing-custom-gateway-commands.md similarity index 89% rename from admin-and-features/wireguard/executing-custom-gateway-commands.md rename to features/wireguard/executing-custom-gateway-commands.md index 8f1ecb9..6314fcc 100644 --- a/admin-and-features/wireguard/executing-custom-gateway-commands.md +++ b/features/wireguard/executing-custom-gateway-commands.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/wireguard/executing-custom-gateway-commands +--- + # Executing custom gateway commands Defguard gateway has ability to execute custom commands before and after the WireGuard tunnel us up or down. diff --git a/features/wireguard/multi-factor-authentication-mfa-2fa/README.md b/features/wireguard/multi-factor-authentication-mfa-2fa/README.md new file mode 100644 index 0000000..219723f --- /dev/null +++ b/features/wireguard/multi-factor-authentication-mfa-2fa/README.md @@ -0,0 +1,67 @@ +--- +description: >- + Defguard is the sole VPN solution that genuinely implements Multi-Factor + Authentication (MFA) before a WireGuard® VPN connection is established, + significantly enhancing security against cyberattacks. +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/wireguard/multi-factor-authentication-mfa-2fa +--- + +# Multi-Factor Authentication (MFA/2FA) + +## TL;DR; + +* MFA (Multi-Factor Authentication) is a method of securing IT systems that requires the user to confirm their identity using at least two or more independent verification factors. +* MFA during a VPN connection requires the user to authenticate in the VPN client with two or more factors **before the connection can be established**. +* Defguard is the **only solution that enables MFA for WireGuard® VPN connections.** +* MFA is a widely overused marketing term for many (if not all) WireGuard®-based VPN solutions. In most other cases, it simply refers to **2FA for accessing the configuration panel or performing the initial client setup, and no MFA during connection stage**. + +## What Multi-Factor Authentication actually is? + +MFA (Multi-Factor Authentication) is a method of securing IT systems that requires the user to confirm their identity using at least two or more independent verification factors. + +There are three main categories of MFA: + +* Something a user knows: e.g., password, PIN, or answer to a security question. +* Something a user has: a physical token, smartphone, authenticator app generating one-time codes, or a security key. +* Something a user is: biometric data such as a fingerprint, face scan, or voice recognition + +IT systems build authentication methods using those three areas and leverage them to secure operations done on the system (logging in into the system, establishing a connection, etc.). + +## How Defguard handles MFA? + +Defguard is a unique VPN solution that can be configured to use either: + +1. [**internal**](internal-sso-based-mfa.md) **- based on** [**built-in IdP/SSO**](../../openid-connect/) - where users in Defguard profile manage their MFA methods (TOTP, Email, Mobile Biometry) and then use them to establish a VPN connection, +2. [**external**](external-sso-based-mfa.md) **- using** [**cloud IdP/SSO**](../../external-openid-providers/) **providers** such as [Google](../../external-openid-providers/google.md), [Microsoft](../../external-openid-providers/microsoft.md), [Okta](../../external-openid-providers/okta.md), [Jumpcloud](../../external-openid-providers/jumpcloud.md) (and others) to authorize each connection using those providers in Defguard desktop/mobile before the connection can be established. + +In addition, when establishing a VPN connection, **Defguard enforces extra security measures** (including additional MFA steps in the user has category). It first securely establishes session keys (WireGuard® pre-shared keys), and only then configures the VPN location (our VPN gateway). The connection is possible to establish only with a device that has successfully passed the full authorization flow, enabling it to connect using its WireGuard® private/public keys and session keys. + +Defguard also **supports multiple VPN locations (multiple VPNs), each of which can be configured independently to use either internal or external MFA**. + +### Multi device MFA + +Some of Defguard’s MFA methods are even more sophisticated, such as establishing a VPN connection using mobile biometric authentication in the desktop client. This method requires: + +User prerequisites (something a user has in terms of MFA terminology): + +* A private WireGuard® key corresponding to the public key configured during the Defguard enrollment session. +* A mobile device successfully enrolled and added to the user profile (as a second VPN device). +* Private keys in the mobile device’s secure key store, generated during the mobile device enrollment process, which are accessible only via the device’s biometric authentication.\\ + +Extended MFA flow using two devices: + +1. Scan the QR code displayed in the desktop app using the enrolled mobile device. +2. Perform MFA using the biometric authentication and private/public key pair, which is only accessible after successful biometric verification. +3. Only after these steps can the remaining Defguard flow, as described above, proceed. + +## Why MFA for each connection Is not only Important but necessary + +The main purpose of MFA is to strengthen security by acting as a highly effective barrier against cyberattacks such as phishing or brute-force attacks. With an effective MFA implementation, even if an attacker gains access to a user’s basic credentials (in WireGuard®’s case, typically the private key stored on the device), they will still be unable to connect to the VPN without the additional factor(s). This prevents access to critical private network resources and applications, blocking further exploitation and greatly reducing the risk of unauthorized access. + +This means that relying on external SSO only for the initial device configuration is not sufficient to provide security in today’s environment. Even worse, marketing a VPN solution as providing MFA under these circumstances is highly misleading and potentially harmful to user security. + +\ +\\ diff --git a/features/wireguard/multi-factor-authentication-mfa-2fa/external-sso-based-mfa.md b/features/wireguard/multi-factor-authentication-mfa-2fa/external-sso-based-mfa.md new file mode 100644 index 0000000..790f59d --- /dev/null +++ b/features/wireguard/multi-factor-authentication-mfa-2fa/external-sso-based-mfa.md @@ -0,0 +1,53 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/wireguard/multi-factor-authentication-mfa-2fa/external-sso-based-mfa +--- + +# External SSO based MFA + +In order to enable the External MFA authentication: + +1. Your instance **must have** [external OIDC/SSO configured](../../external-openid-providers/). +2. Select the VPN Location from the dropdown list on the Network Overview, and pressing the **Edit Location** button in the top right corner of the page. +3. Select the External MFA in the menu. + +
+ +#### Client disconnect threshold + +When MFA is enabled on a location, Defguard periodically (currently every **1 minute**) checks statistics if a client is connected and if the period of inactivity (defined in this option) is met, a client is disconnected. + +Thus, the gateway needs to be configured to send statistics in that period. + +{% hint style="info" %} +We recommend to set: + +* Gateway to send statistics every 30sec +* Peer disconnect threshold we recommend it to be min. 300 (5 min) +{% endhint %} + +### Testing MFA on Defguard client + +When a location has External MFA enabled, after clicking Connect in the Desktop client ([here you can find information about Mobile Client External MFA](../../../using-defguard-for-end-users/mobile-client/instance-connect.md#external-mfa)), there will be information displayed about authentication requirement: + +
+ +In order to authenticate the user will be prompted to click on Authenticate with your configured OIDC (like Authenticate with Google) - which will open the browser and start the authentication session with your OIDC/SSO provider by the [Defguard Enrollment ](../../../using-defguard-for-end-users/enrollment/)service (which is the only public component). + +After successful authentication, the user will be informed by the enrollment service like so: + +
+ +And the VPN should be connected. + +Video describing whole process: + +{% embed url="https://www.youtube.com/embed/81MH7VXmHR0" %} + +## Biometry as an internal MFA method + +Users can use biometry as an internal MFA method on their mobile devices. If a device has configured biometry as an MFA method, you will see ![](<../../../.gitbook/assets/Screenshot 2025-08-18 at 13.56.49.png>) icon, next to the device name. + +
diff --git a/features/wireguard/multi-factor-authentication-mfa-2fa/internal-sso-based-mfa.md b/features/wireguard/multi-factor-authentication-mfa-2fa/internal-sso-based-mfa.md new file mode 100644 index 0000000..8cda318 --- /dev/null +++ b/features/wireguard/multi-factor-authentication-mfa-2fa/internal-sso-based-mfa.md @@ -0,0 +1,67 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/wireguard/multi-factor-authentication-mfa-2fa/internal-sso-based-mfa +--- + +# Internal SSO based MFA + +Enabling Internal MFA for a desired VPN Location is done by: + +1. Going into Defguard to **VPN Overview** +2. Selecting the VPN Location from the dropdown list, and pressing the **Edit Location** button in the top right corner of the page +3. Check the "**Internal MFA**" checkbox under the **MFA requirement** section +4. Set **peer disconnect threshold**, we recommend it to be min. 300 (5 min) - see chapter [below](internal-sso-based-mfa.md#peer-disconnect-threshold). +5. And **save changes**. + +
+ +### Peer disconnect **threshold** + +When MFA is enabled on a location, Defguard periodically (currently every **1 minute**) checks statistics if a client is connected and if the period of inactivity (defined in Peer disconnect threshold option) is met, a client is disconnected. + +Thus, the gateway needs to be configured to send statistics in that period. + +
+ +We recommend to set: + +* gateway to send statistics every 30sec +* Peer disconnect threshold we recommend it to be min. 300 (5 min) + +### Client update after enabling MFA + +{% hint style="warning" %} +When MFA configuration is changed, all clients must do an [Instance Update](../../../using-defguard-for-end-users/desktop-client/instance-configuration.md#updating-instance). +{% endhint %} + +### Testing MFA on Defguard client + +If a VPN has MFA enabled, before connecting you will be asked to complete the authentication step first: + +
+ +### Supported MFA methods + +For now, MFA is only available with the following methods: + +* [TOTP - Time-based one-time password](../../../using-defguard-for-end-users/setting-up-2fa-mfa.md#one-time-password) +* Email - requires [SMTP to be configured](../../notifications/setting-up-smtp-for-email-notifications.md) +* [Biometry using Defguard Mobile Application](../../../using-defguard-for-end-users/desktop-client/using-multi-factor-authentication-mfa.md#multi-factor-authentication-via-mobile-biometry) + +{% hint style="warning" %} +Please remember to configure TOTP on you user account and/or SMTP settings for MFA on the desktop client to work. +{% endhint %} + +### User MFA setup + +After enabling MFA for a given VPN, users will need to enable MFA for their accounts to be able to connect. This process is described in [setting-up-2fa-mfa.md](../../../using-defguard-for-end-users/setting-up-2fa-mfa.md "mention"). For simplicity & security, the desktop client uses the same MFA methods as the Defguard server. + +An error message will be shown if users attempt to select an MFA method that has not been enabled for their accounts: + +
+ +### Successful authentication + +If authentication succeeds, the VPN two-factor authentication modal will be closed and connection to the selected VPN will be attempted. Users will be asked to authenticate on every connection to a VPN with MFA enabled. diff --git a/admin-and-features/wireguard/network-overview.md b/features/wireguard/network-overview.md similarity index 91% rename from admin-and-features/wireguard/network-overview.md rename to features/wireguard/network-overview.md index 70563b3..6eacbd2 100644 --- a/admin-and-features/wireguard/network-overview.md +++ b/features/wireguard/network-overview.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/wireguard/network-overview +--- + # Network overview Once your gateway service is up and users start connecting to the VPN, upload/download summary data is stored and can be displayed in "overview" tab of Defguard web application. See [architecture overview](../../in-depth/architecture/) for details of core-gateway interaction. @@ -19,7 +26,7 @@ To access this dashboard, go to **VPN Overview** tab. Dashboard looks like this, if you want to see more details about location, proceed to [this section.](network-overview.md#detailed-location-overview) -
+
### Detailed location overview @@ -46,4 +53,3 @@ To access detailed information about a specific user, click the blue icon locate After expanding, you will see devices which are currently being used by the user.
- diff --git a/admin-and-features/wireguard/remote-desktop-activation.md b/features/wireguard/remote-desktop-activation.md similarity index 65% rename from admin-and-features/wireguard/remote-desktop-activation.md rename to features/wireguard/remote-desktop-activation.md index fac7821..d44da32 100644 --- a/admin-and-features/wireguard/remote-desktop-activation.md +++ b/features/wireguard/remote-desktop-activation.md @@ -1,5 +1,9 @@ --- description: How to manually generate token for user as an administrator. +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/wireguard/remote-desktop-activation --- # Remote desktop client configuration @@ -7,12 +11,12 @@ description: How to manually generate token for user as an administrator. This process enables system **administrators** to create and distribute desktop **activation tokens to users facing access issues to the Defguard instance**. It's handy if a user is already enrolled (has an account) but has not configured the desktop client and doesn't have access to Defguard (is outside the internal network and can't access Defguard). {% hint style="info" %} -Users can activate / configure their desktop client themselves - for that documentation please go to: [Adding an instance in the client documentation](../../help/desktop-client/instance-configuration.md). +Users can activate / configure their desktop client themselves - for that documentation please go to: [Adding an instance in the client documentation](../../using-defguard-for-end-users/desktop-client/instance-configuration.md). {% endhint %} Navigate to the user's list page. -
+
Select "Configure Desktop Client" from the action menu. @@ -24,8 +28,12 @@ This option is only available if the instance has at least one localization, and You will be presented with a choice to send an activation token via email or you can choose to just display the token and deliver it through other methods. -
+
-After receiving the token, the user will need to follow the activation process in the client. You can find out more about it in [#adding-instance](../../help/desktop-client/instance-configuration.md#adding-instance "mention"). +After receiving the token, the user will need to follow the activation process in the client. You can find out more about it in [#adding-instance](../../using-defguard-for-end-users/desktop-client/instance-configuration.md#adding-instance "mention"). -This token also allows for updating information, read more about it in [#updating-instance](../../help/desktop-client/instance-configuration.md#updating-instance "mention"). +This token also allows for updating information, read more about it in [#updating-instance](../../using-defguard-for-end-users/desktop-client/instance-configuration.md#updating-instance "mention"). + +Here is a video describing whole process: + +{% embed url="https://www.youtube.com/embed/KdyZoAlBb9k" %} diff --git a/admin-and-features/yubikey-provisioning.md b/features/yubikey-provisioning.md similarity index 94% rename from admin-and-features/yubikey-provisioning.md rename to features/yubikey-provisioning.md index 793cc21..81036bb 100644 --- a/admin-and-features/yubikey-provisioning.md +++ b/features/yubikey-provisioning.md @@ -1,5 +1,9 @@ --- description: 'Provisioner repository: https://github.com/DefGuard/YubiKey-Provision' +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/features/yubikey-provisioning --- # YubiKey Provisioning @@ -88,7 +92,7 @@ This path describes how the admin can provision a key for a user, but the same p You can see available clients in Defguard web-application under "provisioners" tab. -
+
To provision the key: @@ -96,10 +100,10 @@ To provision the key: 2. Insert a YubiKey to machine that is running the provisioner client. 3. Select "Add YubiKey" from the actions menu for a User in the list. -
+
4. Select your provisioner and click the "Provision YubiKey" button. -
+
The service will take a short moment to prepare and provision your keys. Once the process is done, the modal will close, and you will see a notification in the corner of the screen. diff --git a/for-developers/contributing.md b/for-developers/contributing.md index 5ae45dc..1bc7563 100644 --- a/for-developers/contributing.md +++ b/for-developers/contributing.md @@ -1,3 +1,9 @@ +--- +metaLinks: + alternates: + - https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/for-developers/contributing +--- + # Contributing #### ⛑️ Want to help? ⛑️ diff --git a/for-developers/dev-env-setup/README.md b/for-developers/dev-env-setup/README.md index 4821549..29d9ccd 100644 --- a/for-developers/dev-env-setup/README.md +++ b/for-developers/dev-env-setup/README.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/for-developers/dev-env-setup +--- + # Environment setup Clone [Defguard Core repository](https://github.com/DefGuard/defguard) recursively (including Git submodules like protos and UI): @@ -106,7 +113,7 @@ cargo run ### Minimum required settings -Consult [Configuration](../../configuration.md) manual for a list of all available configuration settings. +Consult [Configuration](../../deployment-strategies/configuration.md) manual for a list of all available configuration settings. * `DEFGUARD_COOKIE_INSECURE=true` - running HTTP server locally does not need secured cookies * `DEFGUARD_SECRET_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` - 64-character long security key diff --git a/for-developers/dev-env-setup/translations-client/README.md b/for-developers/dev-env-setup/translations-client/README.md index 14dfb8f..a2d1615 100644 --- a/for-developers/dev-env-setup/translations-client/README.md +++ b/for-developers/dev-env-setup/translations-client/README.md @@ -1,2 +1,9 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/for-developers/dev-env-setup/translations-client +--- + # Translations (client) diff --git a/for-developers/dev-env-setup/translations-client/adding-translations.md b/for-developers/dev-env-setup/translations-client/adding-translations.md index 9afe02b..81e023b 100644 --- a/for-developers/dev-env-setup/translations-client/adding-translations.md +++ b/for-developers/dev-env-setup/translations-client/adding-translations.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/for-developers/dev-env-setup/translations-client/adding-translations +--- + # Adding translations All locale files can be found under `src/i18n` in the [client repository](https://github.com/DefGuard/client). In order to add a new translation, you will need to create an appropriate folder in this directory. You can refer to the `en` locale as an example. @@ -39,6 +46,3 @@ The first command only generates the required locale types, the second one runs ### Switching language Currently client picks the locale based on the operating system's settings. There is no straightforward way to switch the locale in the client by hand, other than to hardcode different `detectedLocale` in `src/components/App/App.tsx` or change your operating system's language. This is a temporary shortcoming and will be changed in the future. - - - diff --git a/for-developers/dev-env-setup/translations-web/README.md b/for-developers/dev-env-setup/translations-web/README.md index 615ee27..1997e00 100644 --- a/for-developers/dev-env-setup/translations-web/README.md +++ b/for-developers/dev-env-setup/translations-web/README.md @@ -1,4 +1,11 @@ -# Translations (web) +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/for-developers/dev-env-setup/translations-web +--- + +# Translations (core/web) Frontend translations are using [typesafe-i18n](https://github.com/ivanhofer/typesafe-i18n) library. diff --git a/for-developers/dev-env-setup/translations-web/adding-translations.md b/for-developers/dev-env-setup/translations-web/adding-translations.md index d8a7bfd..9f52e6b 100644 --- a/for-developers/dev-env-setup/translations-web/adding-translations.md +++ b/for-developers/dev-env-setup/translations-web/adding-translations.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/for-developers/dev-env-setup/translations-web/adding-translations +--- + # Adding translations To add a new language you need to create a new folder to _**i18n/{new language code}**_ with **index.ts** file. For a reference you can check `pl` or `ko` translation folders. @@ -21,4 +28,3 @@ We don't expect all translations to be always in sync with latest changes becaus {% hint style="warning" %} Make sure the newly added translation object has Translation type assigned to it in order to ensure it's linted properly, this helps to keep it in sync with base EN translation. {% endhint %} - diff --git a/for-developers/dev-env-setup/translations-web/switching-language.md b/for-developers/dev-env-setup/translations-web/switching-language.md index 1284af6..6b66458 100644 --- a/for-developers/dev-env-setup/translations-web/switching-language.md +++ b/for-developers/dev-env-setup/translations-web/switching-language.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/for-developers/dev-env-setup/translations-web/switching-language +--- + # Switching language Currently the displayed language is set by browser preference if there is a translation available for it. diff --git a/getting-started/one-line-install.md b/getting-started/one-line-install.md index 8e1d4df..2dff233 100644 --- a/getting-started/one-line-install.md +++ b/getting-started/one-line-install.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/getting-started/one-line-install +--- + # One-line install script Welcome to getting started with Defguard! In this section, you'll be guided through setting up your simplified instance of Defguard that allows you to get familiar with the solution's features. diff --git a/health-check.md b/health-check.md deleted file mode 100644 index 69b43ef..0000000 --- a/health-check.md +++ /dev/null @@ -1,72 +0,0 @@ -# Health check - -## Core & Proxy - -### Rest API - -[Core](https://github.com/defguard/defguard) and [Proxy](https://github.com/defguard/proxy) provides health endpoint at `GET /api/v1/health` which checks whether the application server is running. - -Example request: - -```bash -curl "https://defguard.example.com/api/v1/health" -``` - -Example response: - -``` -alive -``` - -### gRPC status health - -#### Proxy (available from v0.6.0) - -To verify gRPC services for **Proxy** are alive, there is endpoint at `GET /api/v1/health-grpc` that verify it. - -Example request: - -```bash -curl "https://enroll.example.com/api/v1/health-grpc" -``` - -Possible responses: - -``` -200 - Proxy is working and is connected to CORE -503 - Proxy works but is not connected to CORE -``` - -#### Core (available from v1.0.0) - -To check if core gRCP service is alive, we recommend to use community tools like [grpc\_health\_probe](https://github.com/grpc-ecosystem/grpc-health-probe). - -Example request for core: - -```sh -./grpc_health_probe -addr=defguard.example.com:50055 -``` - -Example response for core: - -``` -status: SERVING -``` - -## Gateway - -You can enable in gateway config ([example config](https://github.com/DefGuard/gateway/blob/main/example-config.toml)) a health check port, by adding the following line: - -``` -health_port = 55003 -``` - -In this example, gateway will open an additional HTTP port number 55003 and will return the following HTTP status codes: - -*
200 - Gateway is working and is connected to CORE
-  
-* ``` - 503 - gateway works but is not connected to CORE - ``` - -By default no healthcheck ports are open. diff --git a/help/desktop-client/README.md b/help/desktop-client/README.md deleted file mode 100644 index 7cf5b6f..0000000 --- a/help/desktop-client/README.md +++ /dev/null @@ -1,98 +0,0 @@ -# Desktop Client - -### Overview - -Desktop client provides an easy way to access VPN locations of multiple Defguard instances via user-friendly UI. - -Download latest release here: [https://defguard.net/download/](https://defguard.net/download/) - -For development/pre-releases, go to GitHub: [https://github.com/DefGuard/client/releases](https://github.com/DefGuard/client/releases) - -Guides: - -* [Instance configuration](instance-configuration.md) -* [Using Multi-Factor Authentication](using-multi-factor-authentication-mfa.md) - - - -### Windows - -Our desktop client has **bundled** official WireGuard client - as we use **wg.exe** to manage the WireGuard tunnels. - -{% hint style="danger" %} -If you have the official WireGuard client installed - Defguard client installation may fail. -{% endhint %} - -### MacOS - -Has no external requirements and we have wireguard-go bundled. - -### Linux - -{% hint style="warning" %} -On Linux the desktop client uses `resolvconf` to manage DNS servers. On newer distributions it should be a symbolic link to `resolvectl`, more details can be found on the [troubleshooting](../broken-reference/) page. -{% endhint %} - -### Ubuntu - -#### Ubuntu 24 - -The libwebkit2gtk-4.0 library which our client depends on is not available in the default apt package repositories on Ubuntu 24.04 (there is only libwebkit2gtk-4.1 which doesn't work with current client). Client installation is still possible, but requires using some workarounds: - -To safely install a package from Ubuntu Jammy repositories without breaking your system: - -1. **Add Jammy Repo:** - * Open `/etc/apt/sources.list`: - - ```bash - sudo nano /etc/apt/sources.list - ``` - * Add the Jammy repository with `[arch=amd64]` for your architecture: - - ``` - deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ jammy main universe - ``` - * Save and exit. -2. **Pin the Jammy Repo with low priority:** - * Create `/etc/apt/preferences.d/jammy.pref`: - - ```bash - sudo nano /etc/apt/preferences.d/jammy.pref - ``` - * Add the following: - - ``` - Package: * - Pin: release n=jammy - Pin-Priority: -10 - ``` - * Save and exit. -3. **Install the Specific Package:** - - ```bash - sudo apt update - sudo apt install -t jammy libwebkit2gtk-4.0 - ``` -4. **Optionally: Remove Jammy Repo After Use:**\ - Delete or comment out the Jammy entry in `/etc/apt/sources.list`. - -#### ArchLinux - -There is an [AUR package](https://aur.archlinux.org/packages/defguard-client)[: defguard-client](https://aur.archlinux.org/packages/defguard-client). - -If you don't know how to install AUR packages, please follow these guidelines: - -* Manual install: [https://wiki.archlinux.org/title/Arch\_User\_Repository](https://wiki.archlinux.org/title/Arch_User_Repository) -* Installation through PARU (AUR Helper): [https://owlhowto.com/how-to-install-paru-on-arch-linux/](https://owlhowto.com/how-to-install-paru-on-arch-linux/) - -### Client update - -Defguard Client regularly checks for updates and in order to do so operating system name and installed application version are sent to the Defguard update service. - -This functionality can be turned off in the Client settings under Updates section so that no data is sent. - -

"Check for updates" setting

- -If a new version is available, a notification with a download button will be shown near the bottom of the menu. - -

New Desktop Client version available for download

diff --git a/help/desktop-client/using-multi-factor-authentication-mfa.md b/help/desktop-client/using-multi-factor-authentication-mfa.md deleted file mode 100644 index 0ac666e..0000000 --- a/help/desktop-client/using-multi-factor-authentication-mfa.md +++ /dev/null @@ -1,51 +0,0 @@ -# Using Multi-Factor Authentication (MFA) - -{% hint style="danger" %} -Connecting to location with required **external** MFA is possible in the desktop client since **version 1.5.0.** Please check out [**https://github.com/DefGuard/client/releases**](https://github.com/DefGuard/client/releases) for new releases. -{% endhint %} - -* Up to version 1.4, only internal MFA was supported, user could only use MFA methods configured in his profile. -* Since version 1.5 (currently in alpha), MFA can be configured per location, and administrators can choose whether a location will use internal MFA or external OIDC/SSO provider. - -Depending on location settings, you may use: - -* Internal MFA - You must have at least one MFA method configured in your profile. For a detailed tutorial, [check out this article](../setting-up-2fa-mfa.md). -* External MFA - You will be redirected to an external site, where authentication is handled by your OIDC provider, for example Google/Microsoft. - -## External MFA - -1. Open Defguard client, select your Instance and click **Connect** next to location with required MFA - -
- -2. After clicking **Authenticate with Google,** you will be redirected to a secure site where you will need to log in in order to confirm your identity. In this example, we use Google as our OpenID provider, but yours can be different (Microsoft, Okta, etc.) - -
- -3. After logging in, you will see this - -
- -Your connection will be established immediately after successful authentication. - -## Internal MFA - -1. Open Defguard client, select your Instance and click **Connect** next to location with required MFA - -
- -2. Choose method configured for your account, and click **Connect**. - * If you're using "Email" method, please enter the code sent to your email. - * If you're using "Authenticator App", please enter code generated within your authenticator app. - -{% hint style="info" %} -If you don't know how to setup or use your **Authenticator App** please check [this article](../setting-up-2fa-mfa.md#setting-up-2famfa) for detailed information. -{% endhint %} - -
- -3. After entering code, click **Verify** - -
- -Your connection will be established immediately after this step. diff --git a/help/mobile-client/README.md b/help/mobile-client/README.md deleted file mode 100644 index 9ab58ad..0000000 --- a/help/mobile-client/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# Mobile Client - -{% hint style="warning" %} -Mobile client is currently under development and are in **beta**, current page should be considered as preview. Some parts of UI may look different in upcoming release. -{% endhint %} - -### Installation - -1. Join closed beta for [iOS](https://testflight.apple.com/join/Jvdhkt7h) or [Android](https://play.google.com/store/apps/details?id=net.defguard.mobile). -2. Download and install the app on your device. - -### Guides - -These guides explains how to use the Defguard Mobile to connect securely to VPN locations within your Defguard instance. It covers the entire process, from installation, adding new instances, connecting to locations, to managing your VPN connection settings. - -* [Instance adding guide](instance-adding.md#adding-instance-during-enrollment) -* [Connecting to Instance guide](instance-connect.md#connecting-to-instance) -* [Managing Instance guide](instance-manage.md#managing-your-instance) diff --git a/in-depth/Untitled Diagram.drawio b/in-depth/Untitled Diagram.drawio deleted file mode 100644 index 0ce3163..0000000 --- a/in-depth/Untitled Diagram.drawio +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/in-depth/architecture-decision-records/1.3.md b/in-depth/architecture-decision-records/1.3.md index d5a6db4..29a5f96 100644 --- a/in-depth/architecture-decision-records/1.3.md +++ b/in-depth/architecture-decision-records/1.3.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/in-depth/architecture-decision-records/1.3 +--- + # 1.3 ## 2025-04-24 ACL alias types diff --git a/in-depth/architecture-decision-records/1.4.md b/in-depth/architecture-decision-records/1.4.md index 8de1ce1..4df54e5 100644 --- a/in-depth/architecture-decision-records/1.4.md +++ b/in-depth/architecture-decision-records/1.4.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/in-depth/architecture-decision-records/1.4 +--- + # 1.4 ## 2025-06-01 Assign all IP addresses to clients diff --git a/in-depth/architecture-decision-records/1.5.md b/in-depth/architecture-decision-records/1.5.md index febbb5c..87cb858 100644 --- a/in-depth/architecture-decision-records/1.5.md +++ b/in-depth/architecture-decision-records/1.5.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/in-depth/architecture-decision-records/1.5 +--- + # 1.5 ## 2025-07-22 Per-location MFA settings diff --git a/in-depth/architecture-decision-records/1.6.md b/in-depth/architecture-decision-records/1.6.md new file mode 100644 index 0000000..86b3b6d --- /dev/null +++ b/in-depth/architecture-decision-records/1.6.md @@ -0,0 +1,18 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/in-depth/architecture-decision-records/1.6 +--- + +# 1.6 + +## 2025-10-16 Desktop client auto-provisioning + +In order to support client auto-provisioning of the desktop client we've introduced support for initializing the client from a provisioning file ([#627](https://github.com/DefGuard/client/pull/627)). If a client is "uninitialized" (has no instance configured) it can read required enrollment config from a file stored in app data directory. The process is explained further in the [docs](../../features/desktop-client-auto-provisioning/#client-side-implementation). + +This file-based approach allows us to support provisioning on various platforms independent of the specific tooling used by system administrators. + +Furthermore since the majority of users are on the Windows platform we also updated our MSI package to support provisioning scenarios in Active Directory and Entra ID environments as described [here](../../features/desktop-client-auto-provisioning/#windows-auto-provisioning). + +To enable this functionality we also needed to introduce a change to the OpenID directory sync functionality - when using Microsoft provider it is now possible to [create users in Defguard during sync](../../features/external-openid-providers/microsoft.md#creating-defguard-user), without waiting for the first login. diff --git a/in-depth/architecture-decision-records/2.0.md b/in-depth/architecture-decision-records/2.0.md new file mode 100644 index 0000000..0e8f555 --- /dev/null +++ b/in-depth/architecture-decision-records/2.0.md @@ -0,0 +1,170 @@ +# 2.0 + +## High availability + +### Requirements + +1. Users should be able to run multiple instances of all components + 1. Core + 2. Proxy + 3. Gateway +2. In case of failure of any component, other instances should take over the work +3. The recovery should be as fast as possible in terms of dropped requests/jobs. In perfect scenario we don’t drop any requests or jobs even if components that process them fail mid-processing. + +### High-level overview of Defguard workflows + +
+ +### Considered options + +#### 1. Active-active + +* Every core connects to every proxy and gateway (full mesh at the app layer). +* Any core can initiate actions and handle requests from proxies/gateways. +* DB-based queue for async jobs (like MFA disconnect) + +
+ +**Pros** + +* No need for failure detection and leader election. +* “True HA”, nothing special has to happen when one of the components dies (connections already exist). +* Scales “core CPU” if the control plane is truly parallelizable. +* Avoids core load-balancing issue (selecting active core when handling UI requests) + +**Cons** + +* Requires job queue implementation to avoid duplicating scheduled work (e.g. MFA disconnects) +* Requires additional routing logic for Proxy and Gateway components so as not to send the same request to multiple cores. +* Requires really stateless core + +#### 2. Active-Failover + +* Run N cores. +* Exactly **one leader** stores the “lease row” in the db and then establishes the gRPC connections to **all** gateways and proxies and performs all write/control actions. +* The leader periodically updates the heartbeats on the lease row +* Standby cores monitor the heartbeat, if the heartbeat wasn’t renewed they race to acquire the lease +* Once the core successfully stores the lease row, it establishes grpc connections and acts as the new leader + +
+ +**Pros** + +* Cleanest correctness story (no split-brain control plane). +* Simplifies gRPC connection topology: each proxy/gateway sees **one controlling core**. + +**Cons** + +* This is a “failover” rather than a true “HA” solution +* Requires robust failure detection, leader election (DB lease / k8s lease) and careful failover to avoid two leaders during partitions. +* Doesn’t scale control-plane (core) throughput horizontally, only gives us failover (maybe that’s all we need for now?). +* How do we route HTTP requests to active core only? (failover instances can reply with error codes to healthchecks, lb then routes the requests only to leader) +* What if only core-proxy connection failed, but core still works + +#### 3. Vertically connected components + +Each core connects to one proxy and one gateway. + +**Deal breaking issue:** For mobile-assisted MFA core has to be able to route responses to all proxies, not just the one from which the request originates. This is not possible with this approach. + +#### 4. Decoupling the components via external queue + +* Introduce external message bus / queue into the stack - redis/rabbit +* Refactor the components to use the queue instead of gRPC + +**Deal-breaking** issues: + +* Major rewrite of all communication +* Increases deployment complexity + +### Decision + +Option 1 - Active-active approach is selected. + +### Rationale + +The active-active approach provides true high availability rather than availability through failover. With multiple core instances operating concurrently, the system is self-correcting and can continue to function during partial failures without waiting for explicit leader detection or role transitions. + +Although active-active operation introduces the need to coordinate scheduled and background tasks, this coordination is more constrained and predictable than the failure detection, leader election, and fencing mechanisms required by an active-passive design. + +## Access Control List changes + +### Separating Alias kinds + +In Defguard 2.0 the new UI clearly separates previously existing Alias kinds into two distinct sections: + +* **Component** Aliases are now just **Aliases** +* **Destination** Aliases are now **Destinations** + +When creating or editing Rules there is also now a clear delineation in the UI between **Aliases**, which are combined with the manually configured destination and predefined **Destinations.** + +This better reflects the different roles of both types of aliases: + +* **Aliases** are reusable fragments used to configure a rule-local destination +* **Destinations** are complete predefined destinations, each being converted into a separate set of firewall rules exactly like the manually configured destination + +This distinction already existed in practice in previous versions, but it was not expressed clearly enough in the UI. + +Both Aliases and Destinations are still stored in the same underlying database model. The new split is enforced at the UI and API level. + +### Explicit destination configuration + +In previous Defguard versions the ACL rule logic regarding destinations was broadly reflective of how most firewalls (nftables, packetfilter etc) work. As a result, some behaviors were implicit. + +In particular, rules and aliases could omit destination addresses, ports, or protocols, which implicitly meant "match any". This matched firewall semantics, but it introduced ambiguity in the data model and in the UI: + +* UI showed a placeholder ("All addresses/ports/protocols") value, but the intent to match all addresses/ports/protocols was not represented in the data model itself +* the logic for generating firewall rules had to assume user intent, especially for rules using aliases +* validation and editing logic had to handle a number of edge cases + +As ACL functionality evolved, this approach became harder to maintain consistently. Defguard 2.0 introduces a more explicit ACL model to reduce ambiguity while preserving the effective firewall behavior of existing rules. + +#### Database model changes + +In Defguard 2.0 the ACL database model makes destination semantics explicit instead of inferring "match any" from empty fields. + +Both aliases and rules DB tables now include explicit boolean flags for configuring destinations: + +* any\_address +* any\_port +* any\_protocol + +In addition, rules now include **use\_manual\_destination\_settings**, which defines how destination configuration should be interpreted: + +* when **true**, the rule uses its own destination fields together with referenced component aliases +* when **false**, the rule uses only the referenced **Destinations** + +The rule model also adds **allow\_all\_groups** and **deny\_all\_groups** to align group handling with the already explicit "all" flags used for other source types. + +Overall, the 2.0 schema preserves the effective firewall behavior of existing ACL rules while making the model clearer, easier to validate, and less dependent on implicit assumptions. + +#### Backfill logic + +The Defguard 2.0 database migration includes SQL backfill logic that converts legacy implicit ACL behavior into the new explicit model while preserving the meaning of existing rules.\ +For **Destinations** (previously destination aliases), the migration backfills the new any\_\* flags from the legacy fields: + +* **any\_address** is set to **true** when the alias had no destination addresses and no destination ranges +* **any\_port** is set to **true** when the alias had no ports +* **any\_protocol** is set to **true** when the alias had no protocols + +For **Rules**, the migration evaluates both rule-local destination settings and linked aliases. + +The rule flags are backfilled as follows: + +* **any\_address** is set to **true** only if the rule had no direct destination addresses or ranges and no linked component alias contributed addresses +* **any\_port** is set to **true** only if the rule had no direct ports and no linked component alias contributed ports +* **any\_protocol** is set to **true** only if the rule had no direct protocols and no linked component alias contributed protocols + +The migration sets **use\_manual\_destination\_settings** to **false** only when a legacy rule was effectively driven entirely by destination aliases, meaning: the rule had no direct destination addresses, ranges, ports, or protocols no linked component alias contributed any destination fragments at least one linked destination alias existed. + +In every other case, **use\_manual\_destination\_settings** remains **true**, preserving the previous behavior of rules that relied on direct destination settings or component aliases. + +As a result, legacy empty destination fields become explicit "match any" flags, rules based only on destination aliases become explicit Destination-based rules, and mixed or manual rules continue to behave as they did before migration. + +#### Renamed columns + +The database migration also renames some columns in ACL-related tables to better reflect their purpose: + +* destination -> addresses +* all\_networks -> all\_locations + diff --git a/in-depth/architecture-decision-records/README.md b/in-depth/architecture-decision-records/README.md index b352e4b..3e0458c 100644 --- a/in-depth/architecture-decision-records/README.md +++ b/in-depth/architecture-decision-records/README.md @@ -1,5 +1,9 @@ --- description: What are Defguard's Architecture Decision Records? +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/in-depth/architecture-decision-records --- # Architecture Decision Records diff --git a/in-depth/architecture-decision-records/pre-1.3.md b/in-depth/architecture-decision-records/pre-1.3.md index aa03a43..49c1879 100644 --- a/in-depth/architecture-decision-records/pre-1.3.md +++ b/in-depth/architecture-decision-records/pre-1.3.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/in-depth/architecture-decision-records/pre-1.3 +--- + # Pre-1.3 ## 2025-01-03 – Multiple IP addresses @@ -99,4 +106,3 @@ impl WireguardKeys { * If there are no active connections, update the database * If there are active connections, display the message “Configuration updated for instance \, disconnect all locations to apply changes” * On each disconnect trigger the polling mechanism - diff --git a/in-depth/architecture/README.md b/in-depth/architecture/README.md index 69e2951..179be04 100644 --- a/in-depth/architecture/README.md +++ b/in-depth/architecture/README.md @@ -1,42 +1,73 @@ +--- +metaLinks: + alternates: + - https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/in-depth/architecture +--- + # Architecture -By design **Defguard core (the main component) is meant to be deployed in your secure network segments** (available only from an internal network or by VPN) and operations that require public access (like user onboarding, enrollment, password reset, etc.) **are done using a secure proxy:** +## Design Principles + +Defguard is a zero-trust, VPN-centric access platform built on WireGuard®. Its design cleanly separates the control plane (Core) from the data plane (Gateways) and exposes a minimal public surface (Gateway for VPN; Proxy for secure web flows). Administrative and identity-sensitive services remain off the public internet, behind controlled network boundaries. + +
+ +### **Separation of Concerns** + +Each Defguard component serves a distinct purpose, ensuring clear functional isolation: + +* The Core operates as the _control plane_: storing state, enforcing policy, and managing users and devices. +* The Gateway serves as the _data plane_: forwarding traffic, enforcing ACLs, and maintaining local operational independence. +* The Proxy acts as a _secure edge layer_: handling user-facing traffic and offloading authentication flows. + +This modular architecture simplifies scaling, security audits, and upgrades. + +### **Minimize Exposure** + +Defguard is designed around the principle of least exposure — only the absolutely necessary components are reachable from the public internet. + +* The Proxy is the _only_ component exposing a public HTTPS interface. +* The Gateway exposes only a single UDP port for WireGuard connections. +* The Core, database, and identity integrations (OIDC, LDAP, etc.) remain entirely private, accessible only from trusted networks. -

Defguard architecture

+This ensures the smallest possible attack surface while still supporting remote enrollment, authentication, and VPN connectivity. -This approach is vastly different from most (if not all) VPN/IdP solutions, which are a simple or monolithic application focus on functionalities (like generating configs, managing users, etc.) and most of the time is publicly available on the Internet for any attacker. +### **Defense in Depth** -If you want full privacy, Defguard only exposes publicly **components designed for this purpose:** +Every communication layer is protected by redundant and complementary security mechanisms: -* WireGuard® gateway - to enable VPN access -* Public Proxy for secure remote processes like: - * [User enrollment and onboarding](../../admin-and-features/remote-user-enrollment/) - * [Desktop Client configuration](../../admin-and-features/remote-user-enrollment/automatic-real-time-desktop-client-configuration.md) +* All internal API traffic uses gRPC (recommended over TLS). +* Firewall rules restrict network flows to specific IPs and ports. +* Sensitive services (Core, DB) are deployed in private network segments inaccessible from the internet. -## C4 component model +This layered approach reduces the blast radius of any potential compromise. -Below you can see Defguard architecture in [C4 model](https://c4model.com/) divided into context, containers and components. +### **Zero-Trust Posture** -## Context +Defguard adopts a zero-trust philosophy: no implicit trust is given to users, devices, or networks. -![Context look at Defguard architecture](../puml/architecture-context.svg) +* Access is always authenticated and authorized dynamically. +* Multi-Factor Authentication (MFA) is supported natively for VPN connections via per-location pre-shared keys (PSKs) that serve as one-time authorization tokens. +* Device enrollment and configuration are bound to verified identities and can be revoked or rotated at any time. -## Containers +This model ensures that even within an established tunnel, every access decision remains policy-driven and verifiable. -![Containers look at Defguard architecture](../puml/architecture-containers.svg) +### **Graceful Degradation** -## Components +The platform is built for resilience and autonomy: -![Components look at Defguard architecture](../puml/architecture-components.svg) +* Gateways cache configuration and continue to operate even if the Core becomes temporarily unavailable. +* Core services remain functional (e.g., OpenID login, admin operations) if a Gateway is offline. +* Gateways report state deltas to the Core when connectivity is restored, ensuring accurate statistics and consistency. -### Basics +This approach prevents downtime during transient network or control-plane failures. -Core is a Rust web server which is exposed as REST API and gRPC web server with typescript and rust clients, it handles connection to database, LDAP server and gateway. Core also handles user authorization via LDAP account. It's configurable using Environmental Variables which you can find [here](../../configuration.md). +### **Observability and Auditability** -Gateway is a small CLI gRPC client written in Rust which sends network statistics to Core server and apply network configuration changes on message from core.\ -Our frontend is React app written in Typescript which allows handling all API calls via Web UI.\ -See detailed gRPC docs [here](https://google.com). +Security and reliability rely on visibility. Defguard provides built-in observability and audit mechanisms: -### Example setup flow +* Gateways periodically send metrics and peer statistics to the Core for dashboards and alerts. +* Every administrative action (e.g., user addition, configuration change) is logged for traceability. +* Logs and metrics can be exported to external monitoring systems (SIEM, Prometheus, etc.) for centralized analysis. -After creating your network in our wizard and running our gateway program core will message it with network data. Gateway after receiving data will set up your network using WireGuard commands you can think of it like a wrapper on WireGuard commands which also sends network information through gRPC. After successfully setting up your network gateway will start sending your networks stats in period given as argument on gateway program start or if not provided at default which is 60 seconds. You can see all of your network statistics, connected users, bandwidth, user devices on the overview page. +Continuous visibility ensures operational awareness and compliance with audit requirements. diff --git a/admin-and-features/wireguard/multi-factor-authentication-mfa-2fa/architecture.md b/in-depth/architecture/architecture.md similarity index 90% rename from admin-and-features/wireguard/multi-factor-authentication-mfa-2fa/architecture.md rename to in-depth/architecture/architecture.md index 7767245..0e70e1c 100644 --- a/admin-and-features/wireguard/multi-factor-authentication-mfa-2fa/architecture.md +++ b/in-depth/architecture/architecture.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/in-depth/architecture/architecture +--- + # MFA Architecture WireGuard by itself does not have a concept of MFA or any additional authorization aside from validating peers cryptographically by their public and pre-shared keys. @@ -18,7 +25,7 @@ In typical REST API terms, the pre-shared key can be thought of as an analogue t To enable MFA functionality, Desktop Client uses the [proxy](https://github.com/DefGuard/proxy) to bridge communication between itself and Defguard Core. Below is a diagram of the authorization process that is performed each time the Client initiates a connection to an MFA-enabled location: -
+
## Disconnecting peers diff --git a/in-depth/architecture/how-do-vpn-statistics-work.md b/in-depth/architecture/how-do-vpn-statistics-work.md index 3c13648..4376f85 100644 --- a/in-depth/architecture/how-do-vpn-statistics-work.md +++ b/in-depth/architecture/how-do-vpn-statistics-work.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/in-depth/architecture/how-do-vpn-statistics-work +--- + # How do VPN statistics work 1. Each Defguard gateway reads kernel data from the WireGuard® interface for each peer. diff --git a/in-depth/architecture/security-concepts.md b/in-depth/architecture/security-concepts.md index dfc8e9a..819b13f 100644 --- a/in-depth/architecture/security-concepts.md +++ b/in-depth/architecture/security-concepts.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/in-depth/architecture/security-concepts +--- + # Security concepts Defguard's **fundamental secure processes**: diff --git a/in-depth/client-application-feature-compatibility.md b/in-depth/client-application-feature-compatibility.md new file mode 100644 index 0000000..bf9af61 --- /dev/null +++ b/in-depth/client-application-feature-compatibility.md @@ -0,0 +1,21 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/in-depth/client-application-feature-compatibility +--- + +# Client application feature compatibility + +Defguard consists of multiple **server-side components** (Core, Gateway, Proxy) and multiple **client applications** (Desktop, Mobile). + +For the purpose of compatibility and feature availability, this documentation assumes that: + +* all server-side components are deployed in the **same version**, and are collectively referred to as **Server**, +* the user-facing software (Desktop or Mobile) is referred to as the **Client**. + +Use this page to quickly verify whether a given feature will work in your environment (Server and Client combinations). + +### Feature compatibility matrix + +
FeatureIntroduced inMinimum Server versionMinimum Client version
Service Locations1.61.61.6
Setting MTU1.6Client-only feature1.6
Desktop Client Auto Provisioning1.61.61.6
Client Traffic Policy Selection1.61.61.6
diff --git a/in-depth/defguard-architecture.png b/in-depth/defguard-architecture.png deleted file mode 100644 index 19f31c5..0000000 Binary files a/in-depth/defguard-architecture.png and /dev/null differ diff --git a/in-depth/defguard-open-organisation/README.md b/in-depth/defguard-open-organisation/README.md new file mode 100644 index 0000000..7777909 --- /dev/null +++ b/in-depth/defguard-open-organisation/README.md @@ -0,0 +1,17 @@ +# Defguard Open Organisation + +Defguard is developed as an open and transparent organisation. + +This section documents how we operate: how we plan and build the product, manage releases, handle security and compliance, collaborate internally, and work with the community and customers. All public procedures collected here describe the processes we follow to ensure consistent quality, security, and predictable development. + +By publishing these procedures, we aim to: + +* make our decision-making and development process transparent, +* enable meaningful community participation, +* and continuously improve how we build and maintain Defguard. + +All documents in this section reflect our current way of working and evolve together with the project. + +{% content-ref url="product-development-procedure.md" %} +[product-development-procedure.md](product-development-procedure.md) +{% endcontent-ref %} diff --git a/in-depth/defguard-open-organisation/product-development-procedure.md b/in-depth/defguard-open-organisation/product-development-procedure.md new file mode 100644 index 0000000..434c06e --- /dev/null +++ b/in-depth/defguard-open-organisation/product-development-procedure.md @@ -0,0 +1,149 @@ +# Product Development Procedure + +This document describes the official product development process used in Defguard. + +As an open organization and open-source project, we aim to keep our planning, prioritization, and execution transparent and understandable to contributors, customers, and the community. + +The procedure defines how ideas become features, how work is planned, and how development progress is tracked using our public GitHub Projects setup. + +### Scope and goals + +This procedure applies to: + +* Product features and improvements +* Bug fixes and stability work +* Security, compliance, and enterprise-readiness tasks +* Infrastructure and release engineering work +* Technical debt and refactoring + +The goals are to: + +* Maintain predictable and transparent development +* Align short-term execution with long-term product strategy +* Enable community participation and feedback +* Ensure high quality and security standards + +### Methodology + +Defguard’s product development process is heavily based on **Scrum**. + +We use short, time-boxed iterations (sprints), regular planning and refinement meetings, and a continuously prioritized backlog to ensure fast feedback cycles and predictable delivery. The process is adapted to fit an open-source and open-organization model, where planning artifacts (roadmap, backlog, and sprint progress) are publicly visible and community input is actively incorporated into prioritization. + +This lightweight, iterative approach allows us to balance long-term product strategy with short-term execution while remaining flexible to security, compliance, and customer-driven requirements. + +### Tools used + +Defguard uses the following public tools for product development management: + +* **GitHub Issues** – feature requests, bugs, tasks +* **GitHub Projects (**[**Backlog & Roadmap**](https://github.com/orgs/DefGuard/projects/5)**)** – planning and execution tracking +* **GitHub Milestones** – release versions + +The [GitHub Project](https://github.com/orgs/DefGuard/projects/5) provides three primary views: + +* [Roadmap view](https://github.com/orgs/DefGuard/projects/5/views/16) (long-term planning) +* [Sprints view](https://github.com/orgs/DefGuard/projects/5/views/8) (short-term planning) +* [Board view](https://github.com/orgs/DefGuard/projects/5/views/2) (current sprint execution) + +### Issue workflow + +All work items (features, bugs, improvements, and technical tasks) follow a standardized workflow in GitHub Projects. The workflow is designed to make the current state of each item clear to both the team and the community. + +The following statuses are used: + +* **New** – The issue has been created and awaits initial triage. +* **Refinement ready** – The item is ready to be discussed and detailed during the refinement session (scope, acceptance criteria, and technical approach may be clarified). +* **Development ready** – The item is fully specified and can be planned into a sprint. +* **In progress** – Active development is ongoing. +* **Review** – Implementation is finished and waiting for code review and/or product review. +* **Testing** – The item is being tested (manually and/or automatically). +* **Ready to release** – Work is completed and the item is ready to be included in the next release. + +### Roadmap planning + +#### Structure + +* The roadmap is managed in the [**Roadmap view**](https://github.com/orgs/DefGuard/projects/5/views/16) of the GitHub Project. +* Each roadmap item is assigned to a **GitHub Milestone** representing a release version (e.g., `v1.6`, `v1.7`). +* Items without a milestone are considered unplanned or under evaluation. + +#### Sources of ideas + +New ideas and tasks included in the roadmap may originate from: + +* Community feature requests and GitHub issues +* Customer and enterprise feedback +* Internal product planning +* Security and compliance requirements +* Technical maintenance needs + +#### Refinement process + +* Roadmap items are reviewed during a **weekly refinement session** with the team. +* During refinement, the team may: + * Clarify scope + * Split or merge tasks + * Re-prioritize items + * Move features between milestones (release versions) + +#### Community participation + +* Community members are encouraged to vote using 👍 reactions on issues. +* Comments and use-case descriptions are reviewed during prioritisation. +* Voting is advisory but strongly influences product direction. + +#### Roadmap stability + +* The roadmap represents intent, not a guarantee. +* Milestones and priorities may change due to: + * New information + * Urgent bugs or security issues + * Customer or compliance requirements + +### Sprint planning + +#### Structure + +* Development is organised into **1-week sprints**. +* Sprint planning is performed once per week. +* The [**Sprints view**](https://github.com/orgs/DefGuard/projects/5/views/8) shows: + * The current sprint + * The next 2–3 planned sprints +* Future sprint content is considered **tentative** and may change before the sprint starts. + +#### Planning session + +During weekly planning, the team: + +* Selects issues from the roadmap/backlog +* Confirms scope and acceptance criteria +* Verifies feasibility within one sprint +* Assigns tasks to the upcoming sprint + +Only well-defined and actionable issues are included in a sprint. + +### Sprint execution + +#### Structure + +* The [**Board view**](https://github.com/orgs/DefGuard/projects/5/views/2) represents the execution state of the current sprint. + +#### Daily workflow + +* Developers update issue status as work progresses. +* The board is used to: + * Track progress + * Identify blockers + * Coordinate parallel work + +#### Demo session + +* The sprint ends with a demo session, where developers present the results of their work. +* Unfinished issues move to the following sprint or are postponed during a planning session. + +### Release management + +* A release is prepared when all milestone items reach the **Ready to release** status or are explicitly postponed. +* Releases are versioned according to the milestone name. +* Release notes are generated from completed issues. + diff --git a/in-depth/defguard-open-organisation/roadmap.md b/in-depth/defguard-open-organisation/roadmap.md new file mode 100644 index 0000000..cc5dca7 --- /dev/null +++ b/in-depth/defguard-open-organisation/roadmap.md @@ -0,0 +1,14 @@ +--- +description: This is a high-level project roadmap of planned features. +metaLinks: + alternates: + - https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/in-depth/roadmap +--- + +# Roadmap + +A detailed [Roadmap with **all functionalities** is on GitHub](https://github.com/orgs/DefGuard/projects/5/views/16) - here is a high level roadmap with major features planned. + +The roadmap structure and planning is described in detail in our [development procedure](product-development-procedure.md#roadmap-planning). + +For already implemented features, go to [GitHub release page](https://github.com/DefGuard/defguard/releases). diff --git a/in-depth/defguard-simple.drawio b/in-depth/defguard-simple.drawio deleted file mode 100644 index 8faa0b5..0000000 --- a/in-depth/defguard-simple.drawio +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/in-depth/defguard.drawio b/in-depth/defguard.drawio deleted file mode 100644 index 72b40e6..0000000 --- a/in-depth/defguard.drawio +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/in-depth/puml/architecture-components.puml b/in-depth/puml/architecture-components.puml deleted file mode 100644 index 6a264a2..0000000 --- a/in-depth/puml/architecture-components.puml +++ /dev/null @@ -1,41 +0,0 @@ -@startuml -title Defguard architecture - components -!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml - -System_Ext(wireguard, "Wireguard server", "Provides VPN functionality") -Container(web_app, "Defguard web application", "React, Typescript", "Provides UI for user") -System_Boundary(c1, "Community", "Core server") { - Container(mfa, "MFA web app", "React, Typescript", "Provides UI for MFA login solution") - Container(core_server, "API gateway", "Rust", "Performs authentication and caching, load balances to specific services") - Container(gateway, "Gateway client", "Rust", "Allows to manage wireguard server from defguard") - Container(webhooks, "Webhooks","Rust", "Provides outgoing webhooks mechanism") - Container(web3, "Web3", "Provides integration with web 3 functionalities") - Container(mfa_backend, "MFA backend", "Rust", "Provides REST API for MFA web app") - Container(grpc_server, "GRPC server", "Rust", "Provides GRPC connection for Gateway and YubiBridge") - ContainerDb(db, "Database", "PostgreSQL", "Stores all platform data") -} -System_Boundary(c2, "Enterprise",) { - Container(openid, "OpenID provider", "Rust", "Provides Login with Defguard functionality in trusted apps") - Container(yubibridge, "Yubi-Bridge", "Python", "Allows to create PGP keys based on user data from Defguard and transfer them to YubiKey") - Container(ldap, "OpenLDAP synchronization", "Provide OpenLDAP sync functionality") - Container(oauth2, "OAuth2", "Provides OAuth2 functionality") -} -System_Ext(ldap_server, "OpenLDAP server", "") -Rel(core_server, ldap, "Uses", "", "") -Rel(web_app, mfa, "Uses", "REST") -Rel(web_app, web3, "Uses", "REST") -Rel(core_server, web3, "Uses", "", "") -Rel(web_app, core_server, "Uses", "REST") -Rel(mfa, core_server, "Uses", "REST") -Rel(mfa, mfa_backend, "Uses", "REST") -Rel(core_server, mfa_backend, "Uses", "") -Rel(core_server, webhooks, "Uses", "") -Rel(core_server, grpc_server, "Uses", "") -Rel(core_server, oauth2, "Uses", "") -Rel(core_server, openid, "Uses", "") -Rel(ldap, ldap_server, "Uses", "HTTPS") -Rel(gateway, grpc_server, "Uses", "GRPC","") -Rel(gateway, wireguard, "Uses", "", "") -Rel(core_server, db, "Uses", "SQL", "") -Rel(yubibridge, grpc_server, "Uses", "GRPC", "") -@enduml diff --git a/in-depth/puml/architecture-containers.puml b/in-depth/puml/architecture-containers.puml deleted file mode 100644 index 43da9c5..0000000 --- a/in-depth/puml/architecture-containers.puml +++ /dev/null @@ -1,21 +0,0 @@ -@startuml -title Defguard architecture - containers -!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml - -Person(user, "User", "Defguard user") -System_Boundary(c1, "Defguard web platform") { - Container(mfa, "MFA login", "React, Typescript", "Provides UI for MFA login solution") - Container(core_server, "Core server", "Rust", "Provides REST API for MFA, network managment, users, etc.") - Container(gateway, "Gateway client", "Rust", "Allows to manage wireguard server from defguard") - Container(web_app, "Defguard web application", "React, Typescript", "Provides UI for user") - ContainerDb(db, "Database", "PostgreSQL", "Stores all platform data") - Container(yubibridge, "Yubi-Bridge", "Python", "Allows to create PGP keys based on user data from Defguard and transfer them to YubiKey") -} -Rel(user, mfa, "Uses", "HTTPS", $tags="firewall") -Rel(user, web_app, "Uses", "HTTPS", $tags="firewall") -Rel(web_app, core_server, "Uses", "REST") -Rel(mfa, core_server, "Uses", "REST") -Rel(gateway, core_server, "Uses", "GRPC","") -Rel(core_server, db, "Uses", "SQL", "Reads from and writes to") -Rel(yubibridge, core_server, "Uses", "GRPC", "Reads user data to provision YubiKey") -@enduml diff --git a/in-depth/puml/architecture-context.puml b/in-depth/puml/architecture-context.puml deleted file mode 100644 index 70a5fbf..0000000 --- a/in-depth/puml/architecture-context.puml +++ /dev/null @@ -1,22 +0,0 @@ -@startuml -title Defguard architecture - context -!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml -Person(user, "User", "Defguard user") -Person(admin, "Administrator", "Manages users and network have access to network overview and network usage by user") -System(web, "Defguard", "Allows interacting with core server and handles all functionality") -System(mfa, "MFA login", "Confirm multi-factor authentication using TOTP - Google authenticator, Web3, WebAuthn/FIDO2 ") -System_Ext(wireguard, "Gateway client", "Provides VPN functionality") -System_Ext(ldap, "LDAP server", "Provides LDAP sync functionality") -System(yubibridge, "YubiBridge", "Provides YubiKey provision functionality") -SystemDb(database, "PostgreSQL") - -Rel(admin, web, "Uses", "HTTPS", $tags="firewall") -Rel(admin, mfa, "Uses", "HTTPS", $tags="firewall") -Rel(user, web, "Uses", "HTTPS", $tags="firewall") -Rel(user, mfa, "Uses", "HTTPS", $tags="firewall") -Rel(web, ldap, "Uses", "HTTPS", "Authenticate using current session user and manage data") -Rel(web, wireguard, "Uses", "GRPC", "Authenticate using JWT") -Rel(web, mfa, "Uses", "REST", "") -Rel(web, database, "Uses", "SQL") -Rel(yubibridge, web, "Uses", "GRPC", "Authenticate using JWT and fetch job with user data") -@enduml diff --git a/in-depth/puml/openid-flow.puml b/in-depth/puml/openid-flow.puml deleted file mode 100644 index 763f2c9..0000000 --- a/in-depth/puml/openid-flow.puml +++ /dev/null @@ -1,26 +0,0 @@ -@startuml openid flow -title Openid Flow -actor Actor as actor -actor -> Client: Sign in with defguard -Client -> DG_BACKEND: Redirect on api/v1/oauth/authorize url with client parameters -DG_BACKEND -> DG_BACKEND: Check if user is authorized -alt user unauthorized -DG_BACKEND -> DG_FRONTEND: Redirect to login page -DG_FRONTEND -> DG_BACKEND: Authorize user api/v1/auth/login -DG_BACKEND -> DG_BACKEND: Check if MFA enabled for user -alt user mfa enabled -DG_BACKEND -> DG_FRONTEND: return MFA info with 201 status code -DG_FRONTEND -> DG_BACKEND: MFA request -DG_BACKEND -> DG_BACKEND: Validate MFA -end -end -DG_BACKEND -> DG_BACKEND: Check if user authorized client before -alt Client unauthorized by user -DG_BACKEND -> DG_FRONTEND: 302 Redirect to consent -DG_FRONTEND -> DG_BACKEND: Authorization and consent api/v1/oauth/authorize -end -DG_BACKEND -> DG_BACKEND: Validate client id, scopes and redirect url -DG_BACKEND -> Client: 302 Redirect with authorization code on client specified redirect url -Client -> DG_BACKEND: Send authorization code and state using POST method to api/v1/oauth/token -DG_BACKEND -> Client: ID Token, Access token, Refresh token -@enduml \ No newline at end of file diff --git a/in-depth/release-cycle.md b/in-depth/release-cycle.md deleted file mode 100644 index 2654fa8..0000000 --- a/in-depth/release-cycle.md +++ /dev/null @@ -1,8 +0,0 @@ -# Release cycle - -* Stable (final) release cycle length is 4 weeks. -* After 4 weeks an alpha release is created (for example 1.4-alpha). -* Alpha release gets tested and fixed until it reaches a stable state. The stabilisation window is 2 weeks. After the window, the release gets promoted to do _final_ (1.4). -* At the same time, a following release development is started (1.5) and the cycle gets repeated. - -
diff --git a/in-depth/secure-by-design.md b/in-depth/secure-by-design.md new file mode 100644 index 0000000..d55a6f2 --- /dev/null +++ b/in-depth/secure-by-design.md @@ -0,0 +1,58 @@ +# Secure by design + +Defguard, unlike most systems that focus primarily on functionality prioritizes **security first and then builds functionality on top of secure foundations**. It is developed using a [Secure by Design approach](https://en.wikipedia.org/wiki/Secure_by_design), with the following principles embedded in both architecture and code: + +1. Least Privilege / Zero Trust +2. Segmentation of systems and components +3. Secure technology stack +4. Capability for inspection and verification +5. Security audits and testing + +Below, you will find detailed information on how each of these principles has been designed and implemented. + +### Zero Trust + +Zero Trust means that **no user or device is trusted by default**. Every access request to a resource must be explicitly authenticated and authorized. The most effective modern implementation of this principle includes strong identity verification mechanisms such as Multi-Factor Authentication (MFA)combined with robust access control policies. + +To address this, **Defguard enforces Multi-Factor Authentication for every VPN connection**. Unlike many cloud-based VPN solutions that apply MFA only to access the configuration control plane, Defguard requires MFA during the actual VPN connection process, ensuring that authentication is enforced at the data plane level, not just the management interface. + +### Segmentation of systems and components + +Defguard separates all components and enables **deployment of the main component** (Core) which is responsible for business logic and has access to user data (e.g., via integration with SSO, LDAP, or Active Directory) **in a fully isolated environment**. The Core can be deployed without direct Internet exposure and is not accessible from application components that are publicly exposed (e.g., the Edge Proxy component). + +In contrast, many cloud-based VPN solutions expose all core components to the public Internet, increasing their potential attack surface and making them more susceptible to compromise. + +More details are available in the [Architecture chapter](architecture/) of this documentation. + +### Secure technology stack + +The choice of programming language and frameworks/libraries is fundamental, as it directly affects: + +* Exposure to vulnerabilities +* The likelihood of implementation errors +* System behavior under failure conditions +* The ability to detect and mitigate attacks + +Defguard is built in Rust, which is recommended by leading security organizations worldwide due to its strong memory safety guarantees and modern security model: + +* NSA:[ https://www.nsa.gov/Press-Room/News-Highlights/Article/Article/3215760/](https://www.nsa.gov/Press-Room/News-Highlights/Article/Article/3215760/) +* CISA/NSA Joint:[ https://www.cisa.gov/sites/default/files/2023-12/The-Case-for-Memory-Safe-Roadmaps-508c.pdf](https://www.cisa.gov/sites/default/files/2023-12/The-Case-for-Memory-Safe-Roadmaps-508c.pdf) +* DARPA:[ https://www.darpa.mil/research/programs/translating-all-c-to-rust](https://www.darpa.mil/research/programs/translating-all-c-to-rust) +* French ANSSI Rust Guide:[ https://github.com/ANSSI-FR/rust-guide](https://github.com/ANSSI-FR/rust-guide) + +### Inspection, verification & security audits + +To fulfill this principle, the system must meet the following standards: + +* Code and architecture transparency – components, algorithms, and data flows should be analyzable. +* Logs and audit trails – every significant operation (e.g., who did what and when) must be recorded. +* Documentation and requirements traceability – linking requirements to implementation, testing, and analysis. +* Openness to independent inspection – allowing external auditors or regulators to assess security and compliance. + +Defguard is open source, and the Enterprise components are fully open as well. To our knowledge, it is the only VPN solution that openly publishes: + +* Periodic security audits: [https://defguard.net/pentesting/](https://defguard.net/pentesting/) +* Daily vulnerability reports (CVE) for all software components (SBOM): [https://defguard.net/sbom/](https://defguard.net/sbom/) +* Full roadmap, development process, and [Architecture Decision Records](architecture-decision-records/) + +
diff --git a/in-depth/statistics.md b/in-depth/statistics.md deleted file mode 100644 index 68bfe6a..0000000 --- a/in-depth/statistics.md +++ /dev/null @@ -1,6 +0,0 @@ -# Statistics - -Defguard uses gateway service to store and display VPN usage statistics. See [architecture overview](architecture.md) -for details of core-gateway interaction. - -Once your gateway service is up and diff --git a/integrations/README.md b/integrations/README.md deleted file mode 100644 index d3136ca..0000000 --- a/integrations/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# Integrations - diff --git a/integrations/api-tokens.md b/integrations/api-tokens.md deleted file mode 100644 index 1316829..0000000 --- a/integrations/api-tokens.md +++ /dev/null @@ -1,58 +0,0 @@ -# REST API - -{% hint style="warning" %} -This is an enterprise feature. To use it, purchase our [enterprise license](../enterprise/license.md) or ensure that your deployment does not exceed the [usage limits](../enterprise/license.md#enterprise-is-free-up-to-certain-limits). -{% endhint %} - -{% hint style="warning" %} -API functionality: - -1. requires Defguard version 1.2.4+ -2. is also **available without enterprise license**, if your instance does not exceed the limits [described here](../enterprise/license.md#enterprise-is-free-up-to-certain-limits). -{% endhint %} - -## REST API documentation - -You can explore the Defguard REST API using [Swagger UI](https://swagger.io/tools/swagger-ui/) by going to `/api-docs`. - -API specification JSON in OpenAPI format can also be fetched from `/api/v1/api-docs`. - -Admin users can generate API tokens to enable request authentication for custom external tools which use Defguard REST API. - -Tokens retain the same access permissions as their owner, so be careful when sharing them with others. - -## Generating API token - -## Setup - -To generate a new API token, go to your profile page and click the `Add new API Token`button: - -
- -Fill in your chosen token name and submit form: - -
- -Copy generated token. This is the only time the token will be available in plain text form. If you lose it you will have to generate a new one. - -
- -In the API token list you can later rename or delete a token: - -
- -## Usage - -Defguard API uses a standard **Bearer token authentication** scheme. - -This means that an API token can be passed in the `Authorization` header to authenticate a given request instead of a session cookie used by the web UI: - -```bash -Authorization: Bearer -``` - -Example GET request: - -```bash -curl -H "Authorization: Bearer " /api/v1/me -``` diff --git a/notifications/README.md b/notifications/README.md deleted file mode 100644 index 4b774d2..0000000 --- a/notifications/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# Notifications - diff --git a/releases/0.10/groups.png b/releases/0.10/groups.png deleted file mode 100644 index 155bbe5..0000000 Binary files a/releases/0.10/groups.png and /dev/null differ diff --git a/releases/0.10/ssh-gpg.keys.png b/releases/0.10/ssh-gpg.keys.png deleted file mode 100644 index df4038c..0000000 Binary files a/releases/0.10/ssh-gpg.keys.png and /dev/null differ diff --git a/releases/0.10/yk.png b/releases/0.10/yk.png deleted file mode 100644 index 40c117c..0000000 Binary files a/releases/0.10/yk.png and /dev/null differ diff --git a/releases/0.11/user-disable.png b/releases/0.11/user-disable.png deleted file mode 100644 index b26170b..0000000 Binary files a/releases/0.11/user-disable.png and /dev/null differ diff --git a/releases/0.7/enrollment.png b/releases/0.7/enrollment.png deleted file mode 100644 index 4853fd7..0000000 Binary files a/releases/0.7/enrollment.png and /dev/null differ diff --git a/releases/0.7/enrollment_msg.png b/releases/0.7/enrollment_msg.png deleted file mode 100644 index f450bd2..0000000 Binary files a/releases/0.7/enrollment_msg.png and /dev/null differ diff --git a/releases/0.8/Defguard-Desktop-Client.png b/releases/0.8/Defguard-Desktop-Client.png deleted file mode 100644 index 235be6d..0000000 Binary files a/releases/0.8/Defguard-Desktop-Client.png and /dev/null differ diff --git a/releases/0.8/emails.png b/releases/0.8/emails.png deleted file mode 100644 index 17fd4a3..0000000 Binary files a/releases/0.8/emails.png and /dev/null differ diff --git a/releases/0.8/santa-defguard.jpg b/releases/0.8/santa-defguard.jpg deleted file mode 100644 index 46f7de9..0000000 Binary files a/releases/0.8/santa-defguard.jpg and /dev/null differ diff --git a/releases/0.9/mfa.png b/releases/0.9/mfa.png deleted file mode 100644 index 65e7115..0000000 Binary files a/releases/0.9/mfa.png and /dev/null differ diff --git a/releases/0.9/reset.png b/releases/0.9/reset.png deleted file mode 100644 index bb6f9d7..0000000 Binary files a/releases/0.9/reset.png and /dev/null differ diff --git a/releases/0.9/tunnel.png b/releases/0.9/tunnel.png deleted file mode 100644 index 78e80f5..0000000 Binary files a/releases/0.9/tunnel.png and /dev/null differ diff --git a/resources/troubleshooting/client-all-traffic-connection-issues.md b/resources/troubleshooting/client-all-traffic-connection-issues.md deleted file mode 100644 index 2e61d7e..0000000 --- a/resources/troubleshooting/client-all-traffic-connection-issues.md +++ /dev/null @@ -1,3 +0,0 @@ -# Client "All traffic" connection issues - -Make sure that location that is having the issue have "DNS" configured. diff --git a/screencasts/defguard-screencast.mkv b/screencasts/defguard-screencast.mkv deleted file mode 100644 index 80fcfab..0000000 Binary files a/screencasts/defguard-screencast.mkv and /dev/null differ diff --git a/support-1/how-to-submit-an-issue.md b/support-1/how-to-submit-an-issue.md new file mode 100644 index 0000000..5db2390 --- /dev/null +++ b/support-1/how-to-submit-an-issue.md @@ -0,0 +1,66 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/support-1/how-to-submit-an-issue +--- + +# How to submit an issue + +## Submitting an issue + +To help us diagnose and resolve problems efficiently, please follow the process below when submitting an issue. + +### 1. Enable debug logging + +Before reproducing the issue, set the log level of **all relevant components** to `DEBUG`.\ +This ensures we capture the necessary details for troubleshooting. + +Here is how you can do it in each component + +* core: use `--log-level debug` option or set `DEFGUARD_LOG_LEVEL` environment variable to `debug` +* gateway: use `--log-level debug` option or set `DEFGUARD_LOG_LEVEL` environment variable to `debug` +* proxy: use `--log-level debug` option or set `DEFGUARD_PROXY_LOG_LEVEL` environment variable to `debug` +* client: use `--log-level debug` option or set `DEFGUARD_LOG_LEVEL` environment variable to `debug` +* `mobile client: select "debug" in "View Application Logs" section` + +### 2. Reproduce the problem + +Reproduce the issue while `DEBUG` logging is enabled.\ +The logs will automatically include: + +* Application version +* Operating system information + +### 3. Collect logs and screenshots + +After reproducing the issue, gather logs from **all relevant components**.\ +Make sure to include **all of them** in your report. + +For UI components, also take screenshots if the issue affects layout, design, or visual behavior. + +{% hint style="warning" %} +Please include only the log entries captured around the time the issue occurred and make sure the logs contain the actual error message.\ +This helps us identify the root cause without having to sift through unnecessary log data. +{% endhint %} + +### 4. Provide steps to reproduce + +In addition to logs, clearly describe how the issue can be reproduced. Include: + +* Description of your deployment strategy +* Exact steps you took +* Expected behavior +* Actual behavior + +### 5. Submit your report + +Go to [Defguard issues page](https://github.com/DefGuard/defguard/issues) and open a new issue. Select appropriate category, whether it's a "Bug report", "Feature request" or a "Security vulnerability". When opening an issue, attach: + +* Logs from all components +* Clear reproduction steps +* Any additional context you think may help (environment details, configuration snippets, etc.) + +## Example submission + +You'll find example issue submission [here](https://github.com/DefGuard/defguard/issues/1542). diff --git a/support-1/server-migration-and-licence-transfer.md b/support-1/server-migration-and-licence-transfer.md new file mode 100644 index 0000000..1f8c289 --- /dev/null +++ b/support-1/server-migration-and-licence-transfer.md @@ -0,0 +1,45 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/support-1/server-migration-and-licence-transfer +--- + +# Server migration and licence transfer + +This guide explains how to migrate your Defguard instance to a new server while keeping your licence valid and compliant. + +## Licence information + +Each Defguard licence is bound to a single machine. + +When migrating to a new server, you must ensure that only one active instance is using the same licence key at any given time. + +## Migration scenarios + +### Migration with acceptable downtime (simpler) + +This method is recommended when a short interruption in service is not a problem. + +You will reuse your existing licence key, but you must first stop the old server before activating the new one to ensure licence compliance. + +Steps: + +1. Shut down the old Defguard server. Ensure the old instance is completely stopped before proceeding. +2. Install and configure Defguard on the new server. Use the same licence key from your previous installation. +3. Verify functionality on the new server. Confirm that users can connect and that configuration data is correctly migrated. + +### Migration with zero downtime + +This method allows you to migrate Defguard to a new server without interrupting service. + +It requires a temporary transition licence, which lets both servers run simultaneously for testing and verification before switching over. + +Steps: + +1. Contact the Defguard Sales team at [sales@defguard.net](mailto:sales@defguard.net). Request a 7-day transition licence for migration purposes. +2. Install and configure Defguard on the new server using the transition licence. This allows both servers to temporarily coexist. +3. Test and verify the new setup to ensure all configurations and integrations work correctly. +4. Once verification is complete: + 1. Shut down the old Defguard server. + 2. Replace the transition licence on the new server with your original licence key. diff --git a/resources/troubleshooting/README.md b/support-1/troubleshooting/README.md similarity index 51% rename from resources/troubleshooting/README.md rename to support-1/troubleshooting/README.md index a1dae45..ed820e9 100644 --- a/resources/troubleshooting/README.md +++ b/support-1/troubleshooting/README.md @@ -1,5 +1,8 @@ --- description: Here are some common issues / problems that are frequently encountered. +metaLinks: + alternates: + - https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/support-1/troubleshooting --- # Troubleshooting Guide @@ -10,7 +13,7 @@ Before contacting support, please see if the answer cannot be found here: ## Desktop client real-time/auto sync doesn't work -The client communicates with core to initiate the handshake through the secure proxy - which is also the enrollment service - [more details about the architecture here](../../admin-and-features/wireguard/multi-factor-authentication-mfa-2fa/architecture.md) so it's critical it works and is properly configured. +The client communicates with core to initiate the handshake through the secure proxy - which is also the enrollment service - [more details about the architecture here](../../in-depth/architecture/architecture.md) so it's critical it works and is properly configured. Common problems may be: @@ -50,9 +53,17 @@ sudo ln -s /usr/bin/resolvectl /usr/sbin/resolvconf If this fails, one may also try installing one of the packages providing the `resolvconf` command, like `openresolv` or, ⁣ but`resolvconf` this has not been tested and may cause issues with `systemd-resolved`, so proceed at your own risk. +### Check DNS name resolution + +If the internal DNS servers are configured but users can't connect to internal hosts requiring name resolution, you may want to check the following: + +1. Routing: `ip route` - are requests to network segments where DNS servers live routed through the wireguard interface? +2. Wireguard interface: `sudo wg` - are network segments where DNS servers live on the `allowed ips` list? +3. Try resolving the names manually using your DNS servers: `dig @DNS_SERVER_IP my.internal.service.com` + ## Client: Failed to parse IP address -
+
This error usually indicates that the client version is outdated and can't communicate with proxy/core services. Try upgrading the desktop client application. @@ -112,15 +123,26 @@ net.core.wmem_default = 524288 More info here: [https://github.com/DefGuard/defguard/issues/1303](https://github.com/DefGuard/defguard/issues/1303) - - ## Enrollment URL shows http://localhost:8080 despite `DEFGUARD_URL` is different You are probably looking for `DEFGUARD_ENROLLMENT_URL` which is the URL needed to add device (image below). -
+
+ +Please check [this article](../../deployment-strategies/configuration.md#enrollment-configuration). -Please check [this article](../../configuration.md#enrollment-configuration). +## Enrollment URL has changed + +If for any reason the Enrollment URL has changed (eg. the domain from: _enroll.company.com_ to _setup.company.com),_ all desktop or mobile aplications needs to be manually updated with the new URL. + +{% hint style="warning" %} +**This manual process including tokens issued by administrator is intentional** – so that neither the user themselves, nor a potential attacker, can manually change the configuration or do so without the user/administrator’s knowledge. +{% endhint %} + +In order to do so: + +* **The administrator** needs to send an update token to each person - [see this documentation page.](https://docs.defguard.net/features/remote-user-enrollment#restarting-enrollment-manually) +* **The user** needs to update manually the Enrollment URL providing also the received token - [see this documentation page](../../using-defguard-for-end-users/desktop-client/). ## How to check if the VPN is working / my VPN is not working @@ -132,7 +154,7 @@ After connecting to VPN you should be able to ping: 10.1.1.1. ### VPN Location settings changed -Check if the VPN location configuration has changed. If it did, and you do not have Enterprise license where real-time config sync is automatic, the user needs to [update their client configuration by updating that instance manually.](../../help/desktop-client/instance-configuration.md#updating-instance) +Check if the VPN location configuration has changed. If it did, and you do not have Enterprise license where real-time config sync is automatic, the user needs to [update their client configuration by updating that instance manually.](../../using-defguard-for-end-users/desktop-client/instance-configuration.md#updating-instance) ### Conflicting networks @@ -185,9 +207,9 @@ From there, what happens to this traffic is the **administrator role.** The most The user tries to sign in to a Defguard instance but gets a 401 response with message "Session is required". -This issue is most likely caused by a misconfigured `DEFGUARD_URL` . Please have a look at the configuration options described in [General configuration](../../configuration.md#general-configuration) documentation. +This issue is most likely caused by a misconfigured `DEFGUARD_URL` . Please have a look at the configuration options described in [General configuration](../../deployment-strategies/configuration.md#general-configuration) documentation. -If you want to access your Defguard instance without TLS (using an `http://` URL), please also make sure you have everything configured according to [Auth cookies configuration](../../configuration.md#auth-cookies-configuration) documentation. +If you want to access your Defguard instance without TLS (using an `http://` URL), please also make sure you have everything configured according to [Auth cookies configuration](../../deployment-strategies/configuration.md#auth-cookies-configuration) documentation. ## User lost access to their 2FA methods @@ -196,3 +218,190 @@ If a user lost their TOTP app or security key and is therefore unable to log in, In order to do this, go to the `Users` page and find the relevant user in the list. Then click on the cog button on the right and select `Disable MFA`. You will be then asked to confirm your choice. It's recommended that after MFA is disabled, the user should configure a new MFA method as soon as possible. + +## Unix socket permission errors when desktop client attempts to connect to VPN on Linux machines + +To secure access to the background service which manages network interfaces (which requires elevated permissions) the Unix socket (`/var/run/defguard.socket`) used for gRPC communication is only accessible for users in the `defguard` group. + +This means that the user who runs the GUI client must belong to this group. An incorrect setup results in `Permission denied` errors when attempting to connect to a VPN location. + +By default the official packages (deb, rpm etc) should handle creating this group and adding the user, but in case of some unexpected errors it can also be done manually by running the following shell commands: + +* check if the `defguard` group exists: \\ + + ```bash + $ getent group defguard + defguard:x:988:some_user # this indicated that the group exists and user some_user is a member + + ``` +* if the group does not exist (you get no lines of output for the above command) create it manually:\\ + + ```bash + $ sudo groupadd -r defguard + ``` +* add current user to the group:\\ + + ```bash + sudo usermod -a -G groupname $USER + ``` +* for the group membership changes to take effect you now need to reboot or log out and back in +* confirm that your user is a member of `defguard` group:\\ + + ```bash + id -nG | grep -q defguard && echo "You are a member of defguard group" || echo "You are NOT a member of defguard group" + ``` +* verify that the socket itself has correct permissions:\\ + + ```bash + $ ls -l /var/run/defguard.socket + srw-rw---- 1 root defguard 0 Sep 15 15:02 /var/run/defguard.socket + + ``` + +## Unix socket does not exist. Error `No such file or directory (os error 2)` when trying to connect to a location + +The socket file at `/var/run/defguard.socket` is created by the background service used by the client to manage network interfaces. + +This service is usually run as a [systemd service](https://github.com/DefGuard/client/blob/f9c8d36166181aa3363957643baf793ce206043a/resources-linux/defguard-service.service) installed by a relevant package. + +In case an issue occured during installation and the service is not enabled you can do it manually by running the following commands: + +```bash +# Reload systemd to recognize new service file +sudo systemctl daemon-reload + +# Enable service to start on boot +sudo systemctl enable defguard-service + +# Start the service now +sudo systemctl start defguard-service +``` + +## Windows client is unable to connect + +If the Windows client is unable to connect to establish a connection and shows command timeout errors it's useful to look into the application logs in the settings screen or in the [log files](../../using-defguard-for-end-users/desktop-client/#log-files) themselves. + +If the background service logs contain errors similar to `Unable to access interface: No such file or directory` it might indicate that due to some unforeseen combination of factors a tunnel has not been shut down correctly. + +To verify that this is the case open the system service manager and look for any services named `WireGuard Tunnel` + +
+ +If any such services are present, remove them and retry the connection. + +## Desktop client high disk usage + +Some users may experience unusually high disk activity from the Defguard desktop client, even when the app appears idle. This is almost always caused by SQLite performing full-table scans on large statistics tables. + +### **1. Check Your Client Version** + +The fix for the original table-scan problem was introduced in **v1.5.2**. + +**Steps:** + +* Open Defguard Desktop +* Look at the **bottom-left corner** → confirm the version is ≥ **v1.5.2** +* If not, download the latest version: [https://defguard.net/download/](https://defguard.net/download/) + +### **2. Check the Database Size** + +If the stats purge mechanism is not working correctly or heavy usage generates too much data, the database can grow very large. + +**Location of the DB file: `C:\Users\AppData\Roaming\net.defguard\defguard.db`** + +**Typical sizes:** + +* Normal usage: a few MB +* Problematic: tens or hundreds of MB (e.g., 50–200 MB) + +### **3. Temporary Workarounds** + +{% hint style="danger" %} +Before trying any fix, **back up your database file**. +{% endhint %} + +**Option A — Trim Stats Tables (safe & recommended)** + +Install [SQLite](https://sqlite.org/index.html), open the DB, and run: + +```sql +delete from location_stats; +delete from tunnel_stats; +``` + +This immediately reduces the DB size and disk I/O. + +**Option B — Remove the Database Entirely (quickest, but requires re-enrollment)** + +1. Close Defguard completely +2. Delete the database file: `C:\Users\AppData\Roaming\net.defguard\defguard.db` +3. Re-enroll your device in Defguard (you will need your enrollment link or admin setup) + +This is the nuclear option but works reliably. + +### **Long-Term Fix** + +The stats subsystem is being **fully redesigned** in the upcoming **2.0** release.\ +The new implementation will avoid these SQLite table-scan issues entirely. + +## Client connects but cannot reach VPN servers + +On some networks - especially mobile or carrier-grade networks - the MTU (Maximum Transmission Unit) may be lower than usual. When this happens, VPN packets can exceed the network's MTU and get dropped during transmission. This often results in partial connectivity issues or a complete failure to connect to VPN servers. + +To address this, the Defguard client allows you to manually configure the MTU. Lowering the MTU reduces packet size so that traffic fits within the network’s limits and can be transmitted reliably. + +As a general guideline, MTU values in the range of **1300-1500** work well in most cases. If you're experiencing connectivity problems, try lowering the MTU gradually within this range until the connection stabilizes. + +
+ +## Disconnecting from location show "Connection failed" system error + +
+ +Issue occurs on Linux distributions with `NetworkManager` installed. + +This error occurs because `NetworkManager` tries to manage Defguard network interfaces. This doesn't affect VPN connection and is a **visual** bug only. + +To prevent this error from appearing, you can configure `NetworkManager` to stop managing network interfaces created by Defguard. To do so, we need to create a config for `NetworkManager`. + +1. Create config file + +```shellscript +sudo nano /etc/NetworkManager/conf.d/90-defguard.conf +``` + +2. Fill this file with this config. (Defguard tunnels start with `wg` by default) + +```shellscript +[keyfile] +unmanaged-devices=interface-name:wg* +``` + +3. Save your file, and then restart `NetworkManager`. + +```shellscript +sudo systemctl restart NetworkManager +``` + +## Command 'resolvconf' required by wireguard-rs couldn't be found. + +On some Linux distributions (for example Debian 12 and 13), Defguard may fail to establish VPN tunnel after clicking "Connect" on a specified location. This is caused by lack of `resolvconf` command. + +To resolve this issue, install missing dependency with: + +```shellscript +sudo apt install openresolv +``` + +## Android app "Failed host lookup" error. + +When connecting to a location with external OpendID provider, the application shows the following error: `DioException [connection error]: The connection errored: Failed host lookup`. + +
+ +This usually happens when aggressive battery optimization policy is used by the Android system, resulting in network connectivity issues and dns lookup errors. To fix it: + +1. Go to Settings -> Apps -> App management -> Defguard -> Battery usage +2. Enable the "Allow background activity" switch. + +Defguard app should now be able to connect to the server even when in background during the OpenID authentication. diff --git a/support-1/troubleshooting/client-all-traffic-connection-issues.md b/support-1/troubleshooting/client-all-traffic-connection-issues.md new file mode 100644 index 0000000..0854800 --- /dev/null +++ b/support-1/troubleshooting/client-all-traffic-connection-issues.md @@ -0,0 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/support-1/troubleshooting/client-all-traffic-connection-issues +--- + +# Client "All traffic" connection issues + +Make sure that location that is having the issue have "DNS" configured. diff --git a/resources/troubleshooting/sending-support-info.md b/support-1/troubleshooting/sending-support-info.md similarity index 50% rename from resources/troubleshooting/sending-support-info.md rename to support-1/troubleshooting/sending-support-info.md index b9a1de1..aec6cdd 100644 --- a/resources/troubleshooting/sending-support-info.md +++ b/support-1/troubleshooting/sending-support-info.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/support-1/troubleshooting/sending-support-info +--- + # Sending support information ## Desktop Client @@ -18,7 +25,25 @@ Before submitting the logs, after you have changed the logging to debug, please You can easly send us client logs by going _Settings ->_ in the _Log_ window you will have the possibility to see the logs, but also two buttons, to Copy the logs or Download them - so you can easly share them with us: -
+
+ +## Mobile client + +To view the mobile client logs open the side menu by tapping the menu icon. + +
+ +Tap the _View Application Logs_ link from the side menu. + +
+ +You will see the application logs. Tap the menu icon again to see possible actions. + +
+ +Tap the _Share logs file_ item to sent the log file using a desired app. + +
## Core @@ -26,4 +51,4 @@ When contacting support you can send us **anonymous** support data by: 1. In **Settings > Support** tab you'll be able to generate and send support data that can be used when debugging your issues. 2. To download configuration and logs use appropriate buttons. You can attach them to bug report in our GitHub repository or send them in Matrix. -3. The "Send email" button is active only if you [configured the SMTP server](../../notifications/setting-up-smtp-for-email-notifications.md). +3. The "Send email" button is active only if you [configured the SMTP server](../../features/notifications/setting-up-smtp-for-email-notifications.md). diff --git a/resources/troubleshooting/webauthn-security-keys.md b/support-1/troubleshooting/webauthn-security-keys.md similarity index 90% rename from resources/troubleshooting/webauthn-security-keys.md rename to support-1/troubleshooting/webauthn-security-keys.md index 463c8a0..28ce3b1 100644 --- a/resources/troubleshooting/webauthn-security-keys.md +++ b/support-1/troubleshooting/webauthn-security-keys.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/support-1/troubleshooting/webauthn-security-keys +--- + # WebAuthn security keys Currently, only security keys that can be configured as **passkeys** are supported. diff --git a/resources/troubleshooting/windows-installer-exit-codes.md b/support-1/troubleshooting/windows-installer-exit-codes.md similarity index 99% rename from resources/troubleshooting/windows-installer-exit-codes.md rename to support-1/troubleshooting/windows-installer-exit-codes.md index 6749a4a..f9ba4ba 100644 --- a/resources/troubleshooting/windows-installer-exit-codes.md +++ b/support-1/troubleshooting/windows-installer-exit-codes.md @@ -1,8 +1,12 @@ --- description: Desktop Client windows installer exist codes list. +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/support-1/troubleshooting/windows-installer-exit-codes --- -# Windows installer exit codes +# Client Windows installer exit codes | Error code | Value | Description | | ------------------------------------------ | ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | diff --git a/support.md b/support.md index 80ef8cc..3c479bb 100644 --- a/support.md +++ b/support.md @@ -1,32 +1,44 @@ +--- +metaLinks: + alternates: + - https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/support +--- + # Getting help -## Check out our troubleshooting guide +## Troubleshooting guide -We developed a comprehensive [troubleshooting guide](resources/troubleshooting/) to help resolve your issue. We've put significant effort into ensuring it's current and thorough. +We developed a comprehensive [troubleshooting guide](support-1/troubleshooting/) to help resolve your issue. We've put significant effort into ensuring it's current and thorough. -## Contacting Support +## Community support (for all plans) -If you have bought an [Enterprise plan with premium support](https://defguard.net/pricing/), you can reach us at: +Having trouble with Defguard deployment or configuration? Reach out to our community for help. -* Email: support@defguard.net +Support is provided both by the community and by us (the Defguard authors) using GitHub Discussions. Create a new discussion using this [form](https://github.com/DefGuard/defguard/discussions/new/choose). -## Community Support +## Email Support (for paid plans only) -Community support is done by the community as well as us (Defguard authors) on our [Matrix](https://matrix.to/#/#defguard:teonite.com) - **Support** channel. +If you have bought a [Business or Enterprise license](https://defguard.net/pricing/), you can reach us at our support email [support@defguard.net](mailto:support@defguard.net). -{% hint style="info" %} -Since this a community support, please remember that it may take some time to get a response, as there is no-one _assigned_ for the support 24/h - especially during the weekends, when people are just off. +{% hint style="warning" %} +Please remember to send your support request from the same domain used when purchasing the license. If you contact us from a different domain, your request will be redirected to our community support. {% endhint %} -### Do you have Slack/Discord? - -Matrix is vastly more secure than those (convenient) platforms - and open source (which we are as well). We may bring a bridge to Discord in the future, but no guarantees. - ## Found a bug? Need a feature? * Here you can submit [a bug](https://github.com/DefGuard/defguard/issues/new?assignees=\&labels=bug\&projects=\&template=bug_report.md\&title=) * And here you can submit [a feature request](https://github.com/DefGuard/defguard/issues/new?assignees=\&labels=feature\&projects=\&template=feature_request.md\&title=) -## Reporting a Vulnerability +## Solved an issue yourself? + +Please share your solution with the community so others can benefit from it. Leave a short description of the observed behaviour, expected behaviour, and the solution in our [Show and Tell section](https://github.com/DefGuard/defguard/discussions/categories/show-and-tell) on GitHub Discussions. + +## Reporting a security vulnerability + +{% hint style="danger" %} +Please do not report security vulnerabilities via GitHub issues. Dedicated reporting channels are listed below. +{% endhint %} + +To report a security vulnerability open a [security advisory](https://github.com/defguard/defguard/security/advisories/new). -Please do **not open GitHub Issues for security issues you encounter**. To reporting a vulnerability open a [security advisory here](https://github.com/defguard/defguard/security/advisories/new). +You can also send us an encrypted email message according to instructions in our [Vulnerability Disclosure Policy](https://defguard.net/security/#VDP-title). diff --git a/tutorials/step-by-step-setting-up-a-vpn-server/README.md b/tutorials/step-by-step-setting-up-a-vpn-server/README.md index 3c4a163..071f8f4 100644 --- a/tutorials/step-by-step-setting-up-a-vpn-server/README.md +++ b/tutorials/step-by-step-setting-up-a-vpn-server/README.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/tutorials/step-by-step-setting-up-a-vpn-server +--- + # Step by step setting up a VPN server ### Introduction @@ -64,7 +71,7 @@ You can log into the UI using the default admin user: When you log in to your instance with user admin and the password that was generated for you, you should see that the VPN gateway is connected: -

Defguard live status of WireGuard VPN gateway

+
### Connecting to your VPN using Defguard desktop client @@ -72,11 +79,11 @@ Download the latest client from: [https://github.com/DefGuard/client/releases](h Now, go to **Defguard** Web UI (in this example: _https://my-server.defguard.net_) and go to _My Profile_ and click on _Add Device:_ -

Adding a new device/desktop client in Defguard user profile

+
Then choose _Defguard Client Remote Desktop Activation_ - which will easily configure your Desktop client: -

Defguard supports both desktop client and configuring any WireGuard Client

+
Defguard will show what **URL** (which is - as you see - your enrollment service URL) and **token** to paste to your desktop client: @@ -86,23 +93,23 @@ You can easily copy those with buttons provided in Defguard, and paste to your d In desktop client, click on \_**+ Add instance** \_ and provide the URL and token: -

Configuring the client with a new instance

+
After that, the client will ask you to name your device (however you like), after that click finish: -

Naming your device

+
The client will instantly show your Defguard instance and the VPN (we named _Example):_ -

Client after successfully adding a new instance

+
Also, you should see in your profile, that the client is configured and visible (for now - no details of IPs, etc - will automatically show details when you connect with your client): -

Defguard showing the newly configured client in user profile

+
Now let's click _**Connect**_ and see if the VPN works, the best way to do so, is to open a terminal app and **ping** the VPN server address. Also to see nice statistics, choose in the client menu from _Grid view_ (which is nice if you have multiple VPNs) the option _Detailed view:_ -

Nice statistics in Defguard client

+
Now let's test if the VPN network is accessible. To do so, let's ping the VPN gateway internal IP: _10.22.33.1_ @@ -110,7 +117,7 @@ Now let's test if the VPN network is accessible. To do so, let's ping the VPN ga As an administrator, you will probably be happy to see this - Defguard VPN dashboard: -

Defguard VPN dashboard

+
{% hint style="info" %} This completes your VPN setup - both server and client. @@ -163,7 +170,7 @@ root@server:~# sysctl -p Now we need to configure firewall [NAT](https://en.wikipedia.org/wiki/Network_address_translation), so that the server will "_translate/masq_" VPN traffic behind its public IP. In order to do that, we need to add rules to MASQUERADE VPN network behind the public interface of the server. {% hint style="info" %} -From version 1.3.0, gateway can automatically apply masquerade to traffic on all interfaces without the need for manual configuration. Refer to [#masquerade](../../admin-and-features/access-control-list/#masquerade "mention") for details. If you use this feature, you can skip the following manual masquerade setup step. +From version 1.3.0, gateway can automatically apply masquerade to traffic on all interfaces without the need for manual configuration. Refer to [#masquerade](../../features/access-control-list/#masquerade "mention") for details. If you use this feature, you can skip the following manual masquerade setup step. {% endhint %} We know that VPN network is 10.22.33.0/24 now we need to be sure what interface has the public IP (in our case: 185.33.37.51) - let's figure it out with this command: @@ -239,7 +246,7 @@ To Action From Defguard is the only (known to us) WireGuard client that during connection provides a choice to **route all your traffic through the VPN.** Just (before connecting) choose the option: **Allow all traffic** and click connect! -

Choosing to forward all traffic through VPN

+
This is very useful, since some times you just want to be connected to your VPN to have the server/VPN networks accessible, and sometimes (like in the scenarios mentioned before) you want to hide and encrypt your traffic. diff --git a/tutorials/step-by-step-setting-up-a-vpn-server/adding-additional-vpn-locations.md b/tutorials/step-by-step-setting-up-a-vpn-server/adding-additional-vpn-locations.md index d4b3d28..1620e4f 100644 --- a/tutorials/step-by-step-setting-up-a-vpn-server/adding-additional-vpn-locations.md +++ b/tutorials/step-by-step-setting-up-a-vpn-server/adding-additional-vpn-locations.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/tutorials/step-by-step-setting-up-a-vpn-server/adding-additional-vpn-locations +--- + # Adding additional VPN locations If you have used our one-line install setup (for example [described in this tutorial](./)) one VPN location (one gateway instance) is done automatically. diff --git a/help/adding-wireguard-devices/README.md b/using-defguard-for-end-users/adding-wireguard-devices/README.md similarity index 94% rename from help/adding-wireguard-devices/README.md rename to using-defguard-for-end-users/adding-wireguard-devices/README.md index a958a8b..e54639b 100644 --- a/help/adding-wireguard-devices/README.md +++ b/using-defguard-for-end-users/adding-wireguard-devices/README.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/using-defguard-for-end-users/adding-wireguard-devices +--- + # Other WireGuard® Clients ## Installing Wireguard/VPN client diff --git a/help/adding-wireguard-devices/configuring-a-device-for-a-new-vpn-location.md b/using-defguard-for-end-users/adding-wireguard-devices/configuring-a-device-for-a-new-vpn-location.md similarity index 78% rename from help/adding-wireguard-devices/configuring-a-device-for-a-new-vpn-location.md rename to using-defguard-for-end-users/adding-wireguard-devices/configuring-a-device-for-a-new-vpn-location.md index 71000ad..e346648 100644 --- a/help/adding-wireguard-devices/configuring-a-device-for-a-new-vpn-location.md +++ b/using-defguard-for-end-users/adding-wireguard-devices/configuring-a-device-for-a-new-vpn-location.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/using-defguard-for-end-users/adding-wireguard-devices/configuring-a-device-for-a-new-vpn-location +--- + # Configuring a device for new VPN Location manually If you (or your Defguard administrator) have added a new VPN Location and you would like to connect to that location from your **existing device** (for which you have downloaded configuration for any previous locations), you need to: @@ -5,13 +12,13 @@ If you (or your Defguard administrator) have added a new VPN Location and you wo 1. Go to **your profile** (_My Profile -_ which you'll find on the navigation on the left side of the screen) 2. Click on the **gear icon on the device you want to download Location configuration** - a menu for that device will apear: -
+
3. Choose **Show configuration** The same configuration screen will popup as you were adding this device, but now you can choose a new location: -
+
4. **Download and configure your Wireguard VPN** exactly the same way you did it during the [adding device process](./). diff --git a/help/changing-your-password.md b/using-defguard-for-end-users/changing-your-password.md similarity index 90% rename from help/changing-your-password.md rename to using-defguard-for-end-users/changing-your-password.md index 24f8dc6..5152304 100644 --- a/help/changing-your-password.md +++ b/using-defguard-for-end-users/changing-your-password.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/using-defguard-for-end-users/changing-your-password +--- + # Password change / Reset ## Resetting your password diff --git a/help/cli-client.md b/using-defguard-for-end-users/cli-client.md similarity index 86% rename from help/cli-client.md rename to using-defguard-for-end-users/cli-client.md index f533ccb..7a83b8d 100644 --- a/help/cli-client.md +++ b/using-defguard-for-end-users/cli-client.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/using-defguard-for-end-users/cli-client +--- + # CLI Client ### Downloading @@ -28,18 +35,18 @@ Binary: [https://github.com/DefGuard/client/releases/download/v1.2.0/dg-linux-aa ### Installation -Installation is straightforward. As a root, install it as any other package of a given type (deb/rpm). +Installation is straightforward. As a root, install it as any other package of a given type (deb/rpm). #### Deb archive ```bash -apt install ./dg-linux-x86_64-v1.2.0-dg.deb +apt install ./dg-linux-x86_64-v1.5.0-dg.deb ``` -#### RPM +#### DNF ```bash -rpm -i ./dg-linux-x86_64-v1.2.0-dg.rpm +dnf install ./dg-linux-x86_64-v1.5.0-dg.rpm ``` #### Post install @@ -54,7 +61,7 @@ dg --help #### Defguard Core setup -Defguard CLI works only with [network devices](../admin-and-features/network-devices.md), so to use it, you will need to first add a new network device. Refer to the network device documentation to learn more. +Defguard CLI works only with [network devices](../features/network-devices.md), so to use it, you will need to first add a new network device. Refer to the network device documentation to learn more. After you've configured your network device on Defguard core, you will be presented with the following command: @@ -94,6 +101,20 @@ systemctl start dg You can configure the service and set the log verbosity by editing `/etc/defguard/dg.conf`. +#### Specifying a custom configuration path + +You can use a custom config path to save your network configuration by providing it as a command argument: + +``` +dg --config ./config.json enroll -u -t +``` + +And then to connect: + +``` +dg --config ./config.json +``` + ### Debugging and troubleshooting It may be easier to identify a problem by passing one of the following flags, which control the logging verbosity level: diff --git a/using-defguard-for-end-users/desktop-client/README.md b/using-defguard-for-end-users/desktop-client/README.md new file mode 100644 index 0000000..15ce70e --- /dev/null +++ b/using-defguard-for-end-users/desktop-client/README.md @@ -0,0 +1,86 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/using-defguard-for-end-users/desktop-client +--- + +# Desktop Client + +### Overview + +Desktop client provides an easy way to access VPN locations of multiple Defguard instances via user-friendly UI. + +Download latest release here: [https://defguard.net/download/](https://defguard.net/download/) + +For development/pre-releases, go to GitHub: [https://github.com/DefGuard/client/releases](https://github.com/DefGuard/client/releases) + +Guides: + +* [Instance configuration](instance-configuration.md) +* [Using Multi-Factor Authentication](using-multi-factor-authentication-mfa.md) + +### macOS + +Defguard Desktop Client is available in the [App Store](https://apps.apple.com/pl/app/defguard-desktop-client/id6754601166). + +### Linux + +{% hint style="warning" %} +On Linux the desktop client uses `resolvconf` to manage DNS servers. On newer distributions it should be a symbolic link to `resolvectl`, more details can be found on the [troubleshooting](https://github.com/DefGuard/docs/blob/docs/help/broken-reference/README.md) page. +{% endhint %} + +{% hint style="warning" %} +On Linux the desktop client requires the user to belong to the `defguard` group in order to access the `defguard.socket` Unix socket used for IPC. + +The official packages handle group setup, but logging out and back in or rebooting might be required on initial client install to refresh group membership. This is no longer required on subsequent updates. +{% endhint %} + +### ArchLinux + +There is an [AUR package](https://aur.archlinux.org/packages/defguard-client)[: defguard-client](https://aur.archlinux.org/packages/defguard-client). + +If you don't know how to install AUR packages, please follow these guidelines: + +* Manual install: [https://wiki.archlinux.org/title/Arch\_User\_Repository](https://wiki.archlinux.org/title/Arch_User_Repository) +* Installation through PARU (AUR Helper): [https://owlhowto.com/how-to-install-paru-on-arch-linux/](https://owlhowto.com/how-to-install-paru-on-arch-linux/) + +### Ubuntu 22.04 / Debian 12 + +Download `defguard-client_{x.x.x}_{arch}_ubuntu-22-04-lts.deb` from [releases](https://github.com/DefGuard/client/releases). + +### Client update + +Defguard Client regularly checks for updates and in order to do so operating system name and installed application version are sent to the Defguard update service. + +This functionality can be turned off in the Client settings under Updates section so that no data is sent. + +
+ +If a new version is available, a notification with a download button will be shown near the bottom of the menu. + +

New Desktop Client version available for download

+ +### Storage + +Application data is stored in following locations: + +| Platform | Storage directory | +| --------- | ---------------------------------------------- | +| Windows | C:\Users\\\\AppData\Roaming\net.defguard | +| macOS | $HOME/Library/Containers/net.defguard | +| BSD/Linux | $HOME/.local/share/net.defguard | + +### Log files + +All relevant application logs should be available in the clients Settings where they can be filtered by source and log level:\\ + +
+ +In case of unexpected issues, the log files themselves can be found in the following default locations: + +| Platform | Client logs | Background service logs | +| --------- | -------------------------------------------------------------------- | ------------------------------------------------------ | +| Windows | C:\Users\\AppData\Roaming\net.defguard\logs | C:\Logs\defguard-service | +| macOS | $HOME/Library/Containers/net.defguard/Data/Library/Logs/net.defguard | $HOME/Library/Group Containers/group.net.defguard/Logs | +| BSD/Linux | $HOME/.local/share/net.defguard/logs | /var/log/defguard-service | diff --git a/help/desktop-client/instance-configuration.md b/using-defguard-for-end-users/desktop-client/instance-configuration.md similarity index 86% rename from help/desktop-client/instance-configuration.md rename to using-defguard-for-end-users/desktop-client/instance-configuration.md index d51a9ab..1d4e554 100644 --- a/help/desktop-client/instance-configuration.md +++ b/using-defguard-for-end-users/desktop-client/instance-configuration.md @@ -2,6 +2,10 @@ description: >- In this guide, you will learn how to add, remove and update Instance in Defguard desktop client. +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/using-defguard-for-end-users/desktop-client/instance-configuration --- # Instance configuration @@ -15,7 +19,7 @@ Defguard Desktop Client is required if you want to use Multi-Factor Authenticati {% hint style="info" %} If you are looking for how to generate tokens for your users as an Administrator, look here: -[remote-desktop-activation.md](../../admin-and-features/wireguard/remote-desktop-activation.md "mention") +[remote-desktop-activation.md](../../features/wireguard/remote-desktop-activation.md "mention") {% endhint %} 1. Log in to your Defguard account. @@ -43,6 +47,12 @@ If you are looking for how to generate tokens for your users as an Administrator
+### One-click Desktop Configuration + +You can skip the whole process of entering token/url by clicking "One-click Desktop Configuration" during remote device activation. Here is a video describing whole process: + +{% embed url="https://www.youtube.com/embed/q5-AXOPLgHc" %} + ### Connecting to Instance 1. Select your Instance from menu @@ -87,7 +97,7 @@ Your Instance will update immediately. Defguard Desktop stores all information locally and doesn't communicate with Defguard outside the registration process. This means that information about instances are snapshots of the moment you registered them in the desktop client, and you might want to update that, for example when some new locations are added or removed. {% hint style="success" %} -If you have an Enterprise License, all desktop clients and all instances are [synchronized automatically and in real-time.](../../admin-and-features/remote-user-enrollment/automatic-real-time-desktop-client-configuration.md) +If you have an Enterprise License, all desktop clients and all instances are [synchronized automatically and in real-time.](../../features/remote-user-enrollment/automatic-real-time-desktop-client-configuration.md) {% endhint %} ### Removing Instance @@ -101,4 +111,3 @@ If you have an Enterprise License, all desktop clients and all instances are [sy
Your Instance will be removed immediately. - diff --git a/using-defguard-for-end-users/desktop-client/mtu-setting.md b/using-defguard-for-end-users/desktop-client/mtu-setting.md new file mode 100644 index 0000000..160314e --- /dev/null +++ b/using-defguard-for-end-users/desktop-client/mtu-setting.md @@ -0,0 +1,17 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/using-defguard-for-end-users/desktop-client/mtu-setting +--- + +# MTU Setting + +Defguard client supports manual MTU configuration to ensure stable VPN connections on mobile and carrier-grade networks. These networks often enforce lower MTU limits, which can cause VPN traffic to be dropped even though the tunnel appears connected. + +Adjusting the MTU reduces packet size so traffic fits within network constraints, improving reliability without server-side changes. Typical working values are in the **1300-1500** range. + +
+ +*** + diff --git a/using-defguard-for-end-users/desktop-client/using-multi-factor-authentication-mfa.md b/using-defguard-for-end-users/desktop-client/using-multi-factor-authentication-mfa.md new file mode 100644 index 0000000..7b64b80 --- /dev/null +++ b/using-defguard-for-end-users/desktop-client/using-multi-factor-authentication-mfa.md @@ -0,0 +1,83 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/using-defguard-for-end-users/desktop-client/using-multi-factor-authentication-mfa +--- + +# Using Multi-Factor Authentication (MFA) + +* Up to version 1.4, only internal MFA was supported, user could only use MFA methods configured in his profile. +* Since version 1.5 (currently in alpha), MFA can be configured per location, and administrators can choose whether a location will use internal MFA or external OIDC/SSO provider. + +Depending on location settings, you may use: + +* Internal MFA - You must have at least one MFA method configured in your profile. For a detailed tutorial, [check out this article](../setting-up-2fa-mfa.md). +* External MFA - You will be redirected to an external site, where authentication is handled by your OIDC provider, for example Google/Microsoft. + +## External MFA + +1. Open Defguard client, select your Instance and click **Connect** next to location with required MFA + +
+ +2. After clicking **Authenticate with Google,** you will be redirected to a secure site where you will need to log in in order to confirm your identity. In this example, we use Google as our OpenID provider, but yours can be different (Microsoft, Okta, etc.) + +
+ +3. After logging in, you will see this + +
+ +Your connection will be established immediately after successful authentication. + +## Internal MFA + +1. Open Defguard client, select your Instance and click **Connect** next to location with required MFA + +
+ +2. Choose method configured for your account, and click **Connect**. + * If you're using "Email" method, please enter the code sent to your email. + * If you're using "Authenticator App", please enter code generated within your authenticator app. + +{% hint style="info" %} +If you don't know how to set up or use your **Authenticator App,** please check [this article](../setting-up-2fa-mfa.md#setting-up-2famfa) for detailed information. +{% endhint %} + +
+ +{% hint style="info" %} +If you need a guide explaining how to use Mobile Client as your MFA method, please [scroll down.](using-multi-factor-authentication-mfa.md#authenticating-via-biometry) +{% endhint %} + +3. After entering code, click **Verify** + +
+ +Your connection will be established immediately after this step. + +## Multi-Factor Authentication via Mobile Biometry + +After configuring VPN on your mobile device and [enabling Biometry](../mobile-client/using-biometry-as-mfa-method.md#setting-up-biometry), we not only enable Biometry based connecting on a mobile device, but add an extra security layer to have the most secure/sophisticated MFA method available. + +After enabling Biometry we create an additional private/public key par, with the private key stored on the hardware/secure storage, and inform in the UI, that this device now can be used for MFA using Biometry on a desktop client: + +
+ +Now, when you connect on the desktop client to a location that has Internal MFA configured, you can choose **“Mobile App”** for MFA, then a QR code will be shown. + +
+ +This QR code to be scanned on the mobile device for additional MFA steps: + +1. Biometry authentication, that enables access to device secure storage +2. Additional validation with private/public key pair between mobile/desktop/core server. After that, our “normal” MFA flow (with session keys, WireGuard private/public keys) takes place. + +Here is a video showcasing this process: + +{% embed url="https://www.youtube.com/watch?v=b-XC76k4KVU" %} + +And here you can see the whole flow done with multiple steps including the user, desktop (and mobile) the Proxy and Defguard Core and gateway in the final step: + +
diff --git a/help/enrollment/README.md b/using-defguard-for-end-users/enrollment/README.md similarity index 84% rename from help/enrollment/README.md rename to using-defguard-for-end-users/enrollment/README.md index f8cab0a..7924cb2 100644 --- a/help/enrollment/README.md +++ b/using-defguard-for-end-users/enrollment/README.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/using-defguard-for-end-users/enrollment +--- + # Enrollment & Onboarding The enrollment process depends on your configuration: diff --git a/help/enrollment/with-external-sso-google-microsoft-custom.md b/using-defguard-for-end-users/enrollment/with-external-sso-google-microsoft-custom.md similarity index 78% rename from help/enrollment/with-external-sso-google-microsoft-custom.md rename to using-defguard-for-end-users/enrollment/with-external-sso-google-microsoft-custom.md index a615af9..a86972b 100644 --- a/help/enrollment/with-external-sso-google-microsoft-custom.md +++ b/using-defguard-for-end-users/enrollment/with-external-sso-google-microsoft-custom.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/using-defguard-for-end-users/enrollment/with-external-sso-google-microsoft-custom +--- + # With external SSO (Google/Microsoft/Custom) {% hint style="info" %} @@ -18,4 +25,4 @@ Now log in with your SSO and after successful login process, you will receive in
-Download the [Defguard desktop client](https://defguard.net/download/), and [enter _Instance URL_ and _token_ shown on this screen - more details here](broken-reference). +Download the [Defguard desktop client](https://defguard.net/download/), and [enter _Instance URL_ and _token_ shown on this screen - more details here](https://github.com/DefGuard/docs/blob/v1.6/using-defguard-for-end-users/enrollment/broken-reference/README.md). diff --git a/help/enrollment/with-internal-defguard-sso.md b/using-defguard-for-end-users/enrollment/with-internal-defguard-sso.md similarity index 90% rename from help/enrollment/with-internal-defguard-sso.md rename to using-defguard-for-end-users/enrollment/with-internal-defguard-sso.md index 71c28cd..5cf9f28 100644 --- a/help/enrollment/with-internal-defguard-sso.md +++ b/using-defguard-for-end-users/enrollment/with-internal-defguard-sso.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/using-defguard-for-end-users/enrollment/with-internal-defguard-sso +--- + # With internal Defguard SSO Defguard provides **a secure remote enrollment process (remote registration and account activation)**, during which the user can: @@ -35,7 +42,7 @@ What is great about this is that after the enrollment process is done - the desk When accessing the enrollment service in the browser, the process is extended with the possibility to configure the **initial VPN device/access manually.** {% hint style="info" %} -Even if the user will do enrollment in the browser - the desktop client can be configured later by using: [Remote desktop client activation.](../../admin-and-features/wireguard/remote-desktop-activation.md) +Even if the user will do enrollment in the browser - the desktop client can be configured later by using: [Remote desktop client activation.](../../features/wireguard/remote-desktop-activation.md) {% endhint %} ## User onboarding after enrollment diff --git a/using-defguard-for-end-users/mobile-client/README.md b/using-defguard-for-end-users/mobile-client/README.md new file mode 100644 index 0000000..5c833f8 --- /dev/null +++ b/using-defguard-for-end-users/mobile-client/README.md @@ -0,0 +1,30 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/using-defguard-for-end-users/mobile-client +--- + +# Mobile Client + +### Installation + +Mobile applications are available in the official app stores for [Android](https://play.google.com/store/apps/details?id=net.defguard.mobile) and [iOS](https://apps.apple.com/us/app/defguard-vpn-client/id6748068630). + +### Guides + +These guides explain how to use the Defguard Mobile to connect securely to VPN locations within your Defguard instance. It covers the entire process, from installation, adding new instances, connecting to locations, to managing your VPN connection settings. + +* [Instance adding guide](instance-adding.md#adding-instance-during-enrollment) +* [Connecting to Instance guide](instance-connect.md#connecting-to-instance) +* [Managing Instance guide](instance-manage.md#managing-your-instance) + +### Automatic configuration update + +When the configuration of an Instance is being updated (for e.g. switching from no-MFA → internal-MFA), mobile client **does** **not** refresh the Instance configuration automatically if the **app is opened**.\ +This is an intended behaviour. + +If you want to manually update your Instance perform: + +* **Manual pull-to-refresh** on the instance screen. +* **Restart of the application** (reopening the app) diff --git a/help/mobile-client/instance-adding.md b/using-defguard-for-end-users/mobile-client/instance-adding.md similarity index 69% rename from help/mobile-client/instance-adding.md rename to using-defguard-for-end-users/mobile-client/instance-adding.md index 625d52e..cf1d7a5 100644 --- a/help/mobile-client/instance-adding.md +++ b/using-defguard-for-end-users/mobile-client/instance-adding.md @@ -1,24 +1,34 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/using-defguard-for-end-users/mobile-client/instance-adding +--- -## Adding instance during the enrollment +# Adding new Instance -In this guide, you will learn how to add Instance in mobile app. +In this guide, you will learn how to add Instance in mobile app. -If you are after the enrollment process, please follow [this guide](#adding-instance-in-defguard) +If you are after the enrollment process, please follow [this guide](instance-adding.md#adding-instance-in-defguard) -### Enrollment via external SSO +## Enrollment via external SSO 1. Go to your enrollment page. Click **Select** under "Enrollment process". -
+ +
2. In this example we use Google as OIDC provider so our button is "Sign in with Google". Your organization can use different OIDC provider. -
+ +
3. You will be redirected to your OIDC provider login page, please log in. After doing this, you will be redirected and shown a screen with **URL, Token and QR Code**. -
+ +
4. Open Defguard Mobile on your smartphone 5. Click **Scan QR Code** -
+ +
6. Scan QR generated in step 3. 7. Enter the name of your device. For example "iPhone 11" @@ -28,43 +38,49 @@ If you are after the enrollment process, please follow [this guide](#adding-inst If you can't scan QR Code, select **Add Instance Manually** in **step 5** and enter URL and Token from **step 3**. {% endhint %} +## Enrollment via Email - -### Enrollment via Email Find enrollment **Instance URL** and **Token** in your "Defguard user enrollment" email. It should look like this: -
+ +
If you want to enroll via Web Browser, click **Start enrollment** or: + 1. Go to your enrollment page. Click **Select** under "Enrollment process". -
+ +
2. Enter your **Token** and click **Send**. -
-Now, follow [Enrollment via Web Browser](#enrollment-via-web-browser) guide. +
+Now, follow [Enrollment via Web Browser](instance-adding.md#enrollment-via-web-browser) guide. -### Enrollment via Web Browser +## Enrollment via Web Browser -1. Upon starting enrollment process you will see something like this: -**Before proceeding, read the text carefully, as it may contain important information given by your administrator,** then click **Next**. -
+1. Upon starting enrollment process you will see something like this: **Before proceeding, read the text carefully, as it may contain important information given by your administrator,** then click **Next**. +
2. In this step you can optionally enter your phone number after entering it. Proceed by clicking the **Next** button. -
+ +
3. Now, you need to set up your password. After entering the password, proceed by clicking **Next**. -
-4. This is the step where we can add our mobile device. Enter the name of your device, then click **Create Configuration**. -
+
+ +4. This is the step where we can add our mobile device. Enter the name of your device, then click **Create Configuration**. -5. You will see a screen like this. -
+
+ +5. You will see a screen like this. + +
6. Open Defguard on your mobile device. Click **Scan QR Code**, and scan the code from **step 5**. -
+ +
7. After scanning the QR code, enter the name of your device and confirm. @@ -72,25 +88,26 @@ Now, follow [Enrollment via Web Browser](#enrollment-via-web-browser) guide. If you can't scan QR Code, select **Add Instance Manually** in **step 6** and enter URL and Token from **step 5**. {% endhint %} - - -### Adding Instance in Defguard - +## Adding Instance in Defguard 1. Log in to your Defguard account. 2. Go to **My Profile** tab. 3. Click **Add new device** button inside **User Devices** list. +
-4. Select **Remote Device Activation** and click **Next**. +4. Select **Remote Device Activation** and click **Next**. +
5. After that you will see URL, Token and QR Code. **Take a screenshot of QR code**, we will need it in next step. +
6. Open Defguard Mobile on your smartphone 7. Click **Scan QR Code** -
+ +
8. Scan QR generated in step 5. 9. Enter the name of your device. For example "iPhone 11" diff --git a/help/mobile-client/instance-connect.md b/using-defguard-for-end-users/mobile-client/instance-connect.md similarity index 74% rename from help/mobile-client/instance-connect.md rename to using-defguard-for-end-users/mobile-client/instance-connect.md index b2bacef..c539288 100644 --- a/help/mobile-client/instance-connect.md +++ b/using-defguard-for-end-users/mobile-client/instance-connect.md @@ -1,20 +1,29 @@ -## Connecting to Instance +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/using-defguard-for-end-users/mobile-client/instance-connect +--- + +# Connecting to Instance In this guide, you will learn how to connect to location. If you haven't added an instance yet, follow [this guide](instance-adding.md#adding-instance-during-the-enrollment). -### Connecting to location without MFA +## Connecting to location without MFA 1. Open Defguard 2. Click on Instance you want to connect to. +
3. Click **"Connect"** next to location you want to use. +
{% hint style="info" %} The first time you connect, app will ask whether you want to route **predefined traffic** or **all traffic**. You will see screen like this: -
+ * **Predefined traffic** will only route traffic specified by your administrator. * **All traffic** will route everything through VPN tunnel. @@ -22,49 +31,45 @@ The first time you connect, app will ask whether you want to route **predefined You can select **Remember my choice** if you don't want to be asked again. If you want to change your traffic routing method after your first connection go to [this article](instance-manage.md#changing-traffic-routing-method-after-first-connection) - - {% endhint %} 4. Choose your routing method 5. Confirm + {% hint style="warning" %} Your phone will need to add new VPN configuration, you will see popup like this: -
+ + Please click **Allow**, without this permission, Defguard cannot establish VPN connection. {% endhint %} - {% hint style="info" %} If your location does not use MFA, your VPN connection should be established immediately after confirming your routing method. {% endhint %} - {% hint style="info" %} Some VPN locations require extra security when connecting. This is called MFA (Multi-Factor Authentication). There are two types: * Internal MFA: You confirm your identity directly in the app, for example by entering a code from your Authenticator App or email. * External MFA: You are redirected to a secure login page (like Google or Microsoft) outside the app to confirm your identity. - {% endhint %} - {% hint style="warning" %} -If your location is using MFA please go to [section 3.2 "Connecting to location with MFA](#connecting-to-location-with-mfa) +If your location is using MFA please go to [section 3.2 "Connecting to location with MFA](instance-connect.md#connecting-to-location-with-mfa) {% endhint %} - -### Connecting to location with MFA +## Connecting to location with MFA 1. Open Defguard 2. Go to **Instances** and click **Connect** next to location you want to use. -
+ +
{% hint style="info" %} The first time you connect, app will ask whether you want to route **predefined traffic** or **all traffic**. You will see screen like this: -
+ * **Predefined traffic** will only route traffic specified by your administrator. * **All traffic** will route everything through VPN tunnel. @@ -72,59 +77,54 @@ The first time you connect, app will ask whether you want to route **predefined You can select **Remember my choice** if you don't want to be asked again. If you want to change your traffic routing method after your first connection go to [this article](instance-manage.md#changing-traffic-routing-method-after-first-connection) - - {% endhint %} -3. Choose your routing method, and confirm. -Depending on your location settings you will need to authenticate with [external](#external-mfa) or [internal](#internal-mfa) MFA. +3. Choose your routing method, and confirm. +Depending on your location settings you will need to authenticate with [external](instance-connect.md#external-mfa) or [internal](instance-connect.md#internal-mfa) MFA. -#### External MFA +### External MFA If the VPN location requires OpenID for authentication (external MFA) you will see screen like this: -
-Click **Authenticate with OpenID** and you will be redirected to a secure login page (for example Google/Microsoft). Follow the instructions on the screen to log in. After successful authentication please return to Defguard. -In the app you will see screen like this: +
+ +Click **Authenticate with OpenID** and you will be redirected to a secure login page (for example Google/Microsoft). Follow the instructions on the screen to log in. After successful authentication please return to Defguard. In the app you will see screen like this:
After successful authentication, return to Defguard Mobile, your connection will be established automatically. - -#### Internal MFA +### Internal MFA {% hint style="warning" %} When connecting with MFA for the first time, you will have the option to select **Remember my choice**. Select this option if you want to always use this method for this location. {% endhint %} -1. If you are connecting for first time, or if you have not clicked **Remember my choice** during previous connection, you will need to choose your MFA method. -
+1. If you are connecting for first time, or if you have not clicked **Remember my choice** during previous connection, you will need to choose your MFA method. + +
2. Choose method configured for your account, and click **Connect**. - - If you're using "Email" method, please enter code sent to your email. - - If you're using "Authenticator App", please enter code generated within your authenticator app. + * If you're using "Email" method, please enter code sent to your email. + * If you're using "Authenticator App", please enter code generated within your authenticator app. + {% hint style="info" %} -If you don't know how to setup or use your **Authenticator App** please check [this article](/help/setting-up-2fa-mfa.md#setting-up-2famfa) for detailed information. +If you don't know how to setup or use your **Authenticator App** please check [this article](../setting-up-2fa-mfa.md#setting-up-2famfa) for detailed information. {% endhint %} -3. After this step, your connection will be established immediately. +3. After this step, your connection will be established immediately. -### Disconnecting from VPN +## Disconnecting from VPN To disconnect from a VPN location in Defguard: -1. Open Defguard. +1. Open Defguard. 2. Go to the active instance 3. Click **Disconnect** button next to the location you are currently connected to. -
+ +
+ {% hint style="info" %} After disconnecting, your device will stop sending traffic through the VPN and return to your regular internet connection. {% endhint %} - - - - - - diff --git a/help/mobile-client/instance-manage.md b/using-defguard-for-end-users/mobile-client/instance-manage.md similarity index 57% rename from help/mobile-client/instance-manage.md rename to using-defguard-for-end-users/mobile-client/instance-manage.md index 7428523..7c2f0b2 100644 --- a/help/mobile-client/instance-manage.md +++ b/using-defguard-for-end-users/mobile-client/instance-manage.md @@ -1,32 +1,39 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/using-defguard-for-end-users/mobile-client/instance-manage +--- -## Managing your instance +# Managing your Instance In this guide you will learn how to manage your instances. If you haven't added your instance yet, follow [this guide](instance-adding.md#adding-instance-in-defguard) -### Changing traffic routing method after first connection +## Changing traffic routing method after first connection 1. Open Defguard. 2. Go to **Instances** in the app menu. 3. Press & Hold the **Connect** button next to the location you want to update. 4. When the popup appears, look for the option **Select Traffic Routing**. -
+ +
5. You will see this: -
-6. Choose method and click **Connect** +
+6. Choose method and click **Connect** -### Changing MFA method after first connection +## Changing MFA method after first connection 1. Go to **Instances** in the app menu. 2. Press & Hold **Connect** button next to location name and wait until popup shows. -
+
3. Click **Select MFA Method**. 4. You will see this: -
-5. Choose method and click **Connect** +
+5. Choose method and click **Connect** diff --git a/using-defguard-for-end-users/mobile-client/using-biometry-as-mfa-method.md b/using-defguard-for-end-users/mobile-client/using-biometry-as-mfa-method.md new file mode 100644 index 0000000..e56f6ee --- /dev/null +++ b/using-defguard-for-end-users/mobile-client/using-biometry-as-mfa-method.md @@ -0,0 +1,32 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/using-defguard-for-end-users/mobile-client/using-biometry-as-mfa-method +--- + +# Using Biometry as MFA method + +In this guide, you will learn how to use biometry as MFA method when connecting to VPN location. + +### Setting up Biometry + +{% hint style="warning" %} +Biometry can be configured during adding Instance. If you skip this step, you will not be able to add biometry later, only removing and adding Instance again will trigger this modal. +{% endhint %} + +1. First, start the process of adding a new Instance ([check this article](instance-adding.md#adding-instance-in-defguard)). You will see this screen. + +
+ +2. Click **Yes**, after confirming your biometry method, you will see the following screen. + +
+ +Biometry is now configured, and will be used as a primary MFA method. If you want to change your MFA method, please check [this guide](instance-manage.md#changing-mfa-method-after-first-connection), you will be able to use Biometry as your third MFA method. + +
+ +### Connecting to MFA location with biometry enabled + +The whole process is the same as before, but instead of using TOTP/Email codes, you authenticate with biometry. For a detailed guide about connecting to Location, [check this article](instance-connect.md#connecting-to-location-with-mfa). diff --git a/help/overwiew.md b/using-defguard-for-end-users/overwiew.md similarity index 84% rename from help/overwiew.md rename to using-defguard-for-end-users/overwiew.md index bf073e0..4a4dd57 100644 --- a/help/overwiew.md +++ b/using-defguard-for-end-users/overwiew.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/using-defguard-for-end-users/overwiew +--- + # Overview ## Welcome to Defguard end-user documentation diff --git a/help/setting-up-2fa-mfa.md b/using-defguard-for-end-users/setting-up-2fa-mfa.md similarity index 94% rename from help/setting-up-2fa-mfa.md rename to using-defguard-for-end-users/setting-up-2fa-mfa.md index 374f9fb..407bd2a 100644 --- a/help/setting-up-2fa-mfa.md +++ b/using-defguard-for-end-users/setting-up-2fa-mfa.md @@ -1,3 +1,10 @@ +--- +metaLinks: + alternates: + - >- + https://app.gitbook.com/s/e86iamwJVSYnIRsyVEAV/using-defguard-for-end-users/setting-up-2fa-mfa +--- + # Setting up 2FA/MFA Go to _My Profile_ and click _Edit:_