与 Linode 推荐的 iptables 设置无连接(ubuntu 16.04)

与 Linode 推荐的 iptables 设置无连接(ubuntu 16.04)

我在 Linode 上有一个 Ubuntu 16.04 服务器。

我的目标是在几个端口上运行一些网络服务器,然后使用我的主机 URL 连接到它们<my_id>.members.linode.com

我安装了 Nginx,并且确实让它工作了。我可以访问<my_url>:<my_port>并查看我的网站。

当我尝试按照他们的建议添加 iptable 规则时,出现了问题确保服务器安全。运行以下命令后,我无法再连接该 URL。

我在浏览器中看到此错误

This site can’t be reached
<url> refused to connect.

我可以使用以下脚本重现此错误。运行第一个脚本导致我无法连接。运行第二个脚本后,我便可以再次连接:

设置 Linode 推荐的 iptables 规则

# setup_iptables.sh

rm /tmp/v4
rm /tmp/v6    cp ./tmp_v4_rules /tmp/v4
cp ./tmp_v6_rules /tmp/v6
iptables-restore < /tmp/v4
ip6tables-restore < /tmp/v6

关闭防火墙 按建议这里

# stop_firewall.sh

#!/bin/sh
echo "Stopping firewall and allowing everyone..."
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

在 start_iptables.sh 脚本中,我指的是文件tmp_v4_rulestmp_v6_rules。它们看起来是这样的。这些取自我之前链接的 Linode 安全指南。

tmp_v4_规则被复制到/tmp/v4

*filter

# Allow all loopback (lo0) traffic and reject traffic
# to localhost that does not originate from lo0.
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -s 127.0.0.0/8 -j REJECT

# Allow ping.
-A INPUT -p icmp -m state --state NEW --icmp-type 8 -j ACCEPT

# Allow SSH connections.
-A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT

# Allow HTTP and HTTPS connections from anywhere
# (the normal ports for web servers).
-A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
-A INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT

# Allow inbound traffic from established connections.
# This includes ICMP error returns.
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Log what was incoming but denied (optional but useful).
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables_INPUT_denied: " --log-level 7

# Reject all other inbound.
-A INPUT -j REJECT

# Log any traffic that was sent to you
# for forwarding (optional but useful).
-A FORWARD -m limit --limit 5/min -j LOG --log-prefix "iptables_FORWARD_denied: " --log-level 7

# Reject all traffic forwarding.
-A FORWARD -j REJECT

COMMIT

tmp_v6_规则被复制到/tmp/v6

*filter

# Allow all loopback (lo0) traffic and reject traffic
# to localhost that does not originate from lo0.
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -s ::1/128 -j REJECT

# Allow ICMP
-A INPUT -p icmpv6 -j ACCEPT

# Allow HTTP and HTTPS connections from anywhere
# (the normal ports for web servers).
-A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
-A INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT

# Allow inbound traffic from established connections.
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Log what was incoming but denied (optional but useful).
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "ip6tables_INPUT_denied: " --log-level 7

# Reject all other inbound.
-A INPUT -j REJECT

# Log any traffic that was sent to you
# for forwarding (optional but useful).
-A FORWARD -m limit --limit 5/min -j LOG --log-prefix "ip6tables_FORWARD_denied: " --log-level 7

# Reject all traffic forwarding.
-A FORWARD -j REJECT

COMMIT

我将非常感激有关如何调试此问题的建议。我认为 iptables 建议的存在是有原因的,而我必须关闭防火墙才能连接到我的网站,这不是一件好事。但我不知道 iptables 规则集的哪一部分出了问题。


从 Michael 的评论中,建议查看日志文件。从这里建议查看/var/log/kern.logiptables 拒绝。

我确实看到了很多拒绝。事实上,似乎一切都是拒绝。以下是一个例子:

Sep  1 09:58:31 li1196-141 kernel: iptables_INPUT_denied: 
IN=eth0 OUT= MAC=<OMMITTED> SRC=<OMMITTED> DST=<OMMITTED> LEN=60 
TOS=0x00 PREC=0x00 TTL=52 ID=63084 DF PROTO=TCP SPT=36306 DPT=23 
WINDOW=5808 RES=0x00 SYN URGP=0 

真的不知道这是什么意思。没有使用过 iptables。我有 600 个唯一的拒绝日志。不知道该找什么。


/var/log/kern.log 中的更多日志:

我清除了文件,运行了第一个脚本,尝试连接,然后出现了这 5 个文件。刷新浏览器窗口并没有在日志文件中添加更多行。

Sep  2 02:55:15 li1196-141
kernel: iptables_INPUT_denied:
IN=eth0 OUT=
MAC=<OMMITTED>
SRC=<OMMITTED>
DST=<OMMITTED>
LEN=60 TOS=0x00 PREC=0x00
TTL=53 ID=33801 DF
PROTO=TCP SPT=34834
DPT=6066 WINDOW=14600
RES=0x00 SYN URGP=0 

Sep  2 02:55:15 li1196-141
kernel: iptables_INPUT_denied:
IN=eth0 OUT=
MAC=<OMMITTED>
SRC=<OMMITTED>
DST=<OMMITTED>
LEN=60 TOS=0x00 PREC=0x00
TTL=53 ID=34016 DF
PROTO=TCP SPT=34839
DPT=6066 WINDOW=14600
RES=0x00 SYN URGP=0 

Sep  2 02:55:15 li1196-141
kernel: iptables_INPUT_denied:
IN=eth0 OUT=
MAC=<OMMITTED>
SRC=<OMMITTED>
DST=<OMMITTED>
LEN=60 TOS=0x00 PREC=0x00
TTL=53 ID=31437 DF
PROTO=TCP SPT=34836
DPT=6066 WINDOW=14600
RES=0x00 SYN URGP=0 

Sep  2 02:55:15 li1196-141
kernel: iptables_INPUT_denied:
IN=eth0 OUT=
MAC=<OMMITTED>
SRC=<OMMITTED>
DST=<OMMITTED>
LEN=60 TOS=0x00 PREC=0x00
TTL=53 ID=62629 DF
PROTO=TCP SPT=34835
DPT=6066 WINDOW=14600
RES=0x00 SYN URGP=0 

我很确定这是我的连接尝试的正确日志。我的网络服务器在端口 6066 上运行,在日志中我看到DPT=6066

答案1

正如 Michael 所注意到的,我试图通过一些任意端口(6066、1234、9292)进行连接,但我没有在 iptables 配置中将这些端口列入白名单。

我添加了以下几行:

-A INPUT -p tcp --dport 6066 -m state --state NEW -j ACCEPT
-A INPUT -p tcp --dport 1234 -m state --state NEW -j ACCEPT
-A INPUT -p tcp --dport 9292 -m state --state NEW -j ACCEPT

然后运行我的setup_iptables.sh脚本来加载新规则。

相关内容