Linux的防火墙主要工作在网络层,针对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙。
防火墙可以单独/批量禁止/允许某个/多个端口的数据通过,也可以将某个端口的数据转发到另外一个端口/ip。
(1)支持网络区域所定义的网络连接及接口安全等级的动态防火墙管理工具
(2)支持IPv4,IPv6防火墙设置
(3)支持服务或应用程序直接添加防火墙规则接口
(4)拥有两种配置模式:运行时配置和永久配置。
为了简化管理,firewalld防火墙将所有的网络流量分为多个区域,每个区域都具有不同程度的规则,默认情况下,public公共区域是默认区域,包含所有接口网卡。
firewalld预定义的网络区域:trusted、public、work、home、internal、external、dmz、block、drop
firewall-cmd是firewalld防火墙自带的字符管理工具,可以用来设置防火墙的各种规则。
特点:
(1)支持全部防火墙特性;
(2)–permanent参数:携带该参数表示永久配置,否则表示运行时配置;
(3)[–zone=]选项:不携带此选项表示针对默认区域操作,否则针对指定区域。
(1)显示所有区域及其规则
#firewall-cmd --list-all-zones
(2)显示internal区域的所有规则
#firewall-cmd --zone=internal --list-all
(3)显示默认区域的所有规则
#firewall-cmd --list-all
(4)显示网络连接或接口的默认区域
#firewall-cmd --get-default-zone
(5)设置网络连接或接口的默认区域为internal
#firewall-cmd --set-default-zone=internal
#firewall-cmd --get-default-zone
(6)显示已激活的所有区域
激活条件:区域至少关联一个接口或一个源地址/网段
#firewall-cmd --get-active-zones
(7)显示ens33网卡接口绑定的区域
#firewall-cmd --get-zone-of-interface=ens33
(8)为work区域更改绑定的网络接口ens33
#firewall-cmd --zone=work --change-interface=ens33 '#更改接口'
#firewall-cmd --get-zone-of-interface=ens33 '#显示接口绑定区域'
(9)为work区域删除绑定的接口ens33
#firewall-cmd --zone=work --remove-interface=ens33 '#删除接口'
#firewall-cmd --get-zone-of-interface=ens33 '#显示接口绑定区域'
(10)查询区域中是否包含ens33接口
#firewall-cmd --zone=work --query-interface=ens33
(1)启用internal区域22端口的TCP协议组合
#firewall-cmd --zone=internal --add-port=22/tcp --timeout=5m
–timeout=5m
:表示5分钟后删除该端口。
(2)显示internal区域内允许访问的端口号
#firewall-cmd --zone=internal --list-ports
(3)禁用internal区域22端口的TCP协议组合
#firewall-cmd --zone=internal --remove-port=22/tcp
(4)查询internal区域中是否启用了22端口TCP
#firewall-cmd --zone=internal --query-port=22/tcp
(1)为work区域设置阻塞echo-request类型的ICMP
#firewall-cmd --zone=work --add-icmp-block=echo-request
(2)显示work区域内阻塞的所有ICMP类型
#firewall-cmd --zone=work --list-icmp-blocks
(3)删除work区域已阻塞的echo-request类型的ICMP
#firewall-cmd --zone=work --remove-icmp-block=echo-request
(4)查询work区域的echo-request类型的ICMP是否阻塞
#firewall-cmd --zone=work --query-icmp-block=echo-request
表: 表是链的容器,一个表包含多个链,不同的表功能不同;
链: 链是规则容器,链有多条规则;
规则: 真正执行的命令;
规则链:
规则的作用:对数据包进行过滤或处理
链的作用:容纳各种防火墙规则
链的分类依据:处理数据包的不同时机
规则表:
表的作用:容纳各种规则链
表的划分依据:防火墙规则的作用相似
(1)规则表之间的顺序
raw -> mangle -> nat -> filter
(2)规则链之间的顺序
入站:PREROUTING -> INPUT
出站:OUTPUT -> POSTROUTING
转发:PREROUTING -> FORWARD -> POSTROUTING
(3)规则链内的匹配顺序
按顺序依次检查,匹配即停止(LOG策略例外)
若找不到相匹配的规则,则按该链的默认策略处理
先表的优先级再链的优先级
进来的数据包:nat判断是给本机的还是转发,本机的就是iput拿去,转发的就forward
出去的数据包:从out,然后交给postrouting发出去
语法:iptables [-t 表名] 选项 [链名] [-j 控制类型]
不指定表名时,默认指filter表;
不指定链名时,默认指表内的所有链;
除非设置链的默认策略,否则必须指定匹配条件;
选项、链名、控制类型使用大写字母,其余均为小写
数据包常见控制类型:
-L:列出所有的规则条目
-n:以数字形式显示地址、端口等信息
-v:以更详细的方式显示规则信息
–line-numbers:查看规则时,显示规则的序号
查看所选链的所有规则:
#iptables -L INPUT -nv --line-number
-A:在链的末尾追加一条规则
-I:在链的开头(或指定序号)插入一条规则
#iptables -t filter -A INPUT -p tcp -j ACCEPT
#iptables -I INPUT -p udp -j ACCEPT
#iptables -I INPUT 2 -p icmp -j ACCEPT
-D:删除链内指定序号(或内容)的一条规则
-F:清空所有规则
#iptables -D INPUT 3
#iptables -F
#iptables -t nat -F
注:不指定清空的表和链,就会情况默认表的所有链,其中filter是默认表
从所选链中删除规则:
iptables -D INPUT --dport 80 -j DROP
iptables -D INPUT 1
清空所选链:
#iptables -F INPUT
-P:为指定的链设置默认规则
#iptables -t filter -P FORWARD DROP
#iptables -P OUTPUT ACCETP
协议匹配:-p 协议名
地址匹配:-s 源地址;-d 目的地址
接口匹配:-i 入站网卡;-o 出站网卡
!:条件取反
端口匹配:–sport 源端口;–dport 目的端口
TCP标记匹配:–tcp-flags 检查范围被设置的标记
ICMP类型匹配:–icmp-type ICMP类型
多端口匹配:-m multiport --sports 源端口列表;-m multiport --dport 目的端口列表
IP范围匹配:-m iprange --src-range IP范围
MAC地址匹配:-m mac --mac-source MAC地址
状态匹配:-m state --state 连接状态
#iptables -I INPUT -p icmp -j ACCEPT
#iptables -A FORWARD ! -p icmp -j ACCEPT
#iptables -A FORWARD -s 192.168.11.11 -j REJECT
#iptables -A INPUT -i eth0 -s 192.168.0.0/12 -j DROP
#iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.13-192.168.1.52 -j ACCEPT
注:
资料参考:https://blog.csdn.net/m0_51553670/article/details/130948978