以前配置自己的服务器的时候,反正都是搞一些小玩意,也没注意这些。最近公司服务器要上线一个node服务,迫于无后端同学,自己去充当了一下node后端,又遇到腾讯云CVM,一个简单的端口问题,搞了我两天,虽然一开始也发现是访问控制的问题,但万万没想到,这里面的访问控制好复杂。。。
SELinux,Netfilter, iptables, firewalld和UFW 是什么?
SELinux:
强制访问控制系统,Linux 2.6及以上内核都集成了
SELinux。主要用于本地文件的访问权限控制。
Netfilter
Linux 2.4 引入的一个通用子系统,与
iptables合称IP信息包过滤系统,Netfilter为内核空间主要用于网络管理,诸如数据包过滤,网络地址转换和基于协议类型的连接跟踪等。
iptables
Linux 防火墙设置,与
Netfilter合称IP信息包过滤系统,iptables为用户空间主要用于控制数据包的控制,可以快速的插入,修改和除去信息包过滤表中的信息
firewalld
centos 7中新增的防火墙管理命令,底层仍然是以iptables和Netfilter实现
UFW
Ubuntu / debian的防火墙配置工具,底层以iptables和netfilter实现
经过上面对各个部分的简单介绍,大概能了解各部分的区别:
SELinux管理本地文件,Netfilter管理网络数据iptables设置防火墙过滤策略,SELinux作为Linux文件权限控制(rwx)的补充ufw和firewalld是iptables的上层管理工具
在之前,最让我困惑的就是ufw ,firewalld ,iptables 傻傻分不清,以为关了firewalld,就算关闭防火墙了,太naive,这只是一个管理工具,得直指源头才行。
其实前两者SELinux和Netfilter 并没有应用到,只是在查询资料过程中,不停跳出的新名词,让人头晕眼花,越看越头大,而且两者位于系统内核,其实一般小用户也没有需要改内核的程度。而专注于网络访问控制这一块,也是服务器开发最常用和最常接触的,其实还是iptables,让用户手动配置一些数据包的过滤策略,与其说iptables是防火墙,不如说它是一个防火墙设置工具,而ufw和firewalld又是在其上进一步简化用户设置的上层工具。

iptables 怎么用
前面我们知道了iptables是一个数据过滤规则的设置工具,这里的规则就是用户预定义设置的一些条件。这些规则存在于内核空间netfilter 的信息包过滤表中,这些规则分别制定了源地址,目的地址,传输协议和服务类型等。
服务器接收到数据请求时,内核通过信息包过滤表中的规则选择性转发数据包:
- 转发到用户空间
- 接收来自用户空间
- 路由,转发到其他服务器
简单的说,就是接收报文,匹配规则,执行动作。
iptables根据执行功能的不同,定义了四种表:filter,负责过滤;nat,进行网络地址转换;mangle ,拆解报文,做出修改,并重新封装;raw,关闭nat的连接追踪。
每一条规则可能存在于多张表,当内核接收到一条请求后,按规则要求依次请求表中的信息并进去匹配,完全匹配后执行相应的动作。
常用的处理动作有:
ACCEPT:运行数据包通关
DROP:直接丢弃数据包
REJECT:拒绝数据包,返回一个响应
SNAT:源地址转换,内网用户共用一个公网地址
MASQUERADE:SNAT的特例,适用于动态IP
DNAT:目标地址转换
REDIRECT:本机端口映射
LOG:记录信息
查
-t 指定要操作的表,可选filter,nat,mangle,raw,默认为filter
-L 查看对应的链,可选INPUT,OUTPUT,FORWARD
-v 查看指定规则的详细信息
-n 不解析IP规则
--line-numbers 显示规则的序号,匹配时按序号进行匹配
以上各条规则可同时使用
//例
iptables --line-numbers -t filter -nvxL INPUT
增
-t:指定要操作的表, 默认为filter
-I:在链的首部追加规则,可选INPUT,OUTPUT,FORWARD
-A:在链的尾部追加规则,在链名称后可追加一个数字,作为插入的序号
删
-t:指定要操作的表
-D:删除指定规则,可根据序号进行删除,也可根据具体的匹配条件进行删除
-F:删除指定链的所有规则
-j:匹配动作
改
-R:修改指定的规则,根据序号进行修改,需要指明原本的匹配条件
-P:修改指定的链,对链中的所有规则作出同样的修改
匹配条件
-s:源地址
-d:目的地址
-p:协议,可选tcp, udp, udplite, icmp, icmpv6, esp, ah, sctp, mh
-i:网卡接口流入
-o:网卡接口流出
-m:扩展模块,定义扩展匹配条件
--dport:目的端口,用分号,可选定一串连续端口,如22:25--sport:源端口--src-range:定义源地址范围--dst-range:定义目的地址范围--string:定义报文内容timestart:定义起始时间timestop:定义结束时间weekdays:定义星期选择mouthdays:定义日期选择--tcp-flags:定义TCP标志位
-j:处理动作
系统命令
配置文件:/etc/sysconfig/iptables
centos 7需要自行安装iptables-services
查看状态
service iptables status
保存
service iptables save
重启,恢复至上一次保存的配置
service iptables restart
重载规则,用于保存配置后,应用到iptables服务
iptables-restore < /etc/sysconfig/iptables
开启转发
配置/etc/sysctl.conf(centos7中为/usr/lib/sysctl.d/00-system.conf)
将net.ipv4.ip_forward设置为1
学习了iptables后,个人感觉能用iptables,尽量不要用firewalld和ufw