소스 검색

Experimental support for sending email via onion addresses

Bob Mottram 7 년 전
부모
커밋
660d73f726
1개의 변경된 파일64개의 추가작업 그리고 34개의 파일을 삭제
  1. 64
    34
      src/freedombone-base-email

+ 64
- 34
src/freedombone-base-email 파일 보기

@@ -150,40 +150,70 @@ function configure_email_onion {
150 150
     set_completion_param "email onion domain" "${onion_address}"
151 151
     add_email_hostname "$onion_address"
152 152
 
153
-    #echo "$DEFAULT_DOMAIN_NAME $onion_address" > /etc/exim4/onionrelay.txt
154
-    #cdb -m -c -t /tmp/onionrelay.tmp /etc/exim4/onionrelay.cdb /etc/exim4/onionrelay.txt
155
-
156
-    #{ "perl_startup = do '/etc/exim4/perl-routines.pl'";
157
-    #  "perl_at_start"; } > /etc/exim4/conf.d/main/perl
158
-
159
-    #{ "use Net::DNS::Resolver;";
160
-    #  "sub onionLookup {";
161
-    #  "  my \$hostname = shift;";
162
-    #  "  my \$res = Net::DNS::Resolver->new(nameservers => [qw(127.0.0.1)],);";
163
-    #  "  \$res->port(5300);";
164
-    #  "  my \$query = \$res->search(\$hostname);";
165
-    #  "  foreach my \$rr (\$query->answer) {";
166
-    #  "    next unless \$rr->type eq \"A\";";
167
-    #  "    return \$rr->address;";
168
-    #  "  }";
169
-    #  "  return 'no_such_host';";
170
-    #  "}"; } > /etc/exim4/perl-routines.pl
171
-
172
-    #{ "ONION_RELAYDB=/etc/exim4/onionrelay.cdb";
173
-    #  "domainlist onion_relays     = cdb;ONION_RELAYDB"; } > /etc/exim4/conf.d/domainlists
174
-
175
-    #{ "# send things over tor where we have an entry for it";
176
-    #  "onionrelays:";
177
-    #  "  driver    = manualroute";
178
-    #  "  domains   = +onion_relays";
179
-    #  "  transport = onion_relay";
180
-    #  "  # get the automap IP for the onion address from the tor daemon";
181
-    #  "  route_data = \${perl{onionLookup}{\${lookup{\$domain}cdb{ONION_RELAYDB}}}}";
182
-    #  "  no_more"; } > /etc/exim4/conf.d/router/50_exim4-config-onion
183
-
184
-    #{ "onion_relay:";
185
-    #  "  driver = smtp";
186
-    #  "  socks_proxy = 127.0.0.1 port=9050"; } > /etc/exim4/conf.d/transport/50_exim4-config_onion
153
+    apt-get -yq install tinycdb perl
154
+
155
+    # MX record should be:
156
+    # _onion-mx._tcp.$DEFAULT_DOMAIN_NAME. 3600 IN SRV 0 5 25 $onion_address
157
+
158
+    echo "$DEFAULT_DOMAIN_NAME $onion_address" > /etc/exim4/onionrelay.txt
159
+    cdb -m -c -t ~/onionrelay.tmp /etc/exim4/onionrelay.cdb /etc/exim4/onionrelay.txt
160
+
161
+    { "perl_startup = do '/etc/exim4/perl-routines.pl'";
162
+      "perl_at_start"; } > /etc/exim4/conf.d/main/perl
163
+
164
+    { "use Net::DNS::Resolver;";
165
+      "sub onionLookup {";
166
+      "  my \$hostname = shift;";
167
+      "  my \$res = Net::DNS::Resolver->new(nameservers => [qw(127.0.0.1)],);";
168
+      "  \$res->port(5300);";
169
+      "  my \$query = \$res->search(\$hostname);";
170
+      "  foreach my \$rr (\$query->answer) {";
171
+      "    next unless \$rr->type eq \"A\";";
172
+      "    return \$rr->address;";
173
+      "  }";
174
+      "  return 'no_such_host';";
175
+      "}"; } > /etc/exim4/perl-routines.pl
176
+
177
+    { "ONION_RELAYDB=/etc/exim4/onionrelay.cdb";
178
+      "domainlist onion_relays     = cdb;ONION_RELAYDB"; } > /etc/exim4/conf.d/domainlists
179
+
180
+    { "# send things over tor where we have an entry for it";
181
+      "onionrelays:";
182
+      "  driver    = manualroute";
183
+      "  domains   = +onion_relays";
184
+      "  transport = onion_relay";
185
+      "  # get the automap IP for the onion address from the tor daemon";
186
+      "  route_data = \${perl{onionLookup}{\${lookup{\$domain}cdb{ONION_RELAYDB}}}}";
187
+      "  no_more"; } > /etc/exim4/conf.d/router/50_exim4-config-onion
188
+
189
+    { "onion_relay:";
190
+      "  driver = smtp";
191
+      "  socks_proxy = 127.0.0.1 port=9050"; } > /etc/exim4/conf.d/transport/50_exim4-config_onion
192
+
193
+    if ! grep -q "AutomapHostsOnResolve" /etc/tor/torrc; then
194
+        echo 'AutomapHostsOnResolve 1' >> /etc/tor/torrc
195
+    else
196
+        sed -i 's|#AutomapHostsOnResolve.*|AutomapHostsOnResolve 1|g' /etc/tor/torrc
197
+        sed -i 's|AutomapHostsOnResolve.*|AutomapHostsOnResolve 1|g' /etc/tor/torrc
198
+    fi
199
+
200
+    if ! grep -q "DNSPort " /etc/tor/torrc; then
201
+        echo 'DNSPort 5300' >> /etc/tor/torrc
202
+    else
203
+        sed -i 's|#DNSPort .*|DNSPort 5300|g' /etc/tor/torrc
204
+        sed -i 's|DNSPort .*|DNSPort 5300|g' /etc/tor/torrc
205
+    fi
206
+
207
+    if ! grep -q "DNSListenAddress" /etc/tor/torrc; then
208
+        echo 'DNSListenAddress 127.0.0.1' >> /etc/tor/torrc
209
+    else
210
+        sed -i 's|#DNSListenAddress.*|DNSListenAddress 127.0.0.1|g' /etc/tor/torrc
211
+        sed -i 's|DNSListenAddress.*|DNSListenAddress 127.0.0.1|g' /etc/tor/torrc
212
+    fi
213
+
214
+    dpkg-reconfigure --frontend noninteractive exim4-config
215
+    systemctl restart tor
216
+    systemctl restart exim4
187 217
 
188 218
     mark_completed "${FUNCNAME[0]}"
189 219
 }