각 프로그램의 인터넷 액세스를 제어하는 ​​방법은 무엇입니까?


59

인터넷에 연결할 수있는 프로그램을 제어하기 위해 소프트웨어를 사용하고 싶습니다. 이 동작은 "방화벽"이라는 단어와 관련이 있지만, 누군가 개인 방화벽을 요구하면 일부 Linux 사용자는 매우 화가납니다. 나는 그런 프로그램을 요구함으로써 당신을 화나게하고 싶지 않습니다.
"보안 포트"또는 개인 방화벽이 Windows에서 약속 한 기타 사항을 원하지 않습니다. 조사 iptables했지만 요구 사항에 맞지 않습니다.

나는 여기에서 훌륭한 답변을 보았습니다 ( "와인 응용 프로그램의 인터넷 액세스를 차단하는 방법" ). 그러나 이것을 설정하는 것은 매우 불편합니다.

각 프로그램이 인터넷에 액세스 할 수 있는지 묻는 소프트웨어가 있습니까?


mac에는 little snitch 라는 소프트웨어 가 있습니다. 윈도우 버전도 있다고 생각합니다.
Alvar

답변:


6

독일어 우분투 포럼 ( Google에서 영어로 번역 된 )에는 Perl 스크립트 가 있습니다. 나는 그것을 시도하지 않았고 스크립트를 자세히 보지 않았지만 아마도 당신에게 효과적 일 것입니다. 설명은 독일어로만되어 있으므로 번역 서비스가 필요할 수 있습니다 (예 : Google 번역; 위 참조).


나는 그것을 볼 것이다. 흥미로운 도구가 될 수 있다는 것은 흥미 롭습니다. 불행히도, gui는 없지만 나를 멈추지 않아야합니다 :)
guerda

34

여전히 이런 종류의 응용 프로그램을 찾고 있다면 현재 해당 응용 프로그램을 정확하게 개발하고 있습니다. http://douaneapp.com/ https://gitlab.com/douaneapp/Douane

내 응용 프로그램은 알 수없는 응용 프로그램을 차단하고 (승인 된 응용 프로그램의 새 버전은 차단됨) 트래픽을 허용 또는 거부할지 묻습니다.

웹 사이트를 보아라 ;-)

스크린 샷


시원한! 나는 또한 ppa를 보았지만 응용 프로그램이 작성되었지만 패키지는 없습니다. 또한 IP가 읽을 수있는 사이트 이름으로 확인되었음을 나타낼 수 있는지 궁금합니다. 그리고 컴파일 지침을 따르고 거기에서 우분투 뎁 패키지에 대한 많은 팁을 보았고 checkinstall을 사용하여 로컬 .deb 패키지 사본을 만들어 업그레이드를 쉽게 관리 (제거 / 설치) 할 것입니다. checkinstall을 사용하여 배포자를 만들 수도 있습니다.
Aquarius Power

Github에서 기능 요청을 열 수 있습니다 ( github.com/Douane/Douane/issues ) :)
ZedTuX

2
어, 정확히 내가 필요한 것 같아요 !! 그러나 우분투에 설치할 패키지를 찾을 수 없습니다.
azerafati

아직 우분투 패키지가 아니십니까?
Anwar

1
Douaneapp.com이 돌아 왔습니다! :)
ZedTuX

26

내가 찾은 문제를 해결하는 편리한 솔루션을. 인터넷을 사용할 수없는 그룹을 만들고이 그룹의 구성원으로 프로그램을 시작하십시오.

  1. 그룹을 만듭니다 no-internet. 마십시오 하지 이 그룹에 가입

    sudo addgroup no-internet
    
  2. 그룹에 속한 모든 프로세스 no-internet가 네트워크를 사용 하지 못하게하는 규칙을 iptables에 추가 합니다 ( ip6tablesIPv6 트래픽도 방지하기 위해 사용 ).

    sudo iptables -A OUTPUT -m owner --gid-owner no-internet -j DROP
    
  3. sudo -g no-internet YOURCOMMAND대신 실행하십시오 YOURCOMMAND.

