在虚拟机 CentOS 7 上装了 Nginx,结果发现另一台电脑无法访问其默认页面,通过 telnet 192.168.1.88 80 监听发现是 http 80 端口被 CentOS 7 的防火墙 Firewalld(CentOS 6 的防火墙是 iptables)给阻止通信了。
接下来就讲下如何添加防火墙规则。
先查看防火墙是否开启的状态,以及开放端口的情况:
systemctl status firewalld.service
sudo firewall-cmd --list-all
如下显示,services: dhcpv6-client ssh 表示 ssh 服务是放行的,而 ports: 这里为空,表示无端口号放行。
接下来通过以下命令开放http
80
端口:
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-port=80/tcp --permanent
命令末尾的--permanent
表示用久有效,不加这句的话重启后刚才开放的端口就又失效了。
然后重启防火墙:
sudo firewall-cmd --reload
再次查看端口的开放情况:
sudo firewall-cmd --list-all
就会发现 services: 里出现了 http 服务,ports:里也出现了 80 端口:
最后换另一台电脑重新访问虚拟机的IP地址,成功了~
延伸阅读:
Firewall 的 Zone 还能将不同的网络连接归类到不同的信任级别:
drop: 丢弃所有进入的包,而不给出任何响应
block: 拒绝所有外部发起的连接,允许内部发起的连接
public: 允许指定的进入连接
external: 同上,对伪装的进入连接,一般用于路由转发
dmz: 允许受限制的进入连接
work: 允许受信任的计算机被限制的进入连接,类似 workgroup
home: 同上,类似 homegroup
internal: 同上,范围针对所有互联网用户
trusted: 信任所有连接
过滤规则解释如下:
source: 根据源地址过滤(优先级最高)
interface: 根据网卡过滤(优先级次高)
service: 根据服务名过滤
port: 根据端口过滤
icmp-block: icmp 报文过滤,按照 icmp 类型配置
masquerade: ip 地址伪装
forward-port: 端口转发
rule: 自定义规则
# 查看是否开启 systemctl status firewalld.service # 打开防火墙 systemctl start firewalld.service # 停用防火墙 systemctl disable firewalld # 禁用防火墙 systemctl stop firewalld.service # 开机启动 systemctl enable firewalld # 取消开机启动 systemctl disable firewalld # 查看运行状态 firewall-cmd --state # 查看接口信息 firewall-cmd --list-all # 更新防火墙规则方法1:无需断开连接,动态更改规则 firewall-cmd --reload # 更新防火墙规则方法2:断开连接,以重启的方式更改规则 firewall-cmd --complete-reload # 查看帮助 firewall-cmd --help --zone=NAME # 指定 Zone --permanent # 为永久生效 --timeout=seconds # 持续一段时间,到期后自动移除,经常用于调试,且不能与 --permanent 同时使用 # 追加一个8181端口,永久有效 firewall-cmd --add-port=8181/tcp --permanent # 追加一段端口范围 firewall-cmd --add-port=6000-6600/tcp # 开放 ftp 服务 firewall-cmd --add-service=ftp # 添加eth0 接口至 public 信任等级,永久有效 firewall-cmd --zone=public --add-interface=eth0 --permanent # 配置 public zone 的端口转发 firewall-cmd --zone=public --add-masquerade # 然后转发 tcp 22 端口至 9527 firewall-cmd --zone=public --add-forward-port=port=22:proto=tcp:toport=9527 # 转发 22 端口数据至另一个 ip 的相同端口上 firewall-cmd --zone=public --add-forward-port=port=22:proto=tcp:toaddr=192.168.1.123 # 转发 22 端口数据至另一 ip 的 9527 端口上 firewall-cmd --zone=public --add-forward-port=port=22:proto=tcp:toport=9527:toaddr=192.168.1.100 # IP 封禁 firewall-cmd --permanent --add-rich-rule="rule family=‘ipv4‘ source address=‘192.168.1.123‘ reject" # 通过 ipset 来封禁 ip firewall-cmd --permanent --zone=public --new-ipset=blacklist --type=hash:ip firewall-cmd --permanent --zone=public --ipset=blacklist --add-entry=192.168.1.123 # 封禁网段 firewall-cmd --permanent --zone=public --new-ipset=blacklist --type=hash:net firewall-cmd --permanent --zone=public --ipset=blacklist --add-entry=192.168.1.0/24 # 倒入 ipset 规则 blacklist,然后封禁 blacklist firewall-cmd --permanent --zone=public --new-ipset-from-file=/path/blacklist.xml firewall-cmd --permanent --zone=public --add-rich-rule=‘rule source ipset=blacklist drop‘
原文地址https://chaishiwei.com/blog/1274.html