карта рулевого - PullRequest
       15

карта рулевого

0 голосов
/ 10 октября 2018

Я пытаюсь заблокировать wordpress имени агента пользователя, используя helm chart для входа nginx. Для этого я дал значение ключа в файле values.yml и вызвал ключ в configmap.yml, как показано ниже.

 - values.yml file
   configmap:
     block_user_agents: "^.*wordpress.*$"

 - configmap.yml file
   data:
     block-user-agents: "{{ .Values.configmap.block_user_agents }}"

 - command to check
   curl -A "wordpress-blah" http://my_minikube_ip:32144(serviceport)

 - output

 <html>
 <head><title>404 Not Found</title></head>
 <body>
 <center><h1>404 Not Found</h1></center>
 <hr><center>nginx/1.15.5</center>
 </body>
 </html>

После успешного развертывания диаграммы helm с помощью установки helm я пытаюсь проверить ее с помощью команды curl, чтобы проверить, блокирует ли она пользовательский агент или нет.Я получаю 404 не найден, так как мне нужно получить 403. Может ли кто-нибудь, пожалуйста, помогите мне здесь, и будет ли здесь работать регулярное выражение?Я что-то упустил?

1 Ответ

0 голосов
/ 10 октября 2018

Это пример того, как блокировать пользовательские агенты в nginx.conf:

### make sure your 'if' statement is in the server block.
### case sensitive http user agent blocking  ###
if ($http_user_agent ~ (Catall Spider|AcoiRobot) ) {
    return 403;
}
### case insensitive http user agent blocking  ###
if ($http_user_agent ~* (foo|bar) ) {
    return 403;
}

. Вы можете добавить некоторую часть конфигурации в nginx.conf входного контроллера, используяследующий пример .Он добавляет настраиваемый заголовок в конфигурацию Nginx, который применяется только к этому конкретному входу:

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx-configuration-snippet
  annotations:
    nginx.ingress.kubernetes.io/configuration-snippet: |
      more_set_headers "Request-Id: $req_id";
spec:
  rules:
  - host: custom.configuration.com
    http:
      paths:
      - backend:
          serviceName: http-svc
          servicePort: 80
        path: /

Если вам необходимо добавить некоторые глобальные настройки для входного контроллера, см. Следующие примеры :

---
apiVersion: v1
data:
  proxy-set-headers: "ingress-nginx/custom-headers"
kind: ConfigMap
metadata:
  name: nginx-configuration
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx

---
apiVersion: v1
data:
  X-Different-Name: "true"
  X-Request-Start: t=${msec}
  X-Using-Nginx-Controller: "true"
kind: ConfigMap
metadata:
  name: custom-headers
  namespace: ingress-nginx

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-configuration
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
data:
  proxy-connect-timeout: "10"
  proxy-read-timeout: "120"
  proxy-send-timeout: "120"

Создайте файл YAML, используя предыдущие примеры, и примените его к вашему кластеру:

kubectl apply -f nginx-ingress-config.yaml

Вы можете проверить, применяются ли настройки к nginx.conf во входном контроллере, с помощью следующей команды:

# Replace name of the ingress controller with the real name of the pod in the right namespace
$ kubectl exec nginx-ingress-controller-6bdddddb-6dmnw -n kube-system cat /etc/nginx/nginx.conf

# You can find the real name of your ingress controller and namespace using the next command
$ kubectl get pods --all-namespaces | grep nginx-ingress-controller

Без информации о вашей диаграмме трудно угадать, какой параметр вы должны установить.

Если вы используете диаграмму из репозитория helm, вы можете получить ее содержимое, запустив

$ helm fetch <chart/name>

После этого вы получите сжатый файл диаграммы в текущем каталоге.Вам может потребоваться найти правильное значение для вашего фрагмента кода, прочитав файлы шаблона в каталоге шаблонов диаграммы.

Если вы используете диаграмму, написанную вами, вы можете использовать диаграмму stable/nginx-ingress в качестве справочной.У него много опций конфигурации.

Обновление:

Начиная с версии 0.20.0 была добавлена ​​новая функциональность :

# 2997 Предоставить возможность блокировать IP, User-Agent и Refereers глобально

Использование параметра объяснено в Раздел карты руководства .

Если вам нужен пример использования, вы можете найти его в test-case .

It("should block User-Agents defined in the ConfigMap", func() {
    err := f.UpdateNginxConfigMapData("block-user-agents", "~*chrome\\/68\\.0\\.3440\\.106\\ safari\\/537\\.36,AlphaBot")
    Expect(err).NotTo(HaveOccurred())

...

    // Should be blocked
    resp, _, errs := gorequest.New().
        Get(f.IngressController.HTTPURL).
        Set("Host", host).
        Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36").
        End()
    Expect(errs).To(BeNil())
    Expect(resp.StatusCode).Should(Equal(http.StatusForbidden))

    resp, _, errs = gorequest.New().
        Get(f.IngressController.HTTPURL).
        Set("Host", host).
        Set("User-Agent", "AlphaBot").
        End()
    Expect(errs).To(BeNil())
    Expect(resp.StatusCode).Should(Equal(http.StatusForbidden))

    // Shouldn't be blocked
    resp, _, errs = gorequest.New().
        Get(f.IngressController.HTTPURL).
        Set("Host", host).
        Set("User-Agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 11_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.0 Mobile/15E148 Safari/604.1").
        End()
    Expect(errs).To(BeNil())
    Expect(resp.StatusCode).Should(Equal(http.StatusOK))
})
...