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

Iptables добавляет правило по умолчанию после «-A INPUT -j REJECT --reject-with icmp-host -hibited»

Я использую iptables для открытия порта 80 для HTTP в CentOS 6.4. Обычно я использую vim для редактирования файла / etc / sysconfig / iptables. Но на этот раз я использую команду / sbin / iptables.

# /sbin/iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
# service iptables save
# service iptables restart

Когда я перечисляю правила, я вижу такой http:

ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh 
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:http 

Но я не могу подключиться к веб-серверу с другого компьютера. Я проверил файл iptables и вижу следующее содержимое:

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [88:9264]
-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 -j REJECT --reject-with icmp-host-prohibited
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

Мне пришлось вручную поставить строку:

-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

перед

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

а затем, когда я перезапускаю службу iptables. Это сработало!

Так как же правильно добавлять новые правила? Спасибо!

В -A Команда iptables просто «добавляет» правило. Итак, если у вас уже есть набор правил, он выглядит так:

ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh 
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 

И ты бежишь:

# /sbin/iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

Тогда, конечно, это закончится после REJECT правило (потому что вы сказали ему добавить правило к существующему набору правил). У вас есть несколько вариантов:

  1. Вы можете просто отредактировать /etc/sysconfig/iptables вручную, вставьте нужные правила и запустите service iptables restart.
  2. Вы можете использовать lokkit инструмент для изменения брандмауэра. Например., lokkit -p 80:tcp. Это автоматически обновится /etc/sysconfig/iptables а также активный межсетевой экран.
  3. Вы можете использовать -I <num> флаг iptables для вставки правила в указанную позицию в списке. В --line-numbers флаг может быть полезен для выяснения того, что <num> должно быть. Вам нужно будет бежать service iptables save после внесения изменений таким образом.

Если вы действительно хотите иметь возможность делать такие вещи, используя только команды добавления, вам нужно сначала выполнить небольшую настройку. Создайте новую цепочку (может быть, allow_services):

iptables -N allow_services

И добавьте правило в свой INPUT chain в соответствующем месте, которое переходит к этой новой цепочке:

iptables -I INPUT 5 -j allow_services

И с этого момента вы можете просто добавлять новые службы в allow_services цепочка:

iptables -A allow_services -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

Предполагая, что вы разместили свое правило прыжка ( -j вариант) перед финалом REJECT это сделает то, о чем вы, кажется, просите.