ДИГИТАЛЕН СВЯТ

Регистрирайте безплатен акаунт днес, за да станете член! След като влезете, ще можете да участвате в този сайт, като добавяте свои собствени теми и публикации, както и да се свързвате с други членове чрез вашата лична пощенска кутия!

linux 🐋🚀 ЧАСТ 3: DevOps & Security инструменти - Docker, Python за автоматизация и още

toni

Administrator
Staff member

🐋 🚀 ЧАСТ 3: DevOps & Security инструменти - Docker, Python за автоматизация и още



За напреднали потребители, разработчици и ентусиасти на сигурността


🐋DOCKER И КОНТЕЙНЕРИЗАЦИЯ


📦ОСНОВНИ DOCKER КОМАНДИ

Bash:
# Инсталиране на Docker
sudo apt update
sudo apt install docker.io docker-compose
sudo systemctl enable --now docker
sudo usermod -aG docker $USER  # Добавяне на потребител в docker група

# Работа с образци (images)
docker pull ubuntu:22.04                  # Изтегляне на образ
docker images                             # Показване на всички образци
docker rmi <image_id>                     # Изтриване на образ
docker build -t myapp:latest .           # Създаване на образ

# Работа с контейнери
docker run -it ubuntu:22.04 /bin/bash    # Стартиране на интерактивен контейнер
docker run -d -p 80:80 nginx             # Стартиране в заден план
docker ps                                 # Активни контейнери
docker ps -a                              # Всички контейнери
docker stop <container_id>                # Спиране
docker start <container_id>               # Стартиране
docker rm <container_id>                  # Изтриване
docker exec -it <container_id> bash      # Влизане в работещ контейнер

# Мониторинг и логове
docker logs <container_id>                # Показване на логове
docker logs -f <container_id>             # Следене на логове в реално време
docker stats                              # Статистики за ресурсите
docker inspect <container_id>             # Детайлна информация


📝ПРИМЕРЕН Dockerfile

Bash:
# Dockerfile за Python приложение
FROM python:3.9-slim

# Задаване на работна директория
WORKDIR /app

# Копиране на зависимости
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Копиране на приложението
COPY . .

# Отваряне на порт
EXPOSE 8000

# Команда за стартиране
CMD ["python", "app.py"]


🐙 DOCKER-COMPOSE ЗА МНОГОКОНТЕЙНЕРНИ ПРИЛОЖЕНИЯ

YAML:
# docker-compose.yml
version: '3.8'

services:
web:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
depends_on:
- app

app:
build: ./app
environment:
- DATABASE_URL=postgres://user:pass@db:5432/mydb
volumes:
- ./app:/app

db:
image: postgres:13
environment:
POSTGRES_PASSWORD: secret
POSTGRES_DB: mydb
volumes:
- postgres_data:/var/lib/postgresql/data

volumes:
postgres_data:


🔒 DOCKER СИГУРНОСТ - BEST PRACTICES
Bash:
# Сканиране на образ за уязвимости
docker scan <image_name>

# Изпълнение на контейнер с ограничени права
docker run --read-only --tmpfs /tmp alpine

# Използване на non-root потребител в контейнер
# В Dockerfile:
# USER 1000

# Проверка на конфигурация
docker bench-security  # Инсталира се отделно

🐍 PYTHON ЗА АВТОМАТИЗАЦИЯ И СИГУРНОСТ

⚡ПОЛЕЗНИ ПИТОН БИБЛИОТЕКИ ЗА ХАКЕРИ

Python:
# requirements.txt
requests>=2.25.0
beautifulsoup4>=4.9.0
scapy>=2.4.0
paramiko>=2.7.0
cryptography>=3.0
pwntools>=4.0
sqlmap # За инсталация: pip install sqlmap
nmap # pip install python-nmap


🔍 МРЕЖОВО СКЕНИРАНЕ С ПИТОН

Python:
#!/usr/bin/env python3
# network_scanner.py

import nmap
import socket
from concurrent.futures import ThreadPoolExecutor

def scan_port(ip, port):
"""Сканиране на един порт"""
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(1)
result = sock.connect_ex((ip, port))
sock.close()

if result == 0:
try:
service = socket.getservbyport(port)
except:
service = "unknown"
return port, service
except:
pass
return None

def full_scan(ip, start_port=1, end_port=1024):
"""Пълно сканиране на портове"""
print(f"[*] Сканиране на {ip}")

open_ports = []
with ThreadPoolExecutor(max_workers=100) as executor:
futures = []
for port in range(start_port, end_port + 1):
futures.append(executor.submit(scan_port, ip, port))

for future in futures:
result = future.result()
if result:
port, service = result
print(f"[+] Порт {port} ({service}) е ОТВОРЕН")
open_ports.append((port, service))

return open_ports

