DD3AH

squidredirect.pl

Feb 26th, 2022 (edited)
514
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 3.18 KB | None | 0 0
  1. #!/usr/bin/perl
  2.  
  3. # usage in squid.conf :
  4. # url_rewrite_program /usr/local/bin/squidredirect.pl
  5.  
  6. # maybe you have to allow this in apparmour
  7.  
  8. # choose your fighter, e.g. this one: http://www.surbl.org/lists#multi
  9.  
  10. # define the $redir
  11.  
  12. use strict;
  13. use File::Temp qw/ tempfile tempdir /;
  14. use Net::DNS;
  15. use Sys::Syslog;
  16.  
  17. my $bl = '.multi.surbl.org';                                            # DNSBL to use
  18. my $ns = '127.0.0.1';                                                   # NameServer to use, preferably your local caching named
  19. my $redir = your replacement URL ;                                      # Block-URL to use, maybe a PNG just in case its just a pic that's blocked
  20. my $res = Net::DNS::Resolver->new;                                      # resolver
  21.  
  22. my $url;                                                                # URL to check, later stripped down to hostname
  23. my $rest;                                                               # not needed other infos we get from Squid
  24. my $question;                                                           # question to DNS
  25. my $query;                                                              # query-result from DNS
  26. my $answer;                                                             # answer to Squid
  27.  
  28. openlog('squidredir', 'pid', 'local0');                                 # incude PID because Squid starts a bunch of us
  29. $res->nameservers($ns);                                                 # contact NameServer
  30. $| = 1;                                                                 # line buffered
  31. syslog("info", "starting");                                                            
  32.  
  33. while (<>){                                                             # for evey request from Squid
  34.         chomp;
  35.         syslog("debug", $_);
  36.         ($url, $rest) = split(/ /, $_);                                 # first column is the requested target URL
  37.  
  38.         $url =~ s/^https?:// ;                                          # drop scheme
  39.         $url =~ s:^[/]{2}:: ;                                           # drop / slashes
  40.         $url =~ s:/.*$:: ;                                              # drop path
  41.         $url =~ s/:.*$// ;                                              # drop port
  42.  
  43.         $answer = "OK";                                                 # set default answer to Squid
  44.         $question = $url . $bl;                                         # define the questions to DNS
  45.         $query = $res->search($question);                               # ask DNSBL
  46.  
  47.         if ($query) {                                                   # we got an answer
  48.                 foreach my $rr ($query->answer) {                       # go through all parts
  49.                         next unless $rr->type eq "A";                   # skip all but A-entris (normal IPv4)
  50.                         $answer = "OK status=301 url=\"$redir\"";       # all other answers mean 'is a bad host' -> Redirect
  51.                 }
  52.         }
  53.        
  54.         syslog("info", "$question $answer");
  55.         print "$answer\n";                                              # send answer back to Squid
  56. }
  57.  
  58. syslog("info", "stopping");
  59.  
Add Comment
Please, Sign In to add comment