Nextcloud 14 : mod_security2 Id's

Meine Nextcloud 14 hat nach dem Update nicht richtig funktioniert. Filetree hat sich nich aufgebaut caldav hat nicht mehr funktioniert. Nachdem ich in der VHost folgenden Eintrag hinzugefügt habe hat wieder alles funktioniert.
<IfModule mod_security2.c>
    # Nextcloud
    SecRuleRemoveById 949110 911100 920420
</IfModule>

Grafana : Nach Update keinen Zugriff auf Datenquelle

So nun ist es auch mir mal passiert, nach einem Update von Debian 8.11 auf 9.5 hat das installierte Grafana keinen Zugriff mehr auf die influxdb mehr erhalten. Bei mir war mod_security2 der Grund. Nachdem ich eine neue Regel in die VHost eingetragen habe hat wieder alles funktioniert. Mein Grafana läuft hinter einem SSL Proxy.

Ich hab diese Fehlermeldung erhalten:
Title : 403 Forbidden
Message : You don't have permission to access /grafana/api/datasources/1 on this server.
Konfig in den VHost eintragen.

mod_security2
das sind noch nicht alle id's bin noch am sammeln ;-)
man kann die SecRules auch auf eine Location deaktivieren das ist der schnellere aber auch unsichere Weg

mod_security2_1
modsecurity
Alternativ dazu könnte man das Modul auch deaktivieren, aber Sicherheit geht vor ;-) Für einen Test kann man das mit dem folgenden Befehl erreichen.
a2dismod security2 ; systemctl restart apache2

Ansible : auflisten der remote folder

Hier werden alle remote Ordner aufgelistet unter dem vorgegeben Remote Pfad {{ dst_path }}
    - name: get directories
      shell: ls -1 "{{ dst_path }}"
      register: folders_test
anzeigen der ermittelten Ordner
    - name: show directories
      debug:
        msg: "Folder {{ item }}"
      with_items: "{{ folders_test.stdout_lines }}"

Wireshark : Netzwerkanalyse - Capture Remote Host (Windows)

Man möchte von einem Windows System aus den Netzwerkverkehr auf einem Router der unter Linux läuft analysieren.
Hier hab ich ja beschrieben wie das unter Linux geht, nun hier auch die Version für Windows ;-)
Erstmal muss Wireshark installiert werden, wichtig ist das hier SSHDump mit installiert wird, das ermöglich den Weg den ich hier beschreibe. Das kann während der Installation im Bereich Tools aktiviert werden.

SSHDump Wireshark
Dann starten wir Wireshark und wählen SSH remote capture nachdem wir die Einstellungen vorgenommen haben wird mitgeschnitten.

Wireshark SSH remote capture
Wireshark SSH remote capture configuration
Natürlich muss auch hier tcpdump auf dem Remote System vorhanden sein.

Wireshark : Netzwerkanalyse - Capture Remote Host (*Ubuntu)

Ich habe hier einen kleinen Server am laufen der mir als Gateway dient. Dieser läuft ohne GUI und ein tcpdump ist nicht so schön zu lesen wie der Output von Wireshark. Da ich aber keine GUI installieren wollte der Weg über remote Wireshark ;-)

Wenn noch nicht passiert installieren wir erstmal Wireshark
sudo apt install wireshark
jetzt erstellen wir eine PIPE auf der Kiste auf der Wireshark läuft
mkfifo /tmp/remote-wire
dann können wir auch schon Wireshark starten
wireshark -k -i /tmp/remote-wire
# Erklärung Parameter
# -k starte sofort das capturing
# -i definiert das interface hier ist es die PIPE
jetzt noch eine ssh Verbindung aufbauen und alles in die PIPE leiten
ssh root@GATEWAY-IP "tcpdump -s 0 -U -n -w - -i ens9 not port 22" > /tmp/remote-wire
ens9 ist bei mir die Netzwerkkarte ins Internet.

Auf dem Remote System muss natürlich tcpdump installiert sein.
apt install tcpdump
In meinem Beispiel muss root der ssh Zugang erlaubt werden. Das kann in der Datei /etc/ssh/sshd_config erledigt werden. Dort den Parameter PermitRootLogin auf yes setzen.
PermitRootLogin yes
Der Parameter PermitRootLogin yes sollte nur auf Testsystemen aktiviert sein für einen produktiven Einsatz sollte das NICHT gesetzt werden

