Этот скрипт iptables:
#!/bin/sh
service iptables stop
iptables -F
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
service iptables save
service iptables restart
работает должным образом на сервере Centos 6.3 (предоставляется VPSBlocks.com.au), но не на сервере Centos 6.0 (предоставляется VPSNine.com). Под «работает, как ожидалось» я имею в виду, что он, по крайней мере, разрешает входящий доступ к портам 22, 80 и 443. А под «неработающим» я подразумеваю, что он не разрешает доступ.
Тот, который работает, имеет следующий / etc / sysconfig / iptables:
# Generated by iptables-save v1.4.7 on Wed Feb 27 19:10:38 2013
*filter
:INPUT DROP [3:453]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [1:52]
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Wed Feb 27 19:10:38 2013
тогда как тот, который не работает, имеет следующий файл / etc / sysconfig / iptables:
# Generated by iptables-save v1.4.7 on Wed Feb 27 11:28:36 2013
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Wed Feb 27 11:28:36 2013
# Generated by iptables-save v1.4.7 on Wed Feb 27 11:28:36 2013
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Wed Feb 27 11:28:36 2013
# Generated by iptables-save v1.4.7 on Wed Feb 27 11:28:36 2013
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
# Completed on Wed Feb 27 11:28:36 2013
Если я заменю нерабочий / etc / sysconfig / iptables на тот, который работает на другом сервере, это позволит мне сохранить текущее соединение ssh, но когда я попытаюсь вернуться, я заблокируюсь.
Почему одна и та же конфигурация iptables будет работать на одном сервере, а на другом - нет? Может ли разница в младших версиях Centos (6.3 против 6.0) объяснять различное поведение?
Обновить: Сервер Centos 6.3 (тот, на котором работает конфигурация iptables) использует iptables 1.4.7-5.1.el6_2. Другой сервер использует iptables 1.4.7-3.el6.
Обновить: iptables --list
возвращает следующее на ОБЕИХ серверах:
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere multiport dports ssh,http,https state NEW,ESTABLISHED
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Обновить: Когда я вхожу на сервер 6.0, я вижу это предупреждение:
Warning: Unknown iptable module: nf_conntrack_ipv4, skipped
Я не знаю, как это установить. Это модуль ядра? Если так, похоже, я в снукере.
В вашем сценарии вам может потребоваться flush
все таблицы в дополнение к filter
(-F), что по умолчанию соответствует таблице фильтров.
/sbin/iptables -F
/sbin/iptables -t nat -F
/sbin/iptables -t mangle -F
Затем примите подключения к уже установленным сеансам со следующей строкой в /etc/sysconfig/iptables
прямо над правилом принятия для интерфейса обратной связи.
-A INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT
Вам также может потребоваться вручную загрузить nf_conntrack_ipv4
модуль с -
modprobe nf_conntrack_ipv4
Если многопортовый режим вызывает у вас проблемы, вы можете добавить порты по отдельности для тестирования.
iptables multiport - это модуль, проверьте, установлен ли он в целевой системе CentOS.