Я настроил машину Ubuntu как маршрутизатор. Шаги NAT конфигурации приведены ниже:
#iptables -F
#iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
#iptables-save > /etc/network/iptables
Затем сохраните это местоположение файла в rc.local
#vi /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
/sbin/iptables-restore < /etc/network/iptables
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
exit 0
#reboot
Это работает, теперь я хочу заблокировать IP-адрес. Для этого я выполнил следующую команду:
#iptables -A INPUT -s 69.171.229.11 -j DROP
#iptables-save > /etc/network/iptables
#reboot
Но это не работает.
vi /etc/network/iptables
теперь выглядят так:
# Generated by iptables-save v1.4.4 on Tue Feb 14 11:21:16 2012
*nat
:PREROUTING ACCEPT [870:97719]
:POSTROUTING ACCEPT [283:23151]
:OUTPUT ACCEPT [461:28753]
-A POSTROUTING -o eth0 -j MASQUERADE COMMIT
# Completed on Tue Feb 14 11:21:16 2012
# Generated by iptables-save v1.4.4 on Tue Feb 14 11:21:16 2012
*filter
:INPUT ACCEPT [4914:3254723]
:FORWARD ACCEPT [2382:1222521]
:OUTPUT ACCEPT [4010:410041]
-A INPUT -s 98.137.149.56/32 -j DROP
COMMIT
# Completed on Tue Feb 14 11:21:16 2012
Что мне не хватает для блокировки IP-адреса?
Если вы хотите заблокировать IP-адрес от использования правила MASQUERADE, вам необходимо поместить это правило в FORWARD
цепь, а не INPUT
цепь.
iptables -I FORWARD -s 69.171.229.11 -j DROP
iptables-save делает не сделайте свои правила iptables постоянными, чтобы они были потеряны после перезагрузки. Вместо этого он печатает вашу текущую конфигурацию iptables в STDOUT (см. страницы руководства для iptables-save). Итак, после перезагрузки ваши iptables должны быть пустыми.
Вероятно, вы захотите восстановить свои правила из этого файла после перезагрузки. Для этого используйте
iptables-restore < /etc/network/iptables
Видеть страницы руководства для iptables-restore на этом.
Как сказал Патрик, правило
iptables -A INPUT -s 69.171.229.11 -j DROP
только предотвратит отправку пакетов на сам маршрутизатор - они все равно будут пересылаться, если они адресованы правильно. Чтобы этого не произошло, добавьте правило
iptables -A FORWARD -s 69.171.229.11 -j DROP
FORWARD применяется к пакетам, которые маршрутизатор хочет пересылать, а INPUT применяется к пакетам, адресованным самому маршрутизатору.
Думаю, последовательность неправильная.
Что вы делаете с append, так это помещаете его в конец цепочки. IPtables останавливается после первого совпадения. Так что может случиться так, что правило будет выполнено непосредственно перед тем, как оно попадет в правило блокировки. Убедитесь, что правило блокировки находится сверху. Вы можете использовать опцию -I, чтобы вставить его в определенное место в вашей цепочке.