Linux IPTables를 사용하여 토런트 또는 P2P 프로토콜을 차단하는 방법은 무엇입니까?


17

우리 학교에서는 300 대 이상의 컴퓨터를 인터넷이있는 다른 LAN에 연결했습니다. 여기에는 Officies LAN 및 학생용 인터넷 실험실이 포함됩니다. 그리고 우리는 토런트 또는 P2P 프로토콜을 제어하고 싶습니다. 우리의 문제에 대한 이전의 해결책은 KerioWinRoute 6.5.x로 대부분 만족합니다.

문제는 Webmin Platform을 사용하여 Ubuntu 8.04 LTS로 마이그레이션 한 것입니다.

답변:


14

포트 기반 P2P 차단은 100 % 솔루션이 아닙니다. 고려해야 할 것은 L7 필터링 (Layer 7 필터링)입니다. 기본적으로 리눅스는 좋은 점과 나쁜 점을 결정하기 위해 모든 패킷에 대한 정규식 기반 일치를 수행하는 구현을 가지고 있습니다.

http://l7-filter.sourceforge.net/

이것은 스카이프를 포함하여 모든 종류의 물건을 차단하는 데 도움이 될 수 있습니다.

http://l7-filter.sourceforge.net/protocols

참고 : 패킷을 검사하고 필터링하기위한 정규식 일치는 리소스를 많이 사용하므로 모든 시스템이 DDOS 공격에 더 취약 해집니다. 선호하는 방법은 iptables 내의 프로토콜을 대상으로하는 것입니다.


11

유일한 적절한 기술 솔루션은 모든 트래픽이 프록시를 통과하여 SSL 트래픽을 즉시 해독 한 다음 통과하는 트래픽에 레이어 7 필터링을 적용하는 것입니다.

패킷을 분류하는 데 필요한 규칙을 업데이트하는 엔지니어 팀이 많기 때문에 이러한 제품은 상당히 비쌉니다.

앞서 언급 한 ipp2p 또는 l7-filter와 같이 iptables 모듈 sush를 사용하면 다소 도움이 될 수 있지만 암호화 된 트래픽은 포착하지 않습니다.

어쨌든 기술은 사회적 문제에 대한 해결책이 거의 아니며 p2p에 대한 기업 / 공공 / 모든 네트워크의 오용은 사회적 문제입니다. 사용자와 대화하고 조직에서 적절한 정책을 만들고 제재 조치를 취하도록하십시오. 내 경험상 이것은 사용자와의 지속적인 기술 경쟁보다 훨씬 효과적입니다.


프록시 서버는 어떻게 SSL을 즉시 해독합니까?
David Pashley

일부 국가에서는 SSL 프록시 사용이 금지되어 있습니다.
반경

David Pashley, 그들은 사이트 하나 대신 인증서를 보냈습니다. 따라서 이제는 개인용이므로 요청을 실제 사이트로 전달합니다.
반경

1
이와 관련된 또 다른 단계는 그룹 정책을 사용하여 SSL 프록시에 대한 신뢰할 수있는 루트 인증서를 푸시하여 신뢰할 수있는 인증서를 위조하는 것입니다.
Zan Lynx

1
즉 ... 사용자 그냥 정말 추한 솔루션 ... 토크의
앙투안 Benkemoun

2

다음과 같은 일반적인 트래커 포트를 차단하는 것이 좋습니다. 6881-6889 2710 6969

그러나 이것은 80 포트에 바인딩 된 트래커 (예 : tpb.tracker.thepiratebay.org)에는 도움이되지 않습니다. 따라서 80,443,22를 제외한 모든 것을 차단하면 도움이되지 않습니다.

ipp2p 는 내가 아는 최고의 솔루션입니다. 설명서 / 사용 섹션을 참조하십시오

l7 필터에 대하여. bittorrent.pat 주석에서 다음과 같이 말합니다.

이 패턴은 테스트를 거쳤으며 제대로 작동한다고 믿어집니다. 그러나 암호화 된 데이터를 일치시킬 수 없기 때문에 암호화 된 비트 토렌트 스트림에서는 작동하지 않습니다.

BSD 시스템에서 pf는 초당 상태 또는 연결 수에 따라 동작을 적용 할 수 있으므로 연결을 빠르게 생성하기 때문에 비트 토 텐트와 유사한 트래픽에 태그를 지정할 수 있습니다. iptables 매뉴얼을 읽으십시오.



1

간단한 해결책은 허용하려는 포트를 제외한 모든 나가는 포트를 차단하는 것입니다.

또는 일반적인 P2P 응용 프로그램에 사용될 수있는 포트 목록을 찾아 차단할 수 있습니다. Bittorrent는 업로드하지 않은 경우 다운로드가 매우 제한되는 경향이 있으므로 들어오는 연결을 수락하지 않아야합니다.

