„update-fwds.py“ hinzufügen
This commit is contained in:
		
							
								
								
									
										36
									
								
								update-fwds.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								update-fwds.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/python3
 | 
				
			||||||
 | 
					# Put this script into a Crontab on your Mailcow instance.
 | 
				
			||||||
 | 
					# I use an interval of 5 minutes.
 | 
				
			||||||
 | 
					import requests
 | 
				
			||||||
 | 
					import socket
 | 
				
			||||||
 | 
					# Your Mailcow API key
 | 
				
			||||||
 | 
					API_KEY=''
 | 
				
			||||||
 | 
					# The forwarding host you would like to whitelist
 | 
				
			||||||
 | 
					DYN_FWDHOST='dsl-dynamic-host.example.org'
 | 
				
			||||||
 | 
					# The public-facing hostname of your Mailcow instance
 | 
				
			||||||
 | 
					MAILCOW_HOSTNAME='mx.example.org'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					s = requests.Session()
 | 
				
			||||||
 | 
					s.headers.update({'X-API-Key': API_KEY})
 | 
				
			||||||
 | 
					r = s.get('https://{}/api/v1/get/fwdhost/all'.format(MAILCOW_HOSTNAME))
 | 
				
			||||||
 | 
					r.raise_for_status()
 | 
				
			||||||
 | 
					current_fwdhosts = r.json()
 | 
				
			||||||
 | 
					print('got current hosts: {}'.format(r.text))
 | 
				
			||||||
 | 
					home_ip = socket.gethostbyname(DYN_FWDHOST)
 | 
				
			||||||
 | 
					current_ips = [x['host'] for x in current_fwdhosts]
 | 
				
			||||||
 | 
					if home_ip in current_ips:
 | 
				
			||||||
 | 
					    exit('Home IP already registered, exiting.')
 | 
				
			||||||
 | 
					fwdhosts_to_delete = []
 | 
				
			||||||
 | 
					if current_fwdhosts:
 | 
				
			||||||
 | 
					    for host in current_fwdhosts:
 | 
				
			||||||
 | 
					        if host['source'] == DYN_FWDHOST:
 | 
				
			||||||
 | 
					            fwdhosts_to_delete.append(host['host']) # ['host'] => IP
 | 
				
			||||||
 | 
					d = s.post('https://{}/api/v1/delete/fwdhost'.format(MAILCOW_HOSTNAME), json=fwdhosts_to_delete)
 | 
				
			||||||
 | 
					print('Deleted hosts {} with response {}:'.format(str(fwdhosts_to_delete), d.status_code))
 | 
				
			||||||
 | 
					print(d.text)
 | 
				
			||||||
 | 
					a = s.post('https://{}/api/v1/add/fwdhost'.format(MAILCOW_HOSTNAME), json={
 | 
				
			||||||
 | 
					    'filter_spam':'0',
 | 
				
			||||||
 | 
					    'hostname': DYN_FWDHOST
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					print('Added host {} with response {}'.format(DYN_FWDHOST, a.status_code))
 | 
				
			||||||
 | 
					exit(0)
 | 
				
			||||||
		Reference in New Issue
	
	Block a user