iptables介绍:
iptables是一个应用层的应用程序主要针对IPv4地址,IPv6使用的是ip6tables,通过Netfilter放出的接口来存放对应的内核空间中的Netfilter的配置表进行修改,这个表由表tables、链chains、规则rules组成,一个链下一般会有若干个规则,从上到下读取规则,一旦匹配成功就结束。Linux系统内存分用户空间和内核空间,内核空间直接调用系统资源运行内核代码,用户空间的程序不能直接调用系统资源,需要配合内核提供的接口使用。
工作流程:
(1)某服务器内包含服务器网卡、系统中的用户空间和内核空间,计算机通过网卡向系统内核空间流入流量进入作路由选择前的prerouting链
(2)内核空间判断出流量目标是否为防火墙本机,是则进行流量入站给到input链,不是则进入forward链转发此流量数据包给路由选择后的postrouting链,再通过网卡流出去给其他服务器
(3)如果进入input链,则此数据包会继续进入用户空间使用服务/程序
(4)若是用户空间内服务/程序需要流出流量数据包,从系统内核空间将包传给内核空间给到output输出链,再给到路由选择后的postrouting链,最后通过网卡流出访问其他服务器。
firewalld介绍:
firewalld 所提供的模式相对于iptables可以叫做动态防火墙,它可以解决iptables重载会重新加载全部防火墙策略和文件这一问题,只需要将变更部分保存并更新即可,同时具备对 IPv4 和 IPv6 防火墙设置的支持。firewalld支持动态更新技术并加入了区域的概念(区域:firewalld预先准备了几套防火墙策略集合,用户可以选择不同的集合,从而实现防火墙策略之间的快速切换)。
1.iptables: 开启防火墙:可以正常使用ssh服务,dns服务, httpd服务,chrony服务, nfs服务。
1)安装iptables-services启动工具。
[root@lizhen ~]# yum install -y iptables-services
2)关闭firewalld,开启iptables。
[root@lizhen ~]# systemctl stop firewalld
[root@lizhen ~]# systemctl start iptables
3)添加规则:ssh服务端口22,dns服务53,httpd服务80,chrony服务123,nfs服务111。并添加一条拒绝所有。
[root@lizhen ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
[root@lizhen ~]# iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT
[root@lizhen ~]# iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
[root@lizhen ~]# iptables -t filter -A INPUT -p udp --dport 123 -j ACCEPT
[root@lizhen ~]# iptables -t filter -A INPUT -p udp --dport 111 -j ACCEPT
[root@lizhen ~]# iptables -t filter -A INPUT -p ip -j REJECT
查看规则表:
[root@lizhen ~]# iptables -vnL --line-numbers
2.firewalld: 开启防火墙:可以正常使用ssh服务,dns服务, httpd服务,chrony服务, nfs服务
且实现:访问第一台机器web服务的9090端口,转发到第二台机器的80端口(永久生效)。
1)关闭iptables,开启firewalld。
[root@lizhen ~]# systemctl stop iptables
[root@lizhen ~]# systemctl start firewalld
2)允许协议访问:ssh,http,dns,chrony,nfs服务。
[root@lizhen ~]# firewall-cmd --add-service=ssh
success
[root@lizhen ~]# firewall-cmd --add-service=http
success
[root@lizhen ~]# firewall-cmd --add-service=dns
success
[root@lizhen ~]# firewall-cmd --add-port=123/udp
success
[root@lizhen ~]# firewall-cmd --add-service=nfs
success
查看firewalld服务:
[root@lizhen ~]# firewall-cmd --list-all
3)第一台虚拟机的web服务的9090端口转发到第二台机器的80端口。
[root@lizhen ~]# firewall-cmd --permanent --add-masquerade #开启IP伪装
[root@lizhen ~]# firewall-cmd --add-forward-port=port=9090:proto=tcp:toport=80:toaddr=192.168.236.130 --permanent
[root@lizhen ~]# firewall-cmd --reload