Skip to main content

ip-restriction

The ip-restriction Plugin allows you to restrict access to a Service or a Route by either whitelisting or blacklisting IP addresses.

Single IPs, multiple IPs, or even IP ranges in CIDR notation like 10.10.10.0/24 can be used.

Attributes

NameTypeRequiredDefaultValid valuesDescription
whitelistarray[string]FalseList of IPs or CIDR ranges to whitelist.
blacklistarray[string]FalseList of IPs or CIDR ranges to blacklist.
messagestringFalse"Your IP address is not allowed"[1, 1024]Message returned when the IP address is not allowed access.
note

Either one of the whitelist or blacklist attributes must be specified. They cannot be used together.

Enable Plugin

You can enable the Plugin on a Route or a Service as shown below:

note

You can fetch the admin_key from config.yaml and save it to an environment variable with the following command:

admin_key=$(yq '.deployment.admin.admin_key[0].key' conf/config.yaml | sed 's/"//g')
curl http://127.0.0.1:9180/api/stargate/v1/routes/1 -H "X-API-KEY: $admin_key" -X PUT -d '
{
"uri": "/index.html",
"upstream": {
"type": "roundrobin",
"nodes": {
"127.0.0.1:1980": 1
}
},
"plugins": {
"ip-restriction": {
"whitelist": [
"127.0.0.1",
"113.74.26.106/24"
]
}
}
}'

To return a custom message when an IP address is not allowed access, configure it in the Plugin as shown below:

"plugins": {
"ip-restriction": {
"whitelist": [
"127.0.0.1",
"113.74.26.106/24"
],
"message": "Do you want to do something bad?"
}
}

Example usage

After you have configured the Plugin as shown above, when you make a request from the IP 127.0.0.1:

curl http://127.0.0.1:9080/index.html -i
HTTP/1.1 200 OK
...

But if you make requests from 127.0.0.2:

curl http://127.0.0.1:9080/index.html -i --interface 127.0.0.2
HTTP/1.1 403 Forbidden
...
{"message":"Your IP address is not allowed"}

To change the whitelisted/blacklisted IPs, you can update the Plugin configuration. The changes are hot-reloaded, so there is no need to restart the service.

curl http://127.0.0.1:9180/api/stargate/v1/routes/1 -H "X-API-KEY: $admin_key" -X PUT -d '
{
"uri": "/index.html",
"upstream": {
"type": "roundrobin",
"nodes": {
"127.0.0.1:1980": 1
}
},
"plugins": {
"ip-restriction": {
"whitelist": [
"127.0.0.2",
"113.74.26.106/24"
]
}
}
}'

Delete Plugin

To remove the ip-restriction Plugin, delete the corresponding JSON configuration from the Plugin configuration. Stargate will automatically reload, and you do not have to restart for this to take effect.

curl http://127.0.0.1:9180/api/stargate/v1/routes/1 -H "X-API-KEY: $admin_key" -X PUT -d '
{
"uri": "/index.html",
"plugins": {},
"upstream": {
"type": "roundrobin",
"nodes": {
"127.0.0.1:1980": 1
}
}
}'