sudo를 사용하는 래퍼 스크립트를 쉽게 작성할 수 있습니다. 당신은 추가하여 암호 프롬프트를 제거 할 수 있습니다

%sudo     ALL=(:no-internet)      NOPASSWD: ALL

또는 sudo visudo

iptables-saveiptables-restore을 사용하여 방화벽 규칙을 유지 하십시오 .


1
나는 당신의 가이드를 시도했는데 sudo -g no-internet firefox기본보다 빨리 연결됩니다. 작동하지 않습니다.
kenn

1
@kenn 나는 여기서 잘 작동한다고 말할 수 있습니다. 규칙을 만들 때 당신이 잘못하고 있다고 생각합니다. 규칙을 저장하지 않고 스크립트를 실행 가능하게하지 마십시오.
Tim

나는 재부트하고 행운없이 다시 위의 규칙을 적용했다
kenn

1
파이어 폭스에서도 완벽하게 작동했습니다. 감사합니다!
Kostanos

1
이것은 우분투 19.04에서 나에게도 효과가없는 것 같습니다. 재부팅 사이에 변경 사항을 저장하려면 iptables-persistent를 설치해야했습니다. (따라서 위의 솔루션에 추가하고 싶을 수도 있습니다). 그러나 sudo -g no-internet firefox는 Firefox가 인터넷에 액세스하는 것을 제한하지 않습니다. 개념적으로이 솔루션은 작동하는 것처럼 보입니다. 간과되고있는 근본적인 것이 있습니까? 예를 들어 ipv4와 ipv6을 모두 설정해야이 작업이 가능합니까?
PJ Singh

5

우분투에는 이미 방화벽이 ufw있지만 기본적으로 비활성화되어 있습니다. Ubuntu Software Center에서 직접 설치할 수 있는 명령 행 또는 프론트 엔드 인 gufw를 통해이를 활성화하고 사용할 수 있습니다 .

특정 응용 프로그램에 대한 인터넷 액세스를 차단해야하는 경우 LeopardFlower 를 사용해 볼 수 있습니다. LeopardFlower 는 아직 베타 버전이며 Ubuntu Software Center에서 사용할 수 없습니다.


4

다른 사용자로 프로그램을 실행하면 사용자가 아닌 해당 사용자의 구성 파일이 사용됩니다.

방화벽 규칙을 수정하지 않아도되고 수정 sudo된 환경 에서 동일한 사용자 (를 통해 )를 실행하는 솔루션은 다음과 같습니다. 여기서 사용자는 다음 my_usermy_app같습니다.

# run app without access to internet
sudo unshare -n sudo -u my_user my_app

자세한 내용은 참조 man unshare하고 이 답변 .

리눅스 GUI 방화벽

GUI 방화벽을 찾고 있다면 OpenSnitch에서 좋은 결과를 얻었 습니다. 아직 우분투 저장소에 있지 않고 프로덕션 레벨이라고 부르지는 않지만 github 페이지 의 빌드 단계를 따르면 효과적 입니다.


3

@psusi : 사람들이 나쁜 정보를 얻지 못하고 유용한 정보를 얻지 않기를 바랍니다. IPTables를 사용하면이 작업을 수행 할 수 있으므로 "불완전"이라고 생각하지 않습니다. 유스 케이스를 이해하지 않고 "아니오"라고 말하는 것은 다소 좁은 생각입니다. http://www.debian-administration.org/article/120/Application_level_firewalling

bodhi.zazen 편집

참고-이 옵션은 2005 년 IPTABLE에서 제거되었으며이 답변이 게시되기 전 8 년

참조-http: //www.spinics.net/lists/netfilter/msg49716.html

커밋 34b4a4a624bafe089107966a6c56d2a1aca026d4 저자 : Christoph Hellwig 날짜 : Sun Aug 14 17:33:59 2005 -0700

[NETFILTER] : ipt {, 6} 소유자에서 tasklist_lock 남용 제거