# Използване
if __name__ == "__main__":
target = "192.168.1.1"
open_ports = full_scan(target)
print(f"\nОткрити {len(open_ports)} отворени порта")


🔐 ПЕНТЕСТ ИНСТРУМЕНТИ НА ПИТОН

Python:
#!/usr/bin/env python3
# basic_pentest_tool.py

import requests
import re
from urllib.parse import urljoin

class SimplePentestTool:
def __init__(self, target_url):
self.target_url = target_url
self.session = requests.Session()
self.session.headers.update({
'User-Agent': 'Mozilla/5.0 (Pentest Tool)'
})

def check_sql_injection(self):
"""Проверка за базови SQL инжекции"""
test_payloads = ["'", "\"", "' OR '1'='1", "' UNION SELECT null--"]

for payload in test_payloads:
test_url = f"{self.target_url}?id={payload}"
try:
response = self.session.get(test_url, timeout=5)

# Проверка за грешки в базата данни
error_patterns = [
"SQL syntax",
"MySQL",
"PostgreSQL",
"ORA-",
"Microsoft.*Database"
]

for pattern in error_patterns:
if re.search(pattern, response.text, re.IGNORECASE):
print(f"[!] Възможна SQL инжекция с payload: {payload}")
return True
except:
continue
return False

def directory_bruteforce(self, wordlist_path):
"""Брутфорс на директории"""
common_dirs = [
"admin", "login", "wp-admin", "backend",
"phpmyadmin", "test", "backup", "api"
]

print("[*] Търсене на директории...")
for directory in common_dirs:
url = urljoin(self.target_url, directory)
try:
response = self.session.get(url, timeout=3)
if response.status_code == 200:
print(f"[+] Намерена директория: {url}")
elif response.status_code == 403:
print(f"[!] Забранен достъп: {url}")
except:
pass

def check_headers(self):
"""Проверка на HTTP хедъри за сигурност"""
response = self.session.get(self.target_url)
headers = response.headers

security_headers = {
'X-Frame-Options': 'Защита от clickjacking',
'X-Content-Type-Options': 'Защита от MIME sniffing',
'X-XSS-Protection': 'Защита от XSS',
'Content-Security-Policy': 'CSP политика',
'Strict-Transport-Security': 'HSTS'
}

print("[*] Проверка на сигурностните хедъри:")
for header, description in security_headers.items():
if header in headers:
print(f"  [+] {header}: {headers[header]} ({description})")
else:
print(f"  [-] Липсва: {header} ({description})")

# Използване
if __name__ == "__main__":
tool = SimplePentestTool("http://testphp.vulnweb.com")
tool.check_headers()
tool.check_sql_injection()
tool.directory_bruteforce("common_dirs.txt")


🤖 АВТОМАТИЗАЦИЯ НА РЕПЕТИТИВНИ ЗАДАЧИ

Python:
#!/usr/bin/env python3
# automation_bot.py

import os
import subprocess
import logging
from datetime import datetime
from pathlib import Path

class AutomationBot:
def __init__(self, config_file="bot_config.json"):
self.config = self.load_config(config_file)
self.setup_logging()

def setup_logging(self):
"""Настройка на логването"""
log_dir = Path("logs")
log_dir.mkdir(exist_ok=True)

logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler(f"logs/automation_{datetime.now():%Y%m%d}.log"),
logging.StreamHandler()
]
)
self.logger = logging.getLogger(__name__)

def run_command(self, command, description=""):
"""Изпълнение на shell команда с логване"""
self.logger.info(f"Изпълнявам: {description}")
self.logger.debug(f"Команда: {command}")

try:
result = subprocess.run(
command,
shell=True,
capture_output=True,
text=True,
timeout=300
)

if result.returncode == 0:
self.logger.info(f"Успешно: {description}")
if result.stdout:
self.logger.debug(f"Изход:\n{result.stdout}")
else:
self.logger.error(f"Грешка: {description}")
self.logger.error(f"STDERR:\n{result.stderr}")

return result
except subprocess.TimeoutExpired:
self.logger.error(f"Таймаут: {description}")
except Exception as e:
self.logger.error(f"Неочаквана грешка: {e}")

return None

def daily_backup(self):
"""Дневен бекъп на важни данни"""
backup_dir = Path(f"backups/{datetime.now():%Y%m%d}")
backup_dir.mkdir(parents=True, exist_ok=True)

tasks = [
{
"cmd": f"tar -czf {backup_dir}/etc_backup.tar.gz /etc",
"desc": "Бекъп на /etc директория"
},
{
"cmd": f"mysqldump -u root --all-databases > {backup_dir}/mysql_backup.sql",
"desc": "Бекъп на MySQL бази"
},
{
"cmd": f"rsync -av /var/www {backup_dir}/",
"desc": "Бекъп на уебсайтове"
}
]

