home · contact · privacy
WIP.
authorChristian Heller <c.heller@plomlompom.de>
Mon, 26 Nov 2018 19:22:01 +0000 (20:22 +0100)
committerChristian Heller <c.heller@plomlompom.de>
Mon, 26 Nov 2018 19:22:01 +0000 (20:22 +0100)
all_new_2018/apt-mark/server
all_new_2018/letsencrypt.sh
all_new_2018/linkable_etc_files/server/etc/iptables/rules.v4

index 842167542529e4e354d3b9395de253746a8c60ed..c7db7a4c5dd440963135e6fbff1cb5ef83f67f47 100644 (file)
@@ -4,5 +4,7 @@ openssh-server
 readline-common
 # provides letsencrypt
 certbot
+# for letsencrypt renewal
+cron
 # provides systemd scripts that configure iptables via /etc/iptables/*
-iptables-persistent
+iptables-persistent
\ No newline at end of file
index 01f8a813c02f4b66ea675e9af7257e672737bce3..c89e37f660afabe10a5df008a06a3d5fdaee2824 100755 (executable)
@@ -1,9 +1,23 @@
 #!/bin/sh
+# Install or copy LetsEncrypt certificates on/from server.
+#
+# First argument: server
+# Second argument: either "set" or "get" or "put"
+#
+# "set" install certbot on remote server and requests a new certificate
+# for it. This needs two more arguments: an e-mail address for future
+# communication with LetsEncrypt, and the domain for which to request
+# the certificate (might plausibly be equivalent to the first argument
+# though). This needs port 80 open on the server.
+#
+# "get" copies the server's /etc/letsencrypt to a local letsencrypt.tar.
+#
+# "set" copies a local letsencrypt.tar to the server's /etc/letsencrypt.
 set -e
 
 # Ensure we have a server name as argument.
-if [ ! $# -eq 2 ]; then
-    echo "Need server and action as argument."
+if [ $# -lt 2 ]; then
+    echo "Need server and action as arguments."
     false
 fi
 server="$1"
@@ -14,8 +28,14 @@ eval $(ssh-agent)
 ssh-add ~/.ssh/id_rsa
 
 if [ "${action}" = "set" ]; then
-    # Install certificate.
-    ssh -t plom@${server} "su -c 'apt -y install certbot && certbot certonly --standalone -d ${server}$'"
+    # Install certificate. This needs port 80 open (443 does not work here).
+    if [ $# -lt 4 ]; then
+        echo "Need mail address and domain as arguments."
+        false
+    fi
+    mail="$3"
+    domain="$4"
+    ssh -t plom@${server} "su -c 'apt -y install certbot && certbot certonly --standalone --agree-tos -m ${mail} -d ${server}'"
 elif [ "${action}" = "get" ]; then
     # Get /etc/letsencrypt/ as tar file.
     ssh -t plom@${server} 'su -c "cd /etc/ && tar cf letsencrypt.tar letsencrypt && chown plom:plom letsencrypt.tar && mv letsencrypt.tar /home/plom/"'
@@ -28,4 +48,3 @@ else
     echo "Action must be 'set', 'get', or 'put'."
     false
 fi
-
index faf35c17889b9e4de54a2c1f0a60fc391737f419..fa4882dfa1340e80cbee94ce5758c5a03a1e95a8 100644 (file)
@@ -2,13 +2,21 @@
 :INPUT DROP [0:0]
 :FORWARD DROP [0:0]
 :OUTPUT ACCEPT [0:0]
+# otherwise self-referential connections to local host will fail
 -A INPUT -i lo -j ACCEPT
+# this enables ping etc.
 -A INPUT -p icmp -j ACCEPT
+# SSH
 -A INPUT -p tcp --dport 22 -j ACCEPT
+# HTTPS in theory, in practice my second SSH port, see sshd_config
 -A INPUT -p tcp --dport 443 -j ACCEPT
+# SMTP (allowing for STARTTLS); necessary for mail server to mail server banter
 -A INPUT -p tcp --dport 25 -j ACCEPT
+# SMTPS, for mail server to mail user agent communication
 -A INPUT -p tcp --dport 465 -j ACCEPT
+# IMAPS
 -A INPUT -p tcp --dport 993 -j ACCEPT
+# tolerate any inbound connections requested by our server, no matter the port
 -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
 COMMIT
-# iptables-restore seems to ignore COMMIT if no newline follows it
\ No newline at end of file
+# this last line is here because iptables-restore ignores the final command if no newline follows it
\ No newline at end of file