#!/usr/bin/perl -w use strict; my %iph; while(<>) { chomp; add_rule($_); flush_rules(); } sub add_rule { my $ip = $_[0]; system("/usr/sbin/iptables -A INPUT -i eth0 -s $ip -j DROP\n"); $iph{$ip} = time(); } sub flush_rules { my $now = time(); foreach (keys %iph) { # CHANGE THIS if ($now - $iph{$_} > 3) { # If entry is > 3 seconds old print("Deleting: $_\n"); delete_rule_by_ip($_); delete($iph{$_}); } } } sub delete_rule_by_ip { my $ip = $_[0]; my @rules = `/usr/sbin/iptables -n --line-numbers -L`; foreach (@rules) { next unless /$ip/; my $num = (split(/\s+/, $_))[0]; return unless $num; system("/usr/sbin/iptables -D INPUT $num"); } }