#!/usr/bin/perl use IPTables::IPv4; BEGIN { $| = 1; print "1..20\n"; } $testiter = 1; my $table = IPTables::IPv4::init('filter'); unless ($table) { print "not ok 1\n"; exit(1); } print "ok ", $testiter++, "\n"; $table->create_chain("PPP") || print "# $!\nnot "; print "ok ", $testiter++, "\n"; $table->create_chain("LOGDROP") || print "# $!\nnot "; print "ok ", $testiter++, "\n"; $table->append_entry("INPUT", {'in-interface' => "ppp0", 'jump' => "PPP" }) || print "# $!\nnot "; print "ok ", $testiter++, "\n"; $table->append_entry("PPP", {'source' => "10.0.0.0/8", 'jump' => "LOGDROP" }) || print "# $!\nnot "; print "ok ", $testiter++, "\n"; $table->append_entry("PPP", {'source' => "127.0.0.0/8", 'jump' => "LOGDROP" }) || print "# $!\nnot "; print "ok ", $testiter++, "\n"; $table->append_entry("PPP", {'source' => "192.168.0.0/16", 'jump' => "LOGDROP" }) || print "# $!\nnot "; print "ok ", $testiter++, "\n"; $table->append_entry("PPP", {'source' => "172.16.0.0/12", 'jump' => "LOGDROP" }) || print "# $!\nnot "; print "ok ", $testiter++, "\n"; $table->append_entry("PPP", {'protocol' => "tcp", 'destination-port' => 25, 'jump' => "ACCEPT" }) || print "# $!\nnot "; print "ok ", $testiter++, "\n"; $table->append_entry("PPP", {'source' => "195.116.50.204", 'jump' => "ACCEPT" }) || print "# $!\nnot "; print "ok ", $testiter++, "\n"; $table->append_entry("PPP", {'source' => "195.116.50.3", 'jump' => "ACCEPT" }) || print "# $!\nnot "; print "ok ", $testiter++, "\n"; $table->append_entry("PPP", {'source' => "212.160.112.131", 'jump' => "ACCEPT" }) || print "# $!\nnot "; print "ok ", $testiter++, "\n"; $table->append_entry("PPP", {'source' => "212.244.102.188", 'jump' => "ACCEPT" }) || print "# $!\nnot "; print "ok ", $testiter++, "\n"; $table->append_entry("PPP", {'protocol' => "tcp", 'destination-port' => ":1023", 'jump' => "LOGDROP" }) || print "# $!\nnot "; print "ok ", $testiter++, "\n"; $table->append_entry("PPP", {'protocol' => "udp", 'destination-port' => ":1023", 'jump' => "LOGDROP" }) || print "# $!\nnot "; print "ok ", $testiter++, "\n"; $table->append_entry("LOGDROP", {'jump' => "LOG"}) || print "# $!\nnot "; print "ok ", $testiter++, "\n"; $table->append_entry("LOGDROP", {'jump' => "DROP"}) || print "# $!\nnot "; print "ok ", $testiter++, "\n"; %expected_counts = ('PPP' => 11, 'INPUT' => 1, 'LOGDROP' => 2); foreach my $key (keys(%expected_counts)) { my $count = $table->list_rules($key); if ($count != $expected_counts{$key}) { print "# expected ", $expected_counts{$key}, " rules in chain $key, got $count\nnot "; } print "ok ", $testiter++, "\n"; } foreach my $chain ($table->list_chains()) { $table->flush_entries($chain); } foreach my $chain ($table->list_chains()) { unless ($table->builtin($chain)) { $table->delete_chain($chain); } } exit(0); # vim: ts=4