Commit graph

1138 commits

Author SHA1 Message Date
Gustavo Iñiguez Goia
60414931d6 when deleting a rule stop lists of domains monitor 2021-05-25 22:21:05 +02:00
Gustavo Iñiguez Goia
2c1f8e1d8c ui: added description to the .desktop file
closes #422
2021-05-23 16:14:36 +02:00
Gustavo Iñiguez Goia
0464001501
Merge pull request #418 from ovari/master
Update opensnitch-hu_HU.ts
2021-05-20 23:05:04 +02:00
ovari
cbabc84076
Update opensnitch-hu_HU.ts 2021-05-21 06:57:25 +10:00
ovari
5ae629bde4
Update opensnitch-hu_HU.ts 2021-05-20 19:49:23 +10:00
Gustavo Iñiguez Goia
259a02026c
Merge pull request #417 from raboof/add-gobpf-to-go.mod
Add gobpf to go.mod
2021-05-19 21:51:24 +02:00
Arnout Engelen
356428b6c9
Add gobpf to go.mod
gobpf was introduced in #397 but not added to go.mod yet
2021-05-19 21:21:27 +02:00
Gustavo Iñiguez Goia
6ea63f72dc make "linux kernel" connections configurable
Sometimes when a new connection is about to be established, we don't get
the PID of the process using the eBPF proc monitor method. But in some
rare situations, the kernel still holds information about the connection
(sock_diag struct basically). We assume that these connections are
initiated from kernel space.

