我有一个运行Debian 7的小型VPS实例(用于虚拟主机),几周之后,我的防火墙和连接跟踪问题就出现了。 我几个月没有问题,但没有任何系统修改从我的部分,iptables的连接跟踪工具停止工作(我怀疑从我的提供程序的内核更新,但他们找不到我的问题的任何解决scheme)。
现在,我的iptablesconfiguration中的状态相关规则不再匹配。 我不能再使用ESTABLISHED,RELATED或NEW状态。 创build这些规则时没有错误,但没有数据包似乎与它们匹配。 这是我的iptablesconfiguration文件:
*filter # Allow all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0 -A INPUT -i lo -j ACCEPT -A INPUT -d 127.0.0.0/8 -j REJECT # Log all ESTABLISHED,RELATED -A INPUT -m state --state ESTABLISHED,RELATED -m limit --limit 20/min -j LOG --log-prefix "iptables: EST,REL: " --log-level 1 -A OUTPUT -m state --state ESTABLISHED,RELATED -m limit --limit 20/min -j LOG --log-prefix "iptables: EST,REL: " --log-level 1 # Log all UDP #-A INPUT -p udp -m limit --limit 60/min -j LOG --log-prefix "iptables: UDP IN : " --log-level 1 -A OUTPUT -p udp -m limit --limit 60/min -j LOG --log-prefix "iptables: UDP OUT: " --log-level 1 # Accept all established inbound connections -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Allow all outbound traffic - you can modify this to only allow certain traffic -A OUTPUT -j ACCEPT # Allow HTTP and HTTPS connections from anywhere (the normal ports for websites and SSL). -A INPUT -p tcp --dport 80 -j ACCEPT -A INPUT -p tcp --dport 443 -j ACCEPT # Allow SSH connections -A INPUT -p tcp --dport 22 -j ACCEPT # Allow ping -A INPUT -p icmp -j ACCEPT # Log iptables denied calls -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables: DENIED : " --log-level 4 # Drop all other inbound - default deny unless explicitly allowed policy -A INPUT -j DROP -A FORWARD -j DROP COMMIT
我添加了可以取消build立连接的日志logging规则,但是这些规则无效,所有传入的数据包都被configuration文件的最后一行丢弃。 以下是当我尝试简单的ping时需要DNSparsing的日志文件中发生的情况的示例:
Jun 13 09:19:37 vpsname kernel: [4624558.917291] iptables: UDP OUT: IN= OUT=venet0 SRC=**.**.**.** DST=208.67.222.222 LEN=73 TOS=0x00 PREC=0x00 TTL=64 ID=57693 DF PROTO=UDP SPT=37992 DPT=53 LEN=53 Jun 13 09:19:37 vpsname kernel: [4624558.918373] iptables: DENIED : IN=venet0 OUT= MAC= SRC=208.67.222.222 DST=**.**.**.** LEN=110 TOS=0x00 PREC=0x00 TTL=56 ID=0 DF PROTO=UDP SPT=53 DPT=37992 LEN=90 Jun 13 09:19:42 vpsname kernel: [4624563.927318] iptables: UDP OUT: IN= OUT=venet0 SRC=**.**.**.** DST=208.67.220.220 LEN=73 TOS=0x00 PREC=0x00 TTL=64 ID=62698 DF PROTO=UDP SPT=49607 DPT=53 LEN=53 Jun 13 09:19:42 vpsname kernel: [4624563.928263] iptables: DENIED : IN=venet0 OUT= MAC= SRC=208.67.220.220 DST=**.**.**.** LEN=110 TOS=0x00 PREC=0x00 TTL=56 ID=0 DF PROTO=UDP SPT=53 DPT=49607 LEN=90 Jun 13 09:19:47 vpsname kernel: [4624568.936369] iptables: UDP OUT: IN= OUT=venet0 SRC=**.**.**.** DST=208.67.222.222 LEN=73 TOS=0x00 PREC=0x00 TTL=64 ID=57694 DF PROTO=UDP SPT=37992 DPT=53 LEN=53 Jun 13 09:19:47 vpsname kernel: [4624568.937441] iptables: DENIED : IN=venet0 OUT= MAC= SRC=208.67.222.222 DST=**.**.**.** LEN=110 TOS=0x00 PREC=0x00 TTL=56 ID=0 DF PROTO=UDP SPT=53 DPT=37992 LEN=90 Jun 13 09:19:52 vpsname kernel: [4624573.946415] iptables: UDP OUT: IN= OUT=venet0 SRC=**.**.**.** DST=208.67.220.220 LEN=73 TOS=0x00 PREC=0x00 TTL=64 ID=62699 DF PROTO=UDP SPT=49607 DPT=53 LEN=53 Jun 13 09:19:52 vpsname kernel: [4624573.947343] iptables: DENIED : IN=venet0 OUT= MAC= SRC=208.67.220.220 DST=**.**.**.** LEN=110 TOS=0x00 PREC=0x00 TTL=56 ID=0 DF PROTO=UDP SPT=53 DPT=49607 LEN=90
最后,我安装了conntrack命令,当我执行它时,我发现每个数据包都被标记为无效。
sudo conntrack -S entries 0 searched 0 found 0 new 0 invalid 51181 ignore 0 delete 0 delete_list 0 insert 0 insert_failed 0 drop 0 early_drop 0 icmp_error 17 expect_new 0 expect_create 0 expect_delete 0
我真的不知道该做什么,我的VPS提供商。 你们有没有想法如何解决这个问题? 目前,如果我想在我的VPS上从互联网上下载任何东西,我必须在防火墙中打开端口。 这不是一个安全的解决scheme。
在此先感谢您的帮助。
你有没有物理OpenVZ节点? 如果是,则应使用以下命令启用连接跟踪:vzctl set XXX –netfilter stateful –save
并重启容器:vzctl restart XXXX
其中XXX是您的容器ID。
如果您没有物理服务器的访问权限,则可以将此命令发送给您的pipe理员或托pipe服务提供商,因为如果没有从物理节点端进行configuration,则无法使用有状态的iptables。
我们在一个由我们pipe理的较旧的Proxmox主机上遇到了类似的问题: conntrack突然停止了为一个新的容器工作,而这个容器在我们closures的容器中工作。 主机本身没有重启很长一段时间。
最后根本问题似乎是容器允许模块iptables_nat (我们在/etc/vz/vz.conf启用它)为conntrack工作。 去搞清楚。