Я тестирую свое веб-приложение, которое подключается к двум БД. Я не могу их остановить, но я хочу смоделировать отключение одного из них.
Поэтому я открыл один терминал, на котором я пингую сервер БД:
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
Но я не вижу никаких изменений - пинги еще возвращаются. Что я делаю не так?
Хотя вы можете использовать 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] Теперь это должно работать.
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