self.logger.info("Стартиране на дневен бекъп")
for task in tasks:
self.run_command(task["cmd"], task["desc"])

# Почистване на стари бекъпове
self.cleanup_old_backups()

def cleanup_old_backups(self, days_to_keep=7):
"""Почистване на стари бекъпове"""
backup_root = Path("backups")
if not backup_root.exists():
return

cutoff_date = datetime.now().timestamp() - (days_to_keep * 86400)

for backup_dir in backup_root.iterdir():
if backup_dir.is_dir():
dir_mtime = backup_dir.stat().st_mtime
if dir_mtime < cutoff_date:
self.logger.info(f"Изтривам стар бекъп: {backup_dir}")
subprocess.run(["rm", "-rf", str(backup_dir)])

def system_health_check(self):
"""Проверка на здравословното състояние на системата"""
checks = [
("df -h", "Дисково пространство"),
("free -h", "Свободна памет"),
("uptime", "Зареждане на системата"),
("ss -tuln | grep LISTEN", "Отворени портове"),
("journalctl -xe --since '1 hour ago' | tail -20", "Последни грешки")
]

self.logger.info("Проверка на системата")
for cmd, desc in checks:
result = self.run_command(cmd, desc)
if result and result.stdout:
print(f"\n=== {desc} ===")
print(result.stdout)

def monitor_logs(self, log_files, keywords):
"""Мониторинг на логове за ключови думи"""
for log_file in log_files:
if Path(log_file).exists():
self.logger.info(f"Мониторинг на {log_file}")
try:
with open(log_file, 'r') as f:
lines = f.readlines()[-100:]  # Последните 100 реда

for line in lines:
for keyword in keywords:
if keyword.lower() in line.lower():
self.logger.warning(f"Намерено в {log_file}: {line.strip()}")
except Exception as e:
self.logger.error(f"Грешка при четене на {log_file}: {e}")

# Примерна конфигурация
if __name__ == "__main__":
bot = AutomationBot()

# Изпълняване на дневни задачи
bot.daily_backup()
bot.system_health_check()

# Мониторинг на логове
log_files = ["/var/log/syslog", "/var/log/auth.log"]
alert_keywords = ["error", "failed", "denied", "attack", "intrusion"]
bot.monitor_logs(log_files, alert_keywords)


☸️ ОСНОВНИ KUBERNETES КОМАНДИ

Bash:
# Инсталиране на minikube (локален K8s)
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
minikube start

# Основни kubectl команди
kubectl get pods # Всички подове
kubectl get pods -n <namespace>           # Подове в определен namespace
kubectl get deployments # Деплоймънти
kubectl get services # Сървиси
kubectl get nodes  # Нодове в клъстъра

kubectl describe pod <pod_name>           # Детайли за под
kubectl logs <pod_name>                   # Логове от под
kubectl exec -it <pod_name> -- /bin/bash  # Влизане в под

kubectl apply -f deployment.yaml          # Прилагане на конфигурация
kubectl delete -f deployment.yaml         # Изтриване

kubectl scale deployment <name> --replicas=3  # Скалиране


📄 ПРИМЕРЕН KUBERNETES DEPLOYMENT

YAML:
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
resources:
limits:
memory: "128Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 10
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer

🔧 CI/CD С АВТОМАТИЗАЦИЯ

⚙️ GITHUB ACTIONS ПРИМЕР

YAML:
# .github/workflows/security-scan.yml
name: Security Scan

on: [push, pull_request]

jobs:
security-scan:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2

- name: Run Bandit (Python security)
run: |
pip install bandit
bandit -r . -f json -o bandit-report.json

- name: Run Trivy (Container scan)
uses: aquasecurity/trivy-action@master
with:
image-ref: 'myapp:latest'
format: 'sarif'
output: 'trivy-results.sarif'

- name: Dependency check
uses: dependency-check/Dependency-Check_Action@main
with:
project: 'MyApp'
path: '.'
format: 'HTML'

- name: Upload reports
uses: actions/upload-artifact@v2
with:
name: security-reports
path: |
bandit-report.json
trivy-results.sarif
dependency-check-report.html


🔄 JENKINS PIPELINE ПРИМЕР

Bash:
// Jenkinsfile
pipeline {
agent any

stages {
stage('Checkout') {
steps {
git 'https://github.com/my/repo.git'
}
}

stage('Build') {
steps {
sh 'docker build -t myapp:${BUILD_ID} .'
}
}

stage('Test') {
steps {
sh 'docker run myapp:${BUILD_ID} pytest'
sh 'docker run --security-opt=no-new-privileges myapp:${BUILD_ID} security-scan'
}
}

stage('Scan') {
steps {
sh 'trivy image myapp:${BUILD_ID}'
sh 'dockle myapp:${BUILD_ID}'
}
}

stage('Deploy') {
when {
branch 'main'
}
steps {
sh 'kubectl apply -f k8s/deployment.yaml'
sh 'kubectl rollout status deployment/myapp'
}
}
}

post {
always {
cleanWs()
}
success {
slackSend(color: 'good', message: "Build ${BUILD_ID} успешен!")
}
failure {
slackSend(color: 'danger', message: "Build ${BUILD_ID} неуспешен!")
}
}
}

