Making some progress
Wanted to check in so I could continue coding out on Linode
This commit is contained in:
parent
b90aab1d8d
commit
a58a6f3085
2 changed files with 89 additions and 1 deletions
14
README.md
14
README.md
|
@ -1,4 +1,16 @@
|
|||
tmpufw
|
||||
======
|
||||
|
||||
Temporary rules with the Uncomplicated Firewall
|
||||
Temporarily apply `ufw` rules
|
||||
|
||||
This script allows you to add rules to `ufw` (Uncomplicated Firewall) with a
|
||||
time to live. You can then run the script as a cronjob (with the --clean flag)
|
||||
to clean up (remove) the expired rules.
|
||||
|
||||
## Arguments
|
||||
-h, --help show the help message and exit
|
||||
-s, --status show rule list with expirations
|
||||
-c, --clean clean up expired rules
|
||||
-r RULE, --rule RULE rule to be added to `ufw`
|
||||
-p POSITION, --position POSITION position to add the rule
|
||||
-t TTL, --ttl TTL time to live for the rule
|
||||
|
|
76
tmpufw
Executable file
76
tmpufw
Executable file
|
@ -0,0 +1,76 @@
|
|||
#!/usr/bin/env python3
|
||||
"""
|
||||
Temporarily apply `ufw` rules
|
||||
|
||||
This script allows you to add rules to `ufw` (Uncomplicated Firewall) with a
|
||||
time to live. You can then run the script as a cronjob (with the --clean flag)
|
||||
to clean up (remove) the expired rules.
|
||||
|
||||
Arguments:
|
||||
-h, --help show the help message and exit
|
||||
-s, --status show rule list with expirations
|
||||
-c, --clean clean up expired rules
|
||||
-r RULE, --rule RULE rule to be added to `ufw`
|
||||
-p POSITION, --position POSITION position to add the rule
|
||||
-t TTL, --ttl TTL time to live for the rule
|
||||
"""
|
||||
__author__ = 'Joshua Sherman'
|
||||
__file__ = 'tmpufw'
|
||||
__license__ = 'MIT'
|
||||
__status__ = 'Production'
|
||||
__version__ = '1.0.0'
|
||||
|
||||
import argparse
|
||||
import os
|
||||
from subprocess import call
|
||||
import sys
|
||||
|
||||
class tmpufw(object):
|
||||
|
||||
parser = argparse.ArgumentParser(description = 'Temporarily apply `ufw` rules')
|
||||
|
||||
def __init__(self):
|
||||
self.parser.add_argument('-s', '--status', action = 'store_true', help = 'show rule list with expirations')
|
||||
self.parser.add_argument('-c', '--clean', action = 'store_true', help = 'clean up expired rules')
|
||||
self.parser.add_argument('-r', '--rule', help = 'rule to be added to `ufw`')
|
||||
self.parser.add_argument('-p', '--position', default = 1, help = 'position to add the rule')
|
||||
self.parser.add_argument('-t', '--ttl', default = '30 days', help = 'time to live for the rule')
|
||||
args = self.parser.parse_args()
|
||||
|
||||
if args.status and (args.clean or args.position or args.rule):
|
||||
self.error('the --status flag must be used by itself')
|
||||
if args.clean and (args.position or args.rule or args.status):
|
||||
self.error('the --clean flag must be used by itself')
|
||||
elif args.clean:
|
||||
# TODO Check for PID
|
||||
# TODO If PID exists, exit
|
||||
# TODO If PID doesn't exist, create it
|
||||
# TODO Check for rules file
|
||||
# TODO If rules file doesn't exist, exit
|
||||
# TODO If rules file does exist, open it
|
||||
# TODO Loop through lines
|
||||
# TODO Break apart line into rule and expiration time
|
||||
# TODO If expiration is in the past, remove the rule
|
||||
# TODO If expiration is in the future, add rule to tmp file
|
||||
# TODO Move tmp file to rules file
|
||||
# TODO Remove PID
|
||||
sys.exit('TODO clean up expired rules')
|
||||
elif args.rule and args.ttl:
|
||||
# TODO Add the rule to `ufw`
|
||||
ufw = ['ufw', 'position', args.position, args.rule]
|
||||
|
||||
# TODO Convert the TTL to a timestamp
|
||||
# TODO Add the rule and the timestamp to the end of the rules file
|
||||
# TODO Check if the ufw rule is in fact valid (ufw has a --dry-run flag)
|
||||
# TODO Check if rule already exists and update it instead of adding it again
|
||||
sys.exit('TODO add rule to the database')
|
||||
else:
|
||||
self.error('no arguments specified')
|
||||
|
||||
def error(self, message):
|
||||
self.parser.print_usage()
|
||||
print(__file__ + ': error: ' + message)
|
||||
sys.exit(2)
|
||||
|
||||
if __name__ == '__main__':
|
||||
tmpufw()
|
Loading…
Add table
Add a link
Reference in a new issue