Compare commits
	
		
			8 Commits
		
	
	
		
			main
			...
			feature/ma
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 97f50bf4e2 | |||
| 5dd9e21593 | |||
| 18b143c82f | |||
| 434d1acc24 | |||
| 2579bb8aab | |||
| 61c286d1e0 | |||
| ac6334eff5 | |||
| b137995503 | 
							
								
								
									
										16
									
								
								base.yml
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								base.yml
									
									
									
									
									
								
							| @@ -40,6 +40,22 @@ | ||||
|       tags: sshkeys | ||||
|  | ||||
|  | ||||
| - name: Install firewall | ||||
|   hosts: "{{ machine_name }}" | ||||
|   vars: | ||||
|   - firewall_allowed_tcp_ports: | ||||
|     - "{{ ssh_port }}" | ||||
|     - "80" | ||||
|     - "443" | ||||
|     - "8080" # cadvisor | ||||
|     - "9100" # nodeexporter | ||||
|     - "3100" # loki | ||||
|     - "9113" # nginxexporter | ||||
|   roles: | ||||
|     - role: firewall | ||||
|       become: yes | ||||
|  | ||||
|  | ||||
| - name: Set up dotfiles | ||||
|   hosts: "{{ machine_name }}" | ||||
|   roles: | ||||
|   | ||||
| @@ -2,12 +2,10 @@ | ||||
| # deploy dockprom pod to dev stage | ||||
|  | ||||
| - name: Install dockprom docker pod | ||||
|   hosts: | ||||
|   - bespin | ||||
|   hosts: "{{ machine_name }}" | ||||
|   vars: | ||||
|     install_client_service: "true" | ||||
|     dockprom_bind_ip: "192.168.30.10" | ||||
|   - install_client_service: "true" | ||||
|   - dockprom_bind_ip: "192.168.30.40" | ||||
|   roles: | ||||
|   - role: pod-dockprom | ||||
|     become: yes | ||||
|  | ||||
|   | ||||
							
								
								
									
										25
									
								
								firewall.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								firewall.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | ||||
