Iptables исходящий блок запрещает входящий

Iptables исходящий блок запрещает входящий

Я пытаюсь заблокировать только исходящие соединения с определенными IP-адресами, однако хочу разрешить входящие соединения с тех же IP-адресов.

Насколько я понимаю, блокировка исходящих соединенийне следуетблокировать, если входящее соединение было установлено успешно.

По сути, я установил такие правила:

--append OUTPUT --jump DROP --destination x.x.x.x

И чтобы разрешить установленные соединения:

--append INPUT --in-interface eth0 --match state --state RELATED,ESTABLISHED --jump ACCEPT

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

Я хотел бы заблокировать полный доступ для сервера для выполнения исходящих подключений к x.x.x.x. Однако, когда пользователь с этого IP захочет получить доступ к серверу, он должен иметь возможность посещать сайты на определенных портах.

решение1

Вы почти достигли цели с вашими попытками правил брандмауэра. Вот что вам нужно, чтобы разрешить входящий трафик с хоста, 10.10.10.10одновременно останавливая исходящий трафик на этот адрес:

  1. Разрешить входящий трафик (предположительно на любой порт)
  2. Разрешить исходящие ответы на установленные входящие соединения
  3. Блокировать оставшийся исходящий трафик

Так,

iptables -A INPUT --src 10.10.10.10 --jump ACCEPT

iptables -A OUTPUT --match state --state RELATED,ESTABLISHED --jump ACCEPT
iptables -A OUTPUT --dst 10.10.10.10 --jump DROP

На самом деле это правило вам не нужно, INPUTесли только у вас нет более поздних правил DENYили REJECTваша политика не установлена ​​таким образом.

решение2

Вы ошибаетесь! Вот что я понимаю:

Прежде всего, посмотрите на ваше inputправило. Оно должно разрешить ввод по state, но что это stateзначит? Это значит, что трафик шел outс вашего сервера на этот адрес, раньше! Так что это правило никогда не сработает, если вы заблокируете output(для этого адреса) полностью.

Вот почему ваше полное начинание невозможно, stateоно доступно только в формате input.

Возможно, есть какое-то хакерское решение. Но с данными вариантами это невозможно.

ПС

После вашего вопроса я снова проверил старую тему и угадайте что? Прочитав ваш пост еще раз, я понял, что это ИМЕННО то, что вы хотите. Посмотрите наПортСтук.

Он добавляет к вашему запросу компонент, который делает его еще лучше: случайность.

Просто настройте схему стука и не только разрешите outputсоединения, но и только в том случае , если произошло inputправильное .knocking

Связанный контент