Krunal Ifuturz Ответов: 0

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


Я разработал одно веб-приложение 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

Я отредактировал только один тег, больше ни о чем не спрашивая, как это было.

0 Ответов