Брандмауэр. Требуется ли входящий ответ для получения ответа, в то время как правило исходящего трафика уже существует?

290
Abhishek Parmar

Я разработал одно веб-приложение MVC, которое имеет веб-API и размещено в Amazon Instance, и одно приложение Windows для вызова этих API-интерфейсов для получения ответа от этого сервера.

Как веб-приложения, так и Windows-приложения разрабатываются в рамках asp.net 4.5 с использованием языка c #.

Приложение Windows установлено в more than 200 client'sсистеме, которая является высокозащищенным сервером, и все входящие порты заблокированы в брандмауэре.

Я использую HttpWebRequest с BindIPEndPoint для вызова веб-API с использованием настроенного диапазона портов TCP [default 7777-7786].

API-вызовы работают нормально из приложения Windows, если существуют правила разрешенного входящего и исходящего брандмауэра.

Но проблема в том, что клиенты не разрешают мне какие-либо правила Inbound Firewall, они только разрешают правила Outbound Firewall для этих диапазонов портов, а приложение Windows не работает с заблокированными правилами входящих соединений для этих диапазонов портов.

Нужно ли мне открывать входящее правило в брандмауэре для этого диапазона портов для вызова / получения запроса / ответа на / от API? Если вам не нужно правило Inbound Firewall, объясните, почему?


Ниже приведен вызов 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); } 
1

0 ответов на вопрос