Search code examples
mod-rewritemod-proxysquid

False configured mod_rewrite/mod_proxy with squid proxy


We are using squid for one of our applications and we are getting an abuse message from a website saying He used xrumer or other Tools or had a false configured mod_rewrite/mod_proxy who is abused.

We doubt that someone else is using these squid proxies on our behalf or these configurations are actually not properly set. I don't have much experience with squid or Apache mod rules.

What might be the issue?

squid.conf is

#######
####### Recommended minimum Access Permission configuration:
#######
####### Only allow cachemgr access from localhost
http_access allow manager localhost
http_access deny manager
####### Deny requests to certain unsafe ports
http_access deny !Safe_ports
####### Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports
####### We strongly recommend the following be uncommented to protect innocent
####### web applications running on the proxy server who think the only
####### one who can access services on "localhost" is a local user
#######http_access deny to_localhost
#######
####### Recommended minimum configuration:
#######
acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
####### Example rule allowing access from your local networks.
####### Adapt to list your (internal) IP networks from where browsing
####### should be allowed
acl localnet src 10.0.0.0/8     ####### RFC1918 possible internal network
acl localnet src 172.16.0.0/12  ####### RFC1918 possible internal network
acl localnet src 192.168.0.0/16 ####### RFC1918 possible internal network
acl localnet src fc00::/7       ####### RFC 4193 local private network range
acl localnet src fe80::/10      ####### RFC 4291 link-local (directly plugged) machines
acl SSL_ports port 443
acl Safe_ports port 80          ####### http
acl Safe_ports port 21          ####### ftp
acl Safe_ports port 443         ####### https
acl Safe_ports port 70          ####### gopher
acl Safe_ports port 210         ####### wais
acl Safe_ports port 1025-65535  ####### unregistered ports
acl Safe_ports port 280         ####### http-mgmt
acl Safe_ports port 488         ####### gss-http
acl Safe_ports port 591         ####### filemaker
acl Safe_ports port 777         ####### multiling http
acl CONNECT method CONNECT
#######
####### INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#######
####### Example rule allowing access from your local networks.
####### Adapt localnet in the ACL section to list your (internal) IP networks
####### from where browsing should be allowed
http_access allow localnet
http_access allow localhost
####### Changed by XYZ (XYZ@ABC) to allow http_access from ALL
http_access allow all
####### And finally deny all other access to this proxy. Changed by Ankit Narang (ankitn@amazon.com).
#######http_access deny all
####### Squid normally listens to port 3128
http_port 80
####### We recommend you to use at least the following line.
hierarchy_stoplist cgi-bin ?
####### Uncomment and adjust the following to add a disk cache directory.
#######cache_dir ufs /var/spool/squid 100 16 256
####### Leave coredumps in the first cache dir
coredump_dir /var/spool/squid
####### Add any of your own refresh_pattern entries above these.
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320
####### Changed by Ankit Narang (ankitn@amazon.com)
forwarded_for off
access_log none
#######Making Squid an anonymous proxy
request_header_access Allow allow all 
request_header_access Authorization allow all 
request_header_access WWW-Authenticate allow all 
request_header_access Proxy-Authorization allow all 
request_header_access Proxy-Authenticate allow all 
request_header_access Cache-Control allow all 
request_header_access Content-Encoding allow all 
request_header_access Content-Length allow all 
request_header_access Content-Type allow all 
request_header_access Date allow all 
request_header_access Expires allow all 
request_header_access Host allow all 
request_header_access If-Modified-Since allow all 
request_header_access Last-Modified allow all 
request_header_access Location allow all 
request_header_access Pragma allow all 
request_header_access Accept allow all 
request_header_access Accept-Charset allow all 
request_header_access Accept-Encoding allow all 
request_header_access Accept-Language allow all 
request_header_access Content-Language allow all 
request_header_access Mime-Version allow all 
request_header_access Retry-After allow all 
request_header_access Title allow all 
request_header_access Connection allow all 
request_header_access Proxy-Connection allow all 
request_header_access User-Agent allow all 
request_header_access Cookie allow all 
request_header_access All deny all

Thanks in advance.


Solution

  • http_access allow all
    

    That's definitively wrong. You have configured an open proxy, so everybody in the world can use your proxy to surf the web. I don't know your scensario exactly, when you MUST restrict the access in some way.

    For example, if you are using Squid as reverse proxy, you should allow the access only to your backend web server:

    acl webserver dst x.x.x.x
    http_access allow webserver
    http_access deny all
    

    If you are using your proxy as forward proxy to browse the web:

    acl mynetwork src x.x.x.x/y http_access allow mynetwork http_access deny all

    You can algo use authentication.