使用 iptables 创建/配置防火墙

使用 iptables 创建/配置防火墙

我想使用 iptables 设置防火墙。

服务器运行的是httpd服务(httpd)操作系统是Centos7,下面的信息是在安装iptables-services之后,没有修改任何内容的情况下启动iptables的。

[root@iptables ~]# iptables -nL --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
5    REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

如您所见,在 INPUT 链中,第 3 行,似乎任何服务器都已打开。

但无法通过浏览器访问网页。

我需要设置什么吗?

作为输出iptables-save(取自评论):

# Generated by iptables-save v1.4.21 on Thu Sep 16 13:41:53 2021
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [527:50260]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Thu Sep 16 13:41:53 2021

答案1

正如我所怀疑的,iptables -L隐藏了额外的匹配,但iptables-save揭示了赤裸裸的真相。您的规则 #3 仅匹配lo— 环回接口。此防火墙仅接受来自外部的 tcp/22 (SSH) 连接。

最简单的解决方法是:

iptables -I INPUT 4 -p tcp --dport 80 -j ACCEPT
iptables -I INPUT 5 -p tcp --dport 443 -j ACCEPT

您还可以使用 conntrack 进行过滤,并将两个规则合并为一个多端口规则:

iptables -I INPUT 4 -m conntrack --ctstate NEW -p tcp -m multiport --dports 80,443 -j ACCEPT -m comment --comment "HTTP/HTTPS service"

另请注意我添加的注释。使用注释每个规则,如果您的防火墙规则超过 50 条,那么某天您就会感谢我的建议。

不要使用-m state。这已经过时了。它确实-m conntrack在幕后使用,像这样明确拼写更为透明。

不要使用iptables -L。正如您所见,它的输出看起来“更漂亮”,优点到此结束,但它也无法呈现所有需要的细节。 的输出iptables-save看起来不那么漂亮,但它显示了所有最精细的细节,所以总是使用后者。

相关内容