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

Почему эта строка файла iptables не работает в CentOS 6

Привет, может ли кто-нибудь помочь мне понять, почему строка 15 якобы не работает в моем файле iptables. Я использую CentOS 6.

Когда я пытаюсь перезапустить службу iptables, получаю следующее:

[root@dbserver ~]# service iptables restart
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Unloading modules:                               [  OK  ]
iptables: Applying firewall rules: iptables-restore: line 15 failed
                                                           [FAILED]

Мой файл iptables выглядит так:

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
#-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -m udp -p tcp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 443 -j ACCEPT
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 25 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.1.1/254 -m state --state NEW -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -p tcp --dport 21 -j ACCEPT

Я только сейчас пытаюсь разрешить доступ к машине из локальной сети.

Любая помощь приветствуется. Спасибо.

РЕДАКТИРОВАТЬ:

Согласно первому ответу, мы переместили COMMIT в конец файла, но все еще получаю ошибки ...

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -m udp -p tcp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 443 -j ACCEPT
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 25 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.1.0/255 -m state --state NEW -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -p tcp --dport 21 -j ACCEPT
COMMIT

Ошибка:

[root@dbserver ~]# service iptables restart
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Unloading modules:                               [  OK  ]
iptables: Applying firewall rules: iptables-restore: line 13 failed
                                                           [FAILED]

В дополнение к проблеме COMMIT, как упоминалось jgoldschrafe, вы пытаетесь добавить строки к правилу, которое не существует (RH-Firewall-1-INPUT).

Вам нужно будет добавить строку

:RH-Firewall-1-INPUT - [0:0]

сразу под

:OUTPUT ACCEPT [0:0]

который объявит цепочку, что позволит вам добавлять в нее правила. Но цепочка все равно не будет иметь никакого эффекта, поскольку в названии нет ничего волшебного, и ничего в трех основных цепочках (INPUT,OUTPUT, и FORWARD) отправляет ему любые пакеты. Конечно, вы можете добавить правило в INPUT цепочка для отправки трафика в вашу новую цепочку, но - и, пожалуйста, не поймите это неправильно - я заметил, что в верхней части этого файла написано

Ручная настройка этого файла не рекомендуется.

На это есть причина. Во что бы то ни стало игнорируйте это и отредактируйте его, но вы можете сделать довольно большие дыры в безопасности или доступности вашей системы, пока учитесь делать это правильно.

Редактировать: Я подозреваю, что проблема со строкой 19 - это диапазон адресов, указанный как 192.168.1.0/255, что неверно. Если вы хотите указать все адреса между 192.168.1.0 и 192.168.1.255, тебе нужно 192.168.1.0/24.

Прошу прощения, но вы действительно не производите впечатление человека, который много знает о брандмауэрах и сетях, и - если предположить, что это сервер, который вы обслуживаете профессионально - это может быть не лучшее место для изучения этого материала .

Все просто - вам нужно переместить COMMIT в конец файла.

COMMIT сообщает iptables, что вы закончили свое объявление и хотите отправить свою конфигурацию в ядро. На этом ваше объявление заканчивается. Вы сообщаете iptables команде COMMIT, а затем даете новые правила без нового объявления, отсюда и ваша ошибка.

Изменить, чтобы включить содержимое комментария по ветру:

Вот обновленная и рабочая (не обязательно оптимальная) версия вашей конфигурации: http://gist.github.com/3818123. Я резюмирую некоторые из проблем:

  1. Ваша входная цепочка RH-Firewall-1-INPUT не существует. Вы копируете и вставляете откуда-то еще?
  2. Некоторые из ваших правил упали после правил отклонения по умолчанию. Даже если бы синтаксис был принят, правила не работали бы.
  3. 192.168.1.1/254 даже близко не соответствует действительной адресации CIDR. Вы имели в виду 192.168.1.0/24?
  4. У вас есть -A RH-Firewall-1-INPUT -m udp -p tcp, что не имеет никакого смысла - я предполагаю, вы имеете в виду -A INPUT -m udp -p udp.

Как правило, стоит добавлять правила через iptables, а затем выгружать их в файл с помощью iptables-save на случай, если вы хотите использовать их для повторной загрузки через iptables-restore, например, когда ваша система перезагружается, потому что довольно просто iptables-save знает свои собственные предварительные требования. лучше чем ты.

Попробуйте поставить две строчки

-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

в конце файла перед COMMIT.

Да, чувак, / 24 ... слэш-запись. Преобразование нотации с косой чертой Google. Глядя на ваш первый примерный стол, я задохнулся.

Мне много раз говорили одно и то же на протяжении многих лет, но вы заблуждаетесь. Как можно вручную редактировать правила iptables, не зная о нотации косой черты? Он используется практически ... везде.

И как все говорили, важно или нет, это сервер - это не место для игр. Если безопасность не важна и он защищен брандмауэром и не подключен к Интернету, выключите iptables ('#service iptables stop; #chkconfig iptables off') ... и поиграйте с ним дома.

Таким образом, когда что-то не работает, вам не нужно задумываться, почему.