использование iptables для тестирования приложения

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

Поэтому я открыл один терминал, на котором я пингую сервер БД:

 ping 172.21.7.188

Во втором терминале я сделал:

sudo iptables -A INPUT -s 172.21.7.188 -j DROP
sudo iptables -A OUTPUT -d 172.21.7.188 -j DROP

Но я не вижу никаких изменений - пинги еще возвращаются. Что я делаю не так?

0
задан 16.04.2020, 15:46

2 ответа

Хотя вы можете использовать Ubuntu, этот вопрос относится не к Ubuntu, а к Linux, поэтому я думаю, что лучше задать его по ServerFault.


Ответ на первоначальный вопрос (до того, как OP его отредактировал)

Ваше правило в цепочке INPUT верно, но правило в цепочке OUTPUT неверно. Вы хотите отбросить туда пакеты, адресованные упомянутому IP, а не тем, которые приходят с него (что бессмысленно в этой цепочке).

Вот почему вы должны изменить -s (--source) на -d (--destination) в правиле:

# iptables -A OUTPUT -d 172.21.7.188 -j DROP

Но даже когда вы отбрасывали только входящие пакеты, оно было достаточно, можно сказать. Это правда, что ping возвращался (эхо-ответ ICMP достиг вашего хоста) без вышеприведенной строки, и при обращении к tcpdump или wireshark показывались бы датаграммы, связанные с ping (то есть исходящие и входящие), но приложение ping не получало входящие дейтаграммы, потому что они были отброшены.

Очевидно, что в большинстве случаев отбрасывать только входящие пакеты довольно неразумно, поскольку это приводит к разным состояниям на обоих концах соединения (на уровне соединения или на уровне приложения).


Ответ на отредактированный вопрос

Если после исправления оно все еще не работает, то я подозреваю, что у вашего брандмауэра уже есть некоторые правила, которые делают ваши новые правила недоступными. То, как вы добавили свои правила, делает их добавленными в конце цепочки. Сначала вы должны удалить новые правила (те же команды, что и для добавления, но измените -A на -D).

Теперь добавьте ваши правила в начало цепочек (т.е. вставьте их в данное правило № 1), для которых они подходят (те же команды, что и для добавления, измените -A на -I):

# iptables -I INPUT  -s 172.21.7.188 -j DROP
# iptables -I OUTPUT -d 172.21.7.188 -j DROP
[ 1120] Теперь это должно работать.

0
ответ дан 16.04.2020, 15:47
  • 1
    Исправленный '-s' к '-d'. я могу все еще видеть ping, все же. Если это нормально, потому что ping не являются ни TCP, ни UDP, чем, есть ли какой-либо другой способ постоянно опросить сервер и видеть, как это реагирует, поскольку я обновляю iptables? – senderle 16.04.2020, 15:47
  • 2
    Работы отлично теперь! – timfreilly 16.04.2020, 15:47
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

Это заблокирует пинг

Я использую этот скрипт для Iptables на нашем сервере

#!/bin/bash 

#This Script was Used for Only Setting up Iptables in ubuntu 12.04 server
#uncomment the Lines With # Which u don't need to use 
#if u going to use this script in remote VPS Test it in local systems before applying it in remote VPS .
#final line will be commented with # cos it will save the iptables if its not commented with #


#0. Flush every Rules what ever there already 

iptables -F

#1. This enable traffic for (lo) loopback interface(-i) 


iptables -A INPUT -i lo -j ACCEPT


#2. This Will Keep the rules for Which service currently Established  eg : ssh


iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


#3. This Will Enable the Port Number 22 for ssh which i we have defined 


iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT


#4.This Will Enable the Port Number 80 for http 


iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT


#5.This Will Enable the Port Number 443 for httpd 


iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT


#6. Allow rsync from a specific network


iptables -A INPUT -i eth0 -p tcp --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT


iptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT


#7. Blow ICMP PING Request 

iptables -A INPUT -p icmp --icmp-type echo-request -j DROP


#11. This Will Block Other connections 


iptables -A INPUT -j DROP



#saving the iptables 


#sudo apt-get install iptables-persistent
#sudo service iptables-persistent save
#sudo service iptables-persistent restart
0
ответ дан 16.04.2020, 15:47
  • 1
    Но я don' t хотят заблокировать ПРОСТО ping. Я хочу заблокировать все соединение (В и из/в все порты) от этой машины. – zeekay 16.04.2020, 15:47
  • 2
    Необходимо ли было заблокироваться для конкретного ПК? – timfreilly 16.04.2020, 15:48
  • 3
    Извините, I' m не действительно заинтересованный сценарием Вы используете в своей компании. I' m заинтересованный корректным ответом на мой вопрос. В комментарии выше я don' t видят любой IP, определенный, таким образом, я предполагаю, что это заблокирует соединение от всех машин который я don' t потребность. – timfreilly 16.04.2020, 15:48
  • 4
    iptables-A ВВОДЯТ ОТБРАСЫВАНИЕ-j iptables-A, ПРОИЗВОДИТ ОТБРАСЫВАНИЕ-j, Это Заблокирует Все поступление, и Выход не пробуют его в удаленных серверах, раз так Вы будете больше освобождать свое Соединение и доступ наклона если его сохраненный.. если не сохраненный можно перезапустить Удаленный сервер, и он исправит от него.. – Beni Cherniavsky-Paskin 16.04.2020, 15:48
  • 5
    Да - это ясно указано в моем вопросе. – Beni Cherniavsky-Paskin 16.04.2020, 15:49

Теги

Похожие вопросы