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

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

1 Ответ

1 голос
/ 11 января 2011

Как я уже упоминал на serverfault , я нашел решение:

iptables -A INPUT -p tcp --tcp-flags FIN,PSH,ACK PSH,ACK --dport 400 -m connbytes --connbytes 0:512 --connbytes-dir original --connbytes-mode bytes -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
...