一、iptables 简介
前言
在早期的 Linux 系统中,默认使用的是 iptables 配置防火墙。尽管新型 的 firewalld 防火墙已经被投入使用多年,但是大量的企业在生产环境中依然出于各种原因而继续使用 iptables。考虑到 iptables 在当前生产环境中还具有顽强的生命力,我觉得还是有必要再好好地讲解一下这项技术。
1、什么是iptables?
iptables 是 Linux 防火墙工作在用户空间的管理工具,是 netfilter/iptablesIP 信息包过滤系统是一部分,用来设置、维护和检查 Linux 内核的 IP 数据包过滤规则。
2、iptables特点
iptables 是基于内核的防火墙,功能非常强大;iptables 内置了filter,nat和mangle三张表。所有规则配置后,立即生效,不需要重启服务。
二、iptables 组成
iptables的结构是由表(tables)组成,而tables是由链组成,链又是由具体的规则组成。因此我们在编写iptables规则时,要先指定表,再指定链。tables的作用是区分不同功能的规则,并且存储这些规则。
表的图如下,后面再详细介绍
注意:raw表用于处理异常情况,一般使用不到,常用的是另外三张表。 所以,总体说来,iptables是由“三表五链”组成。 |
1、三张表介绍
这个比较重要,要记住
表名 |
作用 |
包括的链 |
filter |
负责过滤数据包 |
input,output,forward |
nat |
用于网络地址转换(IP、端口) |
prerouting,postrouting ,output |
mangle |
用于修改数据包、流量整形、给数据包打标识 |
input,output,forward,prerouting,postrouting |
优先级:mangle > nat > filter
2、五条链介绍
这个先大体了解,以后结合实际应用再理解
链名 |
功能 |
input |
匹配目标IP是本机的数据包 |
output |
出口数据包,一般不在此链上做配置 |
forward |
匹配流经本机的数据包 |
prerouting |
修改目的地址,用来做 DNAT 。如:把内网中的 80 端口映射到互联网端口 |
postrouting |
修改源地址,用来做 SNAT。如:局域网共享一个公网IP接入Internet。 |
三、iptables 处理数据包流程:
这个供参考,在实际应用中有细节不明白,到这里来查阅。
从这个图可以看出,在网卡和应用程序(Application)中间隔着一个iptables(紫色的那一片),它就相当于一个卫士,帮你筛选信息。比如你现在正在聊QQ(就是应用程序Applicatin),那么最下面网卡来的信息,先由iptables把关,一般来的信息有几种,要拦截的危险信息,要接收的有用信息,要转发的信息,这个先由链prerouting(路由前)来处理,该拦截的拦截,该接收的送到链input(输入)就到QQ里面去了,该转发的就forward(这个相当于只当二传手不会到QQ去),再看QQ处理后的信息,到链output(输出),最后的出口是链postrouting(路由后)。
最后我们来说一下网卡进出的信息,左边进的信息先到链prerouting(路由前),而右边出去的信息从postrouting(路由后)出
一个路由前,一个路由后是啥意思呢?这是因为我们的linux处理网络信息有多套机制,不光是一个iptables,还有内部路由器,还有SELINUX等等,它们共同起作用,prerouting就是在路由动作前先做一些事情,postrouting就是在路由操作完之后再做些事情。这里可以看出iptables的控制权高于内部路由机制。
总结:整体数据包分两类:1、发给防火墙本身的数据包 ;2、需要经过防火墙的数据包
四、iptables 安装
1、关闭 firewall
systemctl stop firewalld #关闭firewalld服务
systemctl disable firewalld #禁止firewalld开机自启动
systemctl mask --now firewalld #屏蔽firewalld服务,以防止其他服务启动它
2、安装 iptables
#先查看是否安装,可以看它的状态
systemctl status iptables
#安装:
yum -y install iptables iptables-services
#升级
yum update iptables
3、启动服务
systemctl start iptables #启动iptables
systemctl enable iptables #设置iptables开机自启动
4、配置文件
/etc/sysconfig/iptables
可以用命令 cat 查看文件
另外,要关闭掉 SELINUX ,否则的话,iptables 不读取配置文件,防火墙不生效。
安装好iptables后,可以用命令查看到已经有的表,命令如下:
iptables -L
另外,在开启 iptables 之后,你原来能用的一些服务,比如 FTP、DNS可能无法用了 ,这个时候,你可能要清空一下iptables 表中的规则,使用下面的命令
iptables -F
下面是一些经常会用到的命令
#查看iptables现有规则 iptables -L -n #先允许所有,不然有可能会杯具 iptables -P INPUT ACCEPT #清空所有默认规则 iptables -F #清空所有自定义规则 iptables -X #所有计数器归0 iptables -Z |