04-Linux 系统防火墙

85 阅读3分钟

04-Linux 系统防火墙

系统防火墙

CentOS 防火墙:firewalld

服务管理
# 查看已启用的服务:
firewall-cmd --list-services --zone=public

# 查看所有可用的服务:
firewall-cmd --get-services --zone=public

# 添加指定服务,其中http是服务名,未指定区域则默认为public区域。
firewall-cmd --permanent --zone=public --add-service=http

# 移除指定服务:
firewall-cmd --permanent --zone=public --remove-service=http

# 重新加载防火墙配置使规则生效
firewall-cmd --reload
端口管理
# 查看已开放的端口:
firewall-cmd --list-ports --zone=public

# 添加指定开放端口和端口范围
firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --permanent --zone=public --add-port=9000-9008/tcp

# 移除
firewall-cmd --permanent --zone=public --remove-port=80/tcp
firewall-cmd --permanent --zone=public --remove-port=9000-9008/tcp

# 重新加载防火墙配置使规则生效
firewall-cmd --reload
富规则(rich rules)
# 允许 192.168.1.100 这个 IP 地址访问服务器的 8080 端口
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="8080" accept'

# 拒绝 192.168.2.0/24 这个网段访问服务器的所有端口
firewall-cmd --permanent --zone=external --add-rich-rule='rule family="ipv4" source address="192.168.2.0/24" reject'

# 允许 10.0.0.1 这个 IP 访问服务器的 SSH 服务
firewall-cmd --permanent --zone=internal --add-rich-rule='rule family="ipv4" source address="10.0.0.1" service name="ssh" accept'

# 允许特定源 IP 对服务器进行 ping 操作
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="172.16.0.1" icmp type="echo-request" accept'

# 重新加载防火墙配置使规则生效
firewall-cmd --reload
区域(zone)

有一台 web 服务器,它有三张网卡,分别是eth1:10.1.1.0/24,eth2:192.168.2.0/24,eth3:172.16.8.0/24。在firewall中创建三个区域,分别对应三张网卡,实现访问控制。防火墙默认拒绝所有外部传入的连接,允许所有内部向外部的连接。

# 停止和启用 firewall
systemctl stop firewalld
systemctl start firewalld
systemctl status firewalld

# 新建区域
firewall-cmd --permanent --new-zone=internal
firewall-cmd --permanent --new-zone=server
firewall-cmd --permanent --new-zone=external

# 将网卡绑定到对应的区域
firewall-cmd --permanent --zone=internal --add-interface=eth1
firewall-cmd --permanent --zone=server --add-interface=eth2
firewall-cmd --permanent --zone=external --add-interface=eth3

# public 区域的规则默认对所有网卡都生效
# 例如 external 没有关于 http 的规则,public 有,则会匹配 public 中的规则
# 可将 public 绑定给其中一张网卡来解决
firewall-cmd --permanent --zone=public --add-interface=eth2

允许内网区域(其他内网服务器)访问web服务器的SSH服务
firewall-cmd --permanent --zone=internal --add-service=ssh

允许服务器网络区域(同网段服务器)访问web服务器的HTTP服务
firewall-cmd --permanent --zone=server --add-service=http

允许外部网络区域访问web服务器的HTTPS服务,此操作会同时对外开放443端口
firewall-cmd --permanent --zone=external --add-service=https

# 重新加载防火墙配置使规则生效
firewall-cmd --reload

Ubuntu 防火墙: ufw

服务管理
ufw enable
ufw disable
ufw status
规则管理
ufw allow ssh
ufw deny ssh
ufw allow from 192.168.1.100
ufw allow from 192.168.1.0/24 to any port 22
ufw deny from 192.168.1.100

ufw status numbered # 获取编号
ufw delete 5 # 根据编号删除规则

综合使用

假设有一台服务器有三个网卡,eth0,eth1 和 eth2,使用ufw实现以下效果:

  • 允许 eth0 (10.1.1.0/24)访问服务器的ssh服务,同时允许 eth0 访问 8000-9000 端口
  • 允许 eth1(192.168.1.0/24) 的服务器无障碍访问
  • 允许 eth2(172.16.1.0/24) 通过访问服务器的 https 服务
sudo ufw allow from 10.1.1.0/24 to any port 22 proto tcp
sudo ufw allow from 10.1.1.0/24 to any port 8000:9000 proto tcp
sudo ufw allow from 192.168.1.0/24
sudo ufw allow from 172.16.1.0/24 to any port 443 proto tcp