Apache に GeoIP をインストール
中国や韓国による不正アクセスを防ぐために、Apache に GeoIP をインストールしてアクセスを制限する。
※ 現在は「mod_geoip」は「mod_maxminddb」に置き換えられました。詳しくは「Apache に MaxMind DB モジュールをインストール」をご覧下さい。
インストール
# dnf install mod_geoip
設定
「/etc/httpd/conf.d/geoip.conf」
<IfModule mod_geoip.c> GeoIPEnable On GeoIPDBFile /usr/share/GeoIP/GeoIP.dat </IfModule> <Location "/"> Order Deny,Allow # 拒否してから許可 SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry # 中国を拒否 SetEnvIf GEOIP_COUNTRY_CODE HK BlockCountry # 香港を拒否 SetEnvIf GEOIP_COUNTRY_CODE KR BlockCountry # 韓国を拒否 SetEnvIf GEOIP_COUNTRY_CODE KP BlockCountry # 北朝鮮を拒否 SetEnvIf GEOIP_COUNTRY_CODE RU BlockCountry # ロシアを拒否 Deny from env=BlockCountry # 指定された国を拒否 Allow from all # 上記以外の国を許可 </Location>
資料
Configuration ------------- With the exception of `GeoIPEnable`, all GeoIP configuration directives must be placed in the server-wide context of the main server config. (Please see [Server vs Directory context](#Server_vs_Directory_context) for a full explanation). After installing the module, make sure that GeoIPEnable On is set in your Apache configuration file or an `.htaccess` file. This will call the GeoIP Legacy Country database from its default location (e.g. /usr/local/share/GeoIP/GeoIP.dat) If you want to specify options, for example to use a different database or to pass caching options, you can use the `GeoIPDBFile` directive: ### File and Caching Directives GeoIPDBFile /path/to/GeoIP.dat [GeoIPFlag] For example: GeoIPDBFile /usr/local/share/GeoIP/GeoIP.dat MemoryCache GeoIPDBFile /usr/local/share/GeoIP/GeoIPOrg.dat Standard The default GeoIPFlag value is Standard, which does not perform any caching, but uses the least memory. To turn on memory caching use: GeoIPDBFile /path/to/GeoIP.dat MemoryCache The memory cache option can use a large amount of memory. We recommend that you use Memory Caching only for the smaller database files, such as GeoIP Legacy Country and GeoIP Legacy ISP. Another MemoryCache option is MMapCache, which uses the the `mmap` system call to map the database file into memory. If you would like the API to check to see if your local GeoIP Legacy files have been updated, set the `CheckCache` flag: GeoIPDBFile /path/to/GeoIP.dat CheckCache Before making a call to the database, geoip will check the GeoIP.dat file to see if it has changed. If it has, then it will reload the file. With this option, you do not have to restart Apache when you update your GeoIP Legacy databases. If you would like to turn on partial memory caching, use the `IndexCache` flag: GeoIPDBFile /path/to/GeoIP.dat IndexCache The IndexCache option caches the most frequently accessed index portion of the database, resulting in faster lookups than StandardCache, but less memory usage than MemoryCache. This is especially useful for larger databases such as GeoIP Legacy Organization and GeoIP Legacy City. For the GeoIP Legacy Country, Region and Netspeed databases, setting the IndexCache option just causes the C API to use the MemoryCache. Currently, multiple GeoIPFlags options can not be combined. ### Enabling UTF-8 Output You may change the output charset from ISO-8859-1 (Latin-1) to UTF-8 with this directive: GeoIPEnableUTF8 On By default mod_geoip2 sets variables in both the notes table and environment. For performance reasons you may want to set only the one you use. To do so, use the `GeoIPOutput` configuration directive: ### Output Variable Location GeoIPOutput Notes # Sets the Apache notes table only GeoIPOutput Env # Sets environment variables only GeoIPOutput Request # Sets input headers with the geo location information GeoIPOutput All # Sets all three (default behaviour) ### Proxy-Related Directives By default, this module will simply look at the IP address of the client. However, if the client is using a proxy, this will be the address of the proxy. You can use the `GeoIPScanProxyHeaders` directive to look at proxy-related headers. GeoIPScanProxyHeaders On When this is set, the module will look at several other sources for the IP address, in this order: - The `HTTP_CLIENT_IP` environment variable (set by Apache). - The `HTTP_X_FORWARDED_FOR` environment variable (set by Apache). - The `X-Forwarded-For` for header (set by a proxy). - The `HTTP_REMOTE_ADDR` environment variable (set by Apache). This module will use the first IP address it finds in one of these locations *instead* of the IP address the client connected from. Some of these variables may contain a comma-separate list of IP addresses (when a client goes through multiple proxies). In this case, the default behavior is to use the first IP address. You can set the `GeoIPUseLastXForwardedForIP` directive to use the last address instead: GeoIPUseLastXForwardedForIP On Or use `GeoIPUseFirstNonPrivateXForwardedForIP` to use the first non private IP Address. GeoIPUseFirstNonPrivateXForwardedForIP On Apache 2.4 users using mod_remoteip to pick the IP address of the user should disable GeoIPScanProxyHeaders. Mod_geoip2 will use whatever mod_remoteip provides. GeoIPScanProxyHeaderField FieldName Sometimes it is useful to use another field as the source for the client's IP address. You can set this directive to tell this module which header to look at in order to determine the client's IP address.
Examples
--------
Here are some examples of how you can use mod_geoip2.
### Redirecting a client based on country
This example show you how to redirect a client based on the country code
that GeoIP sets.
GeoIPEnable On
GeoIPDBFile /path/to/GeoIP.dat
# Redirect one country
RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^CA$
RewriteRule ^(.*)$ http://www.canada.com$1 [R,L]
# Redirect multiple countries to a single page
RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^(CA|US|MX)$
RewriteRule ^(.*)$ http://www.northamerica.com$1 [R,L]
### Blocking a client based on country
This example show you how to block clients based on the country code
that GeoIP sets.
GeoIPEnable On
GeoIPDBFile /path/to/GeoIP.dat
SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE RU BlockCountry
# ... place more countries here
Deny from env=BlockCountry
### Allowing clients based on country
This example show you how to allow only clients from specific countries.
GeoIPEnable On
GeoIPDBFile /path/to/GeoIP.dat
SetEnvIf GEOIP_COUNTRY_CODE US AllowCountry
SetEnvIf GEOIP_COUNTRY_CODE CA AllowCountry
SetEnvIf GEOIP_COUNTRY_CODE MX AllowCountry
# ... place more countries here
Deny from all
Allow from env=AllowCountry
### Server vs Directory context
All directives except GeoIPEnable are server config only, i.e., you type
it only once per server config. Otherwise the latest wins.
``` {.lang:default .decode:true}
<IfModule mod_geoip.c>
GeoIPEnable Off
GeoIPEnableUTF8 On
GeoIPOutput Env
GeoIPDBFile /usr/local/share/GeoIP/GeoIP.dat MemoryCache
GeoIPDBFile /usr/local/share/GeoIP/GeoIPCity.dat MemoryCache
GeoIPDBFile /usr/local/share/GeoIP/GeoIPOrg.dat MemoryCache
</IfModule>
```
GeoIPEnable is useful in server or directory context. For example:
GeoIP is only available for a specific location:
``` {.lang:default .decode:true}
<IfModule mod_geoip.c>
GeoIPEnable Off
GeoIPEnableUTF8 On
GeoIPOutput Env
GeoIPDBFile /usr/local/share/GeoIP/GeoIP.dat MemoryCache
</IfModule>
# GeoIP information is avail only inside /xxx
<Location /geoip-enabled>
GeoIPEnable On
...
</Location>
<Location /other>
...
</Location>
```
GeoIP is available for all locations:
``` {.lang:default .decode:true}
<IfModule mod_geoip.c>
GeoIPEnable On
GeoIPEnableUTF8 On
GeoIPOutput Env
GeoIPDBFile /usr/local/share/GeoIP/GeoIP.dat MemoryCache
</IfModule>
# This doesn't work, because it's already been enabled in the server-wide
# config!
<Location /geoip-enabled>
GeoIPEnable On
</Location>
<Location /geoip-disabled>
GeoIPEnable Off
</Location>
```
[…] ※ このモジュールは「Apache に GeoIP をインストール」の置き換えです。 […]