1.firewalld简述
firewalld:防火墙,其实就是一个隔离工具:工作于主机或者网络的边缘
对于进出本主机或者网络的报文根据事先定义好的网络规则做匹配检测,
对于能够被规则所匹配的报文做出相应处理的组件(这个组件可以是硬件,也可以是软件):
主机防火墙
网络防火墙
2.功能(也叫表)4表
filter:过滤,防火墙
nat:network address translation,网络地址转换
mangle:拆分报文,做出修改,在封装起来
raw:关闭nat表上启用的连接追踪功能
2.链(内置): 5链
input: 当收到访问防火墙本机的数据包时(入站),应用此链中的规则。
output: 当防火墙向外发送数据包时(出站),应用此链中的规则。
forward: 收到需要通过防火墙发送给其他地址的数据包时,应用此链中的规则
prerouting:在进行路由选择前处理数据包(判断目标主机)应用此链
postrouting:在进行路由选择后处理数据包(判断经由哪一接口送往下一跳)应用此链
SNAT:源地址转换,发送请求
DNAT:目标地址转换,返回请求
3.数据报文的流向
主机防火墙:流入:PREROUTING --> INPUT 流出:OUTPUT --> POSTROUTING
网络防火墙:转发:PREROUTING --> FORWARD --> POSTROUTING
4.各功能可以在哪些链上实现
filter: INPUT,FORWARD,OUTPUT
nat:PREROUTING(DNAT),OUTPUT,INPUT,POSTROUTING(SNAT)
mangle: PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
raw:PREROUTING,OUTPUT
5.路由发生的时刻(PREROUTING,POSTROUTING)
报文进入本机后:
判断目标主机
报文发出之前:
判断经由哪个借口送往下一跳
6.添加规则时的考量点
(1)要实现什么功能:判断添加在哪张表上;
(2)报文流经的路径:判断添加在哪个链上;
7.firewalld优先级
策略应用优先级:raw, mangle, nat, filter 从左到右依次减小
策略常用优先级:filter,nat,mangle,raw
8.链管理
-F: flush,清空规则链:省略链,表示清空指定表上的所有的链
-N: new, 创建新的自定义规则链:
-X: drop, 删除用户自定义的空的规则链
-P: Policy, 为指定链这是默认策略,对filter表中的链而言,默认策略通常有ACCEPT,DROP,REJECT;
9.规则管理
-A:append,将新规则追加于指定链的尾部
-I:insert,将新规则插入至指定链的指定位置
-D:delete,删除指定链上的指定规则:
10.匹配条件
-s, source:检查报文中源ip地址是否符合此处指定的地址范围
-d, destination:检查报文中ip地址是否符合此处指定的地址范围
-p, protocol(udp|tcp|icmp):检查报文中的协议
-i, input-interface:数据报文的流入接口:仅能用于PREROUTING,INPUT,FORWARD链上
-o, out-interface:数据报文的流出接口:仅能用于POSTROUTING,OUTPUT,FORWARD链上
-j target:jump至指定的target
ACCEPT:接受
DROP:丢弃
REJECT:拒绝
RETURN:返回调用链
REDIRECT:端口重定向
LOG:记录日志
MARK:做防火墙标记
DNAT:目标地址转换
SNAT:源地址转换
MASQUERADE:地址伪装
....
自定义链:由自定义链中的的规则进行匹配
11.filter配置
列出所有的:iptables -L
清空所有策略: iptables -F
清空自定义链: iptables -X
以数字形式表现: iptables -L -n
链不指定表的话默认为filter表
指定表:iptables -t filter
删除filter表中forward链中的第9条策略: iptables -t filter -D FORWARD 9
实例1:在黑名单中设置白名单
把filter中INPUT链的默认策略打成drop (不允许访问):iptables -P INPUT DROP
此时的状态为所以ip都不能访问
在filter中INPUT链添加白名单:iptables -t filter -A INPUT -s 192.168.88.1 -d 192.168.88.13 -j ACCEPT
-s:设置源地址
-d:设置目标地址
-j:设置策略
在CMD中用telnet测试是否连通
此状态为不通
在filter中OUTPUT链添加白名单:iptables -t filter -I OUTPUT -s 192.168.88.13 -d 192.168.88.1 -j ACCEPT
再用telnet测试,结果如下
此状态为连通状态。
此时,设置白名单成功。
实例2:在白名单中设置黑名单,设置黑名单只要让INPUT或OUTPUT链有一个不通即可
[root@localhost ~]# iptables -P INPUT ACCEPT
[root@localhost ~]# iptables -P OUTPUT ACCEPT
[root@localhost ~]# iptables -L -n
此时状态为所有的IP都能访问
[root@localhost html]# iptables -A INPUT -s 192.168.88.1 -d 192.168.88.12 -p tcp --dport 99 -j REJECT
此时,本机不可以通过99端口浏览器访问该虚拟机
dport:目标端口
实例3:实现在默认策略为DROP下,httpd端口的访问
[root@localhost html]# iptables -t filter -A INPUT -d 192.168.88.0/24 -p tcp --dport 99 -j ACCEPT
不指定源地址-s 则默认为所有网段,
[root@localhost html]# iptables -t filter -A OUTPUT -s 192.168.88.0/24 -p tcp --sport 99 -j ACCEPT
此时,可以实现外网可以通过99端口访问Linux
sport:源端口
12.nat配置
SNAT:源地址转换,发送请求
DNAT:目标地址转换,返回请求
第一步:配置环境
环境拓扑图
1.配置client网卡
网卡
2.配置防火墙网卡
连接client的网卡
连接web的网卡
3.配置web端的网卡
配置VMnet4网卡,连接的网卡必须名字相同
4.打开内核下转发功能模块,才能通信
[root@localhost network-scripts]# cat /proc/sys/net/ipv4/ip_forward
0 # 0表示转发模块未开启
[root@localhost network-scripts]# echo 1 > /proc/sys/net/ipv4/ip_forward
1 # 1表示转发模块开启
[root@localhost network-scripts]# vim /etc/sysctl.conf #永久开启转发模块
[root@localhost network-scripts]# sysctl -p #让编辑文件生效
5.测试
在client端:
[root@localhost ~]# ping 172.168.100.2
client和web端连接成功
注意:在配置这些服务端的时候,不能有其他网卡。
第二步:配置nat
1.启动防火墙,清空策略和自定义链
[root@localhost ~]# systemctl restart firewalld
[root@localhost ~]# iptables -F
[root@localhost ~]# iptables -t nat -F
[root@localhost ~]# iptables -t nat -X
[root@localhost ~]# iptables -X
2.将web端的httpd启动,listen端口为80
在WEB启动监控日志:tail -f /var/log/httpd/access_log
在client端检测是否能够登陆web端:curl 172.168.100.2
查看web端监控日志可以看到此时访问的ip地址为192.168.88.5
2.配置SNAT
[root@localhost ~]# iptables -L -n
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.88.5 -d 172.168.100.2 -p tcp --dport 80 -j SNAT --to-source 172.168.100.1
在client端:curl 172.168.100.2
在web端查看监控的日志,
可以发现访问web的IP由192.168.88.5变成了172.168.100.1,此时就完成了源地址的转换,即SNAT
3.配置DNAT
1.将client的httpd启动,listen端口为80
将防火墙上的httpd关闭
2.配置DNAT
[root@localhost ~]# iptables -t nat -A PREROUTING -d 172.168.100.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.88.5
3.测试
因为只有web和client端启动了httpd,防火墙端没有启动httpd,此时在web端curl 172.168.100.1 ,如果返回的为client端,就说明DNAT转换成功。