Я использую 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
правило (потому что вы сказали ему добавить правило к существующему набору правил). У вас есть несколько вариантов:
/etc/sysconfig/iptables
вручную, вставьте нужные правила и запустите service iptables restart
.lokkit
инструмент для изменения брандмауэра. Например., lokkit -p 80:tcp
. Это автоматически обновится /etc/sysconfig/iptables
а также активный межсетевой экран.-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
это сделает то, о чем вы, кажется, просите.