🎯 ПРАКТИЧЕСКИ ПРОЕКТИ ЗА УПРАЖНЕНИЕ

🎓 ПРОЕКТ 1: Автоматизиран пентест скрипт

Python:
#!/usr/bin/env python3
# auto_pentest.py
"""
Функционалности:
1. Сканиране на портове
2. Търсене на уязвими директории
3. Проверка за SQL инжекции
4. Тест за XSS
5. Генериране на отчет
"""
# Имплементация...


🎓 ПРОЕКТ 2: Dockerized уеб приложение с мониторинг

Bash:
# Структура:
myapp/
├── docker-compose.yml
├── backend/
│   ├── Dockerfile
│   └── src/
├── frontend/
│   ├── Dockerfile
│   └── src/
├── monitoring/
│   ├── prometheus.yml
│   └── grafana.ini
└── database/
└── init.sql


🎓 ПРОЕКТ 3: Kubernetes клъстър за уроци

Bash:
# Стъпки:
1. Инсталиране на minikube/k3s
2. Деploy на уеб приложение
3. Конфигуриране на ingress
4. Настройване на autoscaling
5. Мониторинг с Prometheus + Grafana

📚 РЕСУРСИ И НАСОКИ

🌐 ПОЛЕЗНИ САЙТОВЕ

📖 КНИГИ

  1. "Black Hat Python" - Justin Seitz
  2. "The Docker Book" - James Turnbull
  3. "Kubernetes in Action" - Marko Luksa
  4. "Web Application Security" - Andrew Hoffman

🎓ОНЛАЙН КУРСОВЕ


ВАЖНИ ПРЕДУПРЕЖДЕНИЯ И ЕТИКА

🚫 КАКВО НЕ ПРАВИМ

  1. Не тествайте върху системи, които не ви принадлежат
  2. Не използвайте инструментите за злонамерени цели
  3. Спазвайте законите и регулациите
  4. Винаги имайте писмено разрешение за пентест

✅ ЕТИЧЕН ХАКИНГ

  1. Вземи разрешение преди тестване
  2. Докладвай намерените уязвимости
  3. Съхранявай данните конфиденциално
  4. Учи и споделяй знанията

🏆 СЪВЕТИ ЗА РАЗВИТИЕ

  1. Започни с основите - разбирай как работи мрежата
  2. Практикувай в сигурна среда - виртуални машини, лаборатории
  3. Следвай блогове и форуми - Reddit, Stack Overflow, специализирани форуми
  4. Участвай в CTF състезания - HackTheBox, TryHackMe
  5. Кontributвай към open-source проекти

🤔 ЧЕСТО ЗАДАВАНИ ВЪПРОСИ

Q: Откъде да започна с Docker?
A:
Инсталирай Docker Desktop или Docker Engine, и започни с docker run hello-world

Q: Нужно ли е да знам Python за сигурност?
A:
Не е задължително, но значително ще ти помогне за автоматизация

Q: Мога ли да практикувам сигурност легално?
A:
Да! Използвай сайтове като HackTheBox, TryHackMe, или си създай собствена лаборатория

Q: Колко време отнема да се науча?
A:
Зависи от времето, което отделяш. С 2-3 часа на ден, за 6 месеца можеш да станеш компетентен



🎯 Следваща стъпка: Избери една технология (Docker, Python или K8s) и се фокусирай върху нея 30 дни. Практикувай всеки ден!

💬 Имате въпроси? Искате специфичен пример или помощ с проект? Пишете в коментарите!

🔗 Част 1: [ Пълен Чийт лист с Linux Команди (От A до Z)]
🔗 Част 2: [Напреднали Linux техники и инструменти]
🔗 Част 3: [Вече сте тук] 🐋🐍



Създадено с ❤️ за българската общност на разработчици и ентусиасти по сигурност. Споделяйте знанието!

🖋️ Автор: Тони Ангелчовски | Ексклузивно за DTGaraGe
🔒 Копирането и препубликуването без разрешение не е позволено
☕ Подкрепи проекта:
https://dtgarage.eu/donate
 
Last edited:
Top Bottom
🛡️ Този сайт използва аналитични инструменти за подобряване на потребителското изживяване. Никакви лични данни не се събират. С продължаването си в Потока приемаш тази философия на прозрачност и уважение.