Рейтинг:1

Как добавить IP-адрес в белый список из определенного IP-блока или из интерфейса в iptables?

флаг cn

У меня есть переходник, который я использую для доступа к двум моим базам данных, скажем, к своей базе данных A и базе данных B, каждая из которых находится на отдельном IP-адресе.У меня есть еще один человек, который занимается работой с базой данных B, поэтому я хочу ограничить доступ только к этой базе данных. Мы используем wireguard для подключения к Jumpbox, и у нас есть отдельный профиль wireguard для подключения, поэтому у каждого из нас есть разные интерфейсы и разные источники IP.

Я пробовал это, но это по-прежнему позволяет подключаться к обеим БД:

*фильтр
-A FORWARD -i eth0 -m conntrack --ctstate СВЯЗАННО,УСТАНОВЛЕНО -j ПРИНЯТЬ
-A ВПЕРЕД -i my-wg -j ПРИНЯТЬ
-A ВПЕРЕД -i другой-человек-wg ! -d XXX.XXX.XXX.XXX -j ACCEPT # база данных B ip
СОВЕРШИТЬ

*натуральный
: ПРЕДВАРИТЕЛЬНОЕ ПРИНЯТИЕ [0:0]
:ВВОД ПРИНЯТЬ [0:0]
: ВЫВОД ПРИНЯТЬ [1:88]
:ОТПРАВКА ПРИНЯТИЯ [1:88]
-A POSTROUTING -s XXX.XXX.XXX.XXX -j MASQUERADE #это IP-блок wireguard, который я и другой человек используем
СОВЕРШИТЬ

Вот результат iptables -L -v:

Цепочка INPUT (политика ACCEPT 0 пакетов, 0 байтов)
 pkts bytes target prot opt ​​in out source target         

Цепочка FORWARD (политика ACCEPT 0 пакетов, 0 байт)
 pkts bytes target prot opt ​​in out source target         
60374 7581K DOCKER-USER все -- любой любой где угодно где угодно            
60374 7581K DOCKER-ISOLATION-STAGE-1 все -- любой любой где угодно где угодно            
22156 1788K ПРИНЯТЬ все -- любой docker0 где угодно где угодно ctstate СВЯЗАННО, УСТАНОВЛЕНО
   93 5580 DOCKER all -- любой docker0 в любом месте в любом месте            
22083 1169K ПРИНЯТЬ все -- docker0 !docker0 где угодно где угодно            
    0 0 ПРИНЯТЬ все -- docker0 docker0 везде где угодно            
 7799 3947K ПРИНЯТЬ все -- eth0 любое где угодно где угодно ctstate СВЯЗАННО,УСТАНОВЛЕНО
 8238 672K ПРИНЯТЬ все -- my-wg любое где угодно где угодно            
    0 0 ACCEPT all -- other-person-wg anywhere !XXX.XXX.XXX.XXX # ip базы данных B

Цепочка OUTPUT (политика ACCEPT 0 пакетов, 0 байт)
 pkts bytes target prot opt ​​in out source target         

Сеть DOCKER (1 ссылка)
 pkts bytes target prot opt ​​in out source target         
    0 0 ПРИНЯТЬ tcp -- !docker0 docker0 везде 172.17.0.2 tcp dpt:9181
    0 0 ПРИНЯТЬ TCP -- !docker0 docker0 везде 172.17.0.4 tcp dpt:5000
   92 5520 ПРИНЯТЬ tcp -- !docker0 docker0 везде 172.17.0.3 tcp dpt:9180

Сеть DOCKER-ISOLATION-STAGE-1 (1 ссылка)
 pkts bytes target prot opt ​​in out source target         
22083 1169K DOCKER-ISOLATION-STAGE-2 все -- docker0 !docker0 везде где угодно            
60374 7581K ВОЗВРАТ все -- любой любой где угодно где угодно            

Сеть DOCKER-ISOLATION-STAGE-2 (1 ссылка)
 pkts bytes target prot opt ​​in out source target         
    0 0 DROP all -- любой docker0 в любом месте в любом месте            
22083 1169K ВОЗВРАТ все -- любой любой везде где угодно            

Сеть DOCKER-USER (1 ссылка)
 pkts bytes target prot opt ​​in out source target         
60374 7581K ВОЗВРАТ все -- любой любой где угодно где угодно

