mirror of
http://git.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion/nihilist/blog-contributions.git
synced 2025-05-15 23:57:02 +00:00
push to prod (1/2)
This commit is contained in:
parent
ff44033d47
commit
0969c49c48
8 changed files with 975 additions and 1 deletions
31
README.md
31
README.md
|
@ -1 +1,30 @@
|
|||
v2
|
||||
# Nihilist OPSEC blog
|
||||
mkdocs-material markdown edition
|
||||
|
||||
# How to run
|
||||
|
||||
## Docker
|
||||
|
||||
To run the blog yourself, you'll need a Tor daemon running with socks5 proxy at `localhost:9050`. It will be used to clone/pull the repository from Docker container.
|
||||
|
||||
You also need an onionv3 domain and hidden service exposing `localhost:7080`as HTTP.
|
||||
|
||||
Download 3 files from the `deploy/` directory. You only need to edit the `SITE_URL` in `docker-compose.yml` to the vanity domain you generated.
|
||||
|
||||
Then run:
|
||||
```
|
||||
$ docker compose up -d && docker compose logs -f
|
||||
```
|
||||
It will automatically clone the repository and start serving it with nginx on the URL you provided.
|
||||
|
||||
## Local development
|
||||
|
||||
You need to install [mkdocs-material package](https://pkgs.org/search/?q=mkdocs-material) from your distro's repository or [from pip](https://squidfunk.github.io/mkdocs-material/getting-started/).
|
||||
|
||||
Then from the main directory run:
|
||||
```
|
||||
$ mkdocs serve
|
||||
```
|
||||
|
||||
It should be served on `http://locahost:8000`
|
||||
|
||||
|
|
4
blogfix.sh
Normal file
4
blogfix.sh
Normal file
|
@ -0,0 +1,4 @@
|
|||
#!/bin/sh
|
||||
|
||||
# url-encode '%' char: https://github.com/gohugoio/hugo/issues/4586
|
||||
sed -i 's/#51%_attack/#51%25_attack/g' ./content/posts/monerop2pool/index.md
|
197
convert_old_blog.py
Normal file
197
convert_old_blog.py
Normal file
|
@ -0,0 +1,197 @@
|
|||
import os
|
||||
import re
|
||||
import sys
|
||||
import json
|
||||
import shutil
|
||||
import requests
|
||||
import html2text
|
||||
|
||||
OLLAMA_HOST = 'http://ollama:11434/'
|
||||
OLLAMA_PROMPT = """Analyze the blog post and give answer to following questions:
|
||||
* Who wrote it? (usually occurs at the beginning)
|
||||
* When was it written? (2001-12-30 format)
|
||||
The response format should be JSON. You can not output anything else other than JSON. If the response can't be found, add `null` value. Here's an example how output should look like:
|
||||
```
|
||||
{"author": "nihilist", "date": "2024-03-01"}
|
||||
```
|
||||
Important: do not output anything else!
|
||||
"""
|
||||
NIHILIST_XMR = '8AUYjhQeG3D5aodJDtqG499N5jXXM71gYKD8LgSsFB9BUV1o7muLv3DXHoydRTK4SZaaUBq4EAUqpZHLrX2VZLH71Jrd9k8'
|
||||
# make generation somewhat deterministic
|
||||
OLLAMA_SEED = 17
|
||||
OLLAMA_MODEL = 'gemma3:12b'
|
||||
|
||||
def is_webp(fpath: str) -> bool:
|
||||
with open(fpath, 'rb') as f:
|
||||
f.seek(8)
|
||||
return f.read(8) == b'WEBPVP8L'
|
||||
|
||||
def html_to_papermod(html_data: str) -> str:
|
||||
|
||||
# try to find author, date and other metadata in html file
|
||||
|
||||
h = html2text.HTML2Text()
|
||||
# disable random wrapping
|
||||
h.body_width = 0
|
||||
return h.handle(html_data)
|
||||
|
||||
def extract_blog_info(html_string: str) -> dict[str, str]:
|
||||
match = re.search(r'<p><img.*?<ba>(.*?)</ba>.*?<h1>(.*?)</h1>', html_string, re.DOTALL)
|
||||
|
||||
user = None
|
||||
title = None
|
||||
if match:
|
||||
user = match.group(1).strip()
|
||||
title = match.group(2).strip()
|
||||
|
||||
return user, title
|
||||
|
||||
def extract_git_issue_number(html_string: str) -> int:
|
||||
match = re.search(r'issues/(\d+)">git issue<', html_string)
|
||||
if match:
|
||||
return int(match.group(1))
|
||||
else:
|
||||
return 0
|
||||
|
||||
def extract_xmr_address(md_string: str) -> int:
|
||||
xmrs = re.findall(r":_.*([1-9A-HJ-NP-Za-km-z]{95})", md_string)
|
||||
print(xmrs)
|
||||
#xmrs = [x[-95:] for x in xmrs]
|
||||
try:
|
||||
# found 2 xmr addresses, extract the authors probable one
|
||||
if len(xmrs) == 2:
|
||||
xmrs.remove(NIHILIST_XMR)
|
||||
except:
|
||||
pass
|
||||
|
||||
if len(xmrs) != 0:
|
||||
return xmrs[0]
|
||||
|
||||
return None
|
||||
|
||||
def extract_blog_info_ai(md_string: str) -> dict[str, str]:
|
||||
print(f"Extracting info from {len(md_string)} bytes.")
|
||||
|
||||
#num_ctx = 8192 if len(md_string) < (8192*2.5) else 16384
|
||||
#num_ctx = (int(len(md_string)/(8192*2.5))+1)*8192
|
||||
num_ctx = 2048
|
||||
|
||||
r = requests.post(OLLAMA_HOST+'/api/generate', json={
|
||||
"model": OLLAMA_MODEL,
|
||||
"system": OLLAMA_PROMPT,
|
||||
"prompt": md_string[:1024], # 1024 first bytes is enough
|
||||
"format": "json",
|
||||
"options": {"num_ctx": num_ctx, "seed": OLLAMA_SEED}, #len(md_string)//2},
|
||||
"stream": False
|
||||
})
|
||||
|
||||
resp = r.json()
|
||||
if resp.get('prompt_eval_count', 0) == num_ctx:
|
||||
print('WARNING: LLM context saturated, may give wrong answer')
|
||||
|
||||
return resp
|
||||
|
||||
# remove unnecessary header and footer, git issue reference, some other stuff
|
||||
def do_markdown_fixes(md_string: str) -> str:
|
||||
|
||||
# there are 3 paragraphs in the footer: Nihilism, My Links, About
|
||||
# some customize that tho
|
||||
for _ in range(3):
|
||||
foot_str = "#### "
|
||||
found_at = md_string.rfind(foot_str)
|
||||
#print('footer found at:', found_at)
|
||||
if found_at >= 0:
|
||||
md_string = md_string[:found_at]
|
||||
else:
|
||||
break
|
||||
|
||||
# remove git issue reference from the issue
|
||||
git_regex = r'!\[\]\(\.\.\/logos\/daturagit\.png\).*?\s*directly!'
|
||||
md_string = re.sub(git_regex, "", md_string, flags=re.DOTALL)
|
||||
|
||||
# remove header
|
||||
git_regex = r'\[The Nihilism Opsec Blog\].*?\s*\(\.\.\/index\.html\)'
|
||||
md_string = re.sub(git_regex, "", md_string, flags=re.DOTALL)
|
||||
|
||||
# remove weird backticks html2text lefts sometimes after code blocks
|
||||
md_string = md_string.replace('\n`\n', '')
|
||||
|
||||
# to make mkdocs happy, we replace all links to html to md. may break some links if external website uses index.html
|
||||
md_string = md_string.replace('/index.html', '/index.md')
|
||||
|
||||
return md_string
|
||||
|
||||
def cut_until_title(md_string: str) -> str:
|
||||
return md_string[md_string.find('# '):]
|
||||
|
||||
def make_papermod_post(post_dir: str, md_string: str, blog_info: dict[str, str]) -> None:
|
||||
|
||||
header = f"""---
|
||||
author: {blog_info['author']}
|
||||
date: {blog_info['date']}
|
||||
gitea_url: "http://git.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion/nihilist/blog-contributions/issues/{blog_info.get('git', 0)}"
|
||||
xmr: {blog_info['xmr']}
|
||||
---
|
||||
"""
|
||||
f = open(os.path.join(post_dir, 'index.md'), 'w', encoding='utf-8')
|
||||
f.write(header)
|
||||
f.write(md_string)
|
||||
f.close()
|
||||
|
||||
def walk_all_blogs(old_opsec_path: str) -> None:
|
||||
for root, _, files in os.walk(old_opsec_path):
|
||||
|
||||
rel_name = root[root.find('opsec/')+6:]
|
||||
post_dir = os.path.join('./docs/opsec', rel_name)
|
||||
os.makedirs(post_dir, exist_ok=True)
|
||||
|
||||
for fi in files:
|
||||
#print(fi)
|
||||
|
||||
# skip the index site
|
||||
if os.path.basename(root) == '' and fi == 'index.html':
|
||||
continue
|
||||
|
||||
if fi.endswith(('.png', '.jpg', '.jpeg', '.mp4')):
|
||||
#print(f"Copying asset {fi}")
|
||||
shutil.copy(os.path.join(root, fi), os.path.join(post_dir, fi))
|
||||
continue
|
||||
|
||||
# only accept index.html at this point
|
||||
if not fi.endswith('.html'):
|
||||
continue
|
||||
|
||||
f = open(os.path.join(root, fi), 'r', encoding='utf-8')
|
||||
fc = f.read()
|
||||
f.close()
|
||||
print(os.path.basename(root), extract_blog_info(fc))
|
||||
|
||||
blog_info = {}
|
||||
blog_md_raw = html_to_papermod(fc)
|
||||
blog_info['git'] = extract_git_issue_number(fc)
|
||||
blog_info['xmr'] = extract_xmr_address(blog_md_raw)
|
||||
|
||||
# remove unnecessary stuff we'll include anyway in hugo
|
||||
blog_md = do_markdown_fixes(blog_md_raw)
|
||||
|
||||
ai_extract = extract_blog_info_ai(blog_md)
|
||||
print(ai_extract.get('response'), ai_extract.get('prompt_eval_count'))
|
||||
|
||||
blog_md = cut_until_title(blog_md)
|
||||
|
||||
try:
|
||||
blog_info.update(json.loads(ai_extract.get('response')))
|
||||
if blog_info['date'] in ('0000-00-00', None):
|
||||
blog_info['date'] = '2001-01-30'
|
||||
# in case model acts dumb
|
||||
blog_info['date'] = blog_info['date'].replace('/', '-')
|
||||
make_papermod_post(post_dir, blog_md, blog_info)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
|
||||
if __name__ == '__main__':
|
||||
if len(sys.argv) != 2:
|
||||
print('Usage: convert_old_blog.py /path/to/blog-contributions/opsec')
|
||||
exit(1)
|
||||
old_opsec_path = sys.argv[1]
|
||||
walk_all_blogs(old_opsec_path)
|
28
deploy/docker-compose.yml
Normal file
28
deploy/docker-compose.yml
Normal file
|
@ -0,0 +1,28 @@
|
|||
services:
|
||||
blogmk-puller:
|
||||
image: alpine:latest
|
||||
container_name: blogmk_puller
|
||||
environment:
|
||||
- SITE_URL=http://mkdocsjdd76rvqxrgykpywpsxoij734ycf34767dmfmfqjmqcj7hurad.onion
|
||||
- BRANCH=main
|
||||
- REPO_URL=http://git.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion/nihilist/opsec-blog-v2
|
||||
- REFRESH_SEC=900
|
||||
volumes:
|
||||
- ./repo:/repo
|
||||
- ./servable:/servable
|
||||
- ./entry.sh:/entry.sh:ro
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
entrypoint: ["sh", "/entry.sh"]
|
||||
network_mode: "host"
|
||||
restart: unless-stopped
|
||||
|
||||
blogmk-server:
|
||||
image: nginx:alpine
|
||||
container_name: blogmk_server
|
||||
volumes:
|
||||
- ./nginx.conf:/etc/nginx/sites-enabled/default:ro
|
||||
- ./servable:/usr/share/nginx/html:ro
|
||||
ports:
|
||||
- "7080:80"
|
||||
restart: unless-stopped
|
31
deploy/entry.sh
Normal file
31
deploy/entry.sh
Normal file
|
@ -0,0 +1,31 @@
|
|||
#!/bin/sh
|
||||
|
||||
apk add --no-cache git wget mkdocs-material py3-regex py3-requests py3-colorama
|
||||
|
||||
mkdir -p /repo
|
||||
cd /repo
|
||||
#rm -rf -- /repo/..?* /repo/.[!.]* /repo/*
|
||||
|
||||
while true; do
|
||||
echo "$(date): Cloning or updating the repository..."
|
||||
git config --global --add safe.directory /repo
|
||||
git config --global --add http.proxy socks5h://localhost:9050
|
||||
if [ -d "/repo/.git" ]; then
|
||||
git restore .
|
||||
git pull origin "${BRANCH}"
|
||||
else
|
||||
git clone -b "${BRANCH}" "${REPO_URL}" /repo
|
||||
fi;
|
||||
|
||||
sed -i "s/^site_url:.*//g" /repo/mkdocs.yml
|
||||
echo "site_url: ${SITE_URL}" >> /repo/mkdocs.yml
|
||||
|
||||
echo "Building mkdocs site..."
|
||||
# remove old contents
|
||||
rm -rf /servable/*
|
||||
## do necessarry transition related fixes
|
||||
#sh blogfix.sh
|
||||
mkdocs build -d /servable
|
||||
sleep $REFRESH_SEC
|
||||
done
|
||||
|
12
deploy/nginx.conf
Normal file
12
deploy/nginx.conf
Normal file
|
@ -0,0 +1,12 @@
|
|||
server {
|
||||
listen 80;
|
||||
|
||||
gzip on;
|
||||
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
|
||||
|
||||
location / {
|
||||
root /usr/share/nginx/html;
|
||||
index index.html index.htm;
|
||||
}
|
||||
}
|
||||
|
105
exp/blogtranslate.py
Normal file
105
exp/blogtranslate.py
Normal file
|
@ -0,0 +1,105 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
# experimental script converting all blog posts into given language using ollama
|
||||
|
||||
import requests
|
||||
import shutil
|
||||
import os
|
||||
|
||||
LANG = 'spanish'
|
||||
OLLAMA_HOST = 'http://ollama:11434/'
|
||||
OLLAMA_MODEL = 'qwen3:1.7b'
|
||||
OLLAMA_PROMPT = f'''Translate the blog post into {LANG}, keep the technical language as well as Linux commands in english. Keep the overall structure - source code tags, metadata key names (like "author", "title", "date", ...) but translate the values of metadata fields. Only output the translated blog.
|
||||
|
||||
For example this fragment:
|
||||
```
|
||||
---
|
||||
author: XMRonly
|
||||
title: "How to Get an Email Account Anonymously (Emails as a Service)"
|
||||
date: 2024-10-16
|
||||
description: "This blog post explains how to sign up for an anonymous email account using Proton Mail and Tor, focusing on privacy and avoiding personal information input. It highlights the limitations of traditional email and the need for privacy-focused alternatives.."
|
||||
summary: "This blog post explains how to sign up for an anonymous email account using Proton Mail and Tor, focusing on privacy and avoiding personal information input. It highlights the limitations of traditional email and the need for privacy-focused alternatives.."
|
||||
tags: ['email', 'anonymous', 'privacy', 'protonmail', 'tor', 'opsec']
|
||||
ShowToc: true
|
||||
TocOpen: true
|
||||
editPost:
|
||||
URL: "http://git.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion/nihilist/blog-contributions/issues/26"
|
||||
Text: "Suggest Changes"
|
||||
appendFilePath: false
|
||||
---
|
||||
|
||||
|
||||
 XMRonly - 2024 / 10 / 16
|
||||
|
||||
# How to Get an Email Account Anonymously (Emails as a Service)
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
## **Introduction**
|
||||
|
||||
Email is one of the most widely used forms of online communication, both for personal and professional interactions. With billions sent daily, you would expect email to be secure, accessible, and readable by only the intended recipient. Unfortunately, email is an old technology and this is not always the case. With metadata being visible, large email providers scanning emails, as well as potential government surveillance in some parts of the world, it is no surprise that email is hardly considered private. As such, you may want to send an email that is not tied to your real identity. In this article, we will explore how to sign up for email account anonymously. Specifically, we will explore a privacy-focused email provider, **Proton Mail** , and how to sign up using Tor without inputting any additional information whatsoever.```
|
||||
|
||||
Should become:
|
||||
```
|
||||
---
|
||||
author: XMRonly
|
||||
title: "Cómo Obtener una Cuenta de Correo Electrónico Anónimamente (Servicios de Correo Electrónico)"
|
||||
date: 2024-10-16
|
||||
description: "Este artículo explica cómo registrarse para una cuenta de correo electrónico anónima utilizando Proton Mail y Tor, centrándose en la privacidad y evitando introducir información personal. Destaca las limitaciones del correo tradicional y la necesidad de alternativas centradas en la privacidad."
|
||||
summary: "Este artículo explica cómo registrarse para una cuenta de correo electrónico anónima utilizando Proton Mail y Tor, centrándose en la privacidad y evitando introducir información personal. Destaca las limitaciones del correo tradicional y la necesidad de alternativas centradas en la privacidad."
|
||||
tags: ['correo', 'anónimo', 'privacidad', 'protonmail', 'tor', 'opsec']
|
||||
ShowToc: true
|
||||
TocOpen: true
|
||||
editPost:
|
||||
URL: "http://git.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion/nihilist/blog-contributions/issues/26"
|
||||
Text: "Sugerir Cambios"
|
||||
appendFilePath: false
|
||||
---
|
||||
|
||||
 XMRonly - 2024 / 10 / 16
|
||||
|
||||
# Cómo Obtener una Cuenta de Correo Electrónico Anónimamente (Servicios de Correo Electrónico)
|
||||
|
||||

|
||||
|
||||
## **Introducción**
|
||||
|
||||
El correo electrónico es uno de los métodos más utilizados para la comunicación en línea, tanto en interacciones personales como profesionales. Con miles de millones enviados diariamente, se esperaría que el correo sea seguro, accesible y legible únicamente por el destinatario previsto. Desafortunadamente, el correo electrónico es una tecnología antigua y esto no siempre es el caso. Dado que la metadatos son visibles, los grandes proveedores de correo escanean correos electrónicos y existe la posibilidad de vigilancia gubernamental en algunas partes del mundo, no es sorprendente que el correo electrónico rara vez se considere privado. Como resultado, podrías querer enviar un correo electrónico que no esté vinculado a tu identidad real. En este artículo, exploraremos cómo registrarse para una cuenta de correo electrónica anónimamente. Específicamente, examinaremos un proveedor centrado en la privacidad, **Proton Mail**, y cómo registrarse usando Tor sin introducir ninguna información adicional.```'''
|
||||
|
||||
new_content_dir = f'content.{LANG}'
|
||||
|
||||
for root, _, files in os.walk('./content'):
|
||||
for fi in files:
|
||||
|
||||
infpath = os.path.join(root, fi)
|
||||
outfpath = os.path.join(root.replace('./content', new_content_dir), fi)
|
||||
os.makedirs(os.path.dirname(outfpath), exist_ok=True)
|
||||
|
||||
if fi != 'index.md':
|
||||
shutil.copy(infpath, outfpath)
|
||||
continue
|
||||
|
||||
f = open(infpath, encoding='utf-8')
|
||||
fc = f.read()
|
||||
f.close()
|
||||
|
||||
num_ctx = (int(len(fc)/(8192*2))+1)*8192
|
||||
|
||||
r = requests.post(OLLAMA_HOST+'/api/generate', json={
|
||||
"model": OLLAMA_MODEL,
|
||||
"system": OLLAMA_PROMPT,
|
||||
"prompt": fc,
|
||||
"options": {"num_ctx": num_ctx, "seed": 14},
|
||||
"stream": False
|
||||
})
|
||||
|
||||
resp = r.json()
|
||||
print(root, num_ctx, resp.get('prompt_eval_count', 0))
|
||||
|
||||
fo = open(outfpath, 'w', encoding='utf-8')
|
||||
data = resp.get('response')
|
||||
startidx = data.index('</think>')+10
|
||||
fo.write(data[startidx:])
|
||||
fo.close()
|
568
mkdocs.yml
Normal file
568
mkdocs.yml
Normal file
|
@ -0,0 +1,568 @@
|
|||
site_name: The Nihilism OPSEC blog
|
||||
site_url: http://blog.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion/
|
||||
theme:
|
||||
name: material
|
||||
custom_dir: docs/opsec
|
||||
palette:
|
||||
|
||||
# Palette toggle for dark mode
|
||||
- scheme: slate
|
||||
primary: indigo
|
||||
accent: indigo
|
||||
toggle:
|
||||
icon: material/brightness-4
|
||||
name: Switch to light mode
|
||||
|
||||
# Palette toggle for light mode
|
||||
- scheme: default
|
||||
primary: indigo
|
||||
accent: indigo
|
||||
toggle:
|
||||
icon: material/brightness-7
|
||||
name: Switch to dark mode
|
||||
|
||||
features:
|
||||
- navigation.tabs
|
||||
- navigation.prune
|
||||
- navigation.footer
|
||||
|
||||
logo: assets/logo.png
|
||||
favicon: assets/logo.png
|
||||
|
||||
nav:
|
||||
- OPSEC:
|
||||
- opsec/index.md
|
||||
- OPSEC Introduction:
|
||||
- 📝 Explaining Concepts:
|
||||
- opsec/aps/index.md
|
||||
- opsec/governments/index.md
|
||||
- opsec/govfear/index.md
|
||||
- 📝 Explaining OPSEC ⭐:
|
||||
- opsec/opsec4levels/index.md
|
||||
- opsec/internetsegmentation/index.md
|
||||
- opsec/opsec/index.md
|
||||
- opsec/multiple_identities/index.md
|
||||
- opsec/chats/index.md
|
||||
- Level 1 | Privacy:
|
||||
- 📝 Explaining Privacy:
|
||||
- opsec/privacy/index.md
|
||||
- opsec/closedsource/index.md
|
||||
- opsec/openhardware/index.md
|
||||
- opsec/serversideencryption/index.md
|
||||
- 💻 Getting Started:
|
||||
- opsec/linux/index.md
|
||||
- opsec/graphene/index.md
|
||||
- opsec/privatesimplex/index.md
|
||||
- opsec/qubesos/index.md
|
||||
- 💻 File Sharing:
|
||||
- opsec/syncthingvpn/index.md
|
||||
- opsec/p2ptorrents/index.md
|
||||
- 💻 Maintaining Privacy:
|
||||
- opsec/compilation/index.md
|
||||
- opsec/hypervisorsetup/index.md
|
||||
- opsec/passwordmanagement/index.md
|
||||
- opsec/pgp/index.md
|
||||
- opsec/qubesosnetwork/index.md
|
||||
- 💻 Privacy from your ISP:
|
||||
- opsec/vpn/index.md
|
||||
- opsec/vpnqemu/index.md
|
||||
#- 💻 Monitoring that your Privacy is intact:
|
||||
#- ⚠️ Miscellaneous - In real life:
|
||||
- 💻 Serverside Privacy:
|
||||
- opsec/selfhosting/index.md
|
||||
- Level 2 | Anonymity:
|
||||
- 📝 Explaining Anonymity:
|
||||
- opsec/anonymityexplained/index.md
|
||||
- opsec/anonuse/index.md
|
||||
- opsec/phonenumbers/index.md
|
||||
- opsec/anonymitymetadata/index.md
|
||||
- opsec/torvsvpns/index.md
|
||||
- opsec/torthroughvpn/index.md
|
||||
- opsec/clearnetvsdarknet/index.md
|
||||
- opsec/darknetexploration/index.md
|
||||
- 💻 Clientside - Anonymity:
|
||||
- opsec/whonixqemuvms/index.md
|
||||
- opsec/torbrowsing/index.md
|
||||
- opsec/whentorisblocked/index.md
|
||||
- opsec/anonproxy/index.md
|
||||
- opsec/anonsimplex/index.md
|
||||
- opsec/anonsms/index.md
|
||||
- opsec/anonemail/index.md
|
||||
- 💻 Using AI for Anonymity:
|
||||
- opsec/openwebuilocalllms/index.md
|
||||
- opsec/stylometry/index.md
|
||||
- 💻 Clientside - Censorship Evasion:
|
||||
- opsec/vpnqemu/index.md
|
||||
- opsec/v2ray/index.md
|
||||
- 💻 File Sharing:
|
||||
- opsec/onionshare/index.md
|
||||
- opsec/syncthinganon/index.md
|
||||
- opsec/i2ptorrents/index.md
|
||||
- 💻 Clientside - Decentralized Finances ⭐:
|
||||
- opsec/finances/index.md
|
||||
- opsec/monero2024/index.md
|
||||
- opsec/monerowallet/index.md
|
||||
- opsec/chainalysisattempts/index.md
|
||||
- opsec/monerofirst/index.md
|
||||
- opsec/haveno-client-f2f/index.md
|
||||
- opsec/haveno-arbitrator/index.md
|
||||
- opsec/haveno-sepa/index.md
|
||||
- opsec/haveno-cashbymail/index.md
|
||||
- opsec/haveno-crypto/index.md
|
||||
- opsec/anoncreditcard/index.md
|
||||
- opsec/moneroinheritance/index.md
|
||||
- 🧅 Serverside - Contributing to Anonymity:
|
||||
- opsec/tor/relay/index.md
|
||||
- opsec/tor/bridge/index.md
|
||||
- opsec/tor/exit_node/index.md
|
||||
- opsec/monero2024/index.md
|
||||
- opsec/monerop2pool/index.md
|
||||
- opsec/haveno-seednode/index.md
|
||||
- opsec/darknetlantern/index.md
|
||||
- 🧅 Serverside - Anonymous Hidden Services:
|
||||
- opsec/hiddenservice/index.md
|
||||
- opsec/anonymousremoteserver/index.md
|
||||
- opsec/torwebsite/index.md
|
||||
- opsec/pgpcanary/index.md
|
||||
- opsec/forgejo-anon/index.md
|
||||
- opsec/nextcloud/index.md
|
||||
- 🧅 Serverside - Anonymous Clearnet Services:
|
||||
- opsec/anonclearnetservices/index.md
|
||||
- opsec/anondomain/index.md
|
||||
- opsec/anonaccess/index.md
|
||||
- opsec/dns/index.md
|
||||
- opsec/mailprivate/index.md
|
||||
- ⚠️ Miscellaneous - In real life:
|
||||
- opsec/anonprotest/index.md
|
||||
- Level 3 | Deniability:
|
||||
- 📝 Explaining Plausible Deniability:
|
||||
- opsec/stancesensitive/index.md
|
||||
- opsec/deniability/index.md
|
||||
- opsec/anonsensitive/index.md
|
||||
- 💻 Clientside - Getting Started:
|
||||
- opsec/tailsqemuvm/index.md
|
||||
- opsec/livemode/index.md
|
||||
- opsec/veracrypt/index.md
|
||||
- opsec/sensitivevm/index.md
|
||||
- opsec/plausiblydeniabledataprotection/index.md
|
||||
- 💻 Steganography - Hiding secrets in plain sight:
|
||||
- opsec/steganography/index.md
|
||||
- opsec/steghide/index.md
|
||||
- opsec/anonzulucrypt/index.md
|
||||
- 💻 Decentralised Finances:
|
||||
- opsec/monerowealth/index.md
|
||||
- 🧅 Serverside - Plausible Deniability at Home:
|
||||
- opsec/failovers/index.md
|
||||
- opsec/physicalsecurity/index.md
|
||||
- 🧅 Serverside - Remote Plausible Deniability:
|
||||
- opsec/sensitiveremotevshome/index.md
|
||||
- opsec/cloud_provider_adversary/index.md
|
||||
- opsec/anonymous_server_monitoring/index.md
|
||||
- 🧅 Serverside - High Availability for Deniability:
|
||||
- opsec/high_availability/index.md
|
||||
- opsec/tornginxphpmysql/index.md
|
||||
- opsec/mysqlmastermaster/index.md
|
||||
- opsec/onionbalancelb/index.md
|
||||
- opsec/endgame/index.md
|
||||
#- ⚠️ Miscellaneous - In real life:
|
||||
- Contributing to the project:
|
||||
- opsec/criticism/index.md
|
||||
- opsec/contribute/index.md
|
||||
- opsec/qualitystandard/index.md
|
||||
- opsec/maintainers/index.md
|
||||
- opsec/runtheblog/index.md
|
||||
|
||||
|
||||
- Productivity:
|
||||
- Productivity Introduction:
|
||||
- productivity/poisonofmoderntimes/index.md
|
||||
- productivity/discipline/index.md
|
||||
- Preparing the Body and Mind:
|
||||
- productivity/yoga/index.md
|
||||
- productivity/diet-n-mental-health/index.md
|
||||
- Nihilism:
|
||||
- productivity/nihilism/index.md
|
||||
- productivity/opus-nihil/index.md
|
||||
- productivity/scio-nihil/index.md
|
||||
- productivity/sum-nihil/index.md
|
||||
- productivity/coldshowers/index.md
|
||||
- Planning the Work:
|
||||
- productivity/rightthing/index.md
|
||||
- productivity/macroworkflow/index.md
|
||||
- productivity/macrotime/index.md
|
||||
- productivity/microworkflow/index.md
|
||||
- productivity/kanban/index.md
|
||||
- productivity/zeroemail/index.md
|
||||
- Doing the Work:
|
||||
- productivity/mentalenergy/index.md
|
||||
- productivity/mentalopti/index.md
|
||||
- productivity/morningroutine/index.md
|
||||
- productivity/pomodoro/index.md
|
||||
- Reflecting on the Work:
|
||||
- productivity/graphs/index.md
|
||||
- productivity/reflecting/index.md
|
||||
|
||||
- Self-Hosting:
|
||||
- selfhosting/0_lainradio/index.md
|
||||
- selfhosting/4get/index.md
|
||||
- selfhosting/Gitea/index.md
|
||||
- selfhosting/RustDesk/index.md
|
||||
- selfhosting/Zabbix/index.md
|
||||
- selfhosting/anonymousoverflow/index.md
|
||||
- selfhosting/ansible/index.md
|
||||
- selfhosting/apt-cacher/index.md
|
||||
- selfhosting/bedrock/index.md
|
||||
- selfhosting/borg/index.md
|
||||
- selfhosting/borg_auto/index.md
|
||||
- selfhosting/checkmk/index.md
|
||||
- selfhosting/codimd/index.md
|
||||
- selfhosting/composite/index.md
|
||||
- selfhosting/cron/index.md
|
||||
- selfhosting/cryptpad/index.md
|
||||
- selfhosting/cyberchef/index.md
|
||||
- selfhosting/db/index.md
|
||||
- selfhosting/debianupgrade/index.md
|
||||
- selfhosting/dillinger/index.md
|
||||
- selfhosting/dozzle/index.md
|
||||
- selfhosting/e4/index.md
|
||||
- selfhosting/etherpad/index.md
|
||||
- selfhosting/fail2banssh/index.md
|
||||
- selfhosting/freshrss/index.md
|
||||
- selfhosting/glpi/index.md
|
||||
- selfhosting/gomez/index.md
|
||||
- selfhosting/haproxy/index.md
|
||||
- selfhosting/hatsh/index.md
|
||||
- selfhosting/hls/index.md
|
||||
- selfhosting/hmail/index.md
|
||||
- selfhosting/hydrus/index.md
|
||||
- selfhosting/invidious/index.md
|
||||
- selfhosting/irc/index.md
|
||||
- selfhosting/irc_tor/index.md
|
||||
- selfhosting/jitsi/index.md
|
||||
- selfhosting/kanboard/index.md
|
||||
- selfhosting/kutt/index.md
|
||||
- selfhosting/kvm/index.md
|
||||
- selfhosting/lainsafe/index.md
|
||||
- selfhosting/lc0/index.md
|
||||
- selfhosting/librenms/index.md
|
||||
- selfhosting/librex/index.md
|
||||
- selfhosting/luks/index.md
|
||||
- selfhosting/mail2/index.md
|
||||
- selfhosting/matrix/index.md
|
||||
- selfhosting/matrixnew/index.md
|
||||
- selfhosting/minecraft/index.md
|
||||
- selfhosting/motd/index.md
|
||||
- selfhosting/mymind/index.md
|
||||
- selfhosting/neko/index.md
|
||||
- selfhosting/nextcloud/index.md
|
||||
- selfhosting/nginx/index.md
|
||||
- selfhosting/nginx_fail/index.md
|
||||
- selfhosting/nginx_loadb/index.md
|
||||
- selfhosting/nginx_p_mngr/index.md
|
||||
- selfhosting/nitter/index.md
|
||||
- selfhosting/observium/index.md
|
||||
- selfhosting/openvpn/index.md
|
||||
- selfhosting/ovpn_tor/index.md
|
||||
- selfhosting/pcipassthrough2/index.md
|
||||
- selfhosting/perlite/index.md
|
||||
- selfhosting/pf_prox/index.md
|
||||
- selfhosting/pf_vpn/index.md
|
||||
- selfhosting/phpfilesafe/index.md
|
||||
- selfhosting/pihole/index.md
|
||||
- selfhosting/plainpad/index.md
|
||||
- selfhosting/portainer/index.md
|
||||
- selfhosting/portforwarding/index.md
|
||||
- selfhosting/privatebin/index.md
|
||||
- selfhosting/progra/index.md
|
||||
- selfhosting/proxitok/index.md
|
||||
- selfhosting/proxmox/index.md
|
||||
- selfhosting/raid1disks/index.md
|
||||
- selfhosting/rainloop/index.md
|
||||
- selfhosting/rdp/index.md
|
||||
- selfhosting/rss/index.md
|
||||
- selfhosting/rsync/index.md
|
||||
- selfhosting/safetwitch/index.md
|
||||
- selfhosting/searx/index.md
|
||||
- selfhosting/searx_docker/index.md
|
||||
- selfhosting/searxng/index.md
|
||||
- selfhosting/sharelatex/index.md
|
||||
- selfhosting/snmp/index.md
|
||||
- selfhosting/stablediffusion/index.md
|
||||
- selfhosting/stablediffusion2/index.md
|
||||
- selfhosting/surveillance/index.md
|
||||
- selfhosting/teddit/index.md
|
||||
- selfhosting/tf2srv/index.md
|
||||
- selfhosting/thelounge/index.md
|
||||
- selfhosting/tor_ssh_tunnel_port_forwarding/index.md
|
||||
- selfhosting/tordns/index.md
|
||||
- selfhosting/torproxy/index.md
|
||||
- selfhosting/tpot/index.md
|
||||
- selfhosting/unattendedupgrades/index.md
|
||||
- selfhosting/uptimekuma/index.md
|
||||
- selfhosting/virtual/index.md
|
||||
- selfhosting/w0/index.md
|
||||
- selfhosting/w1_dns/index.md
|
||||
- selfhosting/w2_ad/index.md
|
||||
- selfhosting/w3_users/index.md
|
||||
- selfhosting/w5/index.md
|
||||
- selfhosting/w6_ldaps/index.md
|
||||
- selfhosting/w7/index.md
|
||||
- selfhosting/watchtower/index.md
|
||||
- selfhosting/wazuh/index.md
|
||||
- selfhosting/whoogle/index.md
|
||||
- selfhosting/wikiless/index.md
|
||||
- selfhosting/wireguard/index.md
|
||||
- selfhosting/wireguard_auto/index.md
|
||||
- selfhosting/xmpp2024/index.md
|
||||
- selfhosting/xrdp/index.md
|
||||
|
||||
- Hacking:
|
||||
- hacking/index.md
|
||||
- HackTheBox Writeups:
|
||||
- Easy Boxes:
|
||||
- hacking/Easy/0.md
|
||||
- hacking/Easy/1.md
|
||||
- hacking/Easy/10.md
|
||||
- hacking/Easy/11.md
|
||||
- hacking/Easy/12.md
|
||||
- hacking/Easy/13.md
|
||||
- hacking/Easy/14.md
|
||||
- hacking/Easy/15.md
|
||||
- hacking/Easy/16.md
|
||||
- hacking/Easy/17.md
|
||||
- hacking/Easy/18.md
|
||||
- hacking/Easy/19.md
|
||||
- hacking/Easy/2.md
|
||||
- hacking/Easy/20.md
|
||||
- hacking/Easy/21.md
|
||||
- hacking/Easy/22.md
|
||||
- hacking/Easy/23.md
|
||||
- hacking/Easy/24.md
|
||||
- hacking/Easy/25.md
|
||||
- hacking/Easy/26.md
|
||||
- hacking/Easy/27.md
|
||||
- hacking/Easy/28.md
|
||||
- hacking/Easy/29.md
|
||||
- hacking/Easy/3.md
|
||||
- hacking/Easy/30.md
|
||||
- hacking/Easy/31.md
|
||||
- hacking/Easy/32.md
|
||||
- hacking/Easy/33.md
|
||||
- hacking/Easy/34.md
|
||||
- hacking/Easy/35.md
|
||||
- hacking/Easy/36.md
|
||||
- hacking/Easy/37.md
|
||||
- hacking/Easy/38.md
|
||||
- hacking/Easy/39.md
|
||||
- hacking/Easy/4.md
|
||||
- hacking/Easy/40.md
|
||||
- hacking/Easy/41.md
|
||||
- hacking/Easy/42.md
|
||||
- hacking/Easy/43.md
|
||||
- hacking/Easy/44.md
|
||||
- hacking/Easy/45.md
|
||||
- hacking/Easy/46.md
|
||||
- hacking/Easy/47.md
|
||||
- hacking/Easy/48.md
|
||||
- hacking/Easy/49.md
|
||||
- hacking/Easy/5.md
|
||||
- hacking/Easy/50.md
|
||||
- hacking/Easy/51.md
|
||||
- hacking/Easy/52.md
|
||||
- hacking/Easy/53.md
|
||||
- hacking/Easy/54.md
|
||||
- hacking/Easy/55.md
|
||||
- hacking/Easy/56.md
|
||||
- hacking/Easy/57.md
|
||||
- hacking/Easy/58.md
|
||||
- hacking/Easy/59.md
|
||||
- hacking/Easy/6.md
|
||||
- hacking/Easy/60.md
|
||||
- hacking/Easy/61.md
|
||||
- hacking/Easy/62.md
|
||||
- hacking/Easy/63.md
|
||||
- hacking/Easy/64.md
|
||||
- hacking/Easy/65.md
|
||||
- hacking/Easy/66.md
|
||||
- hacking/Easy/67.md
|
||||
- hacking/Easy/68.md
|
||||
- hacking/Easy/69.md
|
||||
- hacking/Easy/7.md
|
||||
- hacking/Easy/70.md
|
||||
- hacking/Easy/71.md
|
||||
- hacking/Easy/8.md
|
||||
- hacking/Easy/9.md
|
||||
- Medium Boxes:
|
||||
- hacking/Medium/0.md
|
||||
- hacking/Medium/1.md
|
||||
- hacking/Medium/10.md
|
||||
- hacking/Medium/11.md
|
||||
- hacking/Medium/12.md
|
||||
- hacking/Medium/13.md
|
||||
- hacking/Medium/14.md
|
||||
- hacking/Medium/15.md
|
||||
- hacking/Medium/16.md
|
||||
- hacking/Medium/17.md
|
||||
- hacking/Medium/18.md
|
||||
- hacking/Medium/19.md
|
||||
- hacking/Medium/2.md
|
||||
- hacking/Medium/20.md
|
||||
- hacking/Medium/21.md
|
||||
- hacking/Medium/22.md
|
||||
- hacking/Medium/23.md
|
||||
- hacking/Medium/24.md
|
||||
- hacking/Medium/25.md
|
||||
- hacking/Medium/26.md
|
||||
- hacking/Medium/27.md
|
||||
- hacking/Medium/28.md
|
||||
- hacking/Medium/29.md
|
||||
- hacking/Medium/3.md
|
||||
- hacking/Medium/30.md
|
||||
- hacking/Medium/31.md
|
||||
- hacking/Medium/32.md
|
||||
- hacking/Medium/33.md
|
||||
- hacking/Medium/34.md
|
||||
- hacking/Medium/35.md
|
||||
- hacking/Medium/36.md
|
||||
- hacking/Medium/37.md
|
||||
- hacking/Medium/38.md
|
||||
- hacking/Medium/39.md
|
||||
- hacking/Medium/4.md
|
||||
- hacking/Medium/40.md
|
||||
- hacking/Medium/41.md
|
||||
- hacking/Medium/42.md
|
||||
- hacking/Medium/43.md
|
||||
- hacking/Medium/44.md
|
||||
- hacking/Medium/45.md
|
||||
- hacking/Medium/46.md
|
||||
- hacking/Medium/47.md
|
||||
- hacking/Medium/48.md
|
||||
- hacking/Medium/49.md
|
||||
- hacking/Medium/5.md
|
||||
- hacking/Medium/50.md
|
||||
- hacking/Medium/51.md
|
||||
- hacking/Medium/52.md
|
||||
- hacking/Medium/53.md
|
||||
- hacking/Medium/54.md
|
||||
- hacking/Medium/55.md
|
||||
- hacking/Medium/56.md
|
||||
- hacking/Medium/57.md
|
||||
- hacking/Medium/58.md
|
||||
- hacking/Medium/59.md
|
||||
- hacking/Medium/6.md
|
||||
- hacking/Medium/60.md
|
||||
- hacking/Medium/61.md
|
||||
- hacking/Medium/62.md
|
||||
- hacking/Medium/63.md
|
||||
- hacking/Medium/64.md
|
||||
- hacking/Medium/65.md
|
||||
- hacking/Medium/66.md
|
||||
- hacking/Medium/67.md
|
||||
- hacking/Medium/68.md
|
||||
- hacking/Medium/7.md
|
||||
- hacking/Medium/8.md
|
||||
- hacking/Medium/9.md
|
||||
- Hard Boxes:
|
||||
- hacking/Hard/0.md
|
||||
- hacking/Hard/1.md
|
||||
- hacking/Hard/10.md
|
||||
- hacking/Hard/11.md
|
||||
- hacking/Hard/12.md
|
||||
- hacking/Hard/13.md
|
||||
- hacking/Hard/14.md
|
||||
- hacking/Hard/15.md
|
||||
- hacking/Hard/16.md
|
||||
- hacking/Hard/17.md
|
||||
- hacking/Hard/18.md
|
||||
- hacking/Hard/19.md
|
||||
- hacking/Hard/2.md
|
||||
- hacking/Hard/20.md
|
||||
- hacking/Hard/21.md
|
||||
- hacking/Hard/22.md
|
||||
- hacking/Hard/23.md
|
||||
- hacking/Hard/24.md
|
||||
- hacking/Hard/25.md
|
||||
- hacking/Hard/26.md
|
||||
- hacking/Hard/27.md
|
||||
- hacking/Hard/28.md
|
||||
- hacking/Hard/29.md
|
||||
- hacking/Hard/3.md
|
||||
- hacking/Hard/30.md
|
||||
- hacking/Hard/31.md
|
||||
- hacking/Hard/32.md
|
||||
- hacking/Hard/33.md
|
||||
- hacking/Hard/34.md
|
||||
- hacking/Hard/35.md
|
||||
- hacking/Hard/36.md
|
||||
- hacking/Hard/37.md
|
||||
- hacking/Hard/38.md
|
||||
- hacking/Hard/39.md
|
||||
- hacking/Hard/4.md
|
||||
- hacking/Hard/5.md
|
||||
- hacking/Hard/6.md
|
||||
- hacking/Hard/7.md
|
||||
- hacking/Hard/8.md
|
||||
- hacking/Hard/9.md
|
||||
- hacking/Hard/prg/9/linpeas.md
|
||||
- Recurrent Tricks:
|
||||
- hacking/Tools/0/index.md
|
||||
- hacking/Tools/burp/index.md
|
||||
- hacking/Tools/files/index.md
|
||||
- hacking/Tools/sshtunnels/index.md
|
||||
- hacking/Tools/xc/index.md
|
||||
- Binary Exploitation Writeups:
|
||||
- hacking/binexp.md
|
||||
- Learning Assembly:
|
||||
- hacking/asm/0.md
|
||||
- hacking/asm/1.md
|
||||
- hacking/asm/2.md
|
||||
- hacking/asm/3.md
|
||||
- hacking/asm/4.md
|
||||
- hacking/asm/5.md
|
||||
- hacking/asm/6.md
|
||||
- hacking/asm/7.md
|
||||
- hacking/0/0.md
|
||||
- hacking/0/gdb.md
|
||||
- hacking/0/ghidra.md
|
||||
- hacking/0/pwntools.md
|
||||
- hacking/1/0.md
|
||||
- hacking/1/beleaf.md
|
||||
- hacking/1/heli.md
|
||||
- hacking/1/strings.md
|
||||
- hacking/2/0.md
|
||||
- hacking/2/bboi.md
|
||||
- hacking/2/boi.md
|
||||
- hacking/2/calc.md
|
||||
- hacking/2/feed.md
|
||||
- hacking/2/get.md
|
||||
- hacking/2/hs.md
|
||||
- hacking/2/just.md
|
||||
- hacking/2/overf.md
|
||||
- hacking/2/pilot.md
|
||||
- hacking/2/pwn1.md
|
||||
- hacking/2/pwn3.md
|
||||
- hacking/2/shella.md
|
||||
- hacking/2/shme.md
|
||||
- hacking/2/speed.md
|
||||
- hacking/2/svc.md
|
||||
- hacking/2/vuln.md
|
||||
- hacking/2/warm.md
|
||||
- hacking/3/0.md
|
||||
- hacking/3/h3.md
|
||||
- hacking/3/prep.md
|
||||
- hacking/3/tux.md
|
||||
|
||||
copyright: "Creative Commons Zero: [No Rights Reserved](opsec/runtheblog/index.md)"
|
||||
|
||||
extra_css:
|
||||
- stylesheets/extra.css
|
||||
|
||||
plugins:
|
||||
- privacy
|
||||
- search
|
||||
|
||||
#markdown-extensions:
|
||||
# - meta
|
||||
|
||||
repo_url: http://git.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion/nihilist/blog-contributions
|
||||
repo_name: nihilist/blog-contributions
|
Loading…
Add table
Add a link
Reference in a new issue