diff --git a/conntrackt/templatetags/conntrackt.py b/conntrackt/templatetags/conntrackt.py --- a/conntrackt/templatetags/conntrackt.py +++ b/conntrackt/templatetags/conntrackt.py @@ -10,7 +10,7 @@ register = template.Library() @register.inclusion_tag('conntrackt/html_link.html') def html_link(text, view, *args, **kwargs): """ - A small wrapper for showing HTML linnks. + A small wrapper for showing HTML links. Positional arguments: @@ -51,6 +51,25 @@ def html_link(text, view, *args, **kwarg return context +@register.simple_tag +def iptables(communication): + """ + Produces an iptables rule based on the provided models.Communication object + instance. The rule is appropriate for inclusion in the INPUT section of a + file provided to the iptables-restore command. + + Arguments: + + communication - Instance of a models.Communication object. + """ + values = (communication.source.address, communication.source.netmask, communication.protocol.lower(), communication.protocol.lower(), communication.port) + if communication.protocol in ('TCP', 'UDP'): + rule_template = "-A INPUT -s %s/%s -p %s -m %s --dport %s -j ACCEPT" + elif communication.protocol in ('ICMP'): + rule_template = "-A INPUT -s %s/%s -p %s -m %s --icmp-type %s -j ACCEPT" + + return rule_template % values + @register.simple_tag(takes_context = True) def active_link(context, url_name, return_value='active', **kwargs): """