이 가이드가 만드는 것
중간 릴레이: 클라이언트와 다른 릴레이의 연결을 받아들이고, 네트워크 내부에서 트래픽을 전달하며, 일반 인터넷의 목적지로는 절대 연결을 열지 않습니다. 아무도 중간 릴레이에 대한 남용 신고를 받지 않습니다. 외부에서 보면 게시된 다른 릴레이 목록과 암호화된 트래픽만 교환하기 때문입니다.
이 구분이 이 가이드가 존재하는 이유입니다. 종료 릴레이는 별개의 논의입니다: 신고는 여러분이 아닌 저희 남용 데스크에 도착하므로, 구성 전에 허용 가능한 사용 정책을 읽고 티켓을 여십시오. 아래의 모든 내용은 의도적으로 종료를 두 번 끕니다.
시작하기 전에
- R-4. Tor는 연결당 단일 스레드이고 네트워크에 묶여 있습니다; 전용 코어 4개는 CPU가 인지하기 훨씬 전에 링크를 포화시킵니다.
- 기부할 의향이 있는 대역폭을 가진 사이트. BUH-01과 HEL-01은 저희가 파는 가장 저렴한 테라바이트이며, 둘 다 이를 뒷받침할 전송망이 있습니다.
- 작동하는 클럭. 시간이 어긋난 릴레이는 합의에서 제외되며, 완벽하게 시작하고 어디에도 나타나지 않는 릴레이의 가장 흔한 원인입니다.
1. 기본 시스템
apt update && apt full-upgrade -y
apt install -y tor nyx chrony nftables
timedatectl set-timezone UTC
chronyc trackingchronyc tracking은 시스템 시간 오프셋을 마이크로초 단위로 보고해야 합니다. 초 단위로 보고하면 중지하고 먼저 고치십시오; 이후의 어떤 것도 작동하지 않습니다.
2. 릴레이 구성
/etc/tor/torrc을 다음으로 교체하십시오. 모든 줄을 읽으십시오. 왜냐하면 그중 두 줄이 정책 내에 머물게 하는 것이기 때문입니다:
Nickname exampleRelay
ContactInfo [email protected]
ORPort 9001
ORPort [2001:db8:1a2b::2]:9001
SocksPort 0
ControlPort 0
ExitRelay 0
ExitPolicy reject *:*
IPv6Exit 0
RelayBandwidthRate 40 MBytes
RelayBandwidthBurst 60 MBytes
AccountingMax 40 TBytes
AccountingStart month 1 00:00
MetricsPort 127.0.0.1:9035
MetricsPortPolicy accept 127.0.0.1
User debian-tor
DataDirectory /var/lib/tor
Log notice syslogExitRelay 0와 ExitPolicy reject *:*은 이중 안전 장치입니다. 둘 중 하나만으로도 충분합니다; 둘 다 함께 있으면 미래의 패키지 기본값이나 자정에 반쯤 기억난 편집이 조용히 여러분을 종료 릴레이로 만들지 않습니다.
두 번째 ORPort 줄에 인스턴스의 실제 IPv6 주소를 대체하십시오. 모든 인스턴스에는 라우팅된 /64가 제공되므로 v4 전용 릴레이를 실행할 이유가 없으며, v6 지원 릴레이는 여전히 v4 릴레이보다 공급이 부족합니다.
대역폭 계정은 복사-붙여넣기가 아닌 생각이 필요합니다. 저희 네트워크의 트래픽은 공정 사용 하에 무제한이지만, 상한이 없는 릴레이는 네트워크가 찾을 수 있는 만큼 정확히 영원히 사용합니다. 초당 40메가바이트와 월 40테라바이트 한도는 넉넉하고 품행이 바른 릴레이입니다. 계정 한도에 도달하면 회로 중간에 차단되는 대신 기간이 넘어갈 때까지 릴레이는 동면합니다.
어디에서든 둘 이상의 릴레이를 실행하는 경우, 이 릴레이를 포함한 모든 지문을 쉼표로 구분해 나열하는 MyFamily 줄을 추가하십시오. 클라이언트는 동일한 제어 하에 두 머신을 통과하는 회로를 구축하지 않도록 사용하며, 이를 생략하는 것은 운영자를 대상으로 하는 가장 흔한 구성 불만입니다.
3. 유닛 강화
패키지 유닛은 괜찮습니다; 이 줄들은 버그를 찾는 사람에게 훨씬 덜 흥미롭게 만듭니다.
systemctl edit tor@default[Service]
NoNewPrivileges=yes
PrivateTmp=yes
PrivateDevices=yes
ProtectSystem=strict
ProtectHome=yes
ProtectKernelTunables=yes
ProtectKernelModules=yes
ProtectControlGroups=yes
RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX
RestrictNamespaces=yes
MemoryDenyWriteExecute=yes
ReadWritePaths=/var/lib/tor /var/log/tor /run/tor
LimitNOFILE=65535파일 디스크립터 제한은 보기보다 중요합니다. 바쁜 릴레이는 수천 개의 동시 소켓을 보유하며, 기본 제한은 일주일 동안 작동하다가 로그에 명확한 내용 없이 연결을 거부하기 시작하는 릴레이를 만듭니다.
4. 방화벽
flush ruleset
table inet filter {
chain input {
type filter hook input priority filter; policy drop;
ct state established,related accept
ct state invalid drop
iif lo accept
ip protocol icmp accept
ip6 nexthdr icmpv6 accept
tcp dport 22 accept
tcp dport 9001 accept
}
chain forward {
type filter hook forward priority filter; policy drop;
}
}systemctl enable --now nftables
systemctl restart tor@default메트릭 포트는 루프백 주소에 바인딩되어 규칙이 필요 없습니다. 원할 때 SSH 터널로 접근하고 절대 노출하지 마십시오; 릴레이 메트릭은 생각보다 많은 사람에게 흥미롭습니다.
검증하기
이 부분은 몇 분이 아닌 몇 시간이 걸리므로 시작하고 떠나십시오.
먼저, 시작 후 약 20분 이내에 로그에 릴레이가 자체 포트를 외부에서 테스트하고 통과했다고 표시되어야 합니다:
journalctl -u tor@default --since "20 min ago" | grep -i "self-testing"ORPort가 외부에서 도달 가능하다는 줄을 원합니다. 나타나지 않으면 방화벽이 인바운드 9001을 차단하거나 torrc의 v6 주소가 인스턴스와 일치하지 않는 것입니다.
둘째, 지문을 가져와 보관하십시오:
cat /var/lib/tor/fingerprint셋째, 릴레이가 단순히 실행되는 것이 아니라 작업을 수행하는지 확인하십시오:
nyx
curl -s http://127.0.0.1:9035/metrics | grep -E "tor_relay_traffic|tor_relay_connections"자체 테스트가 통과한 후 한 시간 내에 트래픽 카운터가 올라가야 합니다. 디렉터리 권위자는 지문을 합의에 투표하는 데 약 3시간이 필요하며, 클라이언트는 그 후에만 의미 있는 볼륨을 보내기 시작합니다. 가동 시간이 유지되면 약 8일째에 Guard 플래그가 도착하며, 그때 트래픽 그래프가 물방울에서 설정한 한도로 바뀝니다.
넷째, 이 특정 빌드에서 가장 중요한 것은 종료하지 않는다는 것을 증명하는 것입니다. 두 번째 머신에서 릴레이 트래픽 외에는 아무것도 나가지 않는지 확인하십시오:
ss -tn state established | wc -l
ss -tn state established sport = :9001 | wc -l거의 모든 기존 연결은 ORPort를 포함해야 합니다. 임의 포트로의 대규모 아웃바운드 연결은 의도하지 않은 종료 정책을 의미하며, 이 경우 데몬을 중지하고 2단계를 다시 읽으십시오.
운영하기
| 항목 | 답변 |
|---|---|
| 재시작 | 평판 몇 시간이 듭니다. 변경 사항을 일괄 처리하십시오. |
| 업그레이드 | apt upgrade 후 재시작하십시오. 이전 버전을 실행하는 릴레이는 플래그가 지정되고 결국 제거됩니다. |
| 사이트 이동 | /var/lib/tor/keys을 복사하면 지문이 릴레이를 따라갑니다. 합의 가중치는 재설정되지 않습니다. |
| 신고 | 중간 릴레이는 생성하지 않습니다. 받으면 무언가 종료되고 있으므로 확인해야 합니다. |
| 종료 | 먼저 AccountingMax을 작은 값으로 설정하여 회로를 비우거나, 그냥 중지하고 평판 손실을 수용하십시오. |
구축한 날 /var/lib/tor/keys을 인스턴스 외부 어딘가에 백업하십시오. 신원 키는 이 릴레이를 그 릴레이로 만드는 것입니다; 잃으면 합의 가중치 0에서 다시 시작하며, 이는 아무도 사용하지 않는 8일입니다. 릴레이가 실행되는 동안 저희가 기록하는 것에 대한 입장은 로깅 페이지에 있으며, 짧습니다.