有一台 Linux 机器,想把它锁定,但只能用它上网。为什么这个脚本也会阻止 http?
/bin/sh #!/bin/sh 复制代码 # # iptables -F # #设置INPUT、FORWARD和OUTPUT链的默认策略 # iptables -P 输入删除 iptables -P 转发删除 iptables -P 输出删除 # # 允许 TCP 端口 80 上的 TCP 连接 # iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT # # 设置本地主机的访问权限 # iptables -A 输入 -i lo -j 接受 # # 列出规则 # iptables -L -v
答案1
因为规则
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
制定链DROP
上政策OUTPUT
需要两件与此高度相关的事情:
- 连接必须已经建立
- 源端口必须是 80/tcp
低于 1024 的源端口具有特权,通常不用于传出连接,即使套接字所属进程以 root 身份运行也是如此。您更有可能看到较高的源端口号传出,远高于 30000 的情况似乎很常见。
也没有办法建立连接,因为唯一允许的传出流量必须与已经建立的连接相关。
因此,实践上没有什么可以匹敌这条规则。
请尝试:
iptables -A OUTPUT -o eth0 -p tcp --dport 80 -j ACCEPT
应该允许任何出站连接目的地TCP 端口 80,流量通过 eth0 路由,这更符合您的要求。
然后正如已经指出的那样,不要忘记 HTTPS、DNS……
答案2
通过查看这两条规则,您就会发现
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
您所拥有的就是您所说的允许传入到您运行的 Web 服务器。
您所拥有的内容与此网页所述的允许传入内容相同.. http://crm.vpscheap.net/knowledgebase.php?action=displayarticle&id=29
6. Allow Incoming HTTP and HTTPS
The following rules allow all incoming web traffic. i.e HTTP traffic to port 80.
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
但根据您的问题,您想允许传出。您可以再次查阅该网页
这是一个允许传出的示例。
iptables -A OUTPUT -o eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
该网页上的内容很清楚,看起来您查阅的是错误的部分。
因此,你所制定的两条规则都是错误的。
答案3
iptables -I INPUT 1 -i lo -j ACCEPT
iptables -I INPUT 2 -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -I INPUT 3 -j DROP
iptables -I OUTPUT 1 -o lo -j ACCEPT
iptables -I OUTPUT 2 -p tcp -m multiport --dports 80,443 -j ACCEPT
iptables -I OUTPUT 3 -j DROP
iptables -I FORWARD 1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD 2 -j DROP
让我们的规则不要变得比需要的更复杂。
切勿阻塞环回适配器。
- - - 输入
- DNS 和网页浏览等仅根据输出产生流量,因此被视为相关或已建立。
- 删除其他所有内容,因为不需要它们。
- - -输出
- 接受 LO
- 你只想接受网络流量 80,443 这些端口是 DROP 剩余的
- - -向前
如果你有 1 个 nic,那么这里就不会有太多的流量,但如果它不是 RELATED 或 ESTABLISHED,那么同样的事情也适用,我们只是不想要它。
答案4
您还需要允许两个方向的 ICMP,否则通过尝试不同的 IP 地址进行的路径 MTU 发现和错误恢复将会中断。
一般来说,您希望允许所有 ESTABLISHED 和 RELATED 流量。