Simplify dirsrv setup
Connecting directly using zerotier, no more nginx
This commit is contained in:
		
							parent
							
								
									d1d48cb749
								
							
						
					
					
						commit
						685deea920
					
				| @ -1,26 +0,0 @@ | |||||||
| dn: cn=config |  | ||||||
| changetype: modify |  | ||||||
| replace: nsslapd-security |  | ||||||
| nsslapd-security: on |  | ||||||
| 
 |  | ||||||
| dn: cn=encryption,cn=config |  | ||||||
| changetype: modify |  | ||||||
| replace: nsSSLSessionTimeout |  | ||||||
| nsSSLSessionTimeout: 0 |  | ||||||
| - |  | ||||||
| replace: nsSSLClientAuth |  | ||||||
| nsSSLClientAuth: off |  | ||||||
| - |  | ||||||
| replace: nsSSL3 |  | ||||||
| nsSSL3: off |  | ||||||
| - |  | ||||||
| replace: nsSSL2 |  | ||||||
| nsSSL2: off |  | ||||||
| 
 |  | ||||||
| dn: cn=RSA,cn=encryption,cn=config |  | ||||||
| objectClass: top |  | ||||||
| objectClass: nsEncryptionModule |  | ||||||
| nsSSLPersonalitySSL: Server-Cert |  | ||||||
| nsSSLActivation: on |  | ||||||
| nsSSLToken: internal (software) |  | ||||||
| cn: RSA |  | ||||||
| @ -11,5 +11,4 @@ depends "firewall" | |||||||
| depends "apt" | depends "apt" | ||||||
| depends "ulimit" | depends "ulimit" | ||||||
| depends "backup" | depends "backup" | ||||||
| depends "kosmos-nginx" |  | ||||||
| depends "kosmos-base" | depends "kosmos-base" | ||||||
|  | |||||||
| @ -2,27 +2,6 @@ | |||||||
| # Cookbook Name:: kosmos-dirsrv | # Cookbook Name:: kosmos-dirsrv | ||||||
| # Recipe:: default | # Recipe:: default | ||||||
| # | # | ||||||
| # The MIT License (MIT) |  | ||||||
| # |  | ||||||
| # Copyright:: 2019, Kosmos Developers |  | ||||||
| # |  | ||||||
| # Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
| # of this software and associated documentation files (the "Software"), to deal |  | ||||||
| # in the Software without restriction, including without limitation the rights |  | ||||||
| # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
| # copies of the Software, and to permit persons to whom the Software is |  | ||||||
| # furnished to do so, subject to the following conditions: |  | ||||||
| # |  | ||||||
| # The above copyright notice and this permission notice shall be included in |  | ||||||
| # all copies or substantial portions of the Software. |  | ||||||
| # |  | ||||||
| # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |  | ||||||
| # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |  | ||||||
| # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |  | ||||||
| # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |  | ||||||
| # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |  | ||||||
| # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
| # THE SOFTWARE. |  | ||||||
| 
 | 
 | ||||||
| credentials = data_bag_item("credentials", "dirsrv") | credentials = data_bag_item("credentials", "dirsrv") | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -2,32 +2,12 @@ | |||||||
| # Cookbook Name:: kosmos-dirsrv | # Cookbook Name:: kosmos-dirsrv | ||||||
| # Recipe:: firewall | # Recipe:: firewall | ||||||
| # | # | ||||||
| # The MIT License (MIT) |  | ||||||
| # |  | ||||||
| # Copyright:: 2020, Kosmos Developers |  | ||||||
| # |  | ||||||
| # Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
| # of this software and associated documentation files (the "Software"), to deal |  | ||||||
| # in the Software without restriction, including without limitation the rights |  | ||||||
| # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
| # copies of the Software, and to permit persons to whom the Software is |  | ||||||
| # furnished to do so, subject to the following conditions: |  | ||||||
| # |  | ||||||
| # The above copyright notice and this permission notice shall be included in |  | ||||||
| # all copies or substantial portions of the Software. |  | ||||||
| # |  | ||||||
| # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |  | ||||||
| # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |  | ||||||
| # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |  | ||||||
| # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |  | ||||||
| # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |  | ||||||
| # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
| # THE SOFTWARE. |  | ||||||
| 
 | 
 | ||||||
| include_recipe "kosmos-base::firewall" | include_recipe "kosmos-base::firewall" | ||||||
| 
 | 
 | ||||||
| firewall_rule "ldap" do | firewall_rule "ldap" do | ||||||
|   port     [389, 636] |   port     [389, 636] | ||||||
|  |   source   "10.1.1.0/24" # zerotier | ||||||
|   protocol :tcp |   protocol :tcp | ||||||
|   command  :allow |   command  :allow | ||||||
| end | end | ||||||
|  | |||||||
| @ -109,75 +109,4 @@ nsslapd-allow-anonymous-access: off | |||||||
|     action :nothing |     action :nothing | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   unless node.chef_environment == "development" |  | ||||||
|     package "libnss3-tools" # provides pk12util |  | ||||||
| 
 |  | ||||||
