| 
									
										
										
										
											2014-04-14 16:26:48 +02:00
										 |  |  | { config, lib, pkgs, ... }: | 
					
						
							| 
									
										
										
										
											2013-12-11 15:32:27 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-14 16:26:48 +02:00
										 |  |  | with lib; | 
					
						
							| 
									
										
										
										
											2014-03-21 14:55:42 +01:00
										 |  |  | let | 
					
						
							| 
									
										
										
										
											2014-03-21 15:17:49 +01:00
										 |  |  |   diskSize = "100G"; | 
					
						
							| 
									
										
										
										
											2014-03-21 14:55:42 +01:00
										 |  |  | in | 
					
						
							| 
									
										
										
										
											2013-12-11 15:32:27 +01:00
										 |  |  | { | 
					
						
							|  |  |  |   imports = [ ../profiles/headless.nix ../profiles/qemu-guest.nix ]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-26 09:09:18 +00:00
										 |  |  |   # https://cloud.google.com/compute/docs/tutorials/building-images | 
					
						
							| 
									
										
										
										
											2015-03-26 09:15:09 +00:00
										 |  |  |   networking.firewall.enable = mkDefault false; | 
					
						
							| 
									
										
										
										
											2015-03-26 09:09:18 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-11 15:32:27 +01:00
										 |  |  |   system.build.googleComputeImage = | 
					
						
							|  |  |  |     pkgs.vmTools.runInLinuxVM ( | 
					
						
							|  |  |  |       pkgs.runCommand "google-compute-image" | 
					
						
							|  |  |  |         { preVM = | 
					
						
							|  |  |  |             ''
 | 
					
						
							|  |  |  |               mkdir $out | 
					
						
							| 
									
										
										
										
											2013-12-12 12:48:09 +01:00
										 |  |  |               diskImage=$out/$diskImageBase | 
					
						
							| 
									
										
										
										
											2014-03-21 14:55:42 +01:00
										 |  |  |               truncate $diskImage --size ${diskSize} | 
					
						
							| 
									
										
										
										
											2013-12-11 15:32:27 +01:00
										 |  |  |               mv closure xchg/ | 
					
						
							|  |  |  |             '';
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           postVM = | 
					
						
							|  |  |  |             ''
 | 
					
						
							|  |  |  |               PATH=$PATH:${pkgs.gnutar}/bin:${pkgs.gzip}/bin | 
					
						
							|  |  |  |               pushd $out | 
					
						
							| 
									
										
										
										
											2014-03-21 14:55:42 +01:00
										 |  |  |               mv $diskImageBase disk.raw | 
					
						
							|  |  |  |               tar -Szcf $diskImageBase.tar.gz disk.raw | 
					
						
							|  |  |  |               rm $out/disk.raw | 
					
						
							| 
									
										
										
										
											2013-12-11 15:32:27 +01:00
										 |  |  |               popd | 
					
						
							|  |  |  |             '';
 | 
					
						
							| 
									
										
										
										
											2015-09-18 16:50:48 +00:00
										 |  |  |           diskImageBase = "nixos-image-${config.system.nixosLabel}-${pkgs.stdenv.system}.raw"; | 
					
						
							| 
									
										
										
										
											2013-12-11 15:32:27 +01:00
										 |  |  |           buildInputs = [ pkgs.utillinux pkgs.perl ]; | 
					
						
							|  |  |  |           exportReferencesGraph = | 
					
						
							|  |  |  |             [ "closure" config.system.build.toplevel ]; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         ''
 | 
					
						
							|  |  |  |           # Create partition table | 
					
						
							|  |  |  |           ${pkgs.parted}/sbin/parted /dev/vda mklabel msdos | 
					
						
							| 
									
										
										
										
											2014-03-21 14:55:42 +01:00
										 |  |  |           ${pkgs.parted}/sbin/parted /dev/vda mkpart primary ext4 1 ${diskSize} | 
					
						
							| 
									
										
										
										
											2013-12-11 15:32:27 +01:00
										 |  |  |           ${pkgs.parted}/sbin/parted /dev/vda print | 
					
						
							|  |  |  |           . /sys/class/block/vda1/uevent | 
					
						
							|  |  |  |           mknod /dev/vda1 b $MAJOR $MINOR | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           # Create an empty filesystem and mount it. | 
					
						
							|  |  |  |           ${pkgs.e2fsprogs}/sbin/mkfs.ext4 -L nixos /dev/vda1 | 
					
						
							|  |  |  |           ${pkgs.e2fsprogs}/sbin/tune2fs -c 0 -i 0 /dev/vda1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           mkdir /mnt | 
					
						
							|  |  |  |           mount /dev/vda1 /mnt | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           # The initrd expects these directories to exist. | 
					
						
							|  |  |  |           mkdir /mnt/dev /mnt/proc /mnt/sys | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           mount --bind /proc /mnt/proc | 
					
						
							|  |  |  |           mount --bind /dev /mnt/dev | 
					
						
							|  |  |  |           mount --bind /sys /mnt/sys | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           # Copy all paths in the closure to the filesystem. | 
					
						
							|  |  |  |           storePaths=$(perl ${pkgs.pathsFromGraph} /tmp/xchg/closure) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           mkdir -p /mnt/nix/store | 
					
						
							|  |  |  |           echo "copying everything (will take a while)..." | 
					
						
							|  |  |  |           cp -prd $storePaths /mnt/nix/store/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           # Register the paths in the Nix database. | 
					
						
							|  |  |  |           printRegistration=1 perl ${pkgs.pathsFromGraph} /tmp/xchg/closure | \ | 
					
						
							| 
									
										
										
										
											2015-01-05 09:31:22 +01:00
										 |  |  |               chroot /mnt ${config.nix.package}/bin/nix-store --load-db --option build-users-group "" | 
					
						
							| 
									
										
										
										
											2013-12-11 15:32:27 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |           # Create the system profile to allow nixos-rebuild to work. | 
					
						
							|  |  |  |           chroot /mnt ${config.nix.package}/bin/nix-env \ | 
					
						
							| 
									
										
										
										
											2015-01-05 09:31:22 +01:00
										 |  |  |               -p /nix/var/nix/profiles/system --set ${config.system.build.toplevel} \ | 
					
						
							|  |  |  |               --option build-users-group "" | 
					
						
							| 
									
										
										
										
											2013-12-11 15:32:27 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |           # `nixos-rebuild' requires an /etc/NIXOS. | 
					
						
							|  |  |  |           mkdir -p /mnt/etc | 
					
						
							|  |  |  |           touch /mnt/etc/NIXOS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           # `switch-to-configuration' requires a /bin/sh | 
					
						
							|  |  |  |           mkdir -p /mnt/bin | 
					
						
							|  |  |  |           ln -s ${config.system.build.binsh}/bin/sh /mnt/bin/sh | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           # Install a configuration.nix. | 
					
						
							|  |  |  |           mkdir -p /mnt/etc/nixos /mnt/boot/grub | 
					
						
							|  |  |  |           cp ${./google-compute-config.nix} /mnt/etc/nixos/configuration.nix | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           # Generate the GRUB menu. | 
					
						
							|  |  |  |           ln -s vda /dev/sda | 
					
						
							|  |  |  |           chroot /mnt ${config.system.build.toplevel}/bin/switch-to-configuration boot | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           umount /mnt/proc /mnt/dev /mnt/sys | 
					
						
							|  |  |  |           umount /mnt | 
					
						
							|  |  |  |         ''
 | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   fileSystems."/".label = "nixos"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   boot.kernelParams = [ "console=ttyS0" "panic=1" "boot.panic_on_fail" ]; | 
					
						
							|  |  |  |   boot.initrd.kernelModules = [ "virtio_scsi" ]; | 
					
						
							| 
									
										
										
										
											2015-03-26 09:09:18 +00:00
										 |  |  |   boot.kernelModules = [ "virtio_pci" "virtio_net" ]; | 
					
						
							| 
									
										
										
										
											2013-12-11 15:32:27 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |   # Generate a GRUB menu.  Amazon's pv-grub uses this to boot our kernel/initrd. | 
					
						
							|  |  |  |   boot.loader.grub.device = "/dev/sda"; | 
					
						
							|  |  |  |   boot.loader.grub.timeout = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   # Don't put old configurations in the GRUB menu.  The user has no | 
					
						
							|  |  |  |   # way to select them anyway. | 
					
						
							| 
									
										
										
										
											2015-05-29 13:26:51 -07:00
										 |  |  |   boot.loader.grub.configurationLimit = 0; | 
					
						
							| 
									
										
										
										
											2013-12-11 15:32:27 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |   # Allow root logins only using the SSH key that the user specified | 
					
						
							|  |  |  |   # at instance creation time. | 
					
						
							|  |  |  |   services.openssh.enable = true; | 
					
						
							|  |  |  |   services.openssh.permitRootLogin = "without-password"; | 
					
						
							| 
									
										
										
										
											2015-03-26 09:15:09 +00:00
										 |  |  |   services.openssh.passwordAuthentication = mkDefault false; | 
					
						
							| 
									
										
										
										
											2013-12-11 15:32:27 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |   # Force getting the hostname from Google Compute. | 
					
						
							|  |  |  |   networking.hostName = mkDefault ""; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   # Always include cryptsetup so that NixOps can use it. | 
					
						
							|  |  |  |   environment.systemPackages = [ pkgs.cryptsetup ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   # Configure default metadata hostnames | 
					
						
							|  |  |  |   networking.extraHosts = ''
 | 
					
						
							|  |  |  |     169.254.169.254 metadata.google.internal metadata | 
					
						
							|  |  |  |   '';
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-30 15:11:52 -05:00
										 |  |  |   services.ntp.servers = [ "metadata.google.internal" ]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-11 20:31:57 +03:00
										 |  |  |   networking.usePredictableInterfaceNames = false; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-12 08:46:25 +03:00
										 |  |  |   systemd.services.fetch-ssh-keys = | 
					
						
							|  |  |  |     { description = "Fetch host keys and authorized_keys for root user"; | 
					
						
							| 
									
										
										
										
											2013-12-11 15:32:27 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-20 14:07:46 +03:00
										 |  |  |       wantedBy = [ "sshd.service" ]; | 
					
						
							| 
									
										
										
										
											2013-12-11 15:32:27 +01:00
										 |  |  |       before = [ "sshd.service" ]; | 
					
						
							| 
									
										
										
										
											2015-02-27 10:48:15 +00:00
										 |  |  |       after = [ "network-online.target" "ip-up.target" ]; | 
					
						
							|  |  |  |       wants = [ "network-online.target" "ip-up.target" ]; | 
					
						
							| 
									
										
										
										
											2013-12-11 15:32:27 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-23 21:45:40 +00:00
										 |  |  |       script = let wget = "${pkgs.wget}/bin/wget --retry-connrefused -t 15 --waitretry=10 --header='Metadata-Flavor: Google'"; | 
					
						
							|  |  |  |                    mktemp = "mktemp --tmpdir=/run"; in | 
					
						
							| 
									
										
										
										
											2013-12-11 15:32:27 +01:00
										 |  |  |         ''
 | 
					
						
							| 
									
										
										
										
											2015-01-05 15:01:49 -05:00
										 |  |  |           # When dealing with cryptographic keys, we want to keep things private. | 
					
						
							|  |  |  |           umask 077 | 
					
						
							| 
									
										
										
										
											2013-12-11 15:32:27 +01:00
										 |  |  |           # Don't download the SSH key if it has already been downloaded | 
					
						
							| 
									
										
										
										
											2015-04-28 21:28:16 +00:00
										 |  |  |           if ! [ -s /root/.ssh/authorized_keys ]; then | 
					
						
							| 
									
										
										
										
											2015-03-09 18:28:34 +00:00
										 |  |  |               echo "obtaining SSH key..." | 
					
						
							|  |  |  |               mkdir -m 0700 -p /root/.ssh | 
					
						
							| 
									
										
										
										
											2015-04-28 21:28:16 +00:00
										 |  |  |               AUTH_KEYS=$(${mktemp}) | 
					
						
							|  |  |  |               ${wget} -O $AUTH_KEYS http://metadata.google.internal/0.1/meta-data/authorized-keys | 
					
						
							|  |  |  |               if [ -s $AUTH_KEYS ]; then | 
					
						
							|  |  |  |                   KEY_PUB=$(${mktemp}) | 
					
						
							|  |  |  |                   cat $AUTH_KEYS | cut -d: -f2- > $KEY_PUB | 
					
						
							|  |  |  |                   if ! grep -q -f $KEY_PUB /root/.ssh/authorized_keys; then | 
					
						
							|  |  |  |                       cat $KEY_PUB >> /root/.ssh/authorized_keys | 
					
						
							|  |  |  |                       echo "New key added to authorized_keys." | 
					
						
							|  |  |  |                   fi | 
					
						
							|  |  |  |                   chmod 600 /root/.ssh/authorized_keys | 
					
						
							|  |  |  |                   rm -f $KEY_PUB | 
					
						
							|  |  |  |               else | 
					
						
							|  |  |  |                   echo "Downloading http://metadata.google.internal/0.1/meta-data/authorized-keys failed." | 
					
						
							|  |  |  |                   false | 
					
						
							|  |  |  |               fi | 
					
						
							|  |  |  |               rm -f $AUTH_KEYS | 
					
						
							| 
									
										
										
										
											2013-12-11 15:32:27 +01:00
										 |  |  |           fi | 
					
						
							| 
									
										
										
										
											2014-07-12 08:46:25 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-30 14:10:32 -05:00
										 |  |  |           countKeys=0 | 
					
						
							|  |  |  |           ${flip concatMapStrings config.services.openssh.hostKeys (k : | 
					
						
							|  |  |  |             let kName = baseNameOf k.path; in ''
 | 
					
						
							| 
									
										
										
										
											2015-04-28 21:28:16 +00:00
										 |  |  |               PRIV_KEY=$(${mktemp}) | 
					
						
							| 
									
										
										
										
											2014-12-30 14:10:32 -05:00
										 |  |  |               echo "trying to obtain SSH private host key ${kName}" | 
					
						
							| 
									
										
										
										
											2015-04-28 21:28:16 +00:00
										 |  |  |               ${wget} -O $PRIV_KEY http://metadata.google.internal/0.1/meta-data/attributes/${kName} && : | 
					
						
							|  |  |  |               if [ $? -eq 0 -a -s $PRIV_KEY ]; then | 
					
						
							| 
									
										
										
										
											2014-12-30 14:10:32 -05:00
										 |  |  |                   countKeys=$((countKeys+1)) | 
					
						
							| 
									
										
										
										
											2015-04-28 21:28:16 +00:00
										 |  |  |                   mv -f $PRIV_KEY ${k.path} | 
					
						
							|  |  |  |                   echo "Downloaded ${k.path}" | 
					
						
							| 
									
										
										
										
											2014-12-30 14:10:32 -05:00
										 |  |  |                   chmod 600 ${k.path} | 
					
						
							|  |  |  |                   ${config.programs.ssh.package}/bin/ssh-keygen -y -f ${k.path} > ${k.path}.pub | 
					
						
							|  |  |  |                   chmod 644 ${k.path}.pub | 
					
						
							| 
									
										
										
										
											2015-04-28 21:28:16 +00:00
										 |  |  |               else | 
					
						
							|  |  |  |                   echo "Downloading http://metadata.google.internal/0.1/meta-data/attributes/${kName} failed." | 
					
						
							| 
									
										
										
										
											2014-12-30 14:10:32 -05:00
										 |  |  |               fi | 
					
						
							| 
									
										
										
										
											2015-04-28 21:28:16 +00:00
										 |  |  |               rm -f $PRIV_KEY | 
					
						
							| 
									
										
										
										
											2014-12-30 14:10:32 -05:00
										 |  |  |             ''
 | 
					
						
							|  |  |  |           )} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           if [[ $countKeys -le 0 ]]; then | 
					
						
							|  |  |  |              echo "failed to obtain any SSH private host keys." | 
					
						
							|  |  |  |              false | 
					
						
							| 
									
										
										
										
											2014-07-12 08:46:25 +03:00
										 |  |  |           fi | 
					
						
							| 
									
										
										
										
											2013-12-11 15:32:27 +01:00
										 |  |  |         '';
 | 
					
						
							|  |  |  |       serviceConfig.Type = "oneshot"; | 
					
						
							|  |  |  |       serviceConfig.RemainAfterExit = true; | 
					
						
							| 
									
										
										
										
											2014-08-01 15:25:50 +02:00
										 |  |  |       serviceConfig.StandardError = "journal+console"; | 
					
						
							|  |  |  |       serviceConfig.StandardOutput = "journal+console"; | 
					
						
							| 
									
										
										
										
											2015-03-26 09:09:18 +00:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   # Setings taken from https://cloud.google.com/compute/docs/tutorials/building-images#providedkernel | 
					
						
							|  |  |  |   boot.kernel.sysctl = { | 
					
						
							|  |  |  |     # enables syn flood protection | 
					
						
							| 
									
										
										
										
											2015-03-26 09:15:09 +00:00
										 |  |  |     "net.ipv4.tcp_syncookies" = mkDefault "1"; | 
					
						
							| 
									
										
										
										
											2015-03-26 09:09:18 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # ignores source-routed packets | 
					
						
							| 
									
										
										
										
											2015-03-26 09:15:09 +00:00
										 |  |  |     "net.ipv4.conf.all.accept_source_route" = mkDefault "0"; | 
					
						
							| 
									
										
										
										
											2015-03-26 09:09:18 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # ignores source-routed packets | 
					
						
							| 
									
										
										
										
											2015-03-26 09:15:09 +00:00
										 |  |  |     "net.ipv4.conf.default.accept_source_route" = mkDefault "0"; | 
					
						
							| 
									
										
										
										
											2015-03-26 09:09:18 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # ignores ICMP redirects | 
					
						
							| 
									
										
										
										
											2015-03-26 09:15:09 +00:00
										 |  |  |     "net.ipv4.conf.all.accept_redirects" = mkDefault "0"; | 
					
						
							| 
									
										
										
										
											2015-03-26 09:09:18 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # ignores ICMP redirects | 
					
						
							| 
									
										
										
										
											2015-03-26 09:15:09 +00:00
										 |  |  |     "net.ipv4.conf.default.accept_redirects" = mkDefault "0"; | 
					
						
							| 
									
										
										
										
											2015-03-26 09:09:18 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # ignores ICMP redirects from non-GW hosts | 
					
						
							| 
									
										
										
										
											2015-03-26 09:15:09 +00:00
										 |  |  |     "net.ipv4.conf.all.secure_redirects" = mkDefault "1"; | 
					
						
							| 
									
										
										
										
											2015-03-26 09:09:18 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # ignores ICMP redirects from non-GW hosts | 
					
						
							| 
									
										
										
										
											2015-03-26 09:15:09 +00:00
										 |  |  |     "net.ipv4.conf.default.secure_redirects" = mkDefault "1"; | 
					
						
							| 
									
										
										
										
											2015-03-26 09:09:18 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # don't allow traffic between networks or act as a router | 
					
						
							| 
									
										
										
										
											2015-03-26 09:15:09 +00:00
										 |  |  |     "net.ipv4.ip_forward" = mkDefault "0"; | 
					
						
							| 
									
										
										
										
											2015-03-26 09:09:18 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # don't allow traffic between networks or act as a router | 
					
						
							| 
									
										
										
										
											2015-03-26 09:15:09 +00:00
										 |  |  |     "net.ipv4.conf.all.send_redirects" = mkDefault "0"; | 
					
						
							| 
									
										
										
										
											2015-03-26 09:09:18 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # don't allow traffic between networks or act as a router | 
					
						
							| 
									
										
										
										
											2015-03-26 09:15:09 +00:00
										 |  |  |     "net.ipv4.conf.default.send_redirects" = mkDefault "0"; | 
					
						
							| 
									
										
										
										
											2015-03-26 09:09:18 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # reverse path filtering - IP spoofing protection | 
					
						
							| 
									
										
										
										
											2015-03-26 09:15:09 +00:00
										 |  |  |     "net.ipv4.conf.all.rp_filter" = mkDefault "1"; | 
					
						
							| 
									
										
										
										
											2015-03-26 09:09:18 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # reverse path filtering - IP spoofing protection | 
					
						
							| 
									
										
										
										
											2015-03-26 09:15:09 +00:00
										 |  |  |     "net.ipv4.conf.default.rp_filter" = mkDefault "1"; | 
					
						
							| 
									
										
										
										
											2015-03-26 09:09:18 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # ignores ICMP broadcasts to avoid participating in Smurf attacks | 
					
						
							| 
									
										
										
										
											2015-03-26 09:15:09 +00:00
										 |  |  |     "net.ipv4.icmp_echo_ignore_broadcasts" = mkDefault "1"; | 
					
						
							| 
									
										
										
										
											2015-03-26 09:09:18 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # ignores bad ICMP errors | 
					
						
							| 
									
										
										
										
											2015-03-26 09:15:09 +00:00
										 |  |  |     "net.ipv4.icmp_ignore_bogus_error_responses" = mkDefault "1"; | 
					
						
							| 
									
										
										
										
											2015-03-26 09:09:18 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # logs spoofed, source-routed, and redirect packets | 
					
						
							| 
									
										
										
										
											2015-03-26 09:15:09 +00:00
										 |  |  |     "net.ipv4.conf.all.log_martians" = mkDefault "1"; | 
					
						
							| 
									
										
										
										
											2015-03-26 09:09:18 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # log spoofed, source-routed, and redirect packets | 
					
						
							| 
									
										
										
										
											2015-03-26 09:15:09 +00:00
										 |  |  |     "net.ipv4.conf.default.log_martians" = mkDefault "1"; | 
					
						
							| 
									
										
										
										
											2015-03-26 09:09:18 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # implements RFC 1337 fix | 
					
						
							| 
									
										
										
										
											2015-03-26 09:15:09 +00:00
										 |  |  |     "net.ipv4.tcp_rfc1337" = mkDefault "1"; | 
					
						
							| 
									
										
										
										
											2015-03-26 09:09:18 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # randomizes addresses of mmap base, heap, stack and VDSO page | 
					
						
							| 
									
										
										
										
											2015-03-26 09:15:09 +00:00
										 |  |  |     "kernel.randomize_va_space" = mkDefault "2"; | 
					
						
							| 
									
										
										
										
											2015-03-26 09:09:18 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # provides protection from ToCToU races | 
					
						
							| 
									
										
										
										
											2015-03-26 09:15:09 +00:00
										 |  |  |     "fs.protected_hardlinks" = mkDefault "1"; | 
					
						
							| 
									
										
										
										
											2015-03-26 09:09:18 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # provides protection from ToCToU races | 
					
						
							| 
									
										
										
										
											2015-03-26 09:15:09 +00:00
										 |  |  |     "fs.protected_symlinks" = mkDefault "1"; | 
					
						
							| 
									
										
										
										
											2015-03-26 09:09:18 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # makes locating kernel addresses more difficult | 
					
						
							| 
									
										
										
										
											2015-03-26 09:15:09 +00:00
										 |  |  |     "kernel.kptr_restrict" = mkDefault "1"; | 
					
						
							| 
									
										
										
										
											2015-03-26 09:09:18 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # set ptrace protections | 
					
						
							| 
									
										
										
										
											2015-03-26 09:15:09 +00:00
										 |  |  |     "kernel.yama.ptrace_scope" = mkDefault "1"; | 
					
						
							| 
									
										
										
										
											2015-03-26 09:09:18 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # set perf only available to root | 
					
						
							| 
									
										
										
										
											2015-03-26 09:15:09 +00:00
										 |  |  |     "kernel.perf_event_paranoid" = mkDefault "2"; | 
					
						
							| 
									
										
										
										
											2015-03-26 09:09:18 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-11 15:32:27 +01:00
										 |  |  | } |