
bbs SOCKS और HTTP प्रॉक्सी के लिए एक राउटर है। यह एक SOCKS5 (या HTTP CONNECT) सेवा प्रदान करता है और अनुरोध के लक्ष्य के आधार पर आने वाले अनुरोधों को प्रॉक्सी या प्रॉक्सी की श्रृंखलाओं को आगे भेजता है। रूटिंग को PAC स्क्रिप्ट (यदि PAC समर्थन के साथ बनाया गया हो) या JSON फ़ाइल के माध्यम से कॉन्फ़िगर किया जा सकता है।
पुराना bbs यहाँ पाया जा सकता है।
bbs SOCKS और HTTP प्रॉक्सी के लिए एक राउटर है। यह SOCKS5, HTTP CONNECT या पोर्ट फ़ॉरवर्डिंग सेवाओं को उजागर करता है और अनुरोध के लक्ष्य के आधार पर आने वाले अनुरोधों को प्रॉक्सी या प्रॉक्सी की श्रृंखलाओं को अग्रेषित करता है। रूटिंग को PAC स्क्रिप्ट (यदि PAC समर्थन के साथ बनाया गया है) या JSON फ़ाइल के माध्यम से कॉन्फ़िगर किया जा सकता है।
go install github.com/synacktiv/bbs@master
PAC स्क्रिप्ट समर्थन के साथ bbs स्थापित करने के लिए:
go install -tags pac github.com/synacktiv/bbs@master
नोट: PAC बिना ऑडिट की गई तृतीय-पक्ष लाइब्रेरीज़ पर निर्भर करता है।
bbscli.py पायथन CLI bbs के कॉन्फ़िगरेशन को आसान बनाने और JSON फ़ाइलें मैन्युअल रूप से लिखने से बचने के लिए प्रदान की गई है। इसके लिए pyparsing लाइब्रेरी की आवश्यकता होती है, जो Debian द्वारा पैकेज की जाती है:
apt install python3-pyparsing
यदि लाइब्रेरी आपके वितरण द्वारा पैकेज नहीं की गई है, तो इसे pip का उपयोग करके स्थापित किया जा सकता है:
pip install pyparsing
कॉन्फ़िगरेशन एक JSON फ़ाइल में किया जाता है जिसमें कई अनुभाग होते हैं:
कॉन्फ़िगरेशन फ़ाइल का पथ तर्क -c <path> के माध्यम से प्रदान किया जाता है (डिफ़ॉल्ट ./bbs.json है)। bbs SIGHUP पर कॉन्फ़िगरेशन फ़ाइलों को पुनः लोड करता है, पुनः लोड करने के लिए kill -HUP <pid> का उपयोग करें।
ऐसे कॉन्फ़िगरेशन का एक उदाहरण यहाँ दिया गया है:
{
"proxies": {
"proxy1": {
"connstring": "socks5://127.0.0.1:1337",
"user": "user",
"pass": "s3cr3t"
},
"proxy2": {
"connstring": "http://127.0.0.1:1338"
}
},
"chains": {
"chain1": {
"proxyDns": true,
"tcpConnectTimeout": 1000,
"tcpReadTimeout": 2000,
"proxies": [
"proxy1",
"proxy2"
]
},
"direct": {
"proxies": []
}
},
"routes": {
"table1": {
"default": "direct",
"blocks": [
{
"comment": "Block1 comment",
"rules": {
"rule": "regexp",
"variable": "host",
"content": "me\\.gandi\\.net"
},
"route": "chain1"
},
{
"comment": "Route non web traffic towards 10.35.0.0/16 through proxy2",
"rules": {
"rule1": {
"rule": "subnet",
"content": "10.35.0.0/16"
},
"op": "AND",
"rule2": {
"rule": "regexp",
"variable": "port",
"content": "^(80|443)$",
"negate": true
}
},
"route": "proxy2"
},
{
"comment": "Drop traffic to 445",
"rules": {
"rule": "regexp",
"variable": "port",
"content": "^445$"
},
"route": "drop"
},
{
"comment": "Route *.corp.local through chain1",
"rules": {
"rule": "regexp",
"variable": "host",
"content": "(?i)^(.*\\.)?corp\\.local$"
},
"route": "chain1",
"disable": true
}
]
},
"table2": {
"default": "drop",
"blocks": [
{
"comment": "Route *.corp.local through chain2",
"rules": {
"rule": "regexp",
"variable": "host",
"content": "(?i)^(.*\\.)?corp\\.local$"
},
"route": "chain2"
}
]
}
},
"servers": [
"socks5://127.0.0.1:1081:table1",
"http://127.0.0.1:1080:table2",
"fwd://127.0.0.1:4445:chain1:10.0.0.1:445"
],
"hosts": {
"host1": "1.1.1.1",
"host2": "10.0.0.1",
"host3": "modified.host3",
"10.1.1.4": "10.1.1.5"
}
}
अपस्ट्रीम प्रॉक्सी को proxies अनुभाग में प्रॉक्सी संरचनाओं के मानचित्र के रूप में घोषित किया जाना चाहिए। मानचित्र कुंजियाँ स्वतंत्र रूप से चुनी जाती हैं लेकिन chains परिभाषा में उपयोग की गई कुंजियों से मेल खानी चाहिए। प्रॉक्सी संरचनाएँ इस प्रकार हैं:
connstring protocol://host:port प्रारूप के साथ आवश्यक है (protocol socks5 या httpconnect/http हो सकता है)user और pass वैकल्पिक हैंप्रत्येक घोषित प्रॉक्सी के लिए, उसी नाम के साथ एक अंतर्निहित चेन (अगला पैराग्राफ देखें) बनाई जाती है। इसमें डिफ़ॉल्ट पैरामीटर होते हैं और यह एकल संबद्ध प्रॉक्सी से बनी होती है। यदि आप गैर-डिफ़ॉल्ट पैरामीटर का उपयोग करना चाहते हैं, तो आपको स्पष्ट रूप से एक चेन बनानी होगी।
चेन्स को chains अनुभाग में चेन संरचनाओं के मानचित्र के रूप में घोषित किया जाना चाहिए। मानचित्र कुंजियाँ स्वतंत्र रूप से चुनी जाती हैं लेकिन routes परिभाषा में उपयोग की गई कुंजियों से मेल खानी चाहिए, और proxies अनुभाग की मानचित्र कुंजियों से भिन्न होनी चाहिए। चेन संरचनाओं में proxychains जैसे पैरामीटर होते हैं (cf. https://github.com/rofl0r/proxychains-ng):
proxyDns: बूलियन, वैकल्पिक, डिफ़ॉल्ट truetcpConnectTimeout: पूर्णांक, वैकल्पिक, डिफ़ॉल्ट 1000 (सॉकेट कनेक्ट करते समय उपयोग किया जाता है, या तो चेन के पहले प्रॉक्सी से या सीधे लक्ष्य से)tcpReadTimeout: पूर्णांक, वैकल्पिक, डिफ़ॉल्ट 2000 (कनेक्टेड सॉकेट पर प्रॉक्सी हैंडशेक प्रतिक्रियाएँ पढ़ते समय उपयोग किया जाता है)proxies: स्ट्रिंग सूची, वैकल्पिक, डिफ़ॉल्ट खाली सूचीchain की proxies कुंजी में proxies अनुभाग में कुंजियों के रूप में घोषित प्रॉक्सी नामों की एक सरणी होनी चाहिए। जैसा कि पिछले पैराग्राफ में उल्लेख किया गया है, proxies अनुभाग में घोषित प्रत्येक प्रॉक्सी के लिए, उसी नाम के साथ एक अंतर्निहित चेन (अगला पैराग्राफ देखें) बनाई जाती है। इसमें डिफ़ॉल्ट पैरामीटर होते हैं और यह एकल संबद्ध प्रॉक्सी से बनी होती है।
रूटिंग के लिए अंतर्निहित कॉन्फ़िगरेशन मोड कॉन्फ़िगरेशन फ़ाइल के माध्यम से है। यह पतों को चेन नामों के साथ जोड़ता है। फ़ाइल में रूटिंग टेबल्स का एक मानचित्र होना चाहिए। मानचित्र कुंजियाँ स्वतंत्र रूप से चुनी जाती हैं लेकिन servers अनुभाग में उपयोग की गई कुंजियों से मेल खानी चाहिए। प्रत्येक रूटिंग टेबल में एक default कुंजी होती है जो डिफ़ॉल्ट रूट को दर्शाती है और एक blocks कुंजी होती है जो नियम ब्लॉकों की एक सरणी है। प्रत्येक नियम ब्लॉक में एक comment, नियमों का एक सेट, और एक संबद्ध चेन नाम होता है। नियमों का मूल्यांकन किया जाता है: host:port प्रारूप में एक पता दिए जाने पर, वे true या false हो सकते हैं। किसी दिए गए पते के लिए, ब्लॉकों का मूल्यांकन उनके घोषणा क्रम में किया जाता है। ब्लॉकों को disable फ़ील्ड को true पर सेट करके अक्षम किया जा सकता है। यह "कमेंटिंग" का एक रूप प्रदान करता है, जो JSON में संभव नहीं है। मूल्यांकन पहले उस ब्लॉक पर रुक जाता है जो true है और संबद्ध चेन नाम लौटाया जाता है। प्रत्येक खोला गया सर्वर (servers अनुभाग से) कॉन्फ़िगरेशन से एक रूटिंग टेबल के साथ जुड़ा होता है। प्रत्येक सर्वर पर प्राप्त अनुरोधों को मेल खाती रूटिंग टेबल के अनुसार रूट किया जाता है। यदि सभी ब्लॉक false मूल्यांकित होते हैं तो डिफ़ॉल्ट रूट का उपयोग किया जाता है। यदि default परिभाषित नहीं है, तो कनेक्शन डिफ़ॉल्ट रूप से छोड़ दिए जाते हैं।
ब्लॉक फ़ील्ड्स:
comment (स्ट्रिंग)rules (Rule या RuleCombo)route (स्ट्रिंग)disable (बूलियन)Rule फ़ील्ड्स:
rule (स्ट्रिंग): नियम प्रकार, regexp, subnet।variable (स्ट्रिंग): regexp मूल्यांकन के लिए चर, host, port या addr (host:port)।content (स्ट्रिंग): नियम की सामग्री, नियम प्रकार पर निर्भर करती है (नीचे देखें)।negate (बूलियन) [वैकल्पिक]: नियम को नकारना है या नहीं।RuleCombo फ़ील्ड्स:
rule1 (Rule या RuleCombo): बायां ऑपरेंड।op (स्ट्रिंग): ऑपरेटर, AND, And, and, &, &&, OR, Or, or, |, ||।rule2 (Rule या RuleCombo): दायां ऑपरेंड।