title: Linux Server Applications
breadcrumbs:
- title: Configuration
- title: Linux Server
---
{% include header.md %}
TODO Migrate the rest of the config notes from the old Google Doc.
Using
{:.no_toc}
Docker & Docker Compose
TODO
Setup
- Install Docker (Debian).
- Install Docker Compose.
- Install Docker Compose command completion.
- (Optional) Setup swap limit:
- If
docker info
contains WARNING: No swap limit support
, it's not working and should maybe be fixed.
- It incurs a small performance degredation and is optional but recommended.
- In
/etc/default/grub
, add cgroup_enable=memory swapaccount=1
to GRUB_CMDLINE_LINUX
.
- Run
update-grub
and reboot.
Docker Compose No-Exec Tmp-Dir Fix
Docker Compose will fail to work if /tmp
has noexec
.
- Move
/usr/local/bin/docker-compose
to /usr/local/bin/docker-compose-normal
.
- Create
/usr/local/bin/docker-compose
with the contents below and make it executable.
Create the new TMPDIR dir.
#!/bin/bash
# Some dir without noexec
export TMPDIR=/var/lib/docker-compose-tmp
/usr/local/bin/docker-compose-normal "$@"
Fail2ban
Setup
- Install
fail2ban
.
- Fix the firewall first so it configures itself correctly wrt. firewall blocking.
- Check the status with
fail2ban-client status [sshd]
.
ISC DHCP Server and radvd
Notes
- DHCPv4 uses raw sockets, so it bypasses the firewall (i.e. no firewall rules are needed). DHCPv6, however, does not. This includes the respective clients as well.
Setup
- Install and enable
isc-dhcp-server
and radvd
.
- Add config files.
- DHCPv4:
/etc/dhcp/dhcpd.conf
- DHCPv6 (optional):
/etc/dhcp/dhcpd6.conf
- radvd:
/etc/radvd.conf
- If using systemd-networkd, fix wrong startup order:
- IPv4:
- Configure DHCPv4.
- IPv6:
- For SLAAC, configure only radvd.
- Dor DHCPv6, configure radvd in stateful mode and DHCPv6.
- (Optional) Setup interfaces to listen to:
- This may mute the "No subnet declaration for ..." verbose error on some distros.
- In
/etc/default/isc-dhcp-server
, add the interfaces (space-separated) to INTERFACESv4
and INTERFACESv6
.
ntopng
Setup
- Install
ntopng
.
- Make sure service
ntopng
is enabled and running.
- Fix log dir owner:
chown nobody:nogroup /var/log/ntopng
- Configure:
- Open
/etc/ntopng.conf
.
- Add
-W=<new_port>
to enable HTTPS.
- (Optional) Set
-w=0
to disable HTTP.
- Restart it (takes a while).
ntpd
Setup
- Disable systemd-timesyncd NTP client by disabling and stopping
systemd-timesyncd
.
- Install
ntp
.
- In
/etc/ntp.conf
, replace existing servers/pools with ntp.justervesenet.no
with the iburst
option.
- Test with
ntpq -pn
(it may take a minute to synchronize).
Postfix
Satellite system
Notes
- When using an SMTP relay, the original IP address will likely be found in the mail headers.
- Make sure DNS is configured correctly (SPF, DKIM, DMARC).
Setup
- Install:
postfix libsasl2-modules mailutils
- If asked, choose to configure Postfix as a satellite system.
- Set the FQDN:
- Update it in
/etc/postfix/main.cf
.
- Link mailname to hostname (must be FQDN):
ln -sf /etc/hostname /etc/mailname
- Update the root alias in
/etc/aliases
and run newaliases
.
- Update the
main.cf
config (example not provided here).
- Only listen to localhost: Set “inet_interfaces = loopback-only”
- Disable relaying: Set “mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128”
- Anonymize banner: “smtpd_banner = $myhostname ESMTP”
- Relay guides:
- Mailgun:
- How To Start Sending Email (Mailgun)
- How to Set Up a Mail Relay with Postfix and Mailgun on Ubuntu 16.04 (DigitalOcean)
- SendGrid:
- Postfix (SendGrid)
- Use API-key with permission to send mail only.
- The API-key username is
apikey
.
- Setup address rewrite rules:
- For fixing the
To
and From
fields, which is typically from root to root.
- Add the rewrite config (see example below).
- Reference the config using
smtp_header_checks
in the main config.
- Test:
postmap -fq "From: root@<FQDN>" regexp:smtp_header_checks
- Setup relay credentials (SASL):
- Credentials file:
/etc/postfix/sasl_passwd
- Add your credentials using format:
[relay_domain]:port user@domain:password
- Run:
postmap sasl_passwd
- Fix permissions:
chmod 600 sasl_passwd*
- Restart
postfix
.
- Try sending an email:
echo "Test from $(hostname) at time $(date)." | mail -s "Test" root
Examples
# File: smtp_header_checks
/^From:\s*.*\S+@node\.example\.bet.*.*$/ REPLACE From: "Node" <node@example.net>
/^To:\s*.*\S+@node\.example\.net.*$/ REPLACE To: "Someone" <someone@example.net>
Usage
- Send a test mail:
echo "Test from $HOSTNAME at time $(date)." | mail -s "Test" root
- Test the config:
postconf > /dev/null
- Print the config:
postconf -n
- If mails are stuck in the mail queue (
mailq
) because of previous errors, run postqueue -f
to flush them.
Pterodactyl
Setup
- Note: The node must be publicly accessable.
- Follow the official guide.
Game Servers
CSGO
- It uses a ton of storage, between 20 and 30 GB last I checked. If you useless, the installer will fail with some useless error message.
- Use app ID 730 in Steam Game Server Account Manager, regardless of which app ID the server was created with. If you use e.g. 740, the server will not be able to log into Steam.
radvd
See ISC DHCP Server and radvd.
TFTP-HPA
Setup
- Install
tftpd-hpa
.
- Update
/etc/default/tftpd-hpa
based on the config below.
- Create the folder
/var/tftp
with permissions 777
and user-group pair tftp:tftp
.
- Restart it.
- If it shouldn't automatically start, disble it.
Files
# File: /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/tftp"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--create --secure"
Unbound
Setup
- Install:
unbound dns-root-data
- Setup the config:
/etc/unbound/unbound.conf
- Add hostname variants to
/etc/hosts
.
- Configure it in
/etc/resolv.conf
:
nameserver 127.0.0.1
search <domain>
domain <domain>
- Configure it in
/etc/systemd/resolved.conf
:
DNSStubListener=no
DNS=127.0.0.1
- Restart
systemd-resolved
.
- Test DNSSEC:
drill sigfail.verteiltesysteme.net
should give an rcode of SERVFAIL
.
drill sigok.verteiltesysteme.net
should give an rcode of NOERROR
.
- Make sure dns-root-data is updating root hints in file
/usr/share/dns/root.hints
.
Troubleshooting
- It sometimes stops resolving names and responds with "servfail".
- I don't know why. Restarting it works.
Notes
- Use DNS over HTTPS/TLS.
- Setup private addresses for DNS rebinding prevention.
UniFi
Setup
Using the unofficial Docker image by jacobalberty.
- Add a system user named "unifi":
useradd -r unifi
- Allow the ports through the firewall: See UniFi - Ports Used.
- Add a Docker Compose file. See docker-compose.yml.
- Use host networking mode for L2 adoption to work (if you're not using L3 or SSH adoption).
- Start the container, open the webpage and follow the wizard.
{% include footer.md %}