Как ограничить доступ с определенного IP-блока или с интерфейса, чтобы иметь доступ только к определенному IP-адресу в iptables на Jumpbox?

Nikita Kipriyanov avatar
флаг za
Я предполагаю, что он был принят политикой «filter FORWARD» по умолчанию, то есть «ACCEPT», но мы не видим этого в вашем вопросе. Установите либо iptables -P FORWARD DROP, либо iptables -A FORWARD -j DROP, в этом случае это поможет. Если вы не хотите, чтобы мы угадывали, пожалуйста, покажите полное `iptables-save`, в котором будет показано, какая политика у вас есть в данный момент.
dennbagas avatar
флаг cn
Это полное `iptables-save`, которое у меня есть на данный момент.
setenforce 1 avatar
флаг us
Можете ли вы показать `iptables - L -a -v`
dennbagas avatar
флаг cn
Опции `-a` нет, но я обновил вопрос и добавил вывод `iptables -L -v`
Рейтинг:1
флаг fr

Эта команда говорит: «Если сетевой трафик поступает с IP-адреса X, но не на интерфейс Y, то DROP». Обратите внимание, что он находится в необработанной таблице, которая является первой и самой быстрой таблицей, когда сетевой трафик поступает в IPtables.

iptables -t raw -A PREROUTING -s ${X} ! -i ${Y} -j УДАЛИТЬ

У вас должна получиться другая перестановка этого правила в противоположном направлении:

iptables -t raw -A PREROUTING ! -s ${X} -i ${Y} -j УДАЛИТЬ

Вы можете регистрировать нарушения этих правил с помощью следующих четырех команд:

iptables -t raw -A PREROUTING -s ${X} ! -i ${Y} -j ЖУРНАЛ --log-prefix "Неправильный IP: "
iptables -t raw -A PREROUTING -s ${X} ! -i ${Y} -j УДАЛИТЬ 
iptables -t raw -A PREROUTING ! -s ${X} -i ${Y} -j LOG --log-prefix "Неверный интерфейс: "
iptables -t raw -A PREROUTING ! -s ${X} -i ${Y} -j УДАЛИТЬ

РЕДАКТИРОВАТЬ: Отредактировано после того, как я получил дополнительные разъяснения в комментариях.

Это правило гласит: «Если трафик поступает с IP-адреса X и не предназначен для IP-адреса Z, то этот трафик отбрасывается».

iptables -t raw -A PREROUTING -s ${X} ! -d ${Z} -j УДАЛИТЬ

В этих правилах говорится: «Если трафик поступает на интерфейс Y и не предназначен для IP-адреса Z, то этот трафик отбрасывается».

iptables -t raw -A PREROUTING -i ${Y} ! -d ${Z} -j УДАЛИТЬ 

Вот комбинация этих двух правил, которая гласит: «Если трафик поступает с IP-адреса X и поступает на интерфейс Y и не предназначен для IP-адреса Z, то отбрасывайте трафик».

iptables -t raw -A PREROUTING -s ${X} -i ${Y} ! -d ${Z} -j УДАЛИТЬ.

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

Когда пакеты попадают в IPtables, они обходят таблицы следующим образом:

raw --> mangle (где начинается отслеживание соединения) --> nat --> filter
dennbagas avatar
флаг cn
Что ж, я могу сделать это ограничение, используя PREROUTING в таблице nat, я спрашиваю: «Если сетевой трафик поступает с IP-адреса X И не идет на IP-адрес Z, то DROP» ИЛИ «если сетевой трафик поступает с интерфейса Y И не переходя на Z IP-адрес, то DROP"
флаг fr
Окей, я понимаю. `iptables -t raw -A PREROUTING -s ${X} ! -d ${Z} -j DROP` и `iptables -t raw -A PREROUTING -i ${Y} ! -d ${Z} -j DROP` должно помочь. Не уверен, что это поможет, но вот комбинация двух правил: `iptables -t raw -A PREROUTING -s ${X} -i ${Y} ! -d ${Z} -j УДАЛИТЬ`.
dennbagas avatar
флаг cn
Все ваше решение работает! Можете ли вы обновить свой пост, чтобы я мог отметить его как правильный ответ. И можно ли эти правила поместить в таблицу фильтров? если да, то каковы эквиваленты правил, если я хочу записать их в таблицу фильтров? и, возможно, объяснение этого было бы очень признательно!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.