comparison mod_onions/mod_onions.lua @ 1781:12ac88940fe3

mod_onions: Now allows configuration of an "onions_map", allowing administrator to manually specify alternate hidden services for clearnet addresses.
author Thijs Alkemade <me@thijsalkema.de>
date Thu, 13 Aug 2015 20:50:24 +0200
parents b3e3ad35391a
children 720b291cb340
comparison
equal deleted inserted replaced
1780:b3e3ad35391a 1781:12ac88940fe3
26 26
27 local proxy_ip = module:get_option("onions_socks5_host") or "127.0.0.1"; 27 local proxy_ip = module:get_option("onions_socks5_host") or "127.0.0.1";
28 local proxy_port = module:get_option("onions_socks5_port") or 9050; 28 local proxy_port = module:get_option("onions_socks5_port") or 9050;
29 local forbid_else = module:get_option("onions_only") or false; 29 local forbid_else = module:get_option("onions_only") or false;
30 local torify_all = module:get_option("onions_tor_all") or false; 30 local torify_all = module:get_option("onions_tor_all") or false;
31 local onions_map = module:get_option("onions_map") or {};
31 32
32 local sessions = module:shared("sessions"); 33 local sessions = module:shared("sessions");
33 34
34 -- The socks5listener handles connection while still connecting to the proxy, 35 -- The socks5listener handles connection while still connecting to the proxy,
35 -- then it hands them over to the normal listener (in mod_s2s) 36 -- then it hands them over to the normal listener (in mod_s2s)
183 184
184 local conn, handler = socket.tcp(); 185 local conn, handler = socket.tcp();
185 186
186 module:log("debug", "Connecting to " .. connect_host .. ":" .. connect_port); 187 module:log("debug", "Connecting to " .. connect_host .. ":" .. connect_port);
187 188
188 -- this is not necessarily the same as .to_host (it can be that this is a SRV record) 189 -- this is not necessarily the same as .to_host (it can be that this is from the onions_map)
189 host_session.socks5_to = connect_host; 190 host_session.socks5_to = connect_host;
190 host_session.socks5_port = connect_port; 191 host_session.socks5_port = connect_port;
191 192
192 conn:settimeout(0); 193 conn:settimeout(0);
193 194
229 session.sendq = nil; 230 session.sendq = nil;
230 end 231 end
231 -- Try to intercept anything to *.onion 232 -- Try to intercept anything to *.onion
232 local function route_to_onion(event) 233 local function route_to_onion(event)
233 local stanza = event.stanza; 234 local stanza = event.stanza;
234 235 local to_host = event.to_host;
235 if not event.to_host:find(".onion(.?)$") then 236 local onion_host = nil;
236 if forbid_else then 237 local onion_port = nil;
238
239 if not to_host:find(".onion(.?)$") then
240 if onions_map[to_host] then
241 if type(onions_map[to_host]) == "string" then
242 onions_host = onions_map[to_host];
243 else
244 onion_host = onions_map[to_host].host;
245 onion_port = onions_map[to_host].port;
246 end
247 elseif forbid_else then
237 module:log("debug", event.to_host .. " is not an onion. Blocking it."); 248 module:log("debug", event.to_host .. " is not an onion. Blocking it.");
238 return false; 249 return false;
239 elseif not torify_all then 250 elseif not torify_all then
240 return; 251 return;
241 end 252 end
242 end 253 end
243 254
244 module:log("debug", "Onion routing something to ".. event.to_host); 255 module:log("debug", "Onion routing something to ".. to_host);
245 256
246 if hosts[event.from_host].s2sout[event.to_host] then 257 if hosts[event.from_host].s2sout[to_host] then
247 return; 258 return;
248 end 259 end
249 260
250 local host_session = s2s_new_outgoing(event.from_host, event.to_host); 261 local host_session = s2s_new_outgoing(event.from_host, to_host);
251 262
252 host_session.bounce_sendq = bounce_sendq; 263 host_session.bounce_sendq = bounce_sendq;
253 host_session.sendq = { {tostring(stanza), stanza.attr and stanza.attr.type ~= "error" and stanza.attr.type ~= "result" and st.reply(stanza)} }; 264 host_session.sendq = { {tostring(stanza), stanza.attr and stanza.attr.type ~= "error" and stanza.attr.type ~= "result" and st.reply(stanza)} };
254 265
255 hosts[event.from_host].s2sout[event.to_host] = host_session; 266 hosts[event.from_host].s2sout[to_host] = host_session;
256 267
257 connect_socks5(host_session, event.to_host, 5269); 268 connect_socks5(host_session, onion_host or to_host, onion_port or 5269);
258 269
259 return true; 270 return true;
260 end 271 end
261 272
262 module:log("debug", "Onions ready and loaded"); 273 module:log("debug", "Onions ready and loaded");