Linux 防火墙操作总结篇:iptables,firewalld,ufw
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.2011
、CentOS release 6.10 (Final)
、CentOS Linux release 7.9.2009 (Core)
、Ubuntu 22.04.2 LTS/jammy
、Ubuntu 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