수정 불가능한 cmd / sid / pid 일치 를 제거하고 tasklist_lock에 대한 변경 사항을 잠그는 방식에 있습니다.

Signed-off-by: Christoph Hellwig <hch@xxxxxx>
Signed-off-by: Patrick McHardy <kaber@xxxxxxxxx>
Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>

2
이 신고 고려 누구에게 : 이것은 대신 코멘트이어야한다 질문 한 질문에 대한 대답 . @ user141987 iptables그러나 응용 프로그램 별 제한을 구현 하도록 설정하는 방법에 대한 자세한 정보를 제공하기 위해 이것을 확장하는 것이 좋습니다 . 귀하의 답변에 중요한 정보를 포함시키고 참조를 위해 링크를 제공하는 것이 좋습니다.
Eliah Kagan

2
iptables는 응용 프로그램별로 필터링하지 않습니다.
Panther

이 기사는 그러한 옵션이 없기 때문에 잘못된 정보로 보입니다. 과거에 그러한 옵션을 작성하라는 요청이 거부 된 이유는 본질적으로 신뢰할 수 없기 때문입니다. 응용 프로그램은 단순히 이름을 변경할 수 있습니다.
psusi

3
@psusi "커널이 CONFIG_IP_NF_MATCH_OWNER로 컴파일 된 경우 명령별로 패킷을 허용하거나 거부하도록 iptables 방화벽을 구성 할 수 있습니다"라고 말하는 것입니까? 아니면 단순히 대부분의 커널에 옵션이 포함되어 있지 않습니까? 이것이 정확하지 않은 경우,이를 유출시키는 정보원이 있습니까? 또한 응용 프로그램 별 방화벽 제한의 주된 목적은 신뢰할 수없는 응용 프로그램을 완벽하게 안전하게 만들려는 것이 아니라 주로 사용자에게 응용 프로그램의 기본 제공 구성 옵션을 넘어서는 제어 수단을 제공하는 것입니다. )
Eliah Kagan

이 옵션은 spinics.net/lists/netfilter/msg49716.html 이 답변을 받기 8 년 전인 2005 년 커널에서 제거되었으며 반대 주장이 부정확하지만 iptables를 사용하여 애플리케이션을 필터링 할 수 없습니다.
Panther

3

또 다른 옵션은 firejail 입니다. 응용 프로그램이 네트워크를 볼 수 있는지 제어하는 ​​샌드 박스 내에서 응용 프로그램을 실행합니다.

firejail --net=none firefox

이 명령은 인터넷에 액세스하지 않고도 Firefox 브라우저를 시작합니다. 우분투 저장소의 firejail 배포판은 구식 입니다. firejail 홈페이지에서 최신 LTS 버전을 다운로드하십시오.


2

여기 에 게시 된 솔루션 이 좋은 것으로 나타났습니다 . 인터넷 액세스가 허용 되는 사용자 그룹을 만들고이 그룹에 대해서만 액세스를 허용하도록 방화벽 규칙을 설정해야합니다. 응용 프로그램이 인터넷에 액세스하는 유일한 방법은이 그룹의 구성원이 인터넷을 실행하는 것입니다. 로 쉘을 열어이 그룹에서 프로그램을 실행할 수 있습니다 sudo -g internet -s.

위에 링크 한 게시물의 내용을 요약하면 다음과 같습니다.

  1. 쉘에 다음을 입력하여 "인터넷"그룹을 작성하십시오. sudo groupadd internet

  2. 아래 스크립트를 실행할 사용자가의 sudo그룹에 추가되었는지 확인하십시오 /etc/group. 이 파일을 수정하면 아래 스크립트가 작동하기 전에 로그 아웃했다가 다시 로그인해야합니다.

  3. 다음을 포함하는 스크립트를 작성하고 실행하십시오.

    #!/bin/sh
    # Firewall apps - only allow apps run from "internet" group to run
    
    # clear previous rules
    sudo iptables -F
    
    # accept packets for internet group
    sudo iptables -A OUTPUT -p tcp -m owner --gid-owner internet -j ACCEPT
    
    # also allow local connections
    sudo iptables -A OUTPUT -p tcp -d 127.0.0.1 -j ACCEPT
    sudo iptables -A OUTPUT -p tcp -d 192.168.0.1/24 -j ACCEPT
    
    # reject packets for other users
    sudo iptables -A OUTPUT -p tcp -j REJECT
    
    # open a shell with internet access
    sudo -g internet -s
    
  4. 위 스크립트를 실행하면 인터넷 액세스로 응용 프로그램을 실행할 수있는 셸이 생깁니다.

