Find a file
2020-04-09 17:03:12 +02:00
core Fix linter errors 2020-04-09 17:01:46 +02:00
detection/dga Restructure detection packages 2019-11-07 16:36:57 +01:00
firewall Implement review, use local var for pkt.Info 2020-04-08 15:19:00 +02:00
intel Fix geoip database upgrade handling 2020-04-03 14:23:02 +02:00
nameserver Save blocked DNS queries 2020-04-08 14:07:59 +02:00
netenv Fix linter errors 2020-04-09 17:01:46 +02:00
network Remove old dns queries from DB 2020-04-08 14:08:13 +02:00
pmctl Update description of --data flag 2020-04-06 12:48:11 +02:00
process Rework Communication+Link to Connection 2020-04-07 17:30:33 +02:00
profile Rework Communication+Link to Connection 2020-04-07 17:30:33 +02:00
resolver Fix logging prefixes in resolver package 2020-04-02 17:08:43 +02:00
status Fix dependency graph and linter errors 2020-04-02 17:09:15 +02:00
ui Fix dependency graph and linter errors 2020-04-02 17:09:15 +02:00
updates Change error msg and use module online check in TriggerUpdate() 2020-04-06 13:14:45 +02:00
.ci-inject-internal-deps.sh Inject portbase dependency in CI testing 2020-04-08 14:20:44 +02:00
.gitattributes Add testing and CI integration 2019-10-25 13:36:11 +02:00
.gitignore Update .gitignore 2019-07-02 13:01:02 +02:00
.golangci.yml Update dependency mgmt and CI 2020-03-20 23:06:38 +01:00
.travis.yml Fix install cmd 2020-04-09 17:03:12 +02:00
AUTHORS Add AUTHORS notice 2019-01-24 15:58:58 +01:00
build Update org import paths 2019-07-02 15:12:31 +02:00
CODE_OF_CONDUCT.md Add CoC [off topic] 2019-10-25 13:36:32 +02:00
Gopkg.lock Update dependency mgmt and CI 2020-03-20 23:06:38 +01:00
Gopkg.toml Update dependency mgmt and CI 2020-03-20 23:06:38 +01:00
LICENSE Create LICENSE 2019-01-24 15:46:02 +01:00
main.go Add subsystems and clean up module dependencies 2020-04-01 17:14:33 +02:00
pack Add pack sripts 2019-03-13 10:47:49 +01:00
pack_core Rename components 2019-07-04 13:57:55 +02:00
README.md Allow --data to be specified via environment variable PORTMASTER_DATA 2020-04-06 09:10:09 +02:00
test Always run golangci-lint, as the service is going offline 2020-04-09 17:03:12 +02:00
TRADEMARKS Add TRADEMARKS notice 2019-01-24 16:33:00 +01:00

Portmaster

The Portmaster enables you to protect your data on your device. You are back in charge of your outgoing connections: you choose what data you share and what data stays private. Read more on docs.safing.io.

Current Status

NOTE: Portmaster is currently in development freeze in order to focus on our upcoming privacy network (Codename: Gate17)

The Portmaster is currently in alpha. Expect dragons.
Supported platforms:

  • linux_amd64
  • windows_amd64 (soon)
  • darwin_amd64 (later)

Using the Alpha Version

Must-Know Basics

The Portmaster is all about protecting your privacy. As soon as it starts, it will start to intercept network connections. If other programs are already running, this may cause them to lose Internet connectivity for a short duration.

The main way to configure the application firewall is by configuring application profiles. For every program that is active on the network the Portmaster automatically creates a profile for it the first it's seen. These profiles are empty at first and only fed by a fallback profile. By changing these profiles in the app, you change what programs are allowed to do.

You can also see what is going on right now. The monitor page in the app lets you see the network like the Portmaster sees it: Communications represent a logical connection between a program and a domain. These second level objects group Links (physical connections: IP->IP) together for easier handling and viewing.

The Portmaster consists of three parts:

  • The core (ie. the daemon) that runs as an administrator and does all the work. (sudo ./pmctl run core --data=/opt/pm_db)
  • The app, a user interface to set preferences, monitor apps and configure application profiles (sudo ./pmctl run app --data=/opt/pm_db)
  • The notifier, a little menu/tray app for quick access and notifications (sudo ./pmctl run notifier --data=/opt/pm_db)

If you want to know more, here are the docs.

Installation

The pmctl command will help you get up and running. It will bootstrap your the environment and download additional files it needs. All commands need the --data parameter with the database location, as this is where all the data and also the binaries live.

Just download pmctl from the releases page and put it somewhere comfortable. You may freely choose where you want to put the database - it needs to be the same for all commands. Here we go - run every command in a seperate terminal window:

# Either export the PORTMASTER_DATA environment variable or add
# --data=/opt/pm_db to all commands below. If you use pmctl a
# lot you may move the export line to your ~/.bashrc
export PORTMASTER_DATA=/opt/pm_db

# start the portmaster:
sudo ./pmctl run core
# this will add some rules to iptables for traffic interception via nfqueue (and will clean up afterwards!)
# already active connections may not be handled correctly, please restart programs for clean behavior

# then start the app:
./pmctl run app

# and the notifier:
./pmctl run notifier

Feedback

We'd love to know what you think, drop by on our forum and let us know!
If you want to report a bug, please open an issue on Github.

Documentation

Documentation in progress can be found here: docs.safing.io

Usage Dependencies

Linux

  • libnetfilter_queue
    • debian/ubuntu: sudo apt-get install libnetfilter-queue1
    • fedora: sudo yum install libnetfilter_queue
    • arch: sudo pacman -S libnetfilter_queue
  • Network Manager (optional)

Windows

  • Windows 7 (with update KB3033929) or up
    • KB3033929 (a 2015 security update) is required for correctly verifying the driver signature
  • Windows Server 2016 systems must have secure boot disabled. (clarification needed)

Build Dependencies

Linux

  • libnetfilter_queue development files
    • debian/ubuntu: sudo apt-get install libnetfilter-queue-dev
    • fedora: ?
    • arch: sudo pacman -S libnetfilter_queue

TCP/UDP Ports

The Portmaster (with Gate17) uses the following ports:

  • 17 Gate17 port for connecting to Gate17 nodes
  • 53 DNS server (local only)
  • 717 Gate17 entrypoint as the local endpoint for tunneled connections (local only)
  • 817 Portmaster API for integration with UI elements and other helpers (local only)

Learn more about why we chose these ports.

Gate17 nodes additionally uses other common ports like 80 and 443 to provide access in restricted network environments.