| --- | ||||
| # Playbook for firewall role | ||||
|  | ||||
|  | ||||
| - name: Set up SSH keys | ||||
|   hosts: "{{ machine_name }}" | ||||
|   roles: | ||||
|     - role: sshkeys | ||||
|       tags: sshkeys | ||||
|  | ||||
|  | ||||
| - name: Install firewall | ||||
|   hosts: "{{ machine_name }}" | ||||
|   vars: | ||||
|   - firewall_allowed_tcp_ports: | ||||
|     - "{{ ssh_port }}" | ||||
|     - "80" | ||||
|     - "443" | ||||
|     - "8080" # cadvisor | ||||
|     - "9100" # nodeexporter | ||||
|     - "3100" # loki | ||||
|     - "9113" # nginxexporter | ||||
|   roles: | ||||
|     - role: firewall | ||||
|       become: yes | ||||
| @@ -30,15 +30,20 @@ charlesreid1_port_ssl_gitea: "443" | ||||
| # pyenv variables | ||||
| pyenv_root: "/home/{{ username }}/.pyenv" | ||||
| pyenv_versions: | ||||
|   - miniconda3-4.3.30 | ||||
|   - 3.7.9 | ||||
| #  - miniconda3-4.3.30 | ||||
| #  - 3.7.5 | ||||
| #  - 3.8.0 | ||||
| pyenv_global_version: miniconda3-4.3.30 | ||||
| pyenv_global_version: 3.7.9 | ||||
| pyenv_python: "{{ pyenv_root }}/versions/{{ pyenv_global_version }}/bin/python" | ||||
| pyenv_pip: "{{ pyenv_root }}/versions/{{ pyenv_global_version }}/bin/pip" | ||||
|  | ||||
|  | ||||
|  | ||||
| # ports | ||||
| ssh_port: 5778 | ||||
|  | ||||
|  | ||||
| ######################## | ||||
| # vault variables | ||||
|  | ||||
|   | ||||
| @@ -1,60 +1,59 @@ | ||||
| $ANSIBLE_VAULT;1.1;AES256 | ||||
| 37633430646463656366396433396462383465383039636132376164626364336664366230383964 | ||||
| 3835663562353932346533306238653031623937313935320a306134636538383366383637636234 | ||||
| 34633239656434313565306133366539353664333536313739333766303666373162636532633436 | ||||
| 3935623266616435340a356234616231646334633239336363633166373563343363313366663464 | ||||
| 33316161626238373162306332343335656534663963316365396635623237333631336564636161 | ||||
| 61363861313564323539333836393364373738373236633636373365343632613435383237623562 | ||||
| 61393261333431626234623437636433643964383138623633316465653562623533326562663837 | ||||
| 39356633366539346433303139663733383239316434376137313838376462646231643839646163 | ||||
| 66373237653136333534643636666138653136623465633738633165366632363235633134356362 | ||||
| 36346261363837643238306332323238336132306265616363303532346362613766306433623565 | ||||
| 33373134646366346265633562306634303736613563653061333461636465313261343565386131 | ||||
| 39333438633332376638373431643064653337303564643533386436353865346139383936643737 | ||||
| 66666130323533373966363062646433336235373766313363666539383865646464326465363332 | ||||
| 30616662623863623533316536653132316535376630623165656335353163653761633465383332 | ||||
| 33623530316135616264366436346332353265346136626337633632323538653539326234346632 | ||||
| 37336461646666346235306535646530336635326536616635316162326133636261656262636138 | ||||
| 34636534313536623364663830366264373433373066363934396338303766333831643163326130 | ||||
| 64623761383334333266356338626630366162643764666264316139663361373562353164393431 | ||||
| 65656134333561643165623036666139333335323066636262386336666461646631623564653733 | ||||
| 30646462396131336262376264373963626531616665616630623532353739623938623234326635 | ||||
| 62633166303563383564363465333433316263623665323332663131353765393463306561663861 | ||||
| 64326564663165666234306664396335313933656332363064643661656162393831386431653339 | ||||
| 62653365393031383836626139303335396236326239643266313261326164646338613733363063 | ||||
| 33666436653439336639316539626634626661646638333863643266626466633530376266313339 | ||||
| 32383636646131346639656238373962393539633231386663343533336266393862383163383962 | ||||
| 34626264383635303435616234396664646136373436326163323761373636373162653531646434 | ||||
| 31643263636433656161303666313130306165613336343934343761636537643566666436623235 | ||||
| 65353737663034376333373835366131383235303863666231643663626130663737313662653533 | ||||
| 34353732386562383863306637663266363064336536613631373464636334646166396435363763 | ||||
| 66323232653437313535346561356632343039636435373739306263396533616333616532306439 | ||||
| 61383730353534333962363334313331636232666261613566393833313932353434323763343733 | ||||
| 34346639363037383962653437343630366237316530396365343364363434653766386239343438 | ||||
| 30626166333163333164326536323334646465613235363734653736626163303361396233646135 | ||||
| 61313862616431353161306238376336373434373331666233356264343466353536373961653662 | ||||
| 63363936333938303037323730636262356136336564623064356666636334666364646130613134 | ||||
| 66663063303361666366613163393861303835356461643865333035363161383237356434356538 | ||||
| 38623831316363656435313737666163313137323431313936316534366430633264633033653038 | ||||
| 37666663383763303936373465383437616338653430343035626662393330326562643139333364 | ||||
| 36616465636231393266373638373433616438343564366233343631643234393764653337636334 | ||||
| 64396236333965613537393034623232373731303965346263613161633336636131366533333635 | ||||
| 65343732313963313062303333383839333130653766393334366331363336346137323261363639 | ||||
| 64626364616361386365633066363566643530383564663063623931313833626264326463376139 | ||||
| 36613836316538373366653537333430613765633032663235383661626331363438323962363133 | ||||
| 62363836313837373665306263663733336564633936306331656334353665633936633339626235 | ||||
| 63626637656462343438326536643837393339653837366433396633646461643731616265616238 | ||||
| 63656332313434633866643961633130396432363431306562653530343736373630623061386636 | ||||
| 61386165373730623934653736343964383039366437613063383636363862646233666137623635 | ||||
| 36303765633431313933353161336236663736643036636365623965653164303535366637343937 | ||||
| 36386235353339336239303961663165313263303334643238393039373233656164356138383136 | ||||
| 38643863666230353938653062383963393362396266393165333461333035666632356131373835 | ||||
| 39646231613332343638373961356666393533653235303034626162666633626566366564396330 | ||||
| 63323939376539646261353433663237393237323833613933323332643334366663653836306535 | ||||
| 32353736376665396235353661313866643633613239626638343662363832303363386638646261 | ||||
| 31383565646438313331626330316462613638346565303232363437333531363330636435666338 | ||||
| 66316364303138323835663761373865656266396231643339613934396562383665663736393561 | ||||
| 64646438326262386464656236636162323064396431383333316134313238626464653565396237 | ||||
| 64353336323636303532383932306436393631333132383565373134636230356634356266306338 | ||||
| 34303332666666616636633265346563383738363762356136346163363665353332383763323238 | ||||
| 313736636134323433336637303939303836 | ||||
| 62626164613766613162653233616565393064366366303463653761626435663236366237663931 | ||||
| 3938316262353261666435313766306438656330653561330a303036313536363263633635636435 | ||||
| 33363266643233363838616239333061316432346362383063326630623532363862666331373137 | ||||
| 6161643632353730350a656335663536366264633634323263386461646161386233646639393862 | ||||
| 32663162613130343463646363653663363237303436623138633366316163323164623366616538 | ||||
| 31306336383434656536383339383535646461326539653934363436333363633963313239383938 | ||||
| 30666333373537653338316633643436313732346261656330643162343230636163343136353464 | ||||
| 33646237663338636134613832623338316463366338623662363665633561316565306664663533 | ||||
| 62336636626136613465346533316237626335656632373535383137353264306337633637653762 | ||||
| 34366561386462306464373263363537303465306533303935383130393161343030323337343932 | ||||
| 33323839326665643734643064353838643436626363643733363232386665323761303165383236 | ||||
| 33393533333361383566616335343336303730656432306632326134653239306334306438646437 | ||||
| 65323339303038656239333230323037343466393134353731643033643065333431623333663264 | ||||
| 61306132636637353734373064343965386233663031313836306639313533303130306663316666 | ||||
| 30626564373066333561633363383733313063346564336338653737346130313432653231353732 | ||||
| 64636661346434616536636638623265396330343639613139623965373131336363376333626162 | ||||
| 65386562613362613266336565303065663132336263636535623639383035343131336532393466 | ||||
| 66666563623863653566336464363738366566343462366263653434303364623237633763333864 | ||||
| 34313362643665613834303533653533326531396132613539363434363463303263643433363866 | ||||
| 35353331633436346238616231656166343030613935343332363132363135353063386563366438 | ||||
| 61653739373534313164373262326233613032353835616334396332643262616665326130386462 | ||||
| 37363734633964363937633336326361313561373066643766356462333562373565643138333065 | ||||
| 66613165393539663239396561393235653236646537656637356430323731643761613061393665 | ||||
| 32636262343861386264326666613230373966316561653637336465653831343531363439323433 | ||||
| 65343430303361663437666230383236656538326466636366373366326637633063383538643461 | ||||
| 64643431656535623961313164623764376130633839306632376237633734343635393164356363 | ||||
| 39636261666639626261313962386434626533313538393463623365643065633432386630386434 | ||||
| 34313164313366353862653838356431323764633133303962346663303836333361613333666463 | ||||
| 34633032393861386332383236366432396337353539616132336537326663303263613464346235 | ||||
| 37373163383164306233653265356136393364316637626361353432333436306634643462333530 | ||||
| 63623330666237636138633131646232663531326462303837393236656662666233316532373162 | ||||
| 62353366326238313131366234646532626565666563393139376536643936313736626166313466 | ||||
| 61383461383538386566356333396464373636626266373239623266356263323532646366343966 | ||||
| 39666566623964303834326330303437626431356261396663373031306164636131383338313661 | ||||
| 38373034663266663763656436666137336235646635326664326633616662383039386139616266 | ||||
| 61306630373838333234613566386431633534653961633234653364326437356233343965666465 | ||||
| 65326266656665633331356665363435343438613134343339393762373762643530376363343930 | ||||
| 35333735386331343530343239393864323838633364363338373734323434393736333837373363 | ||||
| 38383464303434316436343764373934643162616237333930383239353862366532316263303461 | ||||
| 66333031323563626461363134656636393734323531343163373736353965323865613963646332 | ||||
| 32653363336366643261323063323662326239346135316664393366623532333865343461666532 | ||||
| 34343761636135363035313338353934653533366165633361653738333836336630383538336264 | ||||
| 61633538623663313136363636393332616335626137326332613131363934373235306662356163 | ||||
| 65643334376634626665316136393236313437376233333963316134613861623035666132386136 | ||||
| 63363062653235663136383665356661306538373566313136336564356563326138656635353466 | ||||
| 31646333373334623931353037663863636366386530383435623139336630353261633339323961 | ||||
| 65646332623336616536343063643666646634326462366131613930653538613433373230326633 | ||||
| 38353733656561353938306235303231623438396366356235666131323366633061313361656533 | ||||
| 38646331336636303138623962646464363062313462366664653466326335393437333336366133 | ||||
| 37383462303635316661343935353762666633366334343430326562663434313239373235356235 | ||||
| 32303962653437366363363739646263663264376665353362383033383466336435303736313731 | ||||
| 35646361306535373532393038383030336634353737343534663461393830346464386138623139 | ||||
| 61623664626164386630623633363237643161656434343465633530653836373439376339313831 | ||||
| 39343739336461333535663264626230393737306137653864323734626639313133626132626436 | ||||
| 66616465386333626332663064396137666561663162383337333634303037366234633632623538 | ||||
| 36356464323333613861383432356263636438316133333531393331323262316438343633643333 | ||||
| 39363130376562373163663633363363306133643161313063303165643934633266613330616130 | ||||
| 6633313739623562656533376639346132333338373030303561 | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| [defaults] | ||||
| inventory = linodehosts | ||||
| remote_user = root | ||||
| remote_user = charles | ||||
| private_key_file = ~/.ssh/id_rsa | ||||
| host_key_checking = False | ||||
| vault_password_file = .vault_secret | ||||
|   | ||||
| @@ -1,10 +1,13 @@ | ||||
| [servers:children] | ||||
| bear | ||||
| bespin | ||||
| dorky | ||||
| dracaena | ||||
|  | ||||
| [bear] | ||||
| linode_bear ansible_host=300.300.300.300 ansible_port=22 ansible_python_interpreter=/usr/bin/python3 | ||||
|  | ||||
| [dorky] | ||||
| linode_dorky ansible_host=400.400.400.400 ansible_port=22 ansible_python_interpreter=/usr/bin/python3 | ||||
|  | ||||
| [dracaena] | ||||
| linode_dracaena ansible_host=500.500.500.500 ansible_port=22 ansible_python_interpreter=/usr/bin/python3 | ||||
|   | ||||
							
								
								
									
										3
									
								
								roles/firewall/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								roles/firewall/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| *.retry | ||||