Per some debugging, this doesn't seem to be always the root cause, so
these connections will only be shown if InterceptUnknown config field is
set to true.
2021-05-16 23:58:28 +02:00
Gustavo Iñiguez Goia
423dbd6ff3 deb,rpm: minor changes to ease packing 2021-05-16 23:55:34 +02:00
Gustavo Iñiguez Goia
050292601e translations: deleted hu_HU file from wrong directory 2021-05-14 01:57:18 +02:00
ovari
5be9911f00
Add translation template for hu_HU and sort TRANSLATORS alphabetically (#411)
* Update opensnitch_i18n.pro

List `TRANSLATIONS` alphabetically

* Create opensnitch-hu_HU.ts
2021-05-13 23:34:56 +02:00
Gustavo Iñiguez Goia
03f378687b updated translation files, added ro_RO and hu_HU
New translation files not yet translated.
2021-05-12 21:06:20 +02:00
Gustavo Iñiguez Goia
1be19788ed ui: updated spanish translation 2021-05-10 21:37:21 +02:00
Flávio Costa
49cd9052eb
Update Brazilian Portuguese translation (#409)
* Update Brazilian Portuguese translation

* Update Brazilian Portuguese translation
2021-05-10 21:31:57 +02:00
Gustavo Iñiguez Goia
f0b4d7ab68 ui, systray menu: fixed translations
translations must occur inside __init__():
2021-05-09 23:03:17 +02:00
Gustavo Iñiguez Goia
0e6489bab7
Update i18n instructions 2021-05-08 00:06:56 +02:00
Gustavo Iñiguez Goia
2e42e989d4 Bump versions to 1.4.0rc2
As we've added eBPF interception method, we need go iovisor ebpf package,
which is not packaged for Debian yet, so the way I was compiling it
differs a little bit (instead of using gbp buildpackage,
dpkg-buildpackage is used).

Aside from that, there'll be a new eBPF module (.o ELF), which must be
packaged with the packages. Will be compiled on the fly, but maybe it
could be hosted in the repo, because it won't change that much.
2021-05-07 21:24:42 +02:00
Gustavo Iñiguez Goia
042b04e3fb ui: main window improvements
- disable clicks when the user enters into the details of an item
  (process, host, user, etc).
- fixed displaying the button to inspect a process.
- improved listing connections of a process.
2021-05-01 01:29:30 +02:00
Gustavo Iñiguez Goia
dc56be495c ui: display 50 events by default, fixed pop-up crash
- By default there was no limit of events to display. If the user had
  the GUI opened for a long period of time, that could lead to an
  excessive CPU usage and thus a bad user experience. So by default
  set it to 50.
- pop-ups: Fixed crash when getting malformed icons from .desktop
  files.
2021-04-27 01:29:05 +02:00
Gustavo Iñiguez Goia
e05658226c
Merge pull request #383 from raboof/allow-newer-grpcio-tools
Allow using newer grpcio-tools
2021-04-27 01:14:14 +02:00
Arnout Engelen
517ecd7e13
Allow using newer grpcio-tools
My OS comes with grpcio-tools 1.36.1, which seems to work fine, so it
would be nice to allow the ui to use that instead of building 1.10.1
specifically for opensnitch.
2021-04-24 21:05:02 +02:00
Gustavo Iñiguez Goia
82ca19a190 ui: configure more options from the preferences
- pop-ups: allow to configure if the "advanced view" is displayed
  by default or not.
- pop-ups: allow to configure 3 more fields to filter connections by.
- services.py: fixed typo that caused an error when displaying a
  message.

closes #399.
2021-04-23 22:25:51 +02:00
Gustavo Iñiguez Goia
05f7e38f9d ebpf: added patch to compile ebpf module for arm 2021-04-21 20:49:31 +02:00
Gustavo Iñiguez Goia
0f7e93acdc fixed parsing /proc/$pid/stat starttime field
On systems that have been running for a long time (for example 552
days) we were failing parsing the starttime field:

```
Could not find or convert Starttime. This should never happen.
Please report this incident to the Opensnitch developers:
strconv.Atoi: parsing "4242026842": value out of range
```

- extra: fixed tests.
2021-04-20 16:31:49 +02:00
Gustavo Iñiguez Goia
80c9519d08 ui: make UI updates on the main thread
- Updates of the GUI must occur on the main thread of the app. AskRule,
  Ping, Subscribe and Notifications runs on a different thread.
- Fixed paused state when the daemon is running (and paused) and the GUI
  is launched.
- Moved functionality to its own file/class.
2021-04-18 17:01:53 +02:00
Gustavo Iñiguez Goia
966342cbbc ui: allow to stop/start interception from systray
- removed unused import time.
- allow to pause/start interception from tray contextual menu.
- improved case when the daemon is in paused state, and the GUI is
  launched.

There's more work yet to do to improve the states when there're several
nodes connected.

closes #398
2021-04-17 22:09:16 +02:00
Gustavo Iñiguez Goia
23b61f5341 ui, pop-ups: allow to choose the position of popups
This feature was disabled on the preferences dialog, it just needed to
be removed or implmented.
2021-04-17 13:07:38 +02:00
Gustavo Iñiguez Goia
49d12612db ui: updated help url, fixed a typo
point help links to evilsocket's repo.
fixed error launching the GUI when there's no systray available.
2021-04-13 00:10:56 +02:00
Gustavo Iñiguez Goia
f288078c0b ui, db: fixed loading db type from saved configuration
If a db from disk was being used, and the user changed it to in-memory,
we were still loading the file from disk.
2021-04-12 17:59:14 +02:00
Gustavo Iñiguez Goia
03e97903d6 ui, prefs/pop-ups: improved layout
specially for non-desktop displays (mobiles), like librem5.
2021-04-12 17:52:27 +02:00
Gustavo Iñiguez Goia
4332469fc2 improved nodes connectivity handling
problem:
 - after losing network connectivity node<->server, the node didn't restore
   the connection. In reality, the connection with the server was not
   closed, but the notifications channel was closed due to inactivity
   after 20s.

set inactivity timeouts to 20s on both node and server. Previous
timeouts were 2h for the main connection and 20s for the streaming
channels (notifications).

- get rid of the logic to determine if the server is alive or not based
  on sending pings.
  Instead, use the connection events when a node connects/disconnects
  (Subscribe).
  The Ping call is still used to send the statistics.

other:
- fixed exception when updating the status of a node.
2021-04-11 20:55:14 +02:00
Gustavo Iñiguez Goia
356e3dc54e ui: fixed notifications and rules editing
- fixed remote nodes rules editing.
- improved notifications when a node is not connected and an action is
  performed on it (edit a rule, disable/enable a rule, etc).
2021-04-08 00:49:49 +02:00
Gustavo Iñiguez Goia
2c1c3b0251 ui,stats: added more options to handle rules in batch
- allow to change duration and action to multiple rules at once.
closes #393
- fixed updating a rule on the db (per node).
- fixed typo.

 #334
2021-04-07 23:14:26 +02:00
Gustavo Iñiguez Goia
c7411a4770 ui, pop-up: improved layout
better layout when there's or there isn't app description.
2021-04-07 19:03:50 +02:00
Gustavo Iñiguez Goia
dbe7861bcb ui: allow to select eBPF method from the GUI
+ fixed getting PID column in order to monitor processes' details.
2021-04-05 13:28:16 +02:00
Gustavo Iñiguez Goia
0a12fc5c73 don't save daemon config if monitor method fails
If we change the monitor method from the GUI, and it fails to start
(eBPF, audit or ftrace), use the old configured method and don't save
the configuration to disk, to avoid configuring a monitor method that
doesn't work.
2021-04-05 13:18:19 +02:00
Gustavo Iñiguez Goia
8ea58ade19 fixed ebpf error logging
+ split functionality into different files.
2021-04-05 12:19:00 +02:00
themighty1
9497cf8394
Use ebpf program to find PID of new connections. (#397)
* Use ebpf program to find PID of new connections.

    before running the branch you have to compile ebpf_prog/opensnitch.c
    opensnitch.c is an eBPF program. Compilation requires getting kernel source.

    cd opensnitch
    wget https://github.com/torvalds/linux/archive/v5.8.tar.gz
    tar -xf v5.8.tar.gz
    patch linux-5.8/tools/lib/bpf/bpf_helpers.h < ebpf_prog/file.patch
    cp ebpf_prog/opensnitch.c ebpf_prog/Makefile linux-5.8/samples/bpf
    cd linux-5.8 && yes "" | make oldconfig && make prepare && make headers_install # (1 min)
    cd samples/bpf && make
    objdump -h opensnitch.o #you should see many section, number 1 should be called kprobe/tcp_v4_connect
    llvm-strip -g opensnitch.o #remove debug info
    sudo cp opensnitch.o /etc/opensnitchd
    cd ../../../daemon

    --opensnitchd expects to find opensnitch.o in /etc/opensnitchd/
    --start opensnitchd with:

    opensnitchd -rules-path /etc/opensnitchd/rules -process-monitor-method ebpf

Co-authored-by: themighty1 <you@example.com>
Co-authored-by: Gustavo Iñiguez Goia <gooffy1@gmail.com>
2021-04-05 11:28:16 +02:00
Gustavo Iñiguez Goia
148526e527
Merge pull request #381 from raboof/support-more-recent-protoc-gen-go
Support more recent protoc-gen-go
2021-04-03 18:10:18 +02:00
Gustavo Iñiguez Goia
e2be2b769a improved monitor method switching (audit)
when switching from audit to another one.
2021-03-30 01:13:02 +02:00
Gustavo Iñiguez Goia
4b0b8ccef0 display an error if a monitor method has not been applied
Sometimes ftrace monitor method fails to apply, but we displayed on the
GUI that it had been applied.
2021-03-29 17:59:09 +02:00
Gustavo Iñiguez Goia
7934dfac7f debs, ui: fixed package creation 2021-03-29 01:54:24 +02:00
Gustavo Iñiguez Goia
879d18f15a ui: fixed monitoring processes details
- ui: fixed error getting the icon of an app.
- ui: fixed getting the list of pids of an app.
- ui: improved proc details start/stop icon behaviour.
- daemon: improved error message when we fail getting the details of a
  process.

others:
 - changed icon search by system-search.
2021-03-29 01:36:41 +02:00
Arnout Engelen
1f26f66e8a
Support more recent protoc-gen-go
When building the project with protoc-gen-go version 1.5.1,
it fails with the following:

```
protoc -I. ui.proto --go_out=plugins=grpc:../daemon/ui/protocol/
protoc-gen-go: unable to determine Go import path for "ui.proto"

Please specify either:
	• a "go_package" option in the .proto source file, or
	• a "M" argument on the command line.

See https://developers.google.com/protocol-buffers/docs/reference/go-generated#package for more information.

--go_out: protoc-gen-go: Plugin failed with status code 1.
```

This can be fixed by adding the full go package as an option in the
proto file. To make sure the code is generated to the correct path,
we also have to add add the `paths=source_relative` option to the
protoc plugin.

After this, the code is generated correctly, but the generated code
references classes like grpc.ClientConnInterface which were introduced
in 1.27.0.
2021-03-28 16:38:21 +02:00
Gustavo Iñiguez Goia
8af290e970 Bump versions to 1.4.0rc1 2021-03-26 00:59:16 +01:00
Gustavo Iñiguez Goia
6048b0ef64 more cache improvements
- don't clean cache by number of items.
- clean inodes from cache every 2' if the descriptor symlink doesn't exist
  anymore, or if the lastSeen time is more than 5 minutes.
- launch cache cleaners before start a new process monitoring method,
  and start it only once for the life time of the daemon.
- do not store in cache the Time objects, only the nanoseconds of
  the last updated time.
- if the inode of a connection is found in cache, reorder the
  descriptors to push the descritptor to the top of the list.
  Also add cached the inode.

It turns out that when a new connection is about to be established,
when the process resolves the domain, the same inode is used to open the
tcp connection to the target. So if it's cached we save CPU cycles.

This also occurs when we block a connection and the process retries it,
or when a connection timeouts and the process retries it
(telnet 1.1.1.1).
2021-03-24 01:16:47 +01:00
Gustavo Iñiguez Goia
7b9a57b788 added -version cli option
closes #374
2021-03-22 17:51:31 +01:00
gnuhead-chieb
f8607d8619
[Locale]Add Japanese Translation (#375)
Added Japanese Translation
2021-03-21 22:23:47 +01:00
Gustavo Iñiguez Goia
630e3717dd auditd: cache new Proc objects 2021-03-21 21:55:59 +01:00
Gustavo Iñiguez Goia
36cdb76113 prevent leaks when reloading domains lists in debug
If the log level was debug, when reloading the lists of domains could
lead to memory leaks.
2021-03-21 21:16:57 +01:00