如何设置 iptables 以打开端口 80 和 443

如何设置 iptables 以打开端口 80 和 443

我尝试了解 iptables 的工作原理,但经过大量时间阅读大量文章后,我还是卡住了。我想要做的是 DROP INPUT & FORWARD 策略并打开一些端口。更具体地说,我想打开 80 和 443 端口以分别使用 http 和 https。另外请记住,我有 Arch Linux 操作系统并且我使用 Wi-Fi。

我在 iptables.rules 中设置了以下规则。

:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [972:60914]
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --doprt 443 -j ACCEPT
COMMIT

当我设置上述规则时,我根本没有传入请求!

我也尝试过下面的方法但是也没有用:

:INPUT ACCEPT [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [972:60914]
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --doprt 443 -j ACCEPT
-A INPUT -j DROP
COMMIT

我也尝试过这个教程https://wiki.archlinux.org/index.php/Iptables。所以我的规则是这样的:

:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [972:60914]
:TCP - [0:0]
:UDP - [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
-A TCP -p tcp -m tcp --dport 80 -j ACCEPT
-A TCP -p tcp -m tcp --dport 443 -j ACCEPT
-A TCP -p tcp -m tcp --dport 22 -j ACCEPT
-A UDP -p udp -m udp --dport 53 -j ACCEPT
COMMIT

上述示例有效,但我不确定它是否正确运行以及如何运行。例如,如果我删除以下几行,我将继续收到传入请求:

-A TCP -p tcp -m tcp --dport 80 -j ACCEPT
-A TCP -p tcp -m tcp --dport 443 -j ACCEPT
-A TCP -p tcp -m tcp --dport 22 -j ACCEPT
-A UDP -p udp -m udp --dport 53 -j ACCEPT

答案1

有几件事似乎很明显:

  • 粗略示例和实际示例之间的主要区别在于state RELATED,ESTABLISHED- 它允许从您的机器传出的连接安全返回,而不是被丢弃
  • 让任何来自环回接口的东西通过lo也有助于疏通,因为它有助于防止本地连接的随机阻塞
  • 允许传入 ICMP 类型 8 - Echo - 数据包允许您的机器被 ping,这通常有助于调试
  • 允许任意新的 SSH (22/tcp) 和 DNS (53/udp) 通过并不是你想要的 - 你应该检查一下这些行

相关内容