| */__pycache__ | ||||
| *.pyc | ||||
							
								
								
									
										20
									
								
								roles/firewall/LICENSE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								roles/firewall/LICENSE
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| The MIT License (MIT) | ||||
|  | ||||
| Copyright (c) 2017 Jeff Geerling | ||||
|  | ||||
| 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. | ||||
							
								
								
									
										4
									
								
								roles/firewall/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								roles/firewall/README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| # Firewall Ansible Role | ||||
|  | ||||
| Source: <https://github.com/geerlingguy/ansible-role-firewall> | ||||
|  | ||||
							
								
								
									
										22
									
								
								roles/firewall/defaults/main.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								roles/firewall/defaults/main.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| --- | ||||
| firewall_state: started | ||||
| firewall_enabled_at_boot: true | ||||
|  | ||||
| firewall_flush_rules_and_chains: true | ||||
|  | ||||
| firewall_allowed_tcp_ports: | ||||
|   - "22" | ||||
|   - "80" | ||||
|   - "443" | ||||
|  | ||||
| firewall_allowed_udp_ports: [] | ||||
| firewall_forwarded_tcp_ports: [] | ||||
| firewall_forwarded_udp_ports: [] | ||||
| firewall_additional_rules: [] | ||||
| firewall_enable_ipv6: true | ||||
| firewall_ip6_additional_rules: [] | ||||
| firewall_log_dropped_packets: true | ||||
|  | ||||
| # Set to true to ensure other firewall management software is disabled. | ||||
| firewall_disable_firewalld: true | ||||
| firewall_disable_ufw: true | ||||
							
								
								
									
										3
									
								
								roles/firewall/handlers/main.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								roles/firewall/handlers/main.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| --- | ||||
