답변:
포트 기반 P2P 차단은 100 % 솔루션이 아닙니다. 고려해야 할 것은 L7 필터링 (Layer 7 필터링)입니다. 기본적으로 리눅스는 좋은 점과 나쁜 점을 결정하기 위해 모든 패킷에 대한 정규식 기반 일치를 수행하는 구현을 가지고 있습니다.
http://l7-filter.sourceforge.net/
이것은 스카이프를 포함하여 모든 종류의 물건을 차단하는 데 도움이 될 수 있습니다.
http://l7-filter.sourceforge.net/protocols
참고 : 패킷을 검사하고 필터링하기위한 정규식 일치는 리소스를 많이 사용하므로 모든 시스템이 DDOS 공격에 더 취약 해집니다. 선호하는 방법은 iptables 내의 프로토콜을 대상으로하는 것입니다.
유일한 적절한 기술 솔루션은 모든 트래픽이 프록시를 통과하여 SSL 트래픽을 즉시 해독 한 다음 통과하는 트래픽에 레이어 7 필터링을 적용하는 것입니다.
패킷을 분류하는 데 필요한 규칙을 업데이트하는 엔지니어 팀이 많기 때문에 이러한 제품은 상당히 비쌉니다.
앞서 언급 한 ipp2p 또는 l7-filter와 같이 iptables 모듈 sush를 사용하면 다소 도움이 될 수 있지만 암호화 된 트래픽은 포착하지 않습니다.
어쨌든 기술은 사회적 문제에 대한 해결책이 거의 아니며 p2p에 대한 기업 / 공공 / 모든 네트워크의 오용은 사회적 문제입니다. 사용자와 대화하고 조직에서 적절한 정책을 만들고 제재 조치를 취하도록하십시오. 내 경험상 이것은 사용자와의 지속적인 기술 경쟁보다 훨씬 효과적입니다.
다음과 같은 일반적인 트래커 포트를 차단하는 것이 좋습니다. 6881-6889 2710 6969
그러나 이것은 80 포트에 바인딩 된 트래커 (예 : tpb.tracker.thepiratebay.org)에는 도움이되지 않습니다. 따라서 80,443,22를 제외한 모든 것을 차단하면 도움이되지 않습니다.
ipp2p 는 내가 아는 최고의 솔루션입니다. 설명서 / 사용 섹션을 참조하십시오
l7 필터에 대하여. bittorrent.pat 주석에서 다음과 같이 말합니다.
이 패턴은 테스트를 거쳤으며 제대로 작동한다고 믿어집니다. 그러나 암호화 된 데이터를 일치시킬 수 없기 때문에 암호화 된 비트 토렌트 스트림에서는 작동하지 않습니다.
BSD 시스템에서 pf는 초당 상태 또는 연결 수에 따라 동작을 적용 할 수 있으므로 연결을 빠르게 생성하기 때문에 비트 토 텐트와 유사한 트래픽에 태그를 지정할 수 있습니다. iptables 매뉴얼을 읽으십시오.
간단한 해결책은 허용하려는 포트를 제외한 모든 나가는 포트를 차단하는 것입니다.
또는 일반적인 P2P 응용 프로그램에 사용될 수있는 포트 목록을 찾아 차단할 수 있습니다. Bittorrent는 업로드하지 않은 경우 다운로드가 매우 제한되는 경향이 있으므로 들어오는 연결을 수락하지 않아야합니다.
사용 된 TCP 포트를 기반으로 라우터에서 일종의 IP 계정을 설정 한 다음 가장 많이 사용되는 포트를 찾는 것이 유용 할 수 있습니다. IPTraf는이를 확인하는 데 유용한 도구입니다.
나는 당신이 모든 것을 멈추지 않을 것이라고 경고해야합니다. 사람들은 독창적이며 당신이 제정 한 제한을 피할 수있는 방법을 찾을 것입니다. 그러나 대부분의 방화벽은 일반 사용자를 중지시킬 수 있습니다.
"좋은"TCP 포트 80, 443, 22 만 허용하지 않는 한 P2P를 완전히 차단할 수는 없습니다. 심지어 VPN과 유사한 기능을 가진 컴퓨터 지향 유형에는 충분합니다.
이 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에서 발견되면 삭제됩니까? 이것은 초기 토렌트 파일 다운로드를 방지하기위한 것이지만 토렌트 파일이 이미 다운로드 된 후에는 비트 토렌트 트래픽을 차단하지 않습니다. 맞습니까?
스트레이트 포트 차단을 사용할 수 없습니다. 몇 가지 대안이 있습니다. Layer7 필터는 느리고 신뢰할 수 없으며 내 지식으로는 더 이상 유지되지 않습니다.
IPP2P는 괜찮지 만 OpenDPI로 대체되었습니다. 스폰서 ipoque (PACE, 상업용 등가)에 의해 중단되었습니다. nDPI는이 작은 길의 논리적 결론으로 보입니다 : http://www.ntop.org/products/ ndpi /
가장 쉽고 상당히 효과적인 것은 David Pashley의 제안을 확장 한 것입니다. 모든 포트를 차단하고 필요한 것만 허용하고 필요한 서비스를 프록시하여이를 확장하십시오 (예 : 웹 프록시, 포트 25가 허용되는 내부 메일 서버). 그러나 클라이언트는 내부 서버와 만 통신합니다. 이런 식으로 방화벽에 열려있는 포트가 필요없는 클라이언트를 가질 수 있습니다. 이것은 제대로 작동하지만 직접 액세스해야하는 복잡하거나 잘못 작성된 앱을 사용해야하는 경우 약간 떨어질 수 있습니다.
아래는 내 iptables 규칙 세트입니다. 이것은 매력처럼 작동합니다. https 투명 차단 프록시를 만들고 해당 프록시 서버를 통해 모든 트래픽을 보냅니다.
이 iptables 규칙을 사용하여 네트워크를 제어 할 수 있습니다.
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