Назад | Перейти на главную страницу

iptables-save не может записать в файл

Я могу запустить 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  ]