Разрешить подключения только к определенному URL через HTTPS с iptables, -m недавним (потенциально) и -m строкой (определенно)

Допустим, например, что я хочу разрешить подключения только к subdomain.mydomain.com; У меня это частично работает, но иногда он вступает в странный цикл с обменом клиентскими ключами, когда разрешен клиент Hello. Ах, чтобы сделать его еще более раздражающим, это самозаверяющий сертификат, и страница требует проверки подлинности, а HTTPS прослушивает нестандартный порт... Таким образом, взаимодействие с TCP/SSL Handshake будет сильно различаться для многих пользователей.

-M недавний правильный путь? Есть ли более изящный метод, чтобы разрешить полный поток TCP, когда строка увидена?

Вот что у меня так далеко:

#iptables -N SSL
#iptables -A INPUT -i eth0 -p tcp -j SSL
#iptables -A SSL -m последние --set -p tcp --syn --dport 400
#iptables -A SSL -m последние --update -p tcp --tcp-flags PSH,SYN,ACK SYN,ACK --sport 400
#iptables -A SSL -m последние --update -p tcp --tcp-flags PSH,SYN,ACK ACK --dport 400
#iptables -A SSL -m последние --remove -p tcp --tcp-flags PSH,ACK PSH,ACK --dport 400 -m строка --algo kmp --string "subdomain.mydomain.com" -j ПРИНЯТЬ

Да, я пытался обойти это с помощью твиков nginx, но я не могу заставить nginx вернуть 444 или внезапное отключение до того, как клиенту привет, если вы можете придумать способ достичь этого, я весь в ушах, эээ, глаза

(По предложению пользователя перенести этот запрос с https://stackoverflow.com/questions/4628157/allow-connections-to-only-a-specific-url-via-https-with-iptables-m-recent-pote)

2 ответа

Решение

Я думаю, что нашел решение, и это было намного проще, чем мое слишком сложное решение ранее:

iptables -A INPUT -i eth0 -p tcp --tcp-flags FIN, PSH, ACK PSH, ACK --dport 400 -m connbytes --connbytes 3: 3 --connbytes-dir оригинал - пакеты режима connbytes -m Строка --algo BM! --string "subdomain.mydomain.com" -j REJECT --reject-with tcp-reset
iptables -A INPUT -i eth0 -p tcp --dport 400 -j ПРИНЯТЬ

Благодаря этой комбинации модулей connbytes и string я достиг желаемых результатов. Если мне удастся очистить его, я добавлю редакции через изменения.

Это кажется очень сложным способом решения проблемы. Что если вы просто поместите subdomain.mydomain.com на уникальный IP-адрес, а затем будете использовать его в своих правилах iptables?

Мне интересно... что именно вы пытаетесь решить, что не может быть решено с помощью параметров nginxallow/deny? Это правда, что для этого требуется согласование SSL (потому что nginx не знает, что запрашивает клиент, пока не будет установлено соединение SSL), но в большинстве случаев это нормально.

Другие вопросы по тегам