Брандмауэр: требуется ли входящее правило для получения ответа, в то время как исходящее правило уже существует?
Я разработал одно веб-приложение MVC, которое имеет веб-API и размещено в экземпляре Amazon, и одно приложение windows для вызова этих API для получения ответа от этого сервера.
Как веб-приложения, так и приложения для Windows разрабатываются в asp.net фреймворк 4.5 с использованием языка c#.
Приложение Windows установлено в более чем 200 клиентских системах, которые являются высокозащищенными серверами, а все входящие порты заблокированы в Брандмауэре.
Я использую HttpWebRequest с BindIPEndPoint для вызова веб-API с использованием настроенного диапазона TCP-портов [по умолчанию 7777-7786].
Вызовы API прекрасно работают из приложения Windows, если есть правила разрешающего входящего и исходящего брандмауэра.
Но проблема в том, что клиенты не разрешают мне никаких входящих правил брандмауэра, они разрешают только исходящие правила брандмауэра для этого диапазона портов, а приложение Windows не работает с заблокированными входящими правилами для этого диапазона портов.
Нужно ли мне открывать входящее правило в Брандмауэре для тех диапазонов портов, которые используются для вызова/получения запроса/ответа на/из API ? Если нет необходимости в правиле входящего брандмауэра, то, пожалуйста, объясните, почему ?
Что я уже пробовал:
Ниже приводится вызов API которые используют один статический TCP порт в моем приложение Windows :
try { string address = RevWatchURL; address = address + "api/GetRevGuardLatestPatch"; HttpWebRequest httpWebRequest = WebRequest.Create(address) as HttpWebRequest; httpWebRequest.ContentType = "text/json"; httpWebRequest.Method = "POST"; httpWebRequest.Timeout = 300000; httpWebRequest.ServicePoint.BindIPEndPointDelegate = new BindIPEndPoint(CommonValues.BindIPEndPointCallbackRGPatch); string enRevGuardUniqueId = Encryption.EncryptionTechnique(Convert.ToString(UniqueId), null, null); using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { string json = "{\"UniqueId\":\"" + enRevGuardUniqueId + "\"}"; streamWriter.Write(json); streamWriter.Flush(); streamWriter.Close(); } try { var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { returnVal = streamReader.ReadToEnd(); streamReader.Close(); httpResponse.Close(); } } catch (WebException ex) { } finally { httpWebRequest.Abort(); } Obj = JsonConvert.DeserializeObject<CommonValues.RevGuardPatchClass>(returnVal); } catch (Exception ex) { MessageBox.Show("Error", "API", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); }
Метод BindIPEndPoint:
public static IPEndPoint BindIPEndPointCallbackRGPatch (ServicePoint servicePoint, IPEndPoint remoteEndPoint, int retryCount) { return new IPEndPoint(IPAddress.Any, 7777); }
Richard Deeming
Вы не должен требуется входящее правило, так как запрос инициируется компьютером в сети. Исходящее правило должно быть достаточным. Если бы это было не так, компьютеры в сети не смогли бы получить доступ к интернету.
Что произойдет, если вы удалите BindIPEndPoint
код?
Krunal Ifuturz
Если я удалю BindIPEndPoint, система клиента автоматически примет TCP-порт, но требуется использовать определенный диапазон портов, настроенный клиентом, поэтому я использую BindIPEndPoint для вызова API только из этого диапазона TCP-портов.
Еще одна вещь, когда я блокирую этот диапазон портов в Брандмауэре как входящее правило, вызов переходит в состояние "SYN_SENT" [проверено с помощью netstat-b].
OriginalGriff
Не" ударяйте " свой вопрос-это грубо и ненужно.
Во что бы то ни стало добавить информацию, но редактировать ее только для того, чтобы вернуть в начало списка? Это просто невежливо.
Krunal Ifuturz
Я отредактировал только один тег, больше ни о чем не спрашивая, как это было.