|     cookbook_file "#{Chef::Config[:file_cache_path]}/tls.ldif" do |  | ||||||
|       source "tls.ldif" |  | ||||||
|       owner "root" |  | ||||||
|       group "root" |  | ||||||
|     end |  | ||||||
| 
 |  | ||||||
|     include_recipe "kosmos-nginx" |  | ||||||
|     include_recipe "kosmos-base::letsencrypt" |  | ||||||
| 
 |  | ||||||
|     dirsrv_hook = <<-EOF |  | ||||||
| #!/usr/bin/env bash |  | ||||||
| 
 |  | ||||||
| set -e |  | ||||||
| 
 |  | ||||||
| # Copy the dirsrv certificate and restart the server if it has been renewed |  | ||||||
| # This is necessary because dirsrv uses a different format for the certificates |  | ||||||
| for domain in $RENEWED_DOMAINS; do |  | ||||||
|   case $domain in |  | ||||||
|   #{new_resource.hostname}) |  | ||||||
|     openssl pkcs12 -export -in "${RENEWED_LINEAGE}/fullchain.pem" -inkey "${RENEWED_LINEAGE}/privkey.pem" -out #{Chef::Config[:file_cache_path]}/#{new_resource.hostname}.p12 -name 'Server-Cert' -passout pass: |  | ||||||
|     pk12util -i #{Chef::Config[:file_cache_path]}/#{new_resource.hostname}.p12 -d #{inst_dir} -W '' |  | ||||||
|     # Remove the encryption key entries from the current database. |  | ||||||
|     # They will be recreated on restart for the new certificate |  | ||||||
|     awk '! /^dn: cn=3D|AES,cn=encrypted attribute keys,cn=userRoot/ {print; printf "\\n" ; }' RS="" #{inst_dir}/dse.ldif > #{inst_dir}/dse_new.ldif |  | ||||||
|     mv #{inst_dir}/dse_new.ldif #{inst_dir}/dse.ldif |  | ||||||
|     systemctl restart #{service_name} |  | ||||||
|     ;; |  | ||||||
|   esac |  | ||||||
| done |  | ||||||
|     EOF |  | ||||||
| 
 |  | ||||||
|     file "/etc/letsencrypt/renewal-hooks/deploy/dirsrv" do |  | ||||||
|       content dirsrv_hook |  | ||||||
|       mode 0755 |  | ||||||
|       owner "root" |  | ||||||
|       group "root" |  | ||||||
|     end |  | ||||||
| 
 |  | ||||||
|     template "#{node['nginx']['dir']}/sites-available/#{new_resource.hostname}" do |  | ||||||
|       source 'nginx_conf_empty.erb' |  | ||||||
|       owner node["nginx"]["user"] |  | ||||||
|       mode 0640 |  | ||||||
|       notifies :reload, 'service[nginx]', :delayed |  | ||||||
|     end |  | ||||||
| 
 |  | ||||||
|     nginx_certbot_site new_resource.hostname do |  | ||||||
|       notifies :run, "execute[letsencrypt cert for #{new_resource.hostname}]", :delayed |  | ||||||
|     end |  | ||||||
| 
 |  | ||||||
|     # Generate a Let's Encrypt cert (only if the nginx vhost exists and no cert |  | ||||||
|     # has been generated before. The renew cron will take care of renewing |  | ||||||
|     execute "letsencrypt cert for #{new_resource.hostname}" do |  | ||||||
|       root_directory = "/var/www/#{new_resource.hostname}" |  | ||||||
|       command "certbot certonly --webroot --agree-tos --email ops@kosmos.org --webroot-path #{root_directory} --deploy-hook /etc/letsencrypt/renewal-hooks/deploy/dirsrv -d #{new_resource.hostname} -n" |  | ||||||
|       only_if do |  | ||||||
|         ::File.exist?("#{node['nginx']['dir']}/sites-enabled/#{new_resource.hostname}_certbot") && |  | ||||||
|           !::File.exist?("/etc/letsencrypt/live/#{new_resource.hostname}/fullchain.pem") |  | ||||||
|       end |  | ||||||
|       notifies :run, "execute[add tls config]", :immediately |  | ||||||
|     end |  | ||||||
| 
 |  | ||||||
|     execute "add tls config" do |  | ||||||
|       command "ldapadd -x -w #{new_resource.admin_password} -D '#{new_resource.bind_dn}' -f '#{Chef::Config[:file_cache_path]}/tls.ldif' -p #{new_resource.port} -h localhost" |  | ||||||
|       sensitive true |  | ||||||
|       action :nothing |  | ||||||
|       notifies :restart, "service[#{service_name}]", :immediately |  | ||||||
|     end |  | ||||||
|   end |  | ||||||
| end | end | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user