]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
let people test the RefuseUnknownExits idea
authorRoger Dingledine <arma@torproject.org>
Thu, 11 Mar 2010 03:43:23 +0000 (22:43 -0500)
committerRoger Dingledine <arma@torproject.org>
Thu, 11 Mar 2010 03:43:23 +0000 (22:43 -0500)
ChangeLog
src/or/config.c
src/or/connection_edge.c
src/or/connection_or.c
src/or/or.h

index 4fa361654489a01c06da110cf11e21570619e70a..7d742574d472e4b711e9634bbfc14bdaa4fe8ab2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,11 @@
 Changes in version 0.2.2.11-alpha - 2010-03-??
+  o Minor features:
+    - Experiment with a more aggressive approach to preventing clients
+      from making one-hop exit streams. Exit relays who want to try it
+      out can set "RefuseUnknownExits 1" in their torrc, and then look
+      for "Attempt by %s to open a stream" log messages. Let us know
+      how it goes!
+
   o Minor bugfixes:
     - When we cleaned up the contrib/tor-exit-notice.html file, we left
       out some key text. Fixes bug 1295.
index cbf9a5a0c691af5f262a082dd120046d6d2543a7..dee2303bfa22c5860aceb08d497a82753164e2a3 100644 (file)
@@ -299,6 +299,7 @@ static config_var_t _option_vars[] = {
   V(RecommendedClientVersions,   LINELIST, NULL),
   V(RecommendedServerVersions,   LINELIST, NULL),
   OBSOLETE("RedirectExit"),
+  V(RefuseUnknownExits,          BOOL,     "0"),
   V(RejectPlaintextPorts,        CSV,      ""),
   V(RelayBandwidthBurst,         MEMUNIT,  "0"),
   V(RelayBandwidthRate,          MEMUNIT,  "0"),
index 861482d2af1af93a1c971d7ee441543913646673..a173dc1226d415b996cf6fac8ce264b31d515574 100644 (file)
@@ -2505,16 +2505,28 @@ connection_exit_begin_conn(cell_t *cell, circuit_t *circ)
       tor_free(address);
       return 0;
     }
-    if (or_circ && or_circ->is_first_hop &&
-        !get_options()->AllowSingleHopExits) {
+    if (or_circ && or_circ->p_conn && !get_options()->AllowSingleHopExits &&
+        (or_circ->is_first_hop ||
+         (!connection_or_digest_is_known_relay(
+                                       or_circ->p_conn->identity_digest) &&
+//        XXX022 commented out so we can test it first in 0.2.2.11 -RD
+//        networkstatus_get_param(NULL, "refuseunknownexits", 1)))) {
+          get_options()->RefuseUnknownExits))) {
       /* Don't let clients use us as a single-hop proxy, unless the user
-       * has explicitly allowed that in the config.  It attracts attackers
+       * has explicitly allowed that in the config. It attracts attackers
        * and users who'd be better off with, well, single-hop proxies.
        */
-      log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
-             "Attempt to open a stream on first hop of circuit. Closing.");
+//    log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+      log_notice(LD_PROTOCOL,
+             "Attempt by %s to open a stream %s. Closing.",
+             safe_str(or_circ->p_conn->_base.address),
+             or_circ->is_first_hop ? "on first hop of circuit" :
+                                     "from unknown relay");
       relay_send_end_cell_from_edge(rh.stream_id, circ,
-                                    END_STREAM_REASON_TORPROTOCOL, NULL);
+                                    or_circ->is_first_hop ?
+                                      END_STREAM_REASON_TORPROTOCOL :
+                                      END_STREAM_REASON_MISC,
+                                    NULL);
       tor_free(address);
       return 0;
     }
index dfd0a965b067aa144312ad2b398156de2f8ba8bb..98525f16a206aff4c5d369270de0f64411116602 100644 (file)
@@ -322,7 +322,7 @@ connection_or_finished_connecting(or_connection_t *or_conn)
 
 /** Return 1 if identity digest <b>id_digest</b> is known to be a
  * currently or recently running relay. Otherwise return 0. */
-static int
+int
 connection_or_digest_is_known_relay(const char *id_digest)
 {
   if (router_get_consensus_status_by_id(id_digest))
index cf27520f1b96fbde7edb09c1735f513c114d8b4c..737c197425beaf97a669c009197f38bfefdd0ec5 100644 (file)
@@ -2462,6 +2462,11 @@ typedef struct {
   int ConstrainedSockets; /**< Shrink xmit and recv socket buffers. */
   uint64_t ConstrainedSockSize; /**< Size of constrained buffers. */
 
+  /** Whether we should drop exit streams from Tors that we don't know
+   * are relays. XXX022 In here for 0.2.2.11 as a temporary test before
+   * we switch over to putting it in consensusparams. -RD */
+  int RefuseUnknownExits;
+
   /** Application ports that require all nodes in circ to have sufficient
    * uptime. */
   smartlist_t *LongLivedPorts;
@@ -3532,6 +3537,7 @@ int connection_or_process_inbuf(or_connection_t *conn);
 int connection_or_flushed_some(or_connection_t *conn);
 int connection_or_finished_flushing(or_connection_t *conn);
 int connection_or_finished_connecting(or_connection_t *conn);
+int connection_or_digest_is_known_relay(const char *id_digest);
 
 void connection_or_connect_failed(or_connection_t *conn,
                                   int reason, const char *msg);