| - name: restart firewall | ||||
|   service: name=firewall state=restarted | ||||
							
								
								
									
										52
									
								
								roles/firewall/tasks/main.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								roles/firewall/tasks/main.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | ||||
| --- | ||||
| - name: Ensure iptables is present. | ||||
|   package: name=iptables state=present | ||||
|  | ||||
| - name: Flush iptables the first time playbook runs. | ||||
|   command: > | ||||
|     iptables -F | ||||
|     creates=/etc/firewall.bash | ||||
|  | ||||
| - name: Copy firewall script into place. | ||||
|   template: | ||||
|     src: firewall.bash.j2 | ||||
|     dest: /etc/firewall.bash | ||||
|     owner: root | ||||
|     group: root | ||||
|     mode: 0744 | ||||
|   notify: restart firewall | ||||
|  | ||||
| - name: Copy firewall init script into place. | ||||
|   template: | ||||
|     src: firewall.init.j2 | ||||
|     dest: /etc/init.d/firewall | ||||
|     owner: root | ||||
|     group: root | ||||
|     mode: 0755 | ||||
|   when: "ansible_service_mgr != 'systemd'" | ||||
|  | ||||
| - name: Copy firewall systemd unit file into place (for systemd systems). | ||||
|   template: | ||||
|     src: firewall.unit.j2 | ||||
|     dest: /etc/systemd/system/firewall.service | ||||
|     owner: root | ||||
|     group: root | ||||
|     mode: 0644 | ||||
|   when: "ansible_service_mgr == 'systemd'" | ||||
|  | ||||
| - name: Configure the firewall service. | ||||
|   service: | ||||
|     name: firewall | ||||
|     state: "restarted" | ||||
|     #state: "{{ firewall_state }}" | ||||
|     enabled: "{{ firewall_enabled_at_boot }}" | ||||
|  | ||||
| - name: Stop the docker service. | ||||
|   service: | ||||
|     name: docker | ||||
|     state: stopped | ||||
|  | ||||
| - name: Start the docker service. | ||||
|   service: | ||||
|     name: docker | ||||
|     state: started | ||||
							
								
								
									
										138
									
								
								roles/firewall/templates/firewall.bash.j2
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										138
									
								
								roles/firewall/templates/firewall.bash.j2
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,138 @@ | ||||
| #!/bin/bash | ||||
| # iptables firewall. | ||||
| # | ||||
| # This file should be located at /etc/firewall.bash, and is meant to work with | ||||
| # the `geerlingguy.firewall` Ansible role. | ||||
| # | ||||
| # Common port reference: | ||||
| #   22: SSH | ||||
| #   25: SMTP | ||||
| #   80: HTTP | ||||
| #   123: NTP | ||||
| #   443: HTTPS | ||||
| #   2222: SSH alternate | ||||
| #   8080: HTTP alternate | ||||
| # | ||||
| # @author Jeff Geerling | ||||
|  | ||||
| # No spoofing. | ||||
| if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ] | ||||
| then | ||||
| for filter in /proc/sys/net/ipv4/conf/*/rp_filter | ||||
| do | ||||
| echo 1 > $filter | ||||
| done | ||||
| fi | ||||
|  | ||||
| # Set the default rules. | ||||
| iptables -P INPUT ACCEPT | ||||
| iptables -P FORWARD ACCEPT | ||||
| iptables -P OUTPUT ACCEPT | ||||
|  | ||||
| {% if firewall_flush_rules_and_chains %} | ||||
| # Remove all rules and chains. | ||||
| iptables -t nat -F | ||||
| iptables -t mangle -F | ||||
| iptables -F | ||||
| iptables -X | ||||
| {% endif %} | ||||
|  | ||||
| # Accept traffic from loopback interface (localhost). | ||||
| iptables -A INPUT -i lo -j ACCEPT | ||||
|  | ||||
| # Forwarded ports. | ||||
| {# Add a rule for each forwarded port #} | ||||
| {% for forwarded_port in firewall_forwarded_tcp_ports %} | ||||
| iptables -t nat -I PREROUTING -p tcp --dport {{ forwarded_port.src }} -j REDIRECT --to-port {{ forwarded_port.dest }} | ||||
| iptables -t nat -I OUTPUT -p tcp -o lo --dport {{ forwarded_port.src }} -j REDIRECT --to-port {{ forwarded_port.dest }} | ||||
| {% endfor %} | ||||
| {% for forwarded_port in firewall_forwarded_udp_ports %} | ||||
| iptables -t nat -I PREROUTING -p udp --dport {{ forwarded_port.src }} -j REDIRECT --to-port {{ forwarded_port.dest }} | ||||
| iptables -t nat -I OUTPUT -p udp -o lo --dport {{ forwarded_port.src }} -j REDIRECT --to-port {{ forwarded_port.dest }} | ||||
| {% endfor %} | ||||
|  | ||||
| # Open ports. | ||||
| {# Add a rule for each open port #} | ||||
| {% for port in firewall_allowed_tcp_ports %} | ||||
| iptables -A INPUT -p tcp -m tcp --dport {{ port }} -j ACCEPT | ||||
| {% endfor %} | ||||
| {% for port in firewall_allowed_udp_ports %} | ||||
| iptables -A INPUT -p udp -m udp --dport {{ port }} -j ACCEPT | ||||
| {% endfor %} | ||||
|  | ||||
| # Accept icmp ping requests. | ||||
| iptables -A INPUT -p icmp -j ACCEPT | ||||
|  | ||||
| # Allow NTP traffic for time synchronization. | ||||
| iptables -A OUTPUT -p udp --dport 123 -j ACCEPT | ||||
| iptables -A INPUT -p udp --sport 123 -j ACCEPT | ||||
|  | ||||
| # Additional custom rules. | ||||
| {% for rule in firewall_additional_rules %} | ||||
| {{ rule }} | ||||
| {% endfor %} | ||||
|  | ||||
| # Allow established connections: | ||||
| iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT | ||||
|  | ||||
| # Log EVERYTHING (ONLY for Debug). | ||||
| # iptables -A INPUT -j LOG | ||||
|  | ||||
| {% if firewall_log_dropped_packets %} | ||||
| # Log other incoming requests (all of which are dropped) at 15/minute max. | ||||
| iptables -A INPUT -m limit --limit 15/minute -j LOG --log-level 7 --log-prefix "Dropped by firewall: " | ||||
| {% endif %} | ||||
|  | ||||
| # Drop all other traffic. | ||||
| iptables -A INPUT -j DROP | ||||
|  | ||||
| {% if firewall_enable_ipv6 %} | ||||
| # Configure IPv6 if ip6tables is present. | ||||
| if [ -x "$(which ip6tables 2>/dev/null)" ]; then | ||||
|  | ||||
| {% if firewall_flush_rules_and_chains %} | ||||
|   # Remove all rules and chains. | ||||
|   ip6tables -F | ||||
|   ip6tables -X | ||||
| {% endif %} | ||||
|  | ||||
|   # Accept traffic from loopback interface (localhost). | ||||
|   ip6tables -A INPUT -i lo -j ACCEPT | ||||
|  | ||||
|   # Open ports. | ||||
| {# Add a rule for each open port #} | ||||
| {% for port in firewall_allowed_tcp_ports %} | ||||
|   ip6tables -A INPUT -p tcp -m tcp --dport {{ port }} -j ACCEPT | ||||
| {% endfor %} | ||||
| {% for port in firewall_allowed_udp_ports %} | ||||
|   ip6tables -A INPUT -p udp -m udp --dport {{ port }} -j ACCEPT | ||||
| {% endfor %} | ||||
|  | ||||
|   # Accept icmp ping requests. | ||||
|   ip6tables -A INPUT -p icmpv6 -j ACCEPT | ||||
|  | ||||
|   # Allow NTP traffic for time synchronization. | ||||
|   ip6tables -A OUTPUT -p udp --dport 123 -j ACCEPT | ||||
|   ip6tables -A INPUT -p udp --sport 123 -j ACCEPT | ||||
|  | ||||
|   # Additional custom rules. | ||||
| {% for rule in firewall_ip6_additional_rules %} | ||||
|   {{ rule }} | ||||
| {% endfor %} | ||||
|  | ||||
|   # Allow established connections: | ||||
|   ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT | ||||
|  | ||||
|   # Log EVERYTHING (ONLY for Debug). | ||||
|   # ip6tables -A INPUT -j LOG | ||||
|  | ||||
| {% if firewall_log_dropped_packets %} | ||||
|   # Log other incoming requests (all of which are dropped) at 15/minute max. | ||||
|   ip6tables -A INPUT -m limit --limit 15/minute -j LOG --log-level 7 --log-prefix "Dropped by firewall: " | ||||
| {% endif %} | ||||
|  | ||||
|   # Drop all other traffic. | ||||
|   ip6tables -A INPUT -j DROP | ||||
|  | ||||
| fi | ||||
| {% endif %} | ||||
							
								
								
									
										52
									
								
								roles/firewall/templates/firewall.init.j2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								roles/firewall/templates/firewall.init.j2
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | ||||
| #! /bin/sh | ||||
| # /etc/init.d/firewall | ||||
| # | ||||
| # Firewall init script, to be used with /etc/firewall.bash by Jeff Geerling. | ||||
| # | ||||
| # @author Jeff Geerling | ||||
|  | ||||
| ### BEGIN INIT INFO | ||||
| # Provides:          firewall | ||||
| # Required-Start:    $remote_fs $syslog | ||||
| # Required-Stop:     $remote_fs $syslog | ||||
| # Default-Start:     2 3 4 5 | ||||
| # Default-Stop:      0 1 6 | ||||
| # Short-Description: Start firewall at boot time. | ||||
| # Description:       Enable the firewall. | ||||
| ### END INIT INFO | ||||
|  | ||||
| # Carry out specific functions when asked to by the system | ||||
| case "$1" in | ||||
|   start) | ||||
|     echo "Starting firewall." | ||||
|     /etc/firewall.bash | ||||
|     ;; | ||||
|   stop) | ||||
|     echo "Stopping firewall." | ||||
|     iptables -F | ||||
|     if [ -x "$(which ip6tables 2>/dev/null)" ]; then | ||||
|         ip6tables -F | ||||
|     fi | ||||
|     ;; | ||||
|   restart) | ||||
|     echo "Restarting firewall." | ||||
|     /etc/firewall.bash | ||||
|     ;; | ||||
|   status) | ||||
|     echo -e "`iptables -L -n`" | ||||
|     EXIT=4 # program or service status is unknown | ||||
|     NUMBER_OF_RULES=$(iptables-save | grep '^\-' | wc -l) | ||||
|     if [ 0 -eq $NUMBER_OF_RULES ]; then | ||||
|         EXIT=3 # program is not running | ||||
|     else | ||||
|         EXIT=0 # program is running or service is OK | ||||
|     fi | ||||
|     exit $EXIT | ||||
|     ;; | ||||
|   *) | ||||
|     echo "Usage: /etc/init.d/firewall {start|stop|status|restart}" | ||||
|     exit 1 | ||||
|     ;; | ||||
| esac | ||||
|  | ||||
| exit 0 | ||||
							
								
								
									
										12
									
								
								roles/firewall/templates/firewall.unit.j2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								roles/firewall/templates/firewall.unit.j2
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| [Unit] | ||||
| Description=Firewall | ||||
| After=syslog.target network.target | ||||
|  | ||||
| [Service] | ||||
| Type=oneshot | ||||
| ExecStart=/etc/firewall.bash | ||||
| ExecStop=/sbin/iptables -F | ||||
| RemainAfterExit=yes | ||||
|  | ||||
| [Install] | ||||
| WantedBy=multi-user.target | ||||
| @@ -7,3 +7,4 @@ username: "{{ nonroot_user }}" | ||||
| # link it with this email. | ||||
| ssh_key_email: "" | ||||
|  | ||||
| ssh_port: 22 | ||||
|   | ||||
							
								
								
									
										2
									
								
								roles/sshkeys/files/config
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								roles/sshkeys/files/config
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| Host * | ||||
|     StrictHostKeyChecking accept-new | ||||
							
								
								
									
										6
									
								
								roles/sshkeys/handlers/main.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								roles/sshkeys/handlers/main.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
|  | ||||
| --- | ||||
| - name: restart ssh | ||||
|   service: | ||||
|     name: "ssh" | ||||
|     state: "restarted" | ||||
| @@ -12,6 +12,7 @@ | ||||
|     path: /root/.ssh | ||||
|     state: directory | ||||
|   tags: | ||||
|     - ssh | ||||
|     - root-ssh | ||||
|  | ||||
| - name: Check if a root user SSH key already exists | ||||
| @@ -20,6 +21,7 @@ | ||||
|     path: "/root/.ssh/id_rsa" | ||||
|   register: root_key_check | ||||
|   tags: | ||||
|     - ssh | ||||
|     - root-ssh | ||||
|  | ||||
| - name: "Generate SSH keys for root user ({{ ssh_key_email }})" | ||||
| @@ -28,6 +30,7 @@ | ||||
|   when: | ||||
|     - "not root_key_check.stat.exists" | ||||
|   tags: | ||||
|     - ssh | ||||
|     - root-ssh | ||||
|  | ||||
| - name: Set permissions on root .ssh directory | ||||
| @@ -40,22 +43,7 @@ | ||||
|   when: | ||||
|     - "not root_key_check.stat.exists" | ||||
|   tags: | ||||
|     - root-ssh | ||||
|  | ||||
|  | ||||
|  | ||||
| ############################### | ||||
| # root: copy authorized keys | ||||
|  | ||||
|  | ||||
| - name: Copy (overwrite) the authorized keys file into the root .ssh directory | ||||
|   become: yes | ||||
|   copy: | ||||
|     src: authorized_keys | ||||
|     dest: /root/.ssh/authorized_keys | ||||
|     mode: 0600 | ||||
|     force: yes | ||||
|   tags: | ||||
|     - ssh | ||||
|     - root-ssh | ||||
|  | ||||
|  | ||||
| @@ -72,6 +60,7 @@ | ||||
|     owner: "{{ username }}" | ||||
|     group: "{{ username }}" | ||||
|   tags: | ||||
|     - ssh | ||||
|     - nonroot-ssh | ||||
|  | ||||
| - name: Check if a nonroot user SSH key already exists | ||||
| @@ -81,6 +70,7 @@ | ||||
|     path: "/home/{{ username }}/.ssh/id_rsa" | ||||
|   register: nonroot_key_check | ||||
|   tags: | ||||
|     - ssh | ||||
|     - nonroot-ssh | ||||
|  | ||||
| - name: "Generate SSH keys for nonroot user {{ username }} ({{ ssh_key_email }})" | ||||
| @@ -90,6 +80,7 @@ | ||||
|   when: | ||||
|     - "not nonroot_key_check.stat.exists" | ||||
|   tags: | ||||
|     - ssh | ||||
|     - nonroot-ssh | ||||
|  | ||||
| - name: Set permissions on nonroot .ssh directory | ||||
| @@ -103,6 +94,7 @@ | ||||
|     owner: "{{ username }}" | ||||
|     group: "{{ username }}" | ||||
|   tags: | ||||
|     - ssh | ||||
|     - nonroot-ssh | ||||
|  | ||||
|  | ||||
| @@ -121,15 +113,74 @@ | ||||
|     owner: "{{ username }}" | ||||
|     group: "{{ username }}" | ||||
|   tags: | ||||
|     - ssh | ||||
|     - nonroot-ssh | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| ################################## | ||||
| # nonroot: automatically accept new keys | ||||
| # nonroot: copy ssh configuration | ||||
|  | ||||
| - name: Automatically accept new SSH keys | ||||
| - name: Copy the ssh configuration to the nonroot user .ssh directory | ||||
|   become: yes | ||||
|   become_user: "{{ username }}" | ||||
|   command: "echo 'StrictHostKeyChecking=accept-new' > ~/.ssh/config" | ||||
|   copy: | ||||
|     src: config | ||||
|     dest: "/home/{{ username }}/.ssh/config" | ||||
|     mode: 0600 | ||||
|     force: yes | ||||
|     owner: "{{ username }}" | ||||
|     group: "{{ username }}" | ||||
|   tags: | ||||
|     - ssh | ||||
|     - nonroot-ssh | ||||
|  | ||||
|  | ||||
|  | ||||
| ################################## | ||||
| # system ssh configuration | ||||
|  | ||||
| - name: Ensure SSH daemon is running. | ||||
|   service: | ||||
|     name: "ssh" | ||||
|     state: "started" | ||||
|  | ||||
| - name: Update SSH configuration to be more secure. | ||||
|   lineinfile: | ||||
|     dest: "/etc/ssh/sshd_config" | ||||
|     regexp: "{{ item.regexp }}" | ||||
|     line: "{{ item.line }}" | ||||
|     state: present | ||||
|     validate: 'sshd -T -f %s' | ||||
|     mode: 0644 | ||||
|   with_items: | ||||
|     - regexp: "^PasswordAuthentication" | ||||
|       line: "PasswordAuthentication no" | ||||
|     - regexp: "^PermitRootLogin" | ||||
|       line: "PermitRootLogin no" | ||||
|     - regexp: "^Port" | ||||
|       line: "Port {{ ssh_port }}" | ||||
|     - regexp: "^UseDNS" | ||||
|       line: "UseDNS no" | ||||
|     - regexp: "^PermitEmptyPasswords" | ||||
|       line: "PermitEmptyPasswords no" | ||||
|     - regexp: "^ChallengeResponseAuthentication" | ||||
|       line: "ChallengeResponseAuthentication no" | ||||
|     - regexp: "^GSSAPIAuthentication" | ||||
|       line: "GSSAPIAuthentication no" | ||||
|     - regexp: "^X11Forwarding" | ||||
|       line: "X11Forwarding no" | ||||
|   notify: restart ssh | ||||
|   tags: | ||||
|     - ssh | ||||
|     - root-ssh | ||||
|  | ||||
|  | ||||
| ##  | ||||
| ## - name: Automatically accept new SSH keys | ||||
| ##   become: yes | ||||
| ##   become_user: "{{ username }}" | ||||
| ##   command: "echo 'StrictHostKeyChecking=accept-new' > ~/.ssh/config" | ||||
| ##   tags: | ||||
| ##     - nonroot-ssh | ||||
|   | ||||
| @@ -82,15 +82,3 @@ | ||||
|     mode: 0755 | ||||
|  | ||||
|  | ||||
| ############################ | ||||
| # install solarized color scheme | ||||
|  | ||||
| - name: Download solarized color scheme to ~/.vim/colors | ||||
|   become: yes | ||||
|   become_user: "{{ username }}" | ||||
|   get_url: | ||||
|     url: "https://raw.githubusercontent.com/altercation/vim-colors-solarized/master/colors/solarized.vim" | ||||
|     dest: "/home/{{ username }}/.vim/colors/solarized.vim" | ||||
|     mode: 0755 | ||||
|  | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user