iptables:仅允许 HTTP 访问网页浏览

iptables:仅允许 HTTP 访问网页浏览

有一台 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需要两件与此高度相关的事情:

  1. 连接必须已经建立
  2. 源端口必须是 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

让我们的规则不要变得比需要的更复杂。

切勿阻塞环回适配器。

- - - 输入

  1. DNS 和网页浏览等仅根据输出产生流量,因此被视为相关或已建立。
  2. 删除其他所有内容,因为不需要它们。

- - -输出

  1. 接受 LO
  2. 你只想接受网络流量 80,443 这些端口是 DROP 剩余的

- - -向前

如果你有 1 个 nic,那么这里就不会有太多的流量,但如果它不是 RELATED 或 ESTABLISHED,那么同样的事情也适用,我们只是不想要它。

答案4

您还需要允许两个方向的 ICMP,否则通过尝试不同的 IP 地址进行的路径 MTU 发现和错误恢复将会中断。

一般来说,您希望允许所有 ESTABLISHED 和 RELATED 流量。

相关内容