При смене сервера часто возникает необходимость перенести правила iptables. Данное руководство продемонстрирует простой способ переноса активных правил фаервола с одного сервера на другой.
Требования
Для выполнения руководства нужно иметь два сервера. Исходный сервер, на котором находятся правила фаервола, называется в руководстве сервером A; целевой сервер – B.
Также нужно иметь права sudo.
Просмотр правил iptables
Прежде чем приступить к переносу правил брандмауэра, нужно просмотреть их. Для этого выполните следующую команду на сервере A:
sudo iptables -S
Example output:
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 15.15.15.51/32 -j DROP
Теперь нужно перенести эти правила на другой сервер.
Экспорт правил Iptables
Команда iptables-save сохранит текущие правила брандмауэра в stdout, после чего его можно будет сохранить в файл.
Используйте эту команду на сервере А, чтобы экспортировать правила в файл iptables-export.
cd ~
sudo iptables-save > iptables-export
После этого в домашнем каталоге появится файл iptables-export, при помощи которого можно перенести правила фаервола на другой сервер.
Просмотр файла (опционально)
Проверьте, содержит ли новый файл все необходимые данные:
cat iptables-export
# Generated by iptables-save v1.4.21 on Tue Sep 1 17:32:29 2015
*filter
:INPUT ACCEPT [135:10578]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [8364:1557108]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 15.15.15.51/32 -j DROP
COMMIT
# Completed on Tue Sep 1 17:32:29 2015
Как видите, данный файл содержит все текущие правила iptables, и теперь можно скопировать этот файл на целевой сервер.
Перенос правил на целевой сервер
Проще всего для этого использовать scp или же просто скопировать и вставить содержимое файла в новый файл на целевом сервере.
Ниже показано, как при помощи scp скопировать файл по сети в каталог /tmp.
Итак, запустите команду scp на сервере А, указав логин и IP-адрес сервера.
scp iptables-export user@server_b_ip_address:/tmp
Пройдя авторизацию, файл будет скопирован в каталог /tmp на сервер В.
Примечание: Содержимое каталога /tmp будет удалено при перезагрузке системы. Не забудьте переместить файл в более надёжный каталог.
Импорт правил
Теперь можно загрузить перенесённые правила.
Примечание: В случае необходимости сейчас можно обновить их, добавив данные нового сервера; отредактируйте файл /tmp/iptables-export, внеся всё необходимое.
Когда правила будут соответствовать требованиям данного сервера, загрузите их из файла iptables-export при помощи команды iptables-restore.
На сервере В запустите:
sudo iptables-restore < /tmp/iptables-export
Чтобы убедиться, что правила загружены успешно, используйте:
sudo iptables -S
Сохранение правил
Несохранённые правила фаервола действительны только в течение одной сессии; чтобы сделать набор правил постоянным, нужно его сохранить. Убедитесь, что вы на сервере В, и следуйте соответствующему разделу.
Сохранение правил в Ubuntu
Для сохранения правил брандмауэра система Ubuntu предлагает пакет iptables-persistent. Чтобы установить этот пакет, введите команду:
sudo apt-get install iptables-persistent
Во время установки программа предложит сохранить текущие правила iptables. Выберите yes.
В дальнейшем для сохранения новых или обновлённых правил используйте команду:
sudo invoke-rc.d iptables-persistent save
Сохранение правил в CentOS 6 и 7
По умолчанию системы CentOS 6 и 7 используют фаервол FirewallD; чтобы сохранить правила iptables, используйте:
sudo service iptables save
Это сохранит текущие правила iptables в файл /etc/sysconfig/iptables, который загрузится после перезапуска системы.
Перенос правил брандмауэра успешно завершён!