我正在运行 Centos 6.0 服务器,带有 Apache 2/MySQL。我已经运行了 iptables。今晚我按照以下步骤使用 iptables 阻止来自 IP 的所有流量:
iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP
iptables -A OUTPUT -d xxx.xxx.xxx.xxx -j DROP
service iptables save
service iptables restart
但即使在我重新启动 Apache 之后,我仍然会在 Apache 访问日志中不断看到来自该 IP 的点击。iptables 肯定正在运行,而且它肯定是正确的 IP 地址。
以下是我的其余 iptables 条目:
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- anywhere anywhere
2 REJECT all -- anywhere loopback/8 reject-with icmp-port-unreachable
3 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
4 ACCEPT tcp -- anywhere anywhere tcp dpt:http
5 ACCEPT tcp -- anywhere anywhere tcp dpt:https
6 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:30000
7 ACCEPT icmp -- anywhere anywhere icmp echo-request
8 REJECT all -- anywhere anywhere reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- anywhere anywhere reject-with icmp-port-unreachable
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- anywhere anywhere
我错过了什么?
答案1
首先我建议你使用system-config-firewall
或system-config-firewall-tui
。 有一个“自定义规则”部分可以为你执行此操作。
如果你想手动做这种事情,你必须在 tcp dpt:http 的“ACCEPT”之前插入规则。最简单的方法是:
iptables -I INPUT 1 -s xxx.xxx.xxx.xxx -j DROP
(在位置 1 处插入,而不是追加)
答案2
您的第一个 iptables 规则允许您试图阻止的流量。
1 ACCEPT all -- anywhere anywhere
秩序很重要。
答案3
既然您的问题已经解决,让我补充一点:您的 INPUT 链已经将策略设置为“接受”。接受所有流量的规则不仅会弄乱您的防火墙,而且它也是多余的,其工作方式与策略不同(取决于链中接受规则的位置)——这使得它既无用又难以调试。不要在防火墙中两次覆盖同一件事。
答案4
您可以看到该 IP,因为您有接受 RELATED 和 ESTABLISHED 会话的规则:
3 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
您需要使用 tcpkill 来终止被阻止 IP 的连接,这样该 IP 将不再连接:)