Я пытаюсь заблокировать только исходящие соединения с определенными 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
одновременно останавливая исходящий трафик на этот адрес:
- Разрешить входящий трафик (предположительно на любой порт)
- Разрешить исходящие ответы на установленные входящие соединения
- Блокировать оставшийся исходящий трафик
Так,
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