From c4ca9690a5f3a7e5dae8752548b4bb9aced954f1 Mon Sep 17 00:00:00 2001 From: Yorick van Pelt Date: Sun, 11 Mar 2018 23:17:55 +0100 Subject: [PATCH] add key deployment, fix pennyworth --- deploy/keys.nix | 19 ++++++ keys/ssh.jarvis.key | Bin 0 -> 909 bytes logical/pennyworth.nix | 3 +- modules/tor-hidden-service.nix | 3 +- physical/kassala.nix | 2 + roles/common.nix | 117 +++++++++++++++++++++++++++++++++ roles/default.nix | 4 +- roles/server.nix | 1 + secrets.nix | Bin 1567 -> 1612 bytes services/default.nix | 2 +- 10 files changed, 147 insertions(+), 4 deletions(-) create mode 100644 deploy/keys.nix create mode 100644 keys/ssh.jarvis.key create mode 100644 roles/common.nix diff --git a/deploy/keys.nix b/deploy/keys.nix new file mode 100644 index 0000000..55febbe --- /dev/null +++ b/deploy/keys.nix @@ -0,0 +1,19 @@ +{ pkgs, lib, config, ... }: +with lib; +let cfg = config.deployment.keyys; in +{ + options.deployment.keyys = mkOption { type = types.listOf types.path; default = []; }; + options.deployment.keys-copy = mkOption { type = types.package; }; + config = { + deployment.keys-copy = pkgs.writeShellScriptBin "copy-keys" (if cfg != [] then '' + set -e + ssh root@$1 "mkdir -p /root/keys" + scp ${concatMapStringsSep " " toString cfg} root@$1:/root/keys + echo "uploaded keys" + '' else '' + echo "no keys to upload" + ''); + + }; + +} diff --git a/keys/ssh.jarvis.key b/keys/ssh.jarvis.key new file mode 100644 index 0000000000000000000000000000000000000000..32c7090a31701f310f74c2a475cd81a1287663c7 GIT binary patch literal 909 zcmV;819JQTM@dveQdv+`0MRYM#_|Rr3xLe42&VSRMyj{o#{fKdlZEsmIr))`Laonm zn7UWwk3Z2f!_=j{h-q7C`c@=IYrKXNw(Fxx+ryFrWhFlzrj|!EB^(jj|@_DC; z1H6lNGOn5ge1pmio$Gl_5m^xyk*f(qaBQafd76RhJa%yJs#fMs(d8lzVepiBgELxj z5ja*lxQlWu&zaGTqIDpzK$Z>+qT$}AHf3@G*+{Qv`h&)Veid%p4NQOD9332T1H4Kz zXm=K`&_aQCf{d&@*2U}*?N454?}D2TMmkEstlm7PRrH(LF8zewy(jil>f^T_LY=8@ z^D&-G>*IkFEONWJ!fJ3JCD^tn>>9y*F|rzzz*|`XU7)ygZCA>ZFD?2Zd~9WqYHcaR z>a<=mlIyieEeNmIq7V~k z+*p(T@tIqTXc2g5C#Y)U9BilqE^G;lI!+Q~G~;N(NnJa=YWHx;d-MdJ$*8}()ka2H zk@?yoD2e%umceAr$LJfEO@s-#DxsdozH^G)%%^tN%!C?&K3CNpZxU8>L*h zZuyjw{VHfYOlkvFE;g$=b9$OUzFe5u0n#>Y@EsVX0}FmtcZmK$1g8G4<*N1{2ss13 z{~ZqPdL7SK@srJ@P;+f?;`1-n2rJK`;3`E7?78|q_y8MhpQ4OJrtI<^pUb1~*k2iQ zQHz0449y>r1%K!nz5KL&lH-6#Wa3*#ZC@KCAh|-T#JW-%ebpgRp|xrL;$0p&v#k`4 zcg0<$p3DSf@I1*xHIrVQ)l}j~Z$x2n?1bhw{-}C_^(P2Xs6NIO}~ z+Ydo#bbv{eXm90BUUW>D}0&wvD8E2=nuEz?Qrx^{pLIaz@~el`m)6&Qij?3&A0 jIOh%TbB!w*uT ]; } diff --git a/modules/tor-hidden-service.nix b/modules/tor-hidden-service.nix index 5fd411b..0774338 100644 --- a/modules/tor-hidden-service.nix +++ b/modules/tor-hidden-service.nix @@ -15,7 +15,7 @@ in { systemd.services."install-tor-hidden-service-keys" = { wantedBy = ["tor.service"]; serviceConfig.Type = "oneshot"; - serviceConfig.User = "tor"; + serviceConfig.User = "root"; serviceConfig.Group = "keys"; # TODO: update on change? # TODO: better ways to get the keys on the server @@ -24,6 +24,7 @@ in { mkdir -p ${torDir}/onion/${name}/ cp ${keypath} ${torDir}/onion/${name}/private_key chmod -R 700 ${torDir}/onion/${name} + chown -R tor ${torDir}/onion/${name} fi '') service-keys); }; diff --git a/physical/kassala.nix b/physical/kassala.nix index 0558288..b37e8c6 100644 --- a/physical/kassala.nix +++ b/physical/kassala.nix @@ -13,6 +13,8 @@ in # before: /nixos/nix/* /boot/grub/menu.lst # after: /nix/* /old-root/boot/grub/menu.lst boot = { + kernelPackages = pkgs.linuxPackages_latest; + blacklistedKernelModules = ["coretemp"]; # use grub 1, don't install loader.grub = { version = 1; diff --git a/roles/common.nix b/roles/common.nix new file mode 100644 index 0000000..ca1dd58 --- /dev/null +++ b/roles/common.nix @@ -0,0 +1,117 @@ +let secrets = import ; +in +{ config, pkgs, lib, ...}: +let + machine = with lib; head (splitString "." config.networking.hostName); +in +{ + imports = [ + ../modules/tor-hidden-service.nix + ../modules/nginx.nix + ../roles/pub.nix + ../roles/quassel.nix + ../roles/gogs.nix + ../roles/mail.nix + ../roles/website.nix + ../roles/xmpp.nix + ]; + time.timeZone = "Europe/Amsterdam"; + users.mutableUsers = false; + users.extraUsers.root = { + openssh.authorizedKeys.keys = config.users.extraUsers.yorick.openssh.authorizedKeys.keys; + # root password is useful from console, ssh has password logins disabled + hashedPassword = secrets.pennyworth_hashedPassword; # TODO: generate own + + }; + services.timesyncd.enable = true; + services.fail2ban.enable = true; + users.extraUsers.yorick = { + isNormalUser = true; + uid = 1000; + extraGroups = ["wheel"]; + group = "users"; + openssh.authorizedKeys.keys = with (import ../sshkeys.nix); [yorick]; + }; + + # Nix + nixpkgs.config.allowUnfree = true; + nix.package = pkgs.nixUnstable; + + nix.buildCores = config.nix.maxJobs; + + nix.extraOptions = '' + allow-unsafe-native-code-during-evaluation = true + ''; + + # Networking + networking.enableIPv6 = false; + + services.openssh = { + enable = true; + passwordAuthentication = false; + challengeResponseAuthentication = false; + }; + + services.tor = { + enable = true; + client.enable = true; + # ssh hidden service + hiddenServices.ssh.map = [{ port = 22; }]; + service-keys.ssh = "/root/keys/ssh.${machine}.key"; + }; + + programs.ssh.extraConfig = '' + Host *.onion + ProxyCommand nc -xlocalhost:9050 -X5 %h %p + '' + + (with lib; (flip concatMapStrings) (filter (hasPrefix "ssh.") (attrNames secrets.tor_hostnames)) (name: '' + Host ${removePrefix "ssh." name}.onion + hostname ${secrets.tor_hostnames.${name}} + '' + )); + + environment.systemPackages = with pkgs; [ + # v important. + cowsay ponysay + ed # ed, man! + sl + rlwrap + + vim + + # system stuff + ethtool inetutils + pciutils usbutils + iotop powertop htop + psmisc lsof + smartmontools hdparm + lm_sensors + ncdu + + # utils + file which + reptyr + tmux + bc + mkpasswd + shadow + + # archiving + xdelta + atool + unrar p7zip + unzip zip + + # network + nmap mtr bind + socat netcat-openbsd + lftp wget rsync + + git + nix-repl + rxvt_unicode.terminfo + ]; + nix.gc.automatic = true; + +} + diff --git a/roles/default.nix b/roles/default.nix index 234a15f..3214df8 100644 --- a/roles/default.nix +++ b/roles/default.nix @@ -8,6 +8,7 @@ in imports = [ ../modules/tor-hidden-service.nix ../modules/nginx.nix + ]; networking.hostName = secrets.hostnames.${machine}; @@ -61,8 +62,9 @@ in client.enable = true; # ssh hidden service hiddenServices.ssh.map = [{ port = 22; }]; - service-keys.ssh = "/run/keys/torkeys/ssh.${machine}.key"; + service-keys.ssh = "/root/keys/ssh.${machine}.key"; }; + deployment.keyys = [ ( + "/ssh.${machine}.key") ]; programs.ssh.extraConfig = '' Host *.onion diff --git a/roles/server.nix b/roles/server.nix index ea430a2..07c8ef4 100644 --- a/roles/server.nix +++ b/roles/server.nix @@ -4,5 +4,6 @@ services.nixosManual.enable = false; environment.noXlibs = true; + networking.firewall.logRefusedConnections = false; # Silence logging of scanners and knockers } diff --git a/secrets.nix b/secrets.nix index 32c7ebf08694b42cdd86c02fa3d044fee46be532..1e8c352579287b418507cd4f194eb47b3050f7d3 100644 GIT binary patch literal 1612 zcmV-S2DAA9M@dveQdv+`00bhZ7>tu)^;&?v^`3wc1lIZZ)#&O!Nvz?Nol=Hb?h7)1YSkitZgpV(KeYY6Lj(*HMzi@Cm`pOd6c{rPY)a4C&MOd_B+LSm|_@;DL9w+U_e4rUchI_$x|Yg zzNK758{LUS86dGzbdqZ}0&W#i(;*%^E%At7D{8(%n>Q{NM+Z-C;Vu{kqR$if{!ji+ zAh3#1e}uSCX>|S}wv}Q=llDzB6{ViYK4AWVN+}p?WCp0FW7Q2hLk>{;i^mH)xqhR7^F{{0tQvbjMuo-`DlO< zGLj>r3o#TSxANgU-gHk}eiL#xC{vDoL`=8F!yipk>N)BEvwxB31JB z)X#S0B3$fI6eRd8+EKy)$}!--yMO#K_7+nV=0i-FTc+cKYmPh5{N8sdX8On`EJ8WV zlS#d#!WN4%YldSi!wCa*39CJpO95HE%XQ$}>;F{9Zj}XY2%12IeX<(S zMr2Sw%Og#kL}ErgR;fA+ShFuC`Nf77x|QPPi8|79FAm+sm<8t9rtj_f;~`xU;8O&8 zFrLX4EUi05rsNUmi*#~9eB^}VrUuL_`n?IbS-xFvyd=z~1IgW2!U}5RF@IG;ImH*r z9zdYKWJ1UVSuck}%&8Sh+qs7sh|E}9+4H)3PYZW;yAMrJ;4H{@uWglCXI=kj%I0#E1>Ub3bW63r*2!!i%FEjTGj2Bqb%*I_D?v@GH7Uh^G&@7#` z_L1w;b-lp4>aFtXJ35i}C-z-PGxI|SQ?q8ekmfU$BX7Fz5s5C+cy;Ktb1F+{D?!y_ zNPj|d{MRO#lhB3igGn4_iES2uLV;r0b)cmhaJV}NY?WTz_Ye zFBGFytQeX=!JD*c>P{AAfe~}PVyJ%(O_{AT#W}iF_QhD(m);Q3Ch^w0W2jaS*b{U8oGan%y4`@!MdZUOx zg+ktL{t{($=#j>r=R53X0SxDz%c1{!}uVfg_7u){0J74D$x zLKlSq$2fyPT!n{aR%W5ZPqs~8L49}nHLA;Qn^tyBG_J_WggJ7rc{}k&f+jw$0atChN5GQh}*$Xu0s zPF3kCD03SAS>&6YX%-ZD--3TrV;yvxRS}g;rS=b?O^L78x+c?m0JZmU)*sKr0$<{` zB?ujTjR?Mm?4)zoPFx;7ffMRcBM!+ z`{e<3L>9*W`eG^Ue3@f?N4!fXmrFm^JtL^98bn>~Qa>;;-$h9I-a*n*>$NUGeDr>$ z7mz`>ygWL&?k4f76q?(4^5F;2I(fi|{pXX=2Q8SQ%_jk8J|y&NX^dv;c;Yhqst`}| z!Yo6S*C+4!L*yH^-FluXWC+YnXII*8&sHdPqpn5{CHged`v;PQ=4^=vt0RNq4eA)H zCRI2U=1mElA`|*z>Mmkf!+Uxf0;q-Z2Qr<%Wv6r^hVB00%kpaFQJ~u#e?;>+l1vZ_ zgS(>hE=$J2A%}`GshBs2pUQ@MmEO&jyV162g_(w?s;9W`jM#Jr@U=xXzj}KX3kWdZsK!vFc+T)i=9po> zbFB<3FAg1bGCGW$>gj7{-zSJ7lAeTt)ZeB3brD5A-yJ}K&9U_)PL#=R+*UQr Rvea1c?_R}Sf#G()q{?r_3w;0p diff --git a/services/default.nix b/services/default.nix index acf564b..eb5a420 100644 --- a/services/default.nix +++ b/services/default.nix @@ -6,5 +6,5 @@ ./quassel.nix ./website.nix ./xmpp.nix - ] + ]; }