
मल्टी-होस्ट UFW फ़ायरवॉल डैशबोर्ड — नियमों को सरल अंग्रेज़ी में समझाता है, सुरक्षा अंतराल का पता लगाता है, और कनेक्शन डायग्नोस्टिक्स प्रदान करता है
मल्टी-होस्ट UFW फ़ायरवॉल डैशबोर्ड। Linux होस्ट से SSH के माध्यम से जुड़ता है, फ़ायरवॉल नियमों और सुनने वाले पोर्ट को पार्स करता है, सब कुछ सरल भाषा में समझाता है, और सुरक्षा अंतराल को चिह्नित करता है।

| मार्ग | विवरण |
|---|---|
/ | होस्ट कार्ड, सेवा पिल्स, अंतराल गणना के साथ अवलोकन डैशबोर्ड |
/host/{name} | टैब्ड व्यू के साथ होस्ट विवरण: व्याख्याए गए नियम, अनकवर्ड पोर्ट, सुनने वाले पोर्ट, कच्चा आउटपुट |
/diagnose | नियम-दर-नियम ट्रेस विज़ुअलाइज़ेशन के साथ कनेक्शन डायग्नोस्टिक टूल |
/login | सत्र-आधारित प्रमाणीकरण |
Browser --> Cloudflare Tunnel --> Reverse Proxy --> FencePost (:8890)
FastAPI container
|-- SSH --> Host 1 (ufw status, ss -tlnp)
|-- SSH --> Host 2
|-- SSH --> Host N
'-- POST --> Notification webhook
FencePost केवल-पढ़ने योग्य है -- यह कभी भी फ़ायरवॉल नियमों को संशोधित नहीं करता, केवल उन पर रिपोर्ट करता है।
<user> ALL=(ALL) NOPASSWD: /usr/sbin/ufw status verbose, /usr/sbin/ufw status numbered, /usr/bin/ss -tlnp
git clone <repo-url> && cd fencepost
# अपनी SSH कुंजी जोड़ें
cp ~/.ssh/your_key ssh/id_ed25519
chmod 600 ssh/id_ed25519
# टेम्पलेट से अपनी पर्यावरण फ़ाइल बनाएँ
cp .env.example .env
# वास्तविक क्रेडेंशियल्स के साथ .env संपादित करें
timezone: Australia/Melbourne
hosts:
- name: My Server
hostname: 192.168.1.10
ssh_user: deploy
ssh_port: 22
is_docker_host: false
networks:
"192.168.1.0/24": "LAN"
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
# एनवी वेरिएबल लोड करें (bash/zsh)
export $(grep -v '^#' .env | xargs)
uvicorn app.main:app --reload --port 8890
http://localhost:8890 खोलें।
नोट: स्थानीय मोड config.yaml (ssh.key_path) में निर्दिष्ट पथ पर SSH कुंजी का उपयोग करता है। स्थानीय विकास के लिए आप इसे अपने स्थानीय ssh/id_ed25519 पर ओवरराइड करना चाह सकते हैं:
ssh:
key_path: ssh/id_ed25519
timeout: 10
docker compose up -d --build
http://localhost:8890 खोलें। कंटेनर compose.yaml के माध्यम से स्वचालित रूप से .env से क्रेडेंशियल पढ़ता है।
| अनुभाग | उद्देश्य |
|---|---|
timezone | प्रदर्शित टाइमस्टैम्प के लिए IANA टाइमज़ोन (जैसे Australia/Melbourne, UTC) |
hosts | SSH लक्ष्यों की सारणी: name, hostname, ssh_user, ssh_port, is_docker_host |
ssh | key_path (निजी कुंजी का पथ) और timeout सेकंड में |
networks | VLAN के लिए CIDR-से-नाम मैपिंग -- नियम स्पष्टीकरण और डायग्नोस्टिक्स में उपयोग किया जाता है |
devices | डायग्नोज़ पेज पर त्वरित-चयन बटनों के लिए नामित IP |
notifications | वैकल्पिक वेबहुक: url, channel (API कुंजी env वेरिएबल के माध्यम से सेट) |
| वेरिएबल | डिफ़ॉल्ट | विवरण |
|---|---|---|
FENCEPOST_USERNAME | admin | लॉगिन उपयोगकर्ता नाम |
FENCEPOST_PASSWORD | fencepost | लॉगिन पासवर्ड |
FENCEPOST_SECRET_KEY | change-me | सत्र कुकी हस्ताक्षर कुंजी |
FENCEPOST_CONFIG | config.yaml | कॉन्फ़िग फ़ाइल का पथ |
NOTIFICATIONS_API_KEY | अधिसूचना वेबहुक के लिए बियरर टोकन |
क्रेडेंशियल .env (gitignored) में संग्रहीत होते हैं और compose.yaml द्वारा संदर्भित होते हैं। रिपॉजिटरी में कभी भी रहस्य न डालें।
app/
main.py # FastAPI रूट्स और प्रमाणीकरण
models.py # HostFirewallState, UFWRule, ListeningPort डेटाक्लासेस
parser.py # ufw status और ss आउटपुट को पार्स करता है
explainer.py # नियमों को सरल अंग्रेजी में अनुवादित करता है
diagnose.py # कनेक्शन डायग्नोस्टिक इंजन
gap_detector.py # अनकवर्ड सुनने वाले पोर्ट ढूँढ़ता है
ssh_client.py # Paramiko रैपर, समानांतर होस्ट फ़ेचिंग
eventfeed.py # परिवर्तन पहचान और वेबहुक पोस्टिंग
templates/
base.html # लेआउट, CSS, नेविगेशन
overview.html # होस्ट डैशबोर्ड ग्रिड
host_detail.html # प्रति-होस्ट टैब्ड विवरण दृश्य
diagnose.html # कनेक्शन डायग्नोस्टिक फॉर्म और परिणाम
login.html # प्रमाणीकरण पृष्ठ
config.yaml # होस्ट परिभाषाएँ, VLAN, डिवाइस, टाइमज़ोन
compose.yaml # Docker Compose सेवा परिभाषा
Dockerfile # Python 3.12 स्लिम इमेज
.env.example # पर्यावरण चर के लिए टेम्पलेट
ssh/ # SSH कुंजी निर्देशिका (कुंजी प्रतिबद्ध नहीं)
data/ # रनटाइम अवस्था (last_state.json, प्रतिबद्ध नहीं)
config.yaml में hosts: के अंतर्गत एक प्रविष्टि जोड़ेंssh-copy-id -i ssh/id_ed25519.pub user@host/etc/sudoers.d/fencepost बनाएँdocker compose up -d --buildजब config.yaml में NOTIFICATIONS_API_KEY env वेरिएबल के साथ कॉन्फ़िगर किया जाता है, तो FencePost प्रत्येक डैशबोर्ड रिफ्रेश पर परिवर्तन ईवेंट पोस्ट करता है:
ईवेंट में डुप्लिकेट को रोकने के लिए idempotency कुंजियाँ शामिल होती हैं।
MIT