iptables是Linux操作系统中常见的防火墙工具,它是一个基于内核的包过滤系统,用于控制网络数据流进出系统的规则。它可以根据预定义的规则集来允许或拒绝特定的网络连接。iptables具有非常高的灵活性和可定制性,可以根据用户需求进行配置。

firewalld是一个动态防火墙管理工具,也是Linux系统中的一种防火墙解决方案。相比于iptables,firewalld提供了更高级的功能和更简化的配置方式。它使用了D-Bus接口,可以实时监控网络连接状态,并根据需要自动调整防火墙规则。firewalld支持更灵活的规则管理,可以基于服务、端口和应用程序等进行配置。

ufw(Uncomplicated Firewall)是Ubuntu操作系统中的一种前端工具,也可以在其他基于Debian的发行版上使用,用于简化iptables的配置过程。它提供了一个简单的命令行界面,使用户能够轻松地添加、删除和管理防火墙规则。ufw对iptables的规则进行了封装,使其更易于使用和理解。ufw适用于那些对防火墙配置要求不高的用户,它提供了一种简化的方式来快速设置基本的防火墙保护。

一、iptables

## 放行指定端口
# 放行tcp 80,443
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --dport 443 -j ACCEPT
# 放行udp 80,443
iptables -I INPUT -p udp --dport 80 -j ACCEPT
iptables -I INPUT -p udp --dport 443 -j ACCEPT
#iptables 不允许指定10000-2000这种形式的端口表达.

## 屏蔽指定端口
# 与放行类似,改个关键字.REJECT或者DROP.
iptables -I INPUT -p tcp --dport 8090 -j REJECT
iptables -I INPUT -p tcp --dport 8090 -j DROP

## 配置默认规则
# 禁止访问
iptables -A INPUT -j REJECT
iptables -A FORWARD -j REJECT
iptables -A OUTPUT -j REJECT
# 允许访问
iptables -A INPUT -j ACCEPT
iptables -A FORWARD -j ACCEPT
iptables -A OUTPUT -j ACCEPT
# 指定filter表
iptables -t filter -A INPUT -j ACCEPT


## 删除规则
# 查看所有规则,带上序号
iptables -L -n --line-numbers
# 删除链INPUT下序号为2的规则
iptables -D INPUT 2
# 清除INPUT链下所有规则
iptables -F INPUT
# 清除所有规则
iptables -F

## 创建/删除自定义链
# 创建
iptables -N ChainName
# 删除指定Chain
iptables -X ChainName
# 删除所有自定义Chain
iptables -X 

## 保存配置
# 保存刚配置的规则
iptables-save
# 重启后会失效,可以使用iptables-restore重载规则
# 这里使用工具实现,安装iptables-persistent
apt -y install iptables-persistent
# 保存规则持续生效
netfilter-persistent save
netfilter-persistent reload

二、firewalld

# 查看状态,开启,关闭,开机自启动,取消开机自启动
CMD:status,start,stop,enable,disable
systemctl <CMD> firewalld


# 查看所有规则
firewall-cmd --list-all
# 查看已经开放的端口
firewall-cmd --list-ports

# 开放80/tcp端口,permanent表示持久规则
firewall-cmd --zone=public --add-port=80/tcp --permanent
# 删除已添加的规则
firewall-cmd --zone=public --remove-port=80/tcp --permanent

# 允许http服务
firewall-cmd --zone=public --add-service=http --permanent
# 允许https服务
firewall-cmd --zone=public --add-service=https --permanent
# 允许ssh服务
firewall-cmd --zone=public --add-service=ssh --permanent


# 防火墙重载
firewall-cmd --reload

三、ufw

# 安装
apt -y install ufw

# 开启/关闭防火墙
ufw enable
ufw disable

# 查看规则
ufw status

# 开启指定tcp/udp端口
ufw allow 445/tcp
ufw allow 445/udp

# 开启指定端口(所有协议)
ufw allow 445

# 删除允许访问得规则
ufw delete allow 53

# 丢弃,不会回复任何消息
ufw deny 20/tcp

# 拒绝,会向请求者返回一条消息,说明请求被阻止
ufw reject 20/tcp

# 重载防火墙
ufw reload

附录一、部分iptables选项

命令选项
    -t:<表> 指定要操纵的表
-A:向规则链中添加条目
-D:从规则链中删除条目
-i:向规则链中插入条目
-R:替换规则链中的条目
-L:显示规则链中已有的条目
-F:清除规则链中已有的条目
-Z:清空规则链中的数据包计算器和字节计数器
-N:创建新的用户自定义规则链
-X:删除用户自定义规则链
-P:定义规则链中的默认目标
-v:显示详细信息,包括每条规则的匹配句数量和匹配字节数
-x:在v的基础上,禁止自动换算单位(K,M)
-n:只显示ip地址和端口号,不显示域名和服务名称
-h:显示帮助信息
匹配条件
-p:指定要匹配的数据包协议类型
-s:指定要匹配的数据包源ip地址
-d:指定要匹配的数据包目标地址
-j:<目标> 指定要跳转的目标
-i:<网络接口> 指定数据包进入本机的网络接口
-o:<网络接口> 指定数据包要离开本机所使用的网络接口。
动作
ACCEPT:允许数据包通过。
DROP:直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。
REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。(一般不使用REJECT(拒绝)行为,REJECT会带来安全隐患。)
SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题。
MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。
DNAT:目标地址转换。
REDIRECT:在本机做端口映射。
LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配。