사용 된 TCP 포트를 기반으로 라우터에서 일종의 IP 계정을 설정 한 다음 가장 많이 사용되는 포트를 찾는 것이 유용 할 수 있습니다. IPTraf는이를 확인하는 데 유용한 도구입니다.

나는 당신이 모든 것을 멈추지 않을 것이라고 경고해야합니다. 사람들은 독창적이며 당신이 제정 한 제한을 피할 수있는 방법을 찾을 것입니다. 그러나 대부분의 방화벽은 일반 사용자를 중지시킬 수 있습니다.


1

"좋은"TCP 포트 80, 443, 22 만 허용하지 않는 한 P2P를 완전히 차단할 수는 없습니다. 심지어 VPN과 유사한 기능을 가진 컴퓨터 지향 유형에는 충분합니다.


p2p는 문제없이 많은 구성없이 http 및 https 포트를 사용하여 작동
Kazimieras Aliulis

부드럽게 정했다. 지난 몇 년 동안 점점 더 많은 p2p 앱이 포트 80 (종종 암호화 됨)으로 이동하거나 열려있는 포트를 찾는 포트를 검색합니다. 응용 프로그램 계층 스누핑 (특정 형태의 심층 패킷 검사)은 직접 사용을 포착하지만 트래픽이 터널링되는 경우는 아닙니다.
Scott Pack

1
@packs : 점점 더 많은 BitTorrent 클라이언트는 ISP가 패킷 검사를 수행하기 때문에 다른 프로토콜로 완전한 암호화 및 위장 기능을 제공합니다.
Zan Lynx

@grawity-정확하지만 VPN + 프록시 방법을 알고있는 상당히 고급 사용자 여야하며 이러한 유형의 사람들은 직장에서 토렌트를하지 않을 정도로 똑똑 할 것입니다.
djangofan

@packs-예, ISP는 확실히 패킷 검사를 가지고 있지만 uTorrent 암호화가 활성화되어 있으면 많은 연결이 열려있는 것을 제외하고는 트래픽이 무엇인지 알 수 없습니다. 그들이 아는 모든 것에 대해, 당신은 디아블로 3을 플레이 할 것입니다.
djangofan

1

비트 토렌트와 현재 대부분의 p2p는 상당히 회피 적입니다. 트래픽을 차단하는 대신 QOS 규칙을 사용하여 많은 양의 대역폭을 사용하는 클라이언트를 고갈 시키거나 시간이 지남에 따라 p2p 트래픽을 천천히 0으로 조절합니다. 프로토콜을 차단하지는 않지만 p2p'ers가 너무 느려서 수행 할 가치가없는 것을 방지합니다.

모든 토렌트 트래픽이 나쁘다는 것을 기억하십시오. :-)


1

이 iptables 전달 규칙을 사용하여 비트 토런트 시드 및 피어 검색을 삭제하십시오. 그들은 나를 위해 일했다.

#Block Torrent
iptables -A FORWARD -m string --algo bm --string "BitTorrent" -j DROP
iptables -A FORWARD -m string --algo bm --string "BitTorrent protocol" -j DROP
iptables -A FORWARD -m string --algo bm --string "peer_id=" -j DROP
iptables -A FORWARD -m string --algo bm --string ".torrent" -j DROP
iptables -A FORWARD -m string --algo bm --string "announce.php?passkey=" -j DROP
iptables -A FORWARD -m string --algo bm --string "torrent" -j DROP
iptables -A FORWARD -m string --algo bm --string "announce" -j DROP
iptables -A FORWARD -m string --algo bm --string "info_hash" -j DROP

규칙이 작동하면 카운터 증가가 잘 맞습니다.

# iptables -vL -n

Chain FORWARD (policy ACCEPT 16403 packets, 6709K bytes)
 pkts bytes target     prot opt in     out     source               destination
    8   928 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "BitTorrent" ALGO name bm TO 65535
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "BitTorrent protocol" ALGO name bm TO 65535
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "peer_id=" ALGO name bm TO 65535
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  ".torrent" ALGO name bm TO 65535
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "announce.php?passkey=" ALGO name bm TO 65535
  582 52262 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "torrent" ALGO name bm TO 65535
   10  1370 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "announce" ALGO name bm TO 65535
   31  4150 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "info_hash" ALGO name bm TO 65535

공유해 주셔서 감사합니다. 필터링은 어떻게 작동합니까? 문자열 BitTorrent이 URL에서 발견되면 삭제됩니까? 이것은 초기 토렌트 파일 다운로드를 방지하기위한 것이지만 토렌트 파일이 이미 다운로드 된 후에는 비트 토렌트 트래픽을 차단하지 않습니다. 맞습니까?
Houman

0

