HTTP Proxy
| Document revision: | 1.2 (Tue May 23 14:34:47 GMT 2006) |
| Applies to: | V2.9 |
General Information
Summary
The MikroTik RouterOS implements the following proxy server features:
- Regular HTTP proxy
- Transparent proxy. Can be transparent and regular at the same time
- Access list by source, destination, URL and requested method
- Cache access list (specifies which objects to cache, and which not)
- Direct Access List (specifies, which resources should be accessed directly, and which - through another proxy server)
- Logging facility
Quick Setup Guide
To enable HTTP proxy, do the following:
[admin@MikroTik] ip proxy> set enabled=yes
[admin@MikroTik] ip proxy> print
enabled: yes
src-address: 0.0.0.0
port: 8080
parent-proxy: 0.0.0.0:0
cache-drive: system
cache-administrator: "webmaster"
max-disk-cache-size: none
max-ram-cache-size: 100000KiB
cache-only-on-disk: yes
maximal-client-connections: 1000
maximal-server-connections: 1000
max-object-size: 2000KiB
max-fresh-time: 3d
[admin@MikroTik] ip proxy>
Remember to secure your proxy by preventing unauthorized access to it, otherwise it may be used as an open proxy. Also you need to setup destination NAT in order to utilize transparent proxying facility:
[admin@MikroTik] ip firewall nat> add chain=dstnat protocol=tcp dst-port=80 action=redirect to-ports=8080 [admin@MikroTik] ip firewall nat> print Flags: X - disabled, I - invalid, D - dynamic 0 chain=dstnat protocol=tcp dst-port=80 action=redirect to-ports=8080 [admin@MikroTik] ip firewall nat>
Specifications
Packages required: systemLicense required: Level3
Submenu level: /ip proxy
Standards and Technologies: HTTP/1.0, HTTP/1.1, FTP
Related Documents
Description
This service performs proxying of HTTP and HTTP-proxy (for FTP, HTTP and HTTPS protocols) requests. Web proxy performs Internet object cache function by storing requested Internet objects, i.e., data available via HTTP and FTP protocols on a system positioned closer to the recipient than the site the data is originated from. Here 'closer' means increased path reliability, speed or both. Web browsers can then use the local proxy cache to speed up access and reduce bandwidth consumption.
When setting up proxy service, make sure it serves only your clients, and is not misused as relay. Please read the security notice in the Access List Section!
Note that it may be useful to have Web proxy running even with no cache when you want to use it only as something like HTTP and FTP firewall (for example, denying access to mp3 files) or to redirect requests to external proxy (possibly, to a proxy with caching functions) transparently.
Setup
Submenu level: /ip proxyProperty Description
cache-administrator (text; default: webmaster) - administrator's e-mail displayed on proxy error pagecache-drive (system | name; default: system) - specifies the target disk drive to be used for storing cached objects. You can use console completion to see the list of available drivescache-only-on-disk (yes | no; default: yes) - whether to create database in memory that describes cache contents on disk. This will minimize memory consumption, but may affect speedenabled (yes | no; default: no) - whether the proxy server is enabledmax-disk-cache-size (none | unlimited | integer: 0..4294967295; default: none) - specifies the maximal disk cache size, measured in kibibytesmax-fresh-time (time; default: 3d) - maximal time to store a cached object. The validity period of an object is is usually defined by the object itself, but in case it is set too high, you can override the maximal valuemaximal-client-connecions (integer; default: 1000) - maximal number of connections accepted from clients (any further connections will be rejected)maximal-server-connectons (integer; default: 1000) - maximal number of connections made to servers (any further connections from clients will be put on hold until some server connections will terminate)max-object-size (integer; default: 2000KiB) - objects larger than the size specified will not be saved on disk. The value is measured in kibibytes. If you wish to get a high bytes hit ratio, you should probably increase this (one 2 MiB object hit counts for 2048 1KiB hits). If you wish to increase speed more than your want to save bandwidth you should leave this lowmax-ram-cache-size (none | unlimited | integer: 0..4294967295; default: none) - specifies the maximal RAM cache size, measured in kibibytesparent-proxy (IP address:port; default: 0.0.0.0:0) - IP address and port of another HTTP proxy to redirect all requests to (exceptions may be defined in the "direct access" listNotes
The web proxy listens to all IP addresses that the router has in its IP address list.
Example
To enable the proxy on port 8000:
[admin@MikroTik] ip proxy> set enabled=yes port=8000
[admin@MikroTik] ip proxy> print
enabled: yes
src-address: 0.0.0.0
port: 8000
parent-proxy: 0.0.0.0:0
cache-drive: system
cache-administrator: "dmitry@mikrotik.com"
max-disk-cache-size: none
max-ram-cache-size: 100000KiB
cache-only-on-disk: yes
maximal-client-connections: 1000
maximal-server-connections: 1000
max-object-size: 2000KiB
max-fresh-time: 3d
[admin@MikroTik] ip proxy>
Access List
Submenu level: /ip proxy accessDescription
Access list is configured like a regular firewall rules. Rules are processed from the top to the bottom. First matching rule specifies decision of what to do with this connection. There is a total of 6 classifiers that specify matching constraints. If none of these classifiers is specified, the particular rule will match every connection.
If connection is matched by a rule, action property of this rule specifies whether connection will be allowed or not. If the particular connection does not match any rule, it will be allowed.
Property Description
action (allow | deny; default: allow) - specifies whether to pass or deny matched packetsdst-address (IP address/netmask) - destination address of the IP packetdst-host (wildcard) - IP address or DNS name used to make connection the target server (this is the string user wrote in his/her browser before specifying port and path to a particular web page)dst-port (port{1,10}) - a list or range of ports the packet is destined tohits (read-only: integer) - the number of requests that were policed by this rulelocal-port (port) - specifies the port of the web proxy via which the packet was received. This value should match one of the ports web proxy is listening on.method (any | connect | delete | get | head | options | post | put | trace) - HTTP method used in the request (see HTTP Methods section in the end of this document)path (wildcard) - name of the requested page within the target server (i.e. the name of a particular web page or document without the name of the server it resides on)redirect-to (text) - in case access is denied by this rule, the user shall be redirected to the URL specified heresrc-address (IP address/netmask) - source address of the IP packetNotes
Wildcard properties (dst-host and dst-path) match a complete string (i.e., they will not match "example.com" if they are set to "example"). Available wildcards are '*' (match any number of any characters) and '?' (match any one character). Regular expressions are also accepted here, but if the property should be treated as a regular expression, it should start with a colon (':').
Small hits in using regular expressions:
- \\ symbol sequence is used to enter \ character in console
- \. pattern means . only (in regular expressions single dot in pattern means any symbol)
- to show that no symbols are allowed before the given pattern, we use ^ symbol at the beginning of the pattern
- to specify that no symbols are allowed after the given pattern, we use $ symbol at the end of the pattern
- to enter [ or ] symbols, you should escape them with backslash \.
It is strongly recommended to deny all IP addresses except those behind the router as the proxy still may be used to access your internal-use-only (intranet) web servers. Also, consult examples in Firewall Manual on how to protect your router.
Direct Access List
Submenu level: /ip proxy directDescription
If parent-proxy property is specified, it is possible to tell proxy server whether to try to pass the request to the parent proxy or to resolve it connecting to the requested server directly. Direct Access List is managed just like Proxy Access List described in the previous chapter except the action argument.
Property Description
action (allow | deny; default: allow) - specifies the action to perform on matched packetsdeny - resolve matched requests through the parent proxy. If no one is specified this has the same effect as allow
Notes
Unlike the access list, the direct proxy access list has default action equal to deny. It takes place when no rules are specified or a particular request did not match any rule.
Cache Management
Submenu level: /ip web-proxy cacheDescription
Cache access list specifies, which requests (domains, servers, pages) have to be cached locally by web proxy, and which not. This list is implemented exactly the same way as web proxy access list. Default action is to cache object (if no matching rule is found).
Property Description
action (allow | deny; default: allow) - specifies the action to perform on matched packetsdeny - do not cache objects from matched request
Proxy Monitoring
Command name: /ip proxy monitorDescription
This command displays some stats of the proxy server
Property Description
cache-used (read-only: integer) - disk space used for the cachehits (read-only: integer) - number of requests found in cache and served from therehits-sent-to-clients (read-only: integer) - amount of data served from the cacheram-cache-used (read-only: integer) - RAM space used to store the cachereceived-from-servers (read-only: integer) - amount of data received from other serversrequests (read-only: integer) - number of requests handledsent-to-clients (read-only: integer) - amount of data sent to the clients of this proxy serverstatus (read-only: text; default: stopped) - display status information of the proxy serverrebuilding-cache - proxy is enabled and running, existing cache is being verified
running - proxy is enabled and running
stopping - proxy is shutting down (max 10s)
clearing-cache - proxy is stopped, cache files are being removed
creating-cache - proxy is stopped, cache directory structure is being created
dns-missing - proxy is enabled, but not running because of unknown DNS server (you should specify it under /ip dns)
invalid-address - proxy is enabled, but not running because of invalid address (you should change address or port)
invalid-cache-administrator - proxy is enabled, but not running because of invalid cache-administrator's e-mail address
invalid-hostname - proxy is enabled, but not running because of invalid hostname (you should set a valid hostname value)
error-logged - proxy is not running because of unknown error. This error is logged as System-Error. Please, send us this error and some description, how it happened
reserved-for-cache (integer) - maximal cache size, that is accessible to web-proxy
Connection List
Submenu level: /ip proxy connectionsDescription
This menu conntains the list of current connections the proxy is serving
Property Description
dst-address (read-only: IP address) - IP address of the connection protocol (read-only: text) - protocol namerx-bytes (read-only: integer) - the amount of bytes received by the clientsrc-address (read-only: IP address) - IP address of the connection originatorstate (read-only: closing | connecting | converting | hotspot | idle | resolving | rx-header | tx-body | tx-eof | tx-header | waiting | ) - opened connection stateconnecting - establishing toe connection
converting - replacing header and footer fields in response or request paket
hotspot - check if hotspot authentication allows to continue (for hotspot proxy)
idle - staying idle
resolving - resolving server's DNS name
rx-header - receiving HTTP header
tx-body - transmitting HTTP body to the client
tx-eof - writing chunk-end (when converting to chunked response)
tx-header - transmitting HTTP header to the client
waiting - waiting for transmission form a peer
Cache inserts
Submenu level: /ip proxy insertsDescription
This menu shows statistics on objects stored in cache (cache inserts)
Property Description
denied (read-only: integer) - number of inserts denied by the caching listerrors (read-only: integer) - number of disk or other system-related errorsno-memory (read-only: integer) - number of objects not stored because there was not enough memorysuccesses (read-only: integer) - number of successfull cache insertstoo-large (read-only: integer) - number of objects too large to storeCache Lookups
Submenu level: /ip proxy lookupsDescription
This menu shows statistics on objects read from cache (cache lookups)
Property Description
denied (read-only: integer) - number of requests denied by the access listexpired (read-only: integer) - number of requests found in cache, but expired, and, thus, requested from an external serverno-expiration-info (read-only: integer) - conditional request received for a page that does not have the information to compare the request withnon-cacheable (read-only: integer) - number of requests requested from the external servers unconditionally (as their caching is denied by the cache access list)not-found (read-only: integer) - number of requests not found in the cache, and, thus, requested from an external server (or parent proxy if configured accordingly)successes (read-only: integer) - number of requests found in the cacheComplementary Tools
Submenu level: /ip proxyDescription
Web proxy has additional commands to handle non-system drive used for caching purposes and to recover the proxy from severe file system errors.
Command Description
check-drive - checks non-system cache drive for errorsclear-cache - deletes existing cache and creates new cache directoriesformat-drive - formats non-system cache drive and prepairs it for holding the cacheHTTP Methods
Description
OPTIONSThis method is a request of information about the communication options available on the chain between the client and the server identified by the Request-URI. The method allows the client to determine the options and (or) the requirements associated with a resource without initiating any resource retrieval
GETThis method retrieves whatever information identified by the Request-URI. If the Request-URI refers to a data processing process than the response to the GET method should contain data produced by the process, not the source code of the process procedure(-s), unless the source is the result of the process.
The GET method can become a conditional GET if the request message includes an If-Modified-Since, If-Unmodified-Since, If-Match, If-None-Match, or If-Range header field. The conditional GET method is used to reduce the network traffic specifying that the transfer of the entity should occur only under circumstances described by conditional header field(-s).
The GET method can become a partial GET if the request message includes a Range header field. The partial GET method intends to reduce unnecessary network usage by requesting only parts of entities without transferring data already held by client.
The response to a GET request is cacheable if and only if it meets the requirements for HTTP caching.
HEADThis method shares all features of GET method except that the server must not return a message-body in the response. This retrieves the metainformation of the entity implied by the request which leads to a wide usage of it for testing hypertext links for validity, accessibility, and recent modification.
The response to a HEAD request may be cacheable in the way that the information contained in the response may be used to update previously cached entity identified by that Request-URI.
POSTThis method requests that the origin server accept the entity enclosed in the request as a new subordinate of the resource identified by the Request-URI.
The actual action performed by the POST method is determined by the origin server and usually is Request-URI dependent.
Responses to POST method are not cacheable, unless the response includes appropriate Cache-Control or Expires header fields.
PUTThis method requests that the enclosed entity be stored under the supplied Request-URI. If another entity exists under specified Request-URI, the enclosed entity should be considered as updated (newer) version of that residing on the origin server. If the Request-URI is not pointing to an existing resource, the origin server should create a resource with that URI.
If the request passes through a cache and the Request-URI identifies one or more currently cached entities, those entries should be treated as stale. Responses to this method are not cacheable.
TRACEThis method invokes a remote, application-layer loop-back of the request message. The final recipient of the request should reflect the message received back to the client as the entity-body of a 200 (OK) response. The final recipient is either the origin server or the first proxy or gateway to receive a Max-Forwards value of 0 in the request. A TRACE request must not include an entity.
Responses to this method MUST NOT be cached.
