Я новичок в Linux и использую iptables
. Вот чего я пытаюсь достичь:
У меня есть клиент ASP.net, который общается с веб-сервисом, размещенным через веб-логику в Linux. Связь осуществляется через SSL.
То, что я пытаюсь выполнить, используя iptables
только блокирует ответ клиенту.
Таким образом, клиент выполняет вызов веб-службы, веб-служба обрабатывает запрос и отвечает клиенту.
Я хочу, чтобы веб-служба получила запрос, но заблокировала ответ клиенту.
В тестовых целях я убрал все правила из iptables
. Я создал политики по умолчанию для ACCEPT
на INPUT
, OUTPUT
и FORWARD
цепи. Затем я добавил правило в OUTPUT
цепь к DROP
все, что имеет исходный IP-адрес клиента.
iptables -A OUTPUT -s client_ip_address -j DROP
По-видимому, это не имело значения. Я могу вызвать веб-службу из клиента и все равно получить ответ.
Любая помощь приветствуется?
Это зависит от того, чего именно вы хотите добиться. Если вы хотите имитировать тайм-аут сети, используйте это:
iptables -A OUTPUT -d clientip -j DROP
он автоматически отбрасывает все пакеты с сервера клиенту.
Если вы хотите, чтобы произошло рукопожатие tcp, а затем уничтожить соединение (может быть полезно, или вы можете просто активировать указанное выше правило позже), используйте это:
iptables -A OUTPUT -d clientip -p tcp --tcp-flags SYN,ACK SYN,ACK -j ACCEPT
iptables -A OUTPUT -d clientip -j DROP
Если вы хотите имитировать закрытый порт (служба не запущена), используйте:
iptables -A INPUT -s clientip -j REJECT
он отправит клиенту сообщение о недоступности пункта назначения ICMP.
Надеюсь, поможет.
Возможно, у вас есть правило ранее в цепочке OUTPUT, которое разрешает все УСТАНОВЛЕННЫЕ и СВЯЗАННЫЕ соединения - это довольно часто. Если такое правило существует, оно будет сопоставлено перед правилом DROP, которое вы добавите с помощью -A. Попытайтесь поместить свое правило DROP как можно раньше в цепочку OUTPUT:
iptables -I OUTPUT -d clientip -j DROP
поместит правило в самый верх цепочки.