如果没有 iptables,telnet smtp.gmail.com 465 可以。如果有,就不行。但是,出站端口是否打开……?

如果没有 iptables,telnet smtp.gmail.com 465 可以。如果有,就不行。但是,出站端口是否打开……?

这里有关于 iptables 的问题。

我在 iptables 的 OUTPUT 链中打开了端口 465 和 587。但是,尝试从我的 Fedora Core 10 服务器执行 telnet smtp.gmail.com 465 或 telnet smtp.gmail.com 587 时,却失败了,超时了。

然而,当我尝试在没有运行 iptables 的情况下执行相同的 telnet 序列时,我立即就连接了。

无论如何,如果有人能帮忙,我非常感谢。1.2.3.4 是我访问服务器的静态家庭 IP(当然已经更改)。

链输入(策略接受 1375 个数据包,161K 字节)
 pkts 字节数 目标 协议 选择加入 退出 源 目标         
  210 17483 接受全部 -- 任何任何 1.2.3.4 任何地方状态 NEW、RELATED、ESTABLISHED
    0 0 接受 tcp -- 任何任何地方 serverA.myserver.com tcp dpt:smtps
    0 0 接受 tcp -- 任何 1.2.3.4 serverA.myserver.com tcp dpt:mysql
    0 0 接受 tcp -- 任何 任何 1.2.3.4 serverA.myserver.com tcp dpt:ndmp
    0 0 接受 tcp -- 任何 localhost.localdomain 任何地方 tcp dpt:mysql
    0 0 接受 udp -- 任何 localhost.localdomain 任何地方 udp dpt:mysql
   29 3442 接受全部 -- 任何任何 hostingco.ipsubnet/24 serverA.myserver.com   
   36 2052 接受 tcp -- 任何地点 serverA.myserver.com tcp dpt:http
    0 0 接受 tcp -- 任何地点 serverA.myserver.com tcp dpt:https
    0 0 接受 icmp -- 任何地点 serverA.myserver.com   
  152 7920 拒绝所有 - 任何任何地方 serverA.myserver.com 拒绝 - icmp 端口不可达
    0 0 接受 tcp -- 任何 1.2.3.4 任何地方 tcp dpt:mysql 状态 NEW,ESTABLISHED

链转发(策略接受 0 个数据包,0 字节)
 pkts 字节数 目标 协议 选择加入 退出 源 目标         

链输出(策略接受 4 个数据包,392 字节)
 pkts 字节数 目标 协议 选择加入 退出 源 目标         
   29 2490 接受 udp -- 任何 任何 任何地方 udp dpt:domain
    0 0 接受 tcp -- 任何 任何 任何地方 任何 tcp dpt:域
    2 120 接受 tcp -- 任何 任何 任何地方 任何 tcp dpt:smtp
    0 0 接受 tcp -- 任何 任何 任何地点 任何地点 tcp dpt:pop3
    0 0 接受 tcp -- 任何 任何 任何地点 任何地点 tcp dpt:smtps
    0 0 接受 tcp -- 任何 任何 任何地方 任何 tcp dpt:https
    0 0 接受 tcp -- 任何 任何 任何地点 任何地点 tcp dpt:提交
    0 0 接受 tcp -- 任何 任何 任何地方 任何 tcp dpt:http
    0 0 接受 tcp -- 任何 任何 任何地方 任何 tcp dpt:ftp-data
  320 33300 接受全部 -- 任何任何地点任何位置状态相关,已建立
    0 0 接受 tcp -- 任何 任何 任何地方 任何 tcp dpt:telnet
    0 0 接受 tcp -- 任何 eth0 任何地点 任何地点 tcp spt:smtps dpt:smtps

答案1

您是否可以接受传出的数据包:

iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -p tcp --dport 465 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 587 -j ACCEPT

但是您的输入策略是 DROP,并且您不接受响应您的查询的数据包?请确保您的输入链包含[为了提高性能 - 作为第一条指令]:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

答案2

尝试将日志添加到输出队列规则:

-A OUTPUT -j LOG --log-prefix "BLOCK_OUT: " --log-level info
-A OUTPUT -j REJECT

然后您将能够观察 /var/log/messages(grep for BLOCK_OUT)以查看 iptables 正在删除什么。

如果您使用:

telnet smtp.gmail.com 465

(nslookup/dig smtp.gmail.com 也会失败)

那么我怀疑你最终至少需要一些规则来传递 DNS:

 -A OUTPUT -p tcp --dport 53 -j ACCEPT
 -A OUTPUT -p udp --dport 53 -j ACCEPT

使用“nmap”之类的工具来检查您的规则集是否确实按照您想要的方式运行。

相关内容