Module to cache URLs commonly request by bots? Open the logs of a dozen Drupal sites and you will see some patterns for non-Drupal packages in the http requests that received a 404 response.  Requests like /postnuke/article.php, /exchange/logon.asp, /awstats.pl, /wp-content/, /mailman/, /phpBB/page_header.php, etc, etc.

Nearly 100% of these are bots scanning for exploits.  I know there are several modules to block these requests based on IP, http header, or some other key piece of data.  

I've been mulling over the idea of writing a module that approaches this differently. 

Instead of trying to block the request, just cache the response.  For sites using a reverse-proxy layer cache like Varnish, set the max-age for a ridiculously long time (1 year).  The module would simply generate menu entries for common packages that a Drupal site is very unlikely to have installed.  I would include the option to exclude a specific package so if you really did want to run Drupal and phpBB in the same web root, you could... but may require you to install https://www.drupal.org/project/bad_judgement to do that :)

I realize that this type of configuration can also be done at the .htaccess level, but maintaining that for all of the packages bots are trying to exploit is beyond the skill set of many people.

Does something like this already exist?

Am I missing some obvious reason this wouldn't work.  It seems like this would improve performance of a site by simply never letting a 2nd request hit the php/mysql level for another year (or until you cleared the Varnish cache)?
You can alter the fast404 code inside of setting.php to handle this. It will handle *.asp &amp; *.pl; changing the regex so it handles paths like 

/postnuke/article.php  
/wp-content/  
/mailman/  
/phpBB/page_header.php  


Can be done by replacing this 

$conf['404_fast_paths'] = '/\.(?:txt|png|gif|jpe?g|css|js|ico|swf|flv|cgi|bat|pl|dll|exe|asp)$/i';


with this

$conf['404_fast_paths'] = '/^(postnuke|wp-content|mailman|phpBB)|\.(?:txt|png|gif|jpe?g|css|js|ico|swf|flv|cgi|bat|pl|dll|exe|asp)$/i';


All i did was add ^(postnuke|wp-content|mailman|phpBB)| to the start of the string, right after the first /. This means that if any path starts with any of these strings we'll skip booting drupal and 404 right here taking very little server resources.

To enable fast404


  Go to the sites/default directory. Open up to the setting.php file.
  Around line 500 uncomment this drupal_fast_404(); by removing #


Source: https://docs.google.com/presentation/d/1AgnurTWsWdMAFjfFmSU7mk2zfJu8jG_KmVdZ7-o6Pok/edit#slide=id.g385c64257_0178

If you have dblog enabled you can run this query to find what paths are the worst offenders

SELECT
  COUNT(*) AS count,
  watchdog.*
FROM watchdog AS watchdog
WHERE type = 'page not found'
AND message NOT LIKE 'sites/all/%'
AND message NOT LIKE 'sites/default/%'
AND message NOT LIKE '%/styles/%'
GROUP BY message
ORDER BY
  count DESC,
  wid ASC