← 返回全部文章

技术笔记

Linux下访问控制管理——网络控制

技术/基建
文章目录

以前配置自己的服务器的时候,反正都是搞一些小玩意,也没注意这些。最近公司服务器要上线一个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实现

经过上面对各个部分的简单介绍,大概能了解各部分的区别:

在之前,最让我困惑的就是ufw ,firewalld ,iptables 傻傻分不清,以为关了firewalld,就算关闭防火墙了,太naive,这只是一个管理工具,得直指源头才行。

其实前两者SELinux和Netfilter 并没有应用到,只是在查询资料过程中,不停跳出的新名词,让人头晕眼花,越看越头大,而且两者位于系统内核,其实一般小用户也没有需要改内核的程度。而专注于网络访问控制这一块,也是服务器开发最常用和最常接触的,其实还是iptables,让用户手动配置一些数据包的过滤策略,与其说iptables是防火墙,不如说它是一个防火墙设置工具,而ufw和firewalld又是在其上进一步简化用户设置的上层工具。

firewall_iptables_netfilter

iptables 怎么用

前面我们知道了iptables是一个数据过滤规则的设置工具,这里的规则就是用户预定义设置的一些条件。这些规则存在于内核空间netfilter 的信息包过滤表中,这些规则分别制定了源地址,目的地址,传输协议和服务类型等。

服务器接收到数据请求时,内核通过信息包过滤表中的规则选择性转发数据包:

  1. 转发到用户空间
  2. 接收来自用户空间
  3. 路由,转发到其他服务器

简单的说,就是接收报文,匹配规则,执行动作。

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:扩展模块,定义扩展匹配条件

-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

命令

学习