Ansible : Schleifen realisieren

Der Eintrag dient mir hauptsächlich als Gedächtnisstütze, braucht man nicht jeden Tag :-)

Eine einfache Schleife mit einem Counter von 1 bis 4 kann man so realisieren.
- hosts: localhost
  tasks:
    - name: loop test
      debug:
        msg: "{{ item }}"
      with_sequence: count=4
Liefert dann
TASK [loop test] ***************************************************************************************************
ok: [localhost] => (item=1) => {
    "msg": "1"
}
ok: [localhost] => (item=2) => {
    "msg": "2"
}
ok: [localhost] => (item=3) => {
    "msg": "3"
}
ok: [localhost] => (item=4) => {
    "msg": "4"
}

Verschachtelte Schleifen mit 2 dics kann man so realisieren (in diesem Beispiel wurden Benutzer die Rechte auf MySQL Datenbanken eingetragen)
- hosts: localhost
  tasks:
    - name: loop test
      debug:
        msg: "name {{ item[0] }} db : {{ item[1] }}.*:ALL"
      with_nested:
        - [ 'user01', 'user02' ]
        - [ 'db01', 'db02', 'db03' ]
Liefert dann
TASK [loop test] ***************************************************************************************************
ok: [localhost] => (item=[u'user01', u'db01']) => {
    "msg": "name user01 db : db01.*:ALL"
}
ok: [localhost] => (item=[u'user01', u'db02']) => {
    "msg": "name user01 db : db02.*:ALL"
}
ok: [localhost] => (item=[u'user01', u'db03']) => {
    "msg": "name user01 db : db03.*:ALL"
}
ok: [localhost] => (item=[u'user02', u'db01']) => {
    "msg": "name user02 db : db01.*:ALL"
}
ok: [localhost] => (item=[u'user02', u'db02']) => {
    "msg": "name user02 db : db02.*:ALL"
}
ok: [localhost] => (item=[u'user02', u'db03']) => {
    "msg": "name user02 db : db03.*:ALL"
}

Jetzt gibt es noch die Möglichkeit mit inner und outer loop zu arbeiten. Gestartet wird dann das playbook outer_loop.yaml

outer_loop.yaml
- hosts: localhost
  tasks:
    - include_tasks: inner_loop.yaml
      with_sequence: count=4
      loop_control:
        loop_var: IDX
inner_loop.yaml
- debug:
    msg: "create directory /opt/{{ item}}-{{ IDX }}"
  with_items:
    - dic1
    - dic2
    - dic3
Das liefert dann
TASK [debug] *******************************************************************************************************
ok: [localhost] => (item=dic1) => {
    "msg": "create directory /opt/dic1-1"
}
ok: [localhost] => (item=dic2) => {
    "msg": "create directory /opt/dic2-1"
}
ok: [localhost] => (item=dic3) => {
    "msg": "create directory /opt/dic3-1"
}

TASK [debug] *******************************************************************************************************
ok: [localhost] => (item=dic1) => {
    "msg": "create directory /opt/dic1-2"
}
ok: [localhost] => (item=dic2) => {
    "msg": "create directory /opt/dic2-2"
}
ok: [localhost] => (item=dic3) => {
    "msg": "create directory /opt/dic3-2"
}

TASK [debug] *******************************************************************************************************
ok: [localhost] => (item=dic1) => {
    "msg": "create directory /opt/dic1-3"
}
ok: [localhost] => (item=dic2) => {
    "msg": "create directory /opt/dic2-3"
}
ok: [localhost] => (item=dic3) => {
    "msg": "create directory /opt/dic3-3"
}

TASK [debug] *******************************************************************************************************
ok: [localhost] => (item=dic1) => {
    "msg": "create directory /opt/dic1-4"
}
ok: [localhost] => (item=dic2) => {
    "msg": "create directory /opt/dic2-4"
}
ok: [localhost] => (item=dic3) => {
    "msg": "create directory /opt/dic3-4"
}

Quellen :
Ansible Documentation - Loops
Ansible Documentation - Complex Loops
“Das einzig sichere System müsste ausgeschaltet, in einem versiegelten und von Stahlbeton ummantelten Raum und von bewaffneten Schutztruppen umstellt sein.”
Gene Spafford (Sicherheitsexperte)