이 스크립트는 방화벽 규칙을 저장하고 복원하기위한 작업을 수행하지 않습니다. iptables-saveiptables-restore셸 명령 을 사용하도록 스크립트를 수정하고자 할 수 있습니다 .


1

더 좋든 나쁘 든 Linux는 다른 접근법을 사용합니다. 이 기능을 제공하는 간단한 그래픽 인터페이스는 없습니다. 인터넷 에서이 주제에 대한 많은 토론이 있으며 Google 검색을 통해 흥미로운 토론을 찾을 수 있습니다. 토론은 흥미롭지 만 지금까지이 기능을 작성하고 유지하려는 프로그래머 그룹은 없었습니다.

Linux에서이 기능을 제공하는 도구는 Apparmor, Selinux 및 Tomoyo입니다.

이 도구들 중 어느 것도 배우기가 쉽지 않으며 모두 장단점이 있습니다. SELinux는 학습 곡선이 가파르지만 개인적으로 SELinux를 선호합니다.

보다:

http://www.linuxbsdos.com/2011/12/06/3-application-level-firewalls-for-linux-distributions/

이미 언급 된 표범 꽃이있는 응용 프로그램이있었습니다. 상태 / 유지 보수를 잘 모르겠습니다.




0

아니요, 불가능합니다. 또한 기존 방화벽 정의의 일부가 아닙니다. 근본적으로 손상된 OS 보안 문제를 해결하기 위해 Microsoft가 최근에 생각해 낸 것입니다. 허용되지 않는 하나의 프로그램은 단순히 다른 프로그램을 실행하고 그 방식으로 액세스 할 수 있기 때문에 Linux 커뮤니티에서 가장 어리 석고 실행 불가능한 것으로 간주됩니다.

프로그램을 실행할 때 네트워크에서 수행중인 작업이 마음에 들지 않으면 해당 프로그램을 실행하지 마십시오.


7
Microsoft의 방화벽은 이 기능을 제공하는 최초의 주요 방화벽이 아닙니다 . 그것을 제공 한 최초의 Windows 방화벽은 아닙니다. BlackIce Defender, ZoneAlarm 및 Windows를위한 다양한 기타 소프트웨어 방화벽은 수년간 Windows 인터넷 연결 방화벽을 도입하기 전에 시작되었습니다. 또한 Linux 커뮤니티에는 그러한 합의가 없습니다. 우리는 종종 AppArmor (또는 SELinux)를 사용하여 응용 프로그램의 동작을 제한합니다 (AppArmor 가이 목적에 맞게 조정될 수 있는지 궁금합니다 ...). 인터넷에 액세스 할 수있는 앱을 제어하려는 것이 "잘못된"이유는 없습니다.
Eliah Kagan

그리고 여러 다른 답변이 증명할 수 있듯이 응용 프로그램 별 방화벽 제한이 상당히 가능합니다 . 이 기능은 iptables / netfilter에 내장되어 있습니다!
Eliah Kagan

netfilter 또는 iptables는 애플리케이션별로 필터링 할 수 없습니다. 사용자 및 포트별로 필터링 할 수 있지만 애플리케이션별로 필터링 할 수는 없습니다.
Panther

"간단히 다른 것을 실행할 수 있습니다"???? 그런 다음 대상 프로그램의 자식 프로세스를 차단하지 않는 그러한 프로그램을 만든 사람은 분명히 결함이 있습니다.
trusktr
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.