Ultrasurf와 같은 인기있는 SSL 터널링 프로그램을 사용하면 방화벽을 쉽게 우회 할 수 있습니다. 암호화 된 비트 토넷 트래픽을 차단하려면 http를 통해 암호화 된 터널을 검사하고 차단할 수있는 특수한 UTM 장치가 필요합니다. 나는 그것을 할 수있는 것에 대해서만 알고 있습니다-Astaro, 그러나 더 있어야합니다.


0

앞에서 언급 한대로 ip2p를 사용할 수 있습니다. 그러나 모든 것을 완전히 차단하지는 않습니다. 이상적으로는 특별히 사용하지 않는 모든 포트를 벽으로 막고 ip2p를 사용해야합니다. 완벽한 솔루션은 아니지만 얻을 수있는 최선의 방법입니다.


0

스트레이트 포트 차단을 사용할 수 없습니다. 몇 가지 대안이 있습니다. Layer7 필터는 느리고 신뢰할 수 없으며 내 지식으로는 더 이상 유지되지 않습니다.

IPP2P는 괜찮지 만 OpenDPI로 대체되었습니다. 스폰서 ipoque (PACE, 상업용 등가)에 의해 중단되었습니다. nDPI는이 작은 길의 논리적 결론으로 ​​보입니다 : http://www.ntop.org/products/ ndpi /

가장 쉽고 상당히 효과적인 것은 David Pashley의 제안을 확장 한 것입니다. 모든 포트를 차단하고 필요한 것만 허용하고 필요한 서비스를 프록시하여이를 확장하십시오 (예 : 웹 프록시, 포트 25가 허용되는 내부 메일 서버). 그러나 클라이언트는 내부 서버와 만 통신합니다. 이런 식으로 방화벽에 열려있는 포트가 필요없는 클라이언트를 가질 수 있습니다. 이것은 제대로 작동하지만 직접 액세스해야하는 복잡하거나 잘못 작성된 앱을 사용해야하는 경우 약간 떨어질 수 있습니다.


0

아래는 내 iptables 규칙 세트입니다. 이것은 매력처럼 작동합니다. https 투명 차단 프록시를 만들고 해당 프록시 서버를 통해 모든 트래픽을 보냅니다.

이 iptables 규칙을 사용하여 네트워크를 제어 할 수 있습니다.

  • WHM cpanel 및 cpanel 웹 메일을 사용하기 때문에 2086, 2087, 2095 포트가 열려 있습니다.
  • 추가 웹 서버의 경우 8080
  • 192.168.2.0은 로컬 네트워크입니다.

IPTables 규칙 :

#Generated by iptables-save v1.4.8 on Tue Mar 10 15:03:01 2015
*nat
:PREROUTING ACCEPT [470:38063]
:POSTROUTING ACCEPT [9:651]
:OUTPUT ACCEPT [1456:91962]
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.2.1:3128
-A PREROUTING -i eth1 -p tcp -m tcp --dport 443 -j DNAT --to-destination 192.168.2.1:3127
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
-A PREROUTING -i eth1 -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3127
-A POSTROUTING -o eth0 -j MASQUERADE
-A POSTROUTING -s 192.168.2.0/24 -o eth0 -j MASQUERADE
COMMIT
# Completed on Tue Mar 10 15:03:01 2015
# Generated by iptables-save v1.4.8 on Tue Mar 10 15:03:01 2015
*filter
:INPUT ACCEPT [2106:729397]
:FORWARD ACCEPT [94:13475]
:OUTPUT ACCEPT [3252:998944]
-A INPUT -p tcp -m tcp --dport 3127 -j ACCEPT
-A FORWARD -m string --string "BitTorrent" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "BitTorrent protocol" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "peer_id=" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string ".torrent" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "announce.php?passkey=" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "torrent" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "announce" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "info_hash" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "get_peers" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "announce_peer" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "find_node" --algo bm --to 65535 -j DROP
-A FORWARD -s 192.168.2.0/24 -p tcp -m tcp --sport 1024:65535 --dport 8080 -j ACCEPT
-A FORWARD -s 192.168.2.0/24 -p tcp -m tcp --sport 1024:65535 --dport 2086 -j ACCEPT
-A FORWARD -s 192.168.2.0/24 -p tcp -m tcp --sport 1024:65535 --dport 2087 -j ACCEPT
-A FORWARD -s 192.168.2.0/24 -p tcp -m tcp --sport 1024:65535 --dport 2095 -j ACCEPT
-A FORWARD -s 192.168.2.0/24 -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -s 192.168.2.0/24 -p udp -m udp --sport 1024:65535 --dport 1024:65535 -j REJECT --reject-with icmp-port-unreachable
COMMIT
# Completed on Tue Mar 10 15:03:01 2015
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.