703 lines
16 KiB
Markdown
703 lines
16 KiB
Markdown
|
|
# Threat Intelligence RSS Telegram Bot
|
||
|
|
|
||
|
|
A sophisticated Telegram bot that monitors cybersecurity RSS feeds and delivers real-time alerts to Telegram chats or topics. Automatically classifies content by severity (critical/high/medium/low), quality, and category (News, Malware, Threat Intel, OSINT, Research).
|
||
|
|
|
||
|
|
**Perfect for:** Security teams, SOC analysts, threat hunters, and cybersecurity enthusiasts who want curated threat intelligence delivered directly to Telegram.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Features
|
||
|
|
|
||
|
|
- **Multi-Category Feeds:** News, Malware, Threat Intel, OSINT, Research
|
||
|
|
- **Telegram Topics Support:** Different categories post to different topics in the same group
|
||
|
|
- **Intelligent Classification:** Auto-classifies articles by severity and quality
|
||
|
|
- **Duplicate Prevention:** Deduplicates articles across feeds and sources
|
||
|
|
- **Quality Filtering:** Filter by minimum quality score and severity levels
|
||
|
|
- **SQLite Tracking:** Persistent tracking of seen articles
|
||
|
|
- **Async Architecture:** High-performance async/await design
|
||
|
|
- **Feed Health Monitoring:** `/stats` command shows feed status
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Quick Start
|
||
|
|
|
||
|
|
### 1. Prerequisites
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Python 3.9+
|
||
|
|
python3 --version
|
||
|
|
|
||
|
|
# Install dependencies
|
||
|
|
pip install python-telegram-bot feedparser aiohttp beautifulsoup4
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. Get a Telegram Bot Token
|
||
|
|
|
||
|
|
1. Open Telegram and message [@BotFather](https://t.me/BotFather)
|
||
|
|
2. Send `/newbot`
|
||
|
|
3. Follow prompts to create your bot
|
||
|
|
4. Copy the token (looks like `123456789:ABCdefGHIjklMNOpqrsTUVwxyz`)
|
||
|
|
|
||
|
|
### 3. Configure Your Bot
|
||
|
|
|
||
|
|
**Option 1: Environment Variable**
|
||
|
|
```bash
|
||
|
|
export BOT_TOKEN="your_bot_token_here"
|
||
|
|
```
|
||
|
|
|
||
|
|
**Option 2: Create `.env` File**
|
||
|
|
```bash
|
||
|
|
# Create .env file in project directory
|
||
|
|
echo 'BOT_TOKEN=your_bot_token_here' > .env
|
||
|
|
```
|
||
|
|
|
||
|
|
### 4. Run the Bot
|
||
|
|
|
||
|
|
```bash
|
||
|
|
python3 threat_intel_bot.py
|
||
|
|
```
|
||
|
|
|
||
|
|
You should see:
|
||
|
|
```
|
||
|
|
🚀 Threat Intel Bot is running!
|
||
|
|
📊 0 subscribers loaded
|
||
|
|
```
|
||
|
|
|
||
|
|
### 5. Start Receiving Alerts
|
||
|
|
|
||
|
|
In Telegram:
|
||
|
|
1. Find your bot (search by the name you gave it)
|
||
|
|
2. Send `/start` to see available commands
|
||
|
|
3. Enable categories you want:
|
||
|
|
- `/on_news` - News feeds
|
||
|
|
- `/on_threat_intel` - Threat intelligence
|
||
|
|
- `/on_malware` - Malware analysis
|
||
|
|
- `/on_osint` - OSINT feeds
|
||
|
|
- `/on_research` - Security research
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Project Structure
|
||
|
|
|
||
|
|
```
|
||
|
|
rss/
|
||
|
|
├── threat_intel_bot.py # Main bot (commands, subscriptions, alerts)
|
||
|
|
├── rss_manager.py # RSS feed parsing and article extraction
|
||
|
|
├── content_classifier.py # Article classification (severity/quality)
|
||
|
|
├── check_feeds.py # Utility to check feed health
|
||
|
|
│
|
||
|
|
├── feeds/ # RSS feed configurations
|
||
|
|
│ ├── news_feeds.json # News sources
|
||
|
|
│ ├── malware_feeds.json # Malware analysis blogs
|
||
|
|
│ ├── threat_intel_feeds.json # Threat intelligence feeds
|
||
|
|
│ ├── osint_feeds.json # OSINT resources
|
||
|
|
│ └── research_feeds.json # Security research
|
||
|
|
│
|
||
|
|
├── subscribers.json # Subscriber data (auto-created)
|
||
|
|
└── seen_articles.db # SQLite DB tracking seen articles
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## File Reference: What to Edit
|
||
|
|
|
||
|
|
| What You Want to Do | File to Edit | Section |
|
||
|
|
|---------------------|--------------|---------|
|
||
|
|
| **Add/remove news feeds** | `feeds/news_feeds.json` | Add URL under category |
|
||
|
|
| **Add/remove threat intel feeds** | `feeds/threat_intel_feeds.json` | Add URL under category |
|
||
|
|
| **Add/remove malware feeds** | `feeds/malware_feeds.json` | Add URL under category |
|
||
|
|
| **Add/remove OSINT feeds** | `feeds/osint_feeds.json` | Add URL under category |
|
||
|
|
| **Add/remove research feeds** | `feeds/research_feeds.json` | Add URL under category |
|
||
|
|
| **Change quality threshold** | `.env` or environment | Set `MIN_QUALITY_SCORE=50` |
|
||
|
|
| **Filter by severity** | `.env` or environment | Set `ALLOWED_SEVERITIES=critical,high` |
|
||
|
|
| **Change polling interval** | `threat_intel_bot.py` | Line 475 (default: 300 seconds) |
|
||
|
|
| **Customize classification rules** | `content_classifier.py` | Keyword dictionaries |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Bot Commands
|
||
|
|
|
||
|
|
### User Commands
|
||
|
|
|
||
|
|
| Command | Description |
|
||
|
|
|---------|-------------|
|
||
|
|
| `/start` | Show welcome message and available commands |
|
||
|
|
| `/help` | Same as `/start` |
|
||
|
|
| `/on_news` | Subscribe to news feeds |
|
||
|
|
| `/on_malware` | Subscribe to malware analysis |
|
||
|
|
| `/on_threat_intel` | Subscribe to threat intelligence |
|
||
|
|
| `/on_osint` | Subscribe to OSINT feeds |
|
||
|
|
| `/on_research` | Subscribe to security research |
|
||
|
|
| `/off_news` | Unsubscribe from news |
|
||
|
|
| `/off_malware` | Unsubscribe from malware |
|
||
|
|
| `/off_threat_intel` | Unsubscribe from threat intel |
|
||
|
|
| `/off_osint` | Unsubscribe from OSINT |
|
||
|
|
| `/off_research` | Unsubscribe from research |
|
||
|
|
| `/stats` | Check feed health and status |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Using with Telegram Topics (Forum Groups)
|
||
|
|
|
||
|
|
**Setup:**
|
||
|
|
1. Create a Telegram group
|
||
|
|
2. Enable "Topics" in group settings
|
||
|
|
3. Create topics: "News", "Threat Intel", "Malware", etc.
|
||
|
|
4. Add your bot to the group
|
||
|
|
|
||
|
|
**Subscribe topics to categories:**
|
||
|
|
- Open "News" topic → Send `/on_news`
|
||
|
|
- Open "Threat Intel" topic → Send `/on_threat_intel`
|
||
|
|
- Open "Malware" topic → Send `/on_malware`
|
||
|
|
- Open "OSINT" topic → Send `/on_osint`
|
||
|
|
- Open "Research" topic → Send `/on_research`
|
||
|
|
|
||
|
|
**Result:** Each category posts to its own topic automatically!
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Managing RSS Feeds
|
||
|
|
|
||
|
|
### Feed File Structure
|
||
|
|
|
||
|
|
Each feed file (`feeds/*.json`) has this format:
|
||
|
|
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"category_name": {
|
||
|
|
"Feed Name": "https://example.com/rss.xml",
|
||
|
|
"Another Feed": "https://another.com/feed"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
**Example:** Add a new threat intel feed
|
||
|
|
|
||
|
|
**File:** `feeds/threat_intel_feeds.json`
|
||
|
|
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"threat_intel": {
|
||
|
|
"SANS ISC": "https://isc.sans.edu/rssfeed.xml",
|
||
|
|
"Your New Feed": "https://newfeed.com/rss.xml"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
**After editing:** Restart the bot
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Stop: Ctrl+C
|
||
|
|
# Start:
|
||
|
|
python3 threat_intel_bot.py
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Content Classification
|
||
|
|
|
||
|
|
### How Articles Are Classified
|
||
|
|
|
||
|
|
**Quality Score (0-100):**
|
||
|
|
- High-quality sources (Project Zero, Mandiant): +30 points
|
||
|
|
- Deep dive/technical analysis: +25 points
|
||
|
|
- Proof-of-concept/exploit: +20 points
|
||
|
|
- Research papers: +15 points
|
||
|
|
- Vulnerability advisory: +10 points
|
||
|
|
|
||
|
|
**Severity Levels:**
|
||
|
|
- **Critical:** Zero-days, active exploitation, RCE, ransomware
|
||
|
|
- **High:** Privilege escalation, auth bypass, code execution
|
||
|
|
- **Medium:** XSS, CSRF, information disclosure, DoS
|
||
|
|
- **Low:** Everything else
|
||
|
|
|
||
|
|
### Filtering Articles
|
||
|
|
|
||
|
|
**By Quality Score:**
|
||
|
|
```bash
|
||
|
|
# Only show high-quality articles (score 50+)
|
||
|
|
export MIN_QUALITY_SCORE=50
|
||
|
|
python3 threat_intel_bot.py
|
||
|
|
```
|
||
|
|
|
||
|
|
**By Severity:**
|
||
|
|
```bash
|
||
|
|
# Only critical and high severity
|
||
|
|
export ALLOWED_SEVERITIES="critical,high"
|
||
|
|
python3 threat_intel_bot.py
|
||
|
|
```
|
||
|
|
|
||
|
|
**Both:**
|
||
|
|
```bash
|
||
|
|
export MIN_QUALITY_SCORE=40
|
||
|
|
export ALLOWED_SEVERITIES="critical,high,medium"
|
||
|
|
python3 threat_intel_bot.py
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Advanced Configuration
|
||
|
|
|
||
|
|
### Environment Variables
|
||
|
|
|
||
|
|
Create `.env` file:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Required
|
||
|
|
BOT_TOKEN=123456789:ABCdefGHIjklMNOpqrsTUVwxyz
|
||
|
|
|
||
|
|
# Optional filters
|
||
|
|
MIN_QUALITY_SCORE=0 # 0-100 (default: 0 = no filtering)
|
||
|
|
ALLOWED_SEVERITIES=critical,high,medium,low # Comma-separated
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Checking Feed Health
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Check if all feeds are working
|
||
|
|
python3 check_feeds.py
|
||
|
|
|
||
|
|
# Or use the bot command
|
||
|
|
# In Telegram: /stats
|
||
|
|
```
|
||
|
|
|
||
|
|
**Output shows:**
|
||
|
|
- ✅ Online feeds (with article count)
|
||
|
|
- ❌ Offline/broken feeds (with error)
|
||
|
|
- Last update time
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Running as a Service (Linux)
|
||
|
|
|
||
|
|
### Systemd Service
|
||
|
|
|
||
|
|
**1. Create service file:**
|
||
|
|
|
||
|
|
```bash
|
||
|
|
sudo nano /etc/systemd/system/threat-intel-bot.service
|
||
|
|
```
|
||
|
|
|
||
|
|
**2. Add this content:**
|
||
|
|
|
||
|
|
```ini
|
||
|
|
[Unit]
|
||
|
|
Description=Threat Intelligence RSS Telegram Bot
|
||
|
|
After=network.target
|
||
|
|
|
||
|
|
[Service]
|
||
|
|
Type=simple
|
||
|
|
User=your_username
|
||
|
|
WorkingDirectory=/home/your_username/Documents/telegram-bots/rss
|
||
|
|
Environment="BOT_TOKEN=your_bot_token_here"
|
||
|
|
ExecStart=/usr/bin/python3 /home/your_username/Documents/telegram-bots/rss/threat_intel_bot.py
|
||
|
|
Restart=always
|
||
|
|
RestartSec=10
|
||
|
|
|
||
|
|
[Install]
|
||
|
|
WantedBy=multi-user.target
|
||
|
|
```
|
||
|
|
|
||
|
|
**3. Enable and start:**
|
||
|
|
|
||
|
|
```bash
|
||
|
|
sudo systemctl daemon-reload
|
||
|
|
sudo systemctl enable threat-intel-bot
|
||
|
|
sudo systemctl start threat-intel-bot
|
||
|
|
```
|
||
|
|
|
||
|
|
**4. Check status:**
|
||
|
|
|
||
|
|
```bash
|
||
|
|
sudo systemctl status threat-intel-bot
|
||
|
|
sudo journalctl -u threat-intel-bot -f # View logs
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Running with Docker (Optional)
|
||
|
|
|
||
|
|
### Dockerfile
|
||
|
|
|
||
|
|
```dockerfile
|
||
|
|
FROM python:3.11-slim
|
||
|
|
|
||
|
|
WORKDIR /app
|
||
|
|
|
||
|
|
# Install dependencies
|
||
|
|
RUN pip install python-telegram-bot feedparser aiohttp beautifulsoup4
|
||
|
|
|
||
|
|
# Copy bot files
|
||
|
|
COPY . /app
|
||
|
|
|
||
|
|
# Run bot
|
||
|
|
CMD ["python3", "threat_intel_bot.py"]
|
||
|
|
```
|
||
|
|
|
||
|
|
### Docker Compose
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
version: '3.8'
|
||
|
|
|
||
|
|
services:
|
||
|
|
threat-intel-bot:
|
||
|
|
build: .
|
||
|
|
container_name: threat-intel-bot
|
||
|
|
restart: unless-stopped
|
||
|
|
environment:
|
||
|
|
- BOT_TOKEN=${BOT_TOKEN}
|
||
|
|
- MIN_QUALITY_SCORE=${MIN_QUALITY_SCORE:-0}
|
||
|
|
- ALLOWED_SEVERITIES=${ALLOWED_SEVERITIES:-critical,high,medium,low}
|
||
|
|
volumes:
|
||
|
|
- ./subscribers.json:/app/subscribers.json
|
||
|
|
- ./seen_articles.db:/app/seen_articles.db
|
||
|
|
```
|
||
|
|
|
||
|
|
**Run:**
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Create .env file first
|
||
|
|
docker compose up -d
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Customization
|
||
|
|
|
||
|
|
### Add Your Own Feed Categories
|
||
|
|
|
||
|
|
**1. Edit `threat_intel_bot.py`:**
|
||
|
|
|
||
|
|
Find `CATEGORY_CONFIG` (line 37):
|
||
|
|
|
||
|
|
```python
|
||
|
|
CATEGORY_CONFIG = {
|
||
|
|
"news": {"label": "News", "emoji": "📰", "feeds_file": "feeds/news_feeds.json"},
|
||
|
|
"malware": {"label": "Malware", "emoji": "🦠", "feeds_file": "feeds/malware_feeds.json"},
|
||
|
|
# Add new category:
|
||
|
|
"your_category": {"label": "Your Category", "emoji": "🔥", "feeds_file": "feeds/your_feeds.json"},
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
**2. Create feed file:**
|
||
|
|
|
||
|
|
```bash
|
||
|
|
nano feeds/your_feeds.json
|
||
|
|
```
|
||
|
|
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"your_category": {
|
||
|
|
"Feed Name 1": "https://example.com/rss.xml",
|
||
|
|
"Feed Name 2": "https://another.com/feed"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
**3. Restart bot**
|
||
|
|
|
||
|
|
Users can now use `/on_your_category` and `/off_your_category`
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### Customize Classification Keywords
|
||
|
|
|
||
|
|
**File:** `content_classifier.py`
|
||
|
|
|
||
|
|
**Example:** Add new critical keywords
|
||
|
|
|
||
|
|
```python
|
||
|
|
CRITICAL_KEYWORDS = {
|
||
|
|
'zero-day', '0day', 'zero day',
|
||
|
|
# Add your keywords:
|
||
|
|
'your_critical_term',
|
||
|
|
'another_urgent_keyword',
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
**Example:** Add high-quality sources
|
||
|
|
|
||
|
|
```python
|
||
|
|
HIGH_QUALITY_SOURCES = {
|
||
|
|
'watchTowr Labs', 'Doyensec Blog',
|
||
|
|
# Add your sources (exact name from feed):
|
||
|
|
'Your Favorite Security Blog',
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Troubleshooting
|
||
|
|
|
||
|
|
### Bot Not Responding
|
||
|
|
|
||
|
|
**Check if running:**
|
||
|
|
```bash
|
||
|
|
ps aux | grep threat_intel_bot.py
|
||
|
|
```
|
||
|
|
|
||
|
|
**View logs:**
|
||
|
|
```bash
|
||
|
|
# If running as service
|
||
|
|
sudo journalctl -u threat-intel-bot -f
|
||
|
|
|
||
|
|
# If running manually, check terminal output
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### No Alerts Received
|
||
|
|
|
||
|
|
**1. Check subscription:**
|
||
|
|
```
|
||
|
|
In Telegram: /stats
|
||
|
|
```
|
||
|
|
|
||
|
|
Should show you're subscribed.
|
||
|
|
|
||
|
|
**2. Check feeds are working:**
|
||
|
|
```bash
|
||
|
|
python3 check_feeds.py
|
||
|
|
```
|
||
|
|
|
||
|
|
**3. Check quality/severity filters:**
|
||
|
|
- If `MIN_QUALITY_SCORE=80`, only very high-quality articles pass
|
||
|
|
- If `ALLOWED_SEVERITIES=critical`, only critical alerts show
|
||
|
|
|
||
|
|
**Lower thresholds:**
|
||
|
|
```bash
|
||
|
|
export MIN_QUALITY_SCORE=0
|
||
|
|
export ALLOWED_SEVERITIES="critical,high,medium,low"
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### Feed Parse Errors
|
||
|
|
|
||
|
|
**Symptom:** Logs show "Error fetching feed"
|
||
|
|
|
||
|
|
**Causes:**
|
||
|
|
- Feed URL is broken/changed
|
||
|
|
- Feed server is down
|
||
|
|
- Network connectivity issue
|
||
|
|
|
||
|
|
**Fix:**
|
||
|
|
1. Check feed URL in browser
|
||
|
|
2. Update URL in `feeds/*.json` if changed
|
||
|
|
3. Remove dead feeds
|
||
|
|
4. Restart bot
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### SQLite Database Issues
|
||
|
|
|
||
|
|
**Reset seen articles (get all articles again):**
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Stop bot
|
||
|
|
rm seen_articles.db
|
||
|
|
|
||
|
|
# Restart bot (will recreate DB)
|
||
|
|
python3 threat_intel_bot.py
|
||
|
|
```
|
||
|
|
|
||
|
|
**Note:** First run marks all existing articles as seen (no alerts). New articles after that trigger alerts.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Data Files
|
||
|
|
|
||
|
|
### subscribers.json
|
||
|
|
|
||
|
|
**Format:**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"subscribers": {
|
||
|
|
"123456789": {
|
||
|
|
"topic_id": null,
|
||
|
|
"feed_types": ["news", "threat_intel"]
|
||
|
|
},
|
||
|
|
"987654321_12345": {
|
||
|
|
"topic_id": 12345,
|
||
|
|
"feed_types": ["malware"]
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
**Explanation:**
|
||
|
|
- Key format: `chat_id` or `chat_id_topic_id`
|
||
|
|
- `topic_id`: null for private/group, number for forum topics
|
||
|
|
- `feed_types`: Array of subscribed categories
|
||
|
|
|
||
|
|
**Manual editing:** You can edit this file, but bot does it automatically.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### seen_articles.db
|
||
|
|
|
||
|
|
**SQLite database tracking processed articles.**
|
||
|
|
|
||
|
|
**Schema:**
|
||
|
|
```sql
|
||
|
|
CREATE TABLE seen_articles (
|
||
|
|
article_key TEXT PRIMARY KEY,
|
||
|
|
seen_at TEXT NOT NULL
|
||
|
|
);
|
||
|
|
```
|
||
|
|
|
||
|
|
**View contents:**
|
||
|
|
```bash
|
||
|
|
sqlite3 seen_articles.db "SELECT * FROM seen_articles LIMIT 10;"
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Best Practices
|
||
|
|
|
||
|
|
### 1. Start with Default Filters
|
||
|
|
Don't set quality/severity filters initially - see what you get first, then filter.
|
||
|
|
|
||
|
|
### 2. Use Topics for Organization
|
||
|
|
If using in a group, enable Topics and route each category to its topic.
|
||
|
|
|
||
|
|
### 3. Monitor Feed Health
|
||
|
|
Run `/stats` weekly to check for broken feeds.
|
||
|
|
|
||
|
|
### 4. Curate Your Feeds
|
||
|
|
Start with defaults, add/remove based on signal-to-noise ratio.
|
||
|
|
|
||
|
|
### 5. Run as a Service
|
||
|
|
Use systemd so bot survives reboots and crashes.
|
||
|
|
|
||
|
|
### 6. Backup Subscriber Data
|
||
|
|
```bash
|
||
|
|
cp subscribers.json subscribers.backup.json
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Feed Categories Explained
|
||
|
|
|
||
|
|
### News Feeds (`feeds/news_feeds.json`)
|
||
|
|
Daily cybersecurity news, breach announcements, general updates.
|
||
|
|
- **Update frequency:** Multiple times per day
|
||
|
|
- **Volume:** High
|
||
|
|
- **Use case:** Stay informed on current events
|
||
|
|
|
||
|
|
### Malware Feeds (`feeds/malware_feeds.json`)
|
||
|
|
Malware analysis, reverse engineering blogs, threat reports.
|
||
|
|
- **Update frequency:** Daily to weekly
|
||
|
|
- **Volume:** Medium
|
||
|
|
- **Use case:** Malware research, threat hunting
|
||
|
|
|
||
|
|
### Threat Intel Feeds (`feeds/threat_intel_feeds.json`)
|
||
|
|
Vendor threat intelligence, APT reports, threat actor profiles.
|
||
|
|
- **Update frequency:** Daily to weekly
|
||
|
|
- **Volume:** Medium
|
||
|
|
- **Use case:** Threat intelligence, SOC operations
|
||
|
|
|
||
|
|
### OSINT Feeds (`feeds/osint_feeds.json`)
|
||
|
|
Open-source intelligence, tools, techniques, investigations.
|
||
|
|
- **Update frequency:** Weekly
|
||
|
|
- **Volume:** Low to medium
|
||
|
|
- **Use case:** OSINT research, investigative work
|
||
|
|
|
||
|
|
### Research Feeds (`feeds/research_feeds.json`)
|
||
|
|
Deep technical research, vulnerability analysis, exploit development.
|
||
|
|
- **Update frequency:** Weekly to monthly
|
||
|
|
- **Volume:** Low (high quality)
|
||
|
|
- **Use case:** Learning, in-depth technical knowledge
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Contributing Feeds
|
||
|
|
|
||
|
|
**Want to add a good feed?** Edit the appropriate JSON file and submit a pull request or update your fork.
|
||
|
|
|
||
|
|
**Criteria for good feeds:**
|
||
|
|
- Reliable RSS/Atom feed
|
||
|
|
- Regular updates (at least monthly)
|
||
|
|
- Quality content (no spam/clickbait)
|
||
|
|
- Relevant to cybersecurity
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Performance
|
||
|
|
|
||
|
|
**Typical resource usage:**
|
||
|
|
- **CPU:** <5% (idle), 10-20% during feed fetch
|
||
|
|
- **RAM:** ~50-100MB
|
||
|
|
- **Network:** Minimal (fetches feeds every 5 minutes)
|
||
|
|
- **Disk:** ~10MB (grows slowly with seen articles DB)
|
||
|
|
|
||
|
|
**Scaling:**
|
||
|
|
- Tested with 50+ feeds
|
||
|
|
- Handles 100+ subscribers
|
||
|
|
- Processes ~500 articles/day
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Security Considerations
|
||
|
|
|
||
|
|
### Bot Token
|
||
|
|
- **Never commit** `.env` file to Git
|
||
|
|
- Treat bot token like a password
|
||
|
|
- Regenerate if leaked (via @BotFather)
|
||
|
|
|
||
|
|
### Network Access
|
||
|
|
- Bot fetches public RSS feeds (outbound HTTPS)
|
||
|
|
- Telegram API (outbound HTTPS)
|
||
|
|
- No inbound connections needed
|
||
|
|
|
||
|
|
### Data Privacy
|
||
|
|
- Subscriber data stored locally in `subscribers.json`
|
||
|
|
- No data sent to third parties
|
||
|
|
- Article URLs/metadata only (no personal data)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## FAQ
|
||
|
|
|
||
|
|
**Q: How often does the bot check feeds?**
|
||
|
|
A: Every 5 minutes (configurable in `threat_intel_bot.py` line 475)
|
||
|
|
|
||
|
|
**Q: Can I run multiple bots from same code?**
|
||
|
|
A: Yes, just use different bot tokens and run in separate directories
|
||
|
|
|
||
|
|
**Q: Does it support private feeds?**
|
||
|
|
A: No, only public RSS feeds. For private feeds, you'd need to add authentication
|
||
|
|
|
||
|
|
**Q: Can I export articles to a database?**
|
||
|
|
A: Articles are in `seen_articles.db` (SQLite). You can query it or extend the code
|
||
|
|
|
||
|
|
**Q: Why no alerts on first run?**
|
||
|
|
A: First run marks existing articles as seen to avoid spam. Only new articles after that trigger alerts
|
||
|
|
|
||
|
|
**Q: Can I get alerts in multiple languages?**
|
||
|
|
A: Bot messages are in English. Articles are in whatever language the feed provides
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## License
|
||
|
|
|
||
|
|
This project is open source. Use it for personal or commercial purposes.
|
||
|
|
|
||
|
|
No warranty provided. Use at your own risk.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Credits
|
||
|
|
|
||
|
|
Built with:
|
||
|
|
- [python-telegram-bot](https://python-telegram-bot.org/) - Telegram Bot API wrapper
|
||
|
|
- [feedparser](https://feedparser.readthedocs.io/) - RSS/Atom feed parser
|
||
|
|
- [aiohttp](https://docs.aiohttp.org/) - Async HTTP client
|
||
|
|
- [BeautifulSoup4](https://www.crummy.com/software/BeautifulSoup/) - HTML parsing
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
**Maintained for personal use - built for the cybersecurity community.**
|