AppArmor bloqueia a criação de log através do iptables para a conta de convidado - Como habilitar?

3

Para registrar o uso da Internet (URLs visitadas) da minha conta de convidado local, fiz a pergunta Monitor visitou sites da conta de convidado por meio de qualquer navegador e depois de atribuir a conta de convidado o fixo UID 499 e configurar a regra iptables abaixo, eu não estou recebendo as mensagens de log em /var/log/kern.log mas uma mensagem por apparmor que bloqueou a tentativa de registro.

Como eu digo ao AppArmor para permitir que a conta de convidado (nome aleatório, mas UID fixo) registre seu uso de rede através de iptables ?

A regra iptables que configurei:

sudo iptables -A OUTPUT -m owner --uid-owner 499 -j LOG --log-prefix='[GUEST INTERNET ACCESS] '

Uma linha de exemplo das mensagens que aparecem em /var/log/kern.log (reformatadas para melhor legibilidade):

Nov 18 11:19:22 wolf-pack kernel: 
 [ 1030.063374] audit: type=1400 audit(1447841962.731:164): 
   apparmor="DENIED" 
   operation="connect"
   profile="/usr/lib/lightdm/lightdm-guest-session"
   name="/run/systemd/journal/stdout"
   pid=4693
   comm="dbus-daemon"
   requested_mask="w"
   denied_mask="w"
   fsuid=499
   ouid=0

Outras informações do sistema:

$ uname -a
Linux wolf-pack 4.2.0-18-generic #22-Ubuntu SMP Fri Nov 6 18:25:50 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 15.10
Release:    15.10
Codename:   wily

$ unity --version
unity 7.3.2

$ apt-cache policy apparmor | grep Installed
  Installed: 2.10-0ubuntu6

$ iptables --version
iptables v1.4.21

A saída de sudo apparmor_status :

apparmor module is loaded.
23 profiles are loaded.
23 profiles are in enforce mode.
   /sbin/dhclient
   /usr/bin/evince
   /usr/bin/evince-previewer
   /usr/bin/evince-previewer//sanitized_helper
   /usr/bin/evince-thumbnailer
   /usr/bin/evince-thumbnailer//sanitized_helper
   /usr/bin/evince//sanitized_helper
   /usr/lib/NetworkManager/nm-dhcp-client.action
   /usr/lib/NetworkManager/nm-dhcp-helper
   /usr/lib/connman/scripts/dhclient-script
   /usr/lib/cups/backend/cups-pdf
   /usr/lib/lightdm/lightdm-guest-session
   /usr/lib/lightdm/lightdm-guest-session//chromium
   /usr/lib/telepathy/mission-control-5
   /usr/lib/telepathy/telepathy-*
   /usr/lib/telepathy/telepathy-*//pxgsettings
   /usr/lib/telepathy/telepathy-*//sanitized_helper
   /usr/lib/telepathy/telepathy-ofono
   /usr/sbin/cups-browsed
   /usr/sbin/cupsd
   /usr/sbin/cupsd//third_party
   /usr/sbin/ippusbxd
   /usr/sbin/tcpdump
0 profiles are in complain mode.
6 processes have profiles defined.
6 processes are in enforce mode.
   /sbin/dhclient (1138) 
   /usr/lib/telepathy/mission-control-5 (4700) 
   /usr/sbin/cups-browsed (777) 
   /usr/sbin/cupsd (5626) 
   /usr/sbin/cupsd (5651) 
   /usr/sbin/cupsd (5652) 
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.
    
por Byte Commander 18.11.2015 / 12:08

1 resposta

2

Acho que sua intenção é clara aqui e na outra pergunta à qual você se vinculou: registrar URLs de sites visitados por qualquer pessoa que esteja usando qualquer aplicativo como usuário convidado.

Sugerir o log do iptables para realizar esta tarefa não está correto. O iptables (sem algumas extensões obscuras que limitam o desempenho) funciona no protocolo IP, não no nível do aplicativo.

Eu também vi sugestões nos URLs sugeridos como comentários - os respondentes sugeriram apenas capturar pacotes com sinalizadores SYN (novas conexões). Isso também resulta de um mal-entendido descrito acima.

A maneira de conseguir o que você quer é:

  1. Instale um proxy da Web (de preferência leve, como tinyproxy).
  2. Adicione regras de iptables que redirecionam as conexões de saída feitas por apenas um usuário específico para as portas 80,443 / tcp para o proxy local.

O que eu tinha em mente é descrito aqui (não é o meu post). Dessa forma, você obtém um log de proxy da web que tem todas as solicitações HTTP registradas. Você não receberá registros relacionados ao tráfego protegido por SSL, o que é bom.

Para reiterar: URLs não fazem parte da estrutura de cabeçalho IP ou TCP, portanto, algo trabalhando no nível IP / TCP não mostrará esses dados, a menos que tenha algum dissector TCP (tcpdump / wireshark são capazes de fazer isso, mas não apenas iptables).

    
por Marcin Kaminski 29.11.2015 / 14:51