AppArmor를 통해 네트워크에 대한 애플리케이션 액세스를 거부하는 방법은 무엇입니까?

AppArmor를 통해 네트워크에 대한 애플리케이션 액세스를 거부하는 방법은 무엇입니까?

환경:

OS: Debian GNU/Linux 9.3 (stretch)
Kernel parameter: security=apparmor

내 테스트 프로필은 다음과 같습니다(aa-genprof에서 생성).

/etc/apparmor.d/usr.bin.telnet.netkit

#include <tunables/global>

/usr/bin/telnet.netkit {
  #include <abstractions/base>

  /lib/x86_64-linux-gnu/ld-*.so mr,
  /usr/bin/telnet.netkit mr,

  deny network,
}

효과적인 방법:

sudo systemctl reload apparmor.service

AppArmor 상태:

$ sudo aa-status | grep telnet
   /usr/bin/telnet
   /usr/bin/telnet.netkit

하지만 텔넷 프로그램을 테스트할 때:

$ telnet.netkit 127.0.0.1 22
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
SSH-2.0-OpenSSH_7.4p1 Debian-10+deb9u2

네트워크 액세스는 거부되지 않습니다.

프로세스 상태는 다음과 같습니다.

$ ps auxZ | grep -v unconfined | grep telnet
/usr/bin/telnet.netkit (enforce) test    10410  0.0  0.0  19504  2852 pts/1    S+   18:26   0:00 telnet.netkit 127.0.0.1 22

네트워크 통계:

$ netstat -nap | grep telnet
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 127.0.0.1:56710         127.0.0.1:22            ESTABLISHED 10410/telnet.netkit

프로필에 무슨 문제가 있는지 알아내는 데 도움을 줄 수 있는 사람이 있나요? 감사합니다!

답변1

내가 올바르게 읽었다면 데비안을 실행하고 있는 것입니다.

문제는 데비안의 커널에 네트워크 연결을 차단하는 데 필요한 코드가 없다는 것입니다(D-Bus 완화와 동일). 패치가 메인라인이 아니기 때문입니다(그러나 이를 변경하기 위한 작업이 있다는 것을 알고 있습니다).

관련 정보