Назад | Перейти на главную страницу

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

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

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

Вот что у меня есть на данный момент:

#iptables -N SSL
#iptables -A INPUT -i eth0 -p tcp -j SSL
#iptables -A SSL -m recent --set -p tcp --syn --dport 400
#iptables -A SSL -m recent --update -p tcp --tcp-flags PSH,SYN,ACK SYN,ACK --sport 400
#iptables -A SSL -m recent --update -p tcp --tcp-flags PSH,SYN,ACK ACK --dport 400
#iptables -A SSL -m recent --remove -p tcp --tcp-flags PSH,ACK PSH,ACK --dport 400 -m string --algo kmp --string "subdomain.mydomain.com" -j ACCEPT

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

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

Думаю, я нашел решение, и оно было намного проще, чем мое ранее слишком сложное решение:

iptables -A INPUT -i eth0 -p tcp --tcp-flags FIN,PSH,ACK PSH,ACK --dport 400 -m connbytes --connbytes 3:3 --connbytes-dir original --connbytes-mode packets -m string --algo bm ! --string "subdomain.mydomain.com" -j REJECT --reject-with tcp-reset
iptables -A INPUT -i eth0 -p tcp --dport 400 -j ACCEPT

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

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

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