Tor를 제외한 모든 트래픽을 어떻게 차단할 수 있습니까? 예를 들어

Linux 시스템에는 Tor 네트워크를 통과하지 않는 한 모든 인바운드 및 아웃 바운드 트래픽을 차단할 수있는 방법이 있습니다. 여기에는 TCP 연결뿐만 아니라 모든 형태의 IP 통신이 포함됩니다. 예를 들어 UDP를 Tor를 통과 할 수 없으므로 UDP를 완전히 차단하고 싶습니다. 이 시스템의 인터넷 사용이 완전히 익명이되기를 원하며 응용 프로그램이 유출되는 것을 원하지 않습니다.

Tor 자체가 어떻게 든 릴레이 노드와 통신해야하기 때문에 이것이 복잡 할 수 있음을 알고 있습니다.



답변

iptables로 충분히 쉽습니다. 특정 사용자와 일치하는 규칙을 가질 수 있으며 이미 tor고유 한 사용자 ID로 실행되도록 설정되어 있어야합니다. 주요 Linux 배포판과 Tor 프로젝트에서 제공하는 deb 및 rpm 패키지는 이미 Tor 사용자를 설정했습니다.

완전한 샘플, 사용 가능한 iptable 및 Tor 구성이 이어집니다. 이 방화벽은 iptables-restore명령 으로로드 할 수 있습니다 . 이 구성의 최종 결과는 프록시를 구성 할 필요없이 호스트에서 발생하거나 호스트를 통해 전달되는 모든 트래픽 을 투명하게 라우팅합니다 . 이 구성은 누출 방지 기능이 있어야합니다. 물론 철저히 테스트해야합니다.

tor 사용자 (여기서는 998) 의 uid 는 iptables에 의해 숫자 형식으로 저장됩니다. 여기에 나타나는 각 위치에서 tor 사용자의 올바른 uid를 대체하십시오.

또한 호스트로 직접 주소가 지정된 들어오는 트래픽 및 LAN 트래픽을 지원하려면 첫 번째 규칙에서 호스트의 IP 주소를 제공해야합니다 (여기서는로 표시됨 198.51.100.212). IP 주소가 여러 개인 경우 각 주소에 대해 규칙을 반복하십시오.

*nat
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -d 198.51.100.212/32 -j RETURN
-A PREROUTING -p udp -m udp --dport 53 -j REDIRECT --to-ports 53
-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j REDIRECT --to-ports 49151
-A OUTPUT -o lo -j RETURN
-A OUTPUT -m owner --uid-owner 998 -j RETURN
-A OUTPUT -p udp -m udp --dport 53 -j REDIRECT --to-ports 53
-A OUTPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j REDIRECT --to-ports 49151
COMMIT
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m conntrack --ctstate NEW -m tcp -d 127.0.0.1 --dport 22 -j ACCEPT
-A INPUT -j LOG --log-prefix "IPv4 REJECT INPUT: "
-A FORWARD -j LOG --log-prefix "IPv4 REJECT FORWARD: "
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -d 127.0.0.1/32 -p udp -m udp --dport 53 -j ACCEPT
-A OUTPUT -d 127.0.0.1/32 -p tcp -m tcp --dport 49151 -j ACCEPT
-A OUTPUT -m owner --uid-owner 998 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -j LOG --log-prefix "IPv4 REJECT OUTPUT: "
COMMIT

ssh INPUT 규칙은 로컬 호스트 (예 : Tor 숨김 서비스)를 통해 연결하는 경우에만 연결을 허용합니다. clearnet을 통해 들어오는 ssh 연결을 허용하려면을 제거하십시오 -d 127.0.0.1.

해당 torrc파일은 다음과 같습니다.

User toranon
SOCKSPort 9050
DNSPort 53
TransPort 49151
AutomapHostsOnResolve 1

이 구성에는 호스트에 고정 IP 주소가 있어야합니다. 예상되는 사용 사례의 경우 이미 고정 IP 주소를 갖도록 계획했을 수 있습니다.

그리고 마지막으로 출력!

[root@unknown ~]# curl ifconfig.me
31.31.73.71
[root@unknown ~]# host 31.31.73.71
71.73.31.31.in-addr.arpa domain name pointer cronix.sk.
[root@unknown ~]# curl ifconfig.me
178.20.55.16
[root@unknown ~]# host 178.20.55.16
16.55.20.178.in-addr.arpa domain name pointer marcuse-1.nos-oignons.net.


답변