一 简述
firewalld:防火墙,其实就是一个隔离工具:工作于主机或者网络的边缘
对于进出本主机或者网络的报文根据事先定义好的网络规则做匹配检测,
对于能够被规则所匹配的报文做出相应处理的组件(这个组件可以是硬件,也可以是软件)
功能:
1 filter:过滤,防火墙 ** 2 nat:network address translation,网络地址转换 ** 3 mangle:拆分报文,做出修改,在封装起来 4 raw:关闭nat表上启用的连接追踪功能
链:
1 PREROUTING #(DNAT) 2 INPUT #主要与想要进入Linux主机的数据包有关 3 FORWARD #(地址转换) 4 OUTPUT # 主要与Linux本机所要送出的数据包有关 5 POSTROUTING #(SNAT)
链管理:
1 -F: flush,清空规则 2 -N: new, 创建新的自定义规则链: 3 -X: 清除自定义链
规则管理:
-A:append,将新规则追加于指定链的尾部 -I:insert,将新规则插入至指定链的指定位置 -D:delete,删除指定链上的指定规则:
-A/-D/-I(链)
iptables -P INPUT DROP 指定链上设置规则
查看防火墙规则:
-L:list, 列出指定链上的所有规则: -n:number,以数字格式显示地址和端口号 -v:verbose,显示详细信息 -vv,-vvv --line-numbers:显示规则编号:
1.什么是iptables
iptable其实是Linux下的数据包过滤软件,也是目前最新Linux发行版中默认的防火墙。要想深入了解iptables机制,了解防火墙的规则是必不可少的。由于iptables利用的数据包过滤的机制,所以它会分析数据包的报头数据。根据报头数据与定义的规则来决定该数据包是进入主机还是丢弃。 也就是说,根据数据包的分析资料”对比”预先定义的规则内容,若数据包数据与规则内容相同则进行动作,否则就继续下一条规则的比对。重点在比对与分析顺序。
2.iptables的策略
防火墙策略一般分为两种,一种叫“通”策略,一种叫“堵”策略,通策略,默认门是关着的,必须要定义谁能进。堵策略则是,大门是洞开的,但是你必须有身份认证,否则不能进。所以我们要定义,让进来的进来,让出去的出去,所以通,是要全通,而堵,则是要选择。当我们定义的策略的时候,要分别定义多条功能,其中:定义数据包中允许或者不允许的策略,filter过滤的功能,而定义地址转换的功能的则是nat选项。为了让这些功能交替工作,我们制定出了“表”这个定义,来定义、区分各种不同的工作功能和处理方式。
刚刚我们所说的规则仅仅是iptables表格中的一个链而已。iptables里面有多个表格(table),每个表格都定义出自己的默认策略与规则,且每个表格的用途都不相同。
二、实验(filter的过滤功能)
通策略
#设置只允许进入ip为253.1,目标ip为253.135,并且协议类型为tcp,端口号为22(80)的包通过input链。
iptables -A INPUT -s 192.168.253.1 -d 192.168.253.135 -p tcp --dport 22(80) -j ACCEPT
#设置只允许发送ip为253.135,接收ip为253网段协议类型为tcp,端口号为22(80)的通过OUTPUT链。
iptables -A OUTPUT -s 192.168.253.135 -d 192.168.253.0/24 -p tcp --sport 22(80) -j ACCEPT
[root@localhost ~]# iptables -L -n Chain INPUT (policy DROP) #在出入口链上设置不允许所有ip进入,即所有包为黑名单 target prot opt source destination ACCEPT tcp -- 192.168.253.1 192.168.253.135 tcp dpt:22 ACCEPT tcp -- 192.168.253.1 192.168.253.135 tcp dpt:80 Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy DROP) target prot opt source destination ACCEPT tcp -- 192.168.253.135 192.168.253.0/24 tcp spt:22 ACCEPT tcp -- 192.168.253.135 192.168.253.0/24 tcp spt:80
然后在cmd命令页面中执行命令:telnet 192.168.253.135 22(80)来检测即可。
值得注意的一点是:通过什么端口,就需要打开什么端口服务。比如80端口的httpd服务。而且在定义过策略的主机下谨慎使用关闭或者开启防火墙,会使规则重置。
堵策略
#设置不允许进入ip为253.1,目标ip为253.135,并且协议类型为tcp,端口号为22(80)的包通过input链
iptbles -A INPUT -s 192.168.253.1 -d 192.168.253.135 -p tcp - -dport 22 -j DROP(REJECT)
[root@localhost ~]# iptables -L -n Chain INPUT (policy ACCEPT) #在出入口链上设置不允许此ip进入,即此包为黑名单 target prot opt source destination DROP tcp -- 192.168.253.1 192.168.253.135 tcp dpt:22
当然也可以在OUTPUT链上面设置。
三 、NAT(网络地址转换)
1.部署环境(三台主机,一台主机为vmware2模拟内网,一台为wmware3模拟web,另一台模拟防火墙wmware2和wmware3双网卡配置)
注意:防火墙的ip地址必须和两台模拟主机的网关一致。
打开ip——forward链,转换地址。
echo 1 > /proc/sys/net/ipv4/ip_forward,或者
vim /etc/sysctl.conf
net.ipv4.ip_forward=1 && sysctl -p
在内网主机20.2上执行:ping 172.16.100.2 如果能够成功ping通则证明转换成功。
下面进行snat测试和dnat测试。
SNAT
步骤1:
在内网主机上: curl 172.16.100.2 同时在web主机上: tail -f /var/log/httpd/access_log #随时查看被访问记录。
现在我们需要做的是,通过设置snat转换源地址将内网ip192.168.20.2转换为公网ip172.16.100.1再去连接外网172.168.100.2,这就需要在nat表设置。
iptables -t nat -A POSTROUTING -s 192.168.20.2 -d 172.16.100.2 -j SNAT --to-source 172.16.100.1
再次执行步骤1,如果被访问记录从20.2改为100.1则证明snat实验成功。
DNAT
步骤1: 在web主机上: curl 172.16.100.1 关闭web的appache服务以及防火墙的appache服务,打开内网主机的appache服务。以及关闭三台主机的防火墙
现在我们在web主机上访问防火墙主机的100.1,如果还能访问到appache服务,则证明dnat实验成功
步骤2: iptables -t nat -A PREROUTING -d 172.16.100.1 -j DNAT --to-destination 192.168.20.2
在做的过程中可能会出现两个报错:
1)fail to connect 172.16.100.2:80 no route to host
此报错是因为没关闭防火墙上的防火墙和web主机上的防火墙的原因。
2)fail to connect 172.16.100.1:80 connection refused
此报错是因为没打开appache服务。
3)ping: sendmsg: 不允许的操作
这是因为iptables设置了限制进入此数据包防火墙规则。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步