linux 系统防火墙包含以下几种:

  • centos5、centos6、redhat6系统自带的是 iptables 防火墙。
  • centos7、centos8、redhat7自带 firewall 防火墙。
  • ubuntu系统使用的是 ufw 防火墙。

关于 iptables 防火墙之前有总结过 :[linux (centos 6.10)下防火墙 报错 iptables : no config file. [WARING]][1],以及 iptables 添加、删除指令、重启指令

然后会产生一种感觉:好像不管是 centos 还是 ubuntu 都会有 iptables 指令。测试了一下 CentOS Linux release 8.3.2011CentOS release 6.10 (Final)CentOS Linux release 7.9.2009 (Core)Ubuntu 22.04.2 LTS/jammyUbuntu 20.04.2 LTS/focal,都包含了 iptables 指令。

有一篇 关于ufw、firewalld及iptables之间的关系整理,阐述了 iptables 是一个最底层、最古老的防火墙系统,新版本系统一般会使用 firewall 或者 ufw。并且各个防火墙服务都是相互独立的,所以安装了多个防火墙服务的时候,防火墙之间也是相互影响的。

意识到原初的 iptables 在创建规则的时候,条件是复杂难懂的。所以除非对 iptables 的指令非常了解,一般都会使用其他两种更便捷的防火墙服务。以下是对三种防火墙服务启动、关闭、添加规则等操作,参考:Linux防火墙配置白名单操作(包括Ubuntu、ContOS、Redhat)

对于 RedHat7 / CentOS7 及以上

# 查看防火墙状态
systemctl status firewalld 
# 关闭防火墙
systemctl stop firewalld
# 启动防火墙
systemctl start firewalld
# 关闭防火墙自启动
systemctl disable firewalld
# 开启防火墙自启动
systemctl enable firewalld
#查看已开放的端口
firewall-cmd --list-all
# 允许指定IP访问本机8080端口
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.1" port protocol="tcp" port="8080" accept'
# 允许指定IP段访问本机8080-8090端口
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="8080-8090" accept'
# 禁止指定IP访问本机8080端口
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.1" port protocol="tcp" port="8080" reject'
#移除第一条规则(所有的移除规则基本都是add改成remove)
firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="192.168.1.1" port protocol="tcp" port="8080" accept'
# 查询端口是否开放
firewall-cmd --query-port=8080/tcp
# 新建永久规则,开放8080端口(TCP协议),任何ip都可以访问
firewall-cmd --permanent --add-port=8080/tcp
# 移除上述规则
firewall-cmd --permanent --remove-port=8080/tcp
# 新建永久规则,批量开放一段端口(TCP协议)
firewall-cmd --permanent --add-port=9001-9100/tcp
 #添加或者移除规则后重新加载firewall后配置才会生效
firewall-cmd --reload

RedHat6 / CentOS6

# 查看防火墙状态
service iptables status
# 关闭防火墙
service iptables stop
# 开启防火墙
service iptables start
#开机防火墙自启动
chkconfig iptables on 
#关闭开机防火墙自启动
chkconfig iptables off

######添加防火墙白名单示例######
# 编辑/etc/sysconfig/iptables 文件,具体内容如下(灰色背景为添加的配置部分),修改完文件后需要重启防火墙生效
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
# 定义白名单,需要在头部定义,在下方调用白名单名称
-N whitelist
# 白名单具体列表,可配置多个
-A whitelist -s 192.168.2.130 -j ACCEPT
-A whitelist -s 192.168.2.131 -j ACCEPT

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
# 白名单调用,在-j后加上方定义的白名单名称
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j whitelist
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

Ubuntu18 及以上

查看防火墙状态

sudo ufw status

禁用防火墙并关闭自启动

sudo ufw disable

启用防火墙并开启自启动

sudo ufw enable

允许XX.XX.XX.XX访问所有端口

sudo ufw allow from XX.XX.XX.XX

允许特定子网范围的计算机对8080端口的访问

sudo ufw allow from xx.xx.xx.xx/16 to any port 8080

拒绝xx.xx.xx.xx访问80端口

sudo ufw deny from xx.xx.xx.xx to any port 80

开启服务器上xxxx至yyyy的TCP端口

sudo ufw allow xxxx:yyyy/tcp