Скажем, я хочу, чтобы порт 12345 был открыт на моем компьютере, но я хочу разрешить соединение только через безопасный сокет (SSL). Есть ли флаг, который я могу добавить к следующей команде:
/sbin/iptables -A INPUT -p tcp --dport 12345 -j ACCEPT
Спасибо!
Нет. К сожалению, iptables знает только об уровне 2/3: портах, IP-протоколах, src / IP-адресах назначения или Ethernet-адресах и т. Д.
Чтобы iptables знал, что поток TCP содержит SSL, ему необходимо проанализировать контент. Этого не происходит. Что вам понадобится, так это брандмауэр уровня 7, как в проекте l7-filter:
Я вернулся к этому, подумав несколько дней, и понял, что это не проблема. Вот почему:
Демоны с поддержкой SSL прослушивают порт и ожидают согласования SSL-соединения, прежде чем делать что-либо еще. Если вы подключаетесь и пытаетесь сделать что-либо, кроме согласования SSL, учитывая, где вы находитесь в пути кода, это, несомненно, представляет собой ошибку, как и подключение к веб-серверу и ввод MAIL FROM: fred@example.com
. Соединение будет просто разорвано. Попробуйте подключиться к веб-серверу HTTPS через порт 443 и выполнить обычный запрос GET:
[madhatta@anni tmp]$ telnet www 443
Trying 193.219.118.100...
Connected to www.teaparty.net (193.219.118.100).
Escape character is '^]'.
GET /
[...]
<body>
<h1>Bad request!</h1>
<p>
Your browser (or proxy) sent a request that
this server could not understand.
И это довольно дружелюбно, если говорить о поцелуях SSL. Вот аналогичный эксперимент с сервером POP / S на порту 995:
[madhatta@risby video]$ telnet www 995
Trying 193.219.118.100...
Connected to www.
Escape character is '^]'.
USER fred
Connection closed by foreign host.
Обратите внимание, что это полностью законная команда POP; просто в этот момент разговора демон требует что я сначала создаю SSL-соединение, потому что именно для этого оно настроено. Я накормил его чем-то, что не SSL, и он уронил меня, как прокаженный картофель.
Кстати, это обсуждение не относится к TLS. TLS, расширение протоколов SSL, явно позволяет устанавливать соединение в виде открытого текста, а затем согласовывать его до соединения SSL на одном конце, который установил, что другой конец поддерживает TLS.
Но ваш вопрос конкретно касается SSL, а не TLS, и в любом случае решение простое:
Запустите демон на порту 12345, который требует использования SSL (т.е. не поддерживает TLS), и ваша работа будет выполнена.