动态防火墙后台程序firewalld提供了一个动态管理的防火墙,用以支持网络“zones”,以分配对一个网络及其相关链接和界面一定程度的信任。它具备对IPv4和IPv6防火墙设置的支持。他支持以太网桥,并有分离运行时间和永久性配置选择。他还具备一个通向服务或者应用程序以直接增加防火墙规则的接口。
系统提供了图像化的配置工具firewall-config、system-config-firewall,提供命令行客户端firewall-cmd,用于配置firewalld永久性或非永久性运行时间的改变:它依次用iptables工具与执行数据包筛选的内核中的Netfilter通信。
理论基础:当主机收到一个数据包后,数据包先在内核空间中处理,若发现目的地址是自身,则传到用户空间中交给对应的应用程序处理,若发现目的不是自身,则会将包丢弃或进行转发。
iptables实现防火墙功能的原理是:在数据包经过内核的过程中有五处关键地方,分别是PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING,称为钩子函数,iptables这款用户空间的软件可以在这5处地方写规则,对经过的数据包进行处理,规则一般的定义为“如果数据包头符合这样的条件,就这样处理数据包”。
4表5链:filter表(实现包过滤)、nat表(实现网络地址转换)、mangle表(实现包修改)、raw表(实现数据跟踪),这些表具有一定的优先级:raw–>mangle–>nat–>filter;5链包括:INPUT(数据包达到服务器)、OUTPUT(数据包离开服务器)、FORWORD(数据包在服务器内进行传播)、PREROUTING(服务器作为中转站)、POSTROUTING(也就是问完路离开的那一瞬间)。
iptables service 在/etc/sysconfig/iptables 中存储配置,而firewalld将配置储存在 /usr/lib/firewalld/ 和 /etc/firewalld/ 中的各种XML文件里。
使用 iptables service 每一个单独更改意味着清除所有旧有的规则和从 /etc/sysconfig/iptables 里读取所有新的规则,然而使用firewalld却不会再创建任何新的规则;仅仅运行规则中的不同之处。因此,firewalld可以在运行 时间内,改变设置而不丢失现行连接。
iptables通过控制端口来控制服务,而firewalld则是通过控制协议来控制端口
# 查看火墙状态
firewall-cmd --state
# 查看活跃区域,默认区域,所有区域:
firewalld-cmd --get-active-zones
firewalld-cmd --get-default-zone
firewalld-cmd --get-zones
# 更改默认区域
firewalld-cmd --set-default-zone=trusted
# 列出服务
firewalld-cmd --get-services
# 将来源IP172.25.254.250设置为trust
firewalld-cmd --add-source=172.25.254.250 --zone=trusted
# 删除
firewalld-cmd --remove-source=172.25.254.250 --zone=trusted
# 将eth0添加到trusted中,注意:得先将eth0从public中删除
firewalld-cmd --remove-interface=eth0 --zone=public
firewalld-cmd --add-interface=eth0 --zone=public
# 在trusted中加入http服务
firewalld-cmd --add-service=http --zone=trusted
# 将来源ip为172.25.254.79的所有包拒绝
firewalld-cmd --add-source=172.25.254.250 --zone=block
firewalld-cmd --reload
firewalld-cmd --complete-reload # 如已有ssh连接,会中断连接
# 在防火墙服务器上将伪装打开
firewalld-cmd --permanent --zone=public --add-masquerade
# 当79端口登陆主机时,将79伪装
firewalld-cmd --zone=public --add-rich-rule `rule family=ipv4 source address=172.25.254.79 masqueade`
# 当访问本机22端口时,将其转到236这个主机上
firewalld-cmd --add-forward-port=port=22:tcp:toport=22:toaddr=172.25.254.236
iptables的规则书写:
iptables [-t 表] [操作命令] [链][规则匹配器][-j 目标动作]
iptables
[-t filter]
[-AI INPUT,OUTPUT,FORWARD]
[-io interface]
[-p tcp,udp.icmp,all]
[-s ip/nerwork]
[–sport ports]
[-d ip/network]
[–dport ports]
[-j ACCEPT DROP REJECT REDIRECT MASQUERADE LOG
DNAT SNAT MIRROR QUEUE RETURN MARK]
-A 在指定链尾部添加规则
-D 删除匹配的规则
-R 替换匹配的规则
-I 在指定位置插入规则
例:iptables -I INPUT 1 –dport 80 -j ACCEPT
-L/S 列出指定链或所有链的规则
-F 删除指定链或所有链的规则
-N 创建用户自定义链
例:iptables -N allowed
-X 删除指定的用户自定义链
-P 为指定链设置默认规则策略,对自定义链不起作用
例:iptables -P OUTPUT DROP
-Z 将指定链或所有链的计数器清零
-E 更改自定义链的名称
例:iptables -E allowed disallowed
-n ip地址和端口号以数字方式显示
例:iptables -Ln
-p tcp|udp|icmp|all 匹配协议,all会匹配所有协议
-s addr[/mask] 匹配源地址
-d addr[/mask] 匹配目标地址
–sport port1[:port2] 匹配源端口(可指定连续的端口)
–dport port1[:port2] 匹配目的端口(可指定连续的端口)
-o interface 匹配出口网卡,只适用FORWARD、POSTROUTING、OUTPUT。
例:iptables -A FORWARD -o eth0
-i interface 匹配入口网卡,只使用PREROUTING、INPUT、FORWARD。
–icmp-type 匹配icmp类型(使用iptables -p icmp -h可查看可用的ICMP类型)
–tcp-flags mask comp 匹配TCP标记,mask表示检查范围,comp表示匹配mask中的哪些标记。
例:iptables -A FORWARD -p tcp –tcp-flags ALL SYN,ACK -j ACCEPT
ACCEPT 允许数据包通过
DROP 丢弃数据包
REJECT 丢弃数据包,并且将拒绝信息发送给发送方
SNAT 源地址转换(在nat表上)
例:iptables -t nat -A POSTROUTING -d 192.168.0.102 -j SNAT –to 192.168.0.1
DNAT 目标地址转换(在nat表上)
例:iptables -t nat -A PREROUTING -d 202.202.202.2 -j DNAT –to-destination 192.168.0.102
REDIRECT 目标端口转换(在nat表上)
例:iptables -t nat -D PREROUTING -p tcp –dport 8080 -i eth2.2 -j REDIRECT –to 80
MARK 将数据包打上标记
例:iptables -t mangle -A PREROUTING -s 192.168.1.3 -j MARK –set-mark 60