这里有关于 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”之类的工具来检查您的规则集是否确实按照您想要的方式运行。