Posts

ISPConfig CLI Tools

During a recent migration project, I ran into a limitation of ISPConfig automation. While this web hosting management platform provides an API, working with SOAP is notoriously uncomfortable and clunky. I've faced this problem before—for example, check out my very old post about mass email user creation. This time, I needed to create websites, databases, and database users while migrating hundreds of sites from DirectAdmin (you can read about that massive migration here ). Writing custom PHP scripts for every individual task would have been slow and messy, so I decided to build a proper tool instead. The ISPConfig CLI Tools provide a more comfortable and modern way to automate ISPConfig operations directly from the terminal. The project is still a work in progress, but it already covers the most essential operations. Implemented Functions The CLI toolkit currently covers the following ISPConfig operations, returning clean JSON for easy piping: System & API: ...

How to Backup DocuSign Documents via SFTP Using Mirror

One company uses DocuSign and stores a large number of documents there. At some point a requirement appeared to periodically download and backup all files.

Firewall Control on Docker Hosts Using the DOCKER-USER iptables Chain

If you run Docker on production servers, sooner or later you will notice that Docker automatically modifies iptables rules. In many cases this behaviour is convenient, but sometimes it makes it difficult to control network access the way you want.

How to Safely Run OpenClaw (Ex-Clawd & MoltBolt)

Running OpenClaw directly on your host system is risky. The service has full access to your filesystem and the environment in which it runs. This is powerful — but potentially destructive. Treat it like any other automation tool with shell-level capabilities. Modern AI agents are designed to read files, execute commands and interact with network services. While this makes them extremely useful for automation, it also means that a misconfiguration, prompt injection or malicious extension could potentially affect the entire system. Because of this, the safest approach is to run such tools inside an isolated environment where mistakes cannot easily damage the host system.

PowerDNS Master-Slave Deployment Using Docker

One of my latest projects was a fully dockerized name server infrastructure based on PowerDNS: one master and two slaves — one in the same subnet and the second running in a cloud on a basic virtual machine. Why PowerDNS? Because I needed an API, a proper admin-friendly web interface, user management, and LDAP integration. PowerDNS fully matched my requirements. Why Docker? Because I wanted some level of automation and IaC — Docker fits nicely in the middle, where you have several configs and docker-compose files fully describing the container configuration.

Migrating Websites from DirectAdmin to ISPConfig

Some time ago I faced a serious challenge: migrating a large number of similar websites from DirectAdmin to ISPConfig with maximum automation. The hosting platform was changed, and doing everything manually simply wasn’t an option. To solve this, I wrote a better CLI wrapper for ISPConfig that focuses on usability while reusing the default API functions underneath: ispconfig-cli

How to Transfer Data Out of Russia Under Current Network Restrictions

You have some infrastructure in Russia and want to move it elsewhere, for example to Europe. Currently this can be problematic. During recent tests I noticed that Russia limits long network sessions: any session longer than about one minute starts to be throttled to around 100 kB/s. This may not apply to every destination, but I tested several major European providers and also Belarus as a proxy. Belarus was even slower, around 50 kB/s.

Fixing pssh (parallel-ssh) Problems on Debian 10 with Python 3.7

Python reminds me of PHP many years ago, when multiple incompatible versions could exist on one server. Do you need another version? The best solution back then was a new server, because any update or installation could break the entire global environment. Half a year after the “Sunsetting Python 2”, major distributions still continue to install Python 2 by default, and it becomes a challenge not to replace the default version after some update or after installing a new package.

FreeRadius with Google Workspace LDAP

This was the first time I used FreeRadius. This program reminds me of Postfix — a similarly complicated and powerful tool. Only one big difference: very poor documentation and not enough examples. In the mailing lists there are many questions without answers from FreeRadius gurus. Here I provide examples of how I solved some problems or where I spent too much time…

First Look at UniFi Wireless Access Point

Image
New project — new challenge. For this project I got UAP-AC-Pro, UAP-AC-Lite and UAP-Outdoor+. How to install and configure them you can easily find on the Ubiquiti website. This post is about the hard way — when you don't buy the full ecosystem and need a custom solution.

Work From Home — or Bring Your Corporate Network Home

Image
Work From Home (WFH)… Not a big problem for IT. Almost everything I need I can do without any discomfort. A good understanding of how to work remotely came during the first quarantine period; in Lithuania it was in summer. Good weather, my own house, lots of forests around… Who cares about COVID-19 — I just stayed with my family and spent my time as usual.

The Easiest Way to Install OpenVPN

Sometimes even a fully updated Windows server can be compromised. One of the simplest ways to reduce exposure is to place services behind a VPN.

Salto Events Sniffer Service

Simple Python service to resend events from a SALTO server to email for the tech team.

Docker persistent MAC address generation problem

When starting 150+ Docker containers with docker-compose, I encountered a strange problem: "Could not generate persistent MAC address".

Script to generate a MAC address

Very simple and useful script to generate a MAC address. Applicable for Docker, Xen, KVM, and other virtual environments.

How to build a GitLab-based internal documentation portal with MkDocs

How to build a GitLab-based internal documentation portal with MkDocs, GitLab Pages, and GitLab Runner.

How to protect API endpoints using nginx in a more convenient way

How to protect API endpoints using nginx in a more convenient way. This approach can slightly impact performance, but simplifies configuration and rate limiting.

Fix GitLab Runner public key error (The following signatures couldn't be verified...)

Sometimes `apt-get update` fails with a NO_PUBKEY error when the repository public key is missing. Example:

Fast and easy way to prepare and create Google Workspace users

Google documentation shows methods, but does not explain how to prepare data. First, we need DATA... From accounting team, Google Forms, or a simple Google Sheet with 3 columns.

How to Fix Email Date-Time After Migration to Dovecot

Many mail clients show wrong email receiving date-time because the file creation time is wrong after migration or restore. Here is a short review on how to fix it for Dovecot on ISPConfig.