Разрешить подключения только к определенному 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), но в большинстве случаев это нормально.