我在Linode上有一个Ubuntu 16.04服务器。
我的目标是在几个端口上运行一些Web服务器,然后使用我的主机URL <my_id>.members.linode.com连接到它们。
我安装了Nginx并且实际上得到了这个工作。 我可以访问<my_url>:<my_port>并查看我的网站。
当我尝试按照保护服务器的build议添加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
按照这里推荐的方法 closures防火墙
# 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_rules和tmp_v6_rules 。 这是他们的样子。 这些是从我之前链接的Linode安全指南中获取的。
tmp_v4_rules被复制到/ 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_rules被复制到/ 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
我将不胜感激如何debugging这个build议。 我认为iptables的build议是有原因的,它不是一个好东西,我必须closures防火墙连接到我的网站。 然而我不知道什么iptables规则集的一部分是失败的。
从Michael的评论中,build议查看日志文件。 从这里推荐查看/var/log/kern.log来查看iptables拒绝。
我看到一堆否认。 事实上,似乎一切都被否定了。 这里有一个例子:
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
我很确定这是我的连接尝试正确的日志。 我的networking服务器在端口6066上运行,在日志中我看到DPT=6066
正如迈克尔注意到,我试图通过一些任意端口(6066,1234,9292)连接,但我没有在iptablesconfiguration白名单这些端口。
我添加了以下几行:
-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脚本来加载新的规则。