Я могу запустить iptables-save и вывести вывод на стандартный вывод, но если я перенаправляю в файл - файл пуст:
[root@nhd-vlx2 tmp]# iptables-save
# Generated by iptables-save v1.4.7 on Sun Dec 18 15:11:42 2011
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [90971:17757587]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 9090:9999 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Sun Dec 18 15:11:42 2011
[root@nhd-vlx2 tmp]# iptables-save > save
[root@nhd-vlx2 tmp]# cat save
[root@nhd-vlx2 tmp]#
[root@nhd-vlx2 tmp]#
Трубопроводные работы (iptables-save | cat
), и поэтому сохранение в файл через tee
тоже работает, но зачем iptables-save
не позволяет сохранить в файл?
Единственная причина, по которой я могу думать, это то, что эта машина может быть заражена вирусом (попытка ослабить брандмауэр)
Длинный выстрел, но:
Кто-то еще разместил аналогичную проблему на другом форуме. Как оказалось, контекст SELinux неверен.
Запустите ls -laZ на iptables-multi. Он должен вернуться с:
-rwxr-xr-x. root root system_u:object_r:iptables_exec_t:s0 /sbin/iptables-multi
Все остальные файлы iptables связаны с ним символическими ссылками:
[root@cacti tmp]# ls -laZ /sbin/iptables*
lrwxrwxrwx. root root system_u:object_r:bin_t:s0 /sbin/iptables -> iptables-multi
-rwxr-xr-x. root root system_u:object_r:iptables_exec_t:s0 /sbin/iptables-multi
lrwxrwxrwx. root root system_u:object_r:bin_t:s0 /sbin/iptables-restore -> iptables-multi
lrwxrwxrwx. root root system_u:object_r:bin_t:s0 /sbin/iptables-save -> iptables-multi
Если контекст SELinux неверен, измените его с помощью команды chcon в основном файле:
chcon -u system_u -t iptables_exec_t /sbin/iptables-multi
Если контекст SELinux в символических ссылках неверен, исправьте их с помощью указанной выше команды (хотя на этот раз с типом bin_t)
Iptables-save пытается установить правильный контекст безопасности selinux на минималистичном centos-7.
Я посмотрел на ошибку, и похоже, что она не работает, потому что утилиты для изменения контекста selinux не установлены (через зависимость?).
Следующее исправило это для меня:
yum -y install policycoreutils
После этого все работало нормально:
/sbin/service iptables save
Согласно комментарию Рилиндо, если вы используете RedHat, документы упомянуть:
~]# /sbin/service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]