经常听人说装完Fedora之后的第一件事就是把SELinux和iptables关掉,甚至搜索一下这两个东西,多数博客都是教用户如何关闭它们而不是如何正确的使用它们。

正好这段时间对这两者有了一些肤浅的认识,在这里说一下。

首先我们要摆正态度,要知道现在大行其道的OpenStack的nova-network所用的IP地址内外网映射(NAT)就是用iptables实现的,而且表现非常优异。而SELinux则是NSA(美国国家安全局)斥巨资开发的。它们如果真的像多数人所说的,应该上来就关掉,那么就不会有那多年的发展了。

言归正传,下面来对它们二者做一个简单的介绍。

iptables

先来弄清楚iptables和netfilter的关系。iptables防火墙由Netfilter项目(http://www.netfilter.org)开发,自2001年1月在Linux2.4内核发布以来就是Linux的一部分了。

Netfilter是由Linux提供的所有包过滤和包修改设施的官方项目名称,但这个术语同时也指Linux内核中的一个框架,它可以用于在不同的阶段将函数挂接(hook)进网络栈。另一方面,iptables使用Netfilter框架旨在将对数据包进行操作(如过滤)的函数挂接进网络栈。

所以,你可以认为Netfilter提供了一个框架,而iptables在它之上建立了防火墙功能。

同时iptables还指同名的用户层工具,它解析命令行并将防火墙策略传递给内核。术语表(table)、链(chain)、匹配(match)、目标(target)只有在iptables的上下文中才有意义。

使用iptables进行包过滤

iptables一共有四张表,称为filter, nat, mangle, raw。filter用于过滤,nat用于网络地址转换,mangle用于给数据包做标记以修改分组数据的特定规则,raw表则独立于Netfilter连接跟踪子系统。

因此,如果你的目标是保护主机安全,那么着重考虑的是filter表,而如果像OpenStack那样,目的是做网络地址转换,就用NAT表,而mangle则用于QoS(服务质量控制),如对打上某个标记的分组数据分配较多带宽等等。

每个表都有自己的一组内置链,用于还可以对链进行自定义。

对filter表来说,最重要的是内置链INPUT/OUTPUT/FORWARD。顾名思义,INPUT应用于外部网络进入到本地主机的数据包,OUPTU则应用于从本地主机发送到外部网络的数据包。FORWARD则可以理解为将本地主机作为路由器,数据包从本地主机经过,但目标位于本地主机的下游。

<!-- 先去吃个饭,回来再写,或说现在正发高烧38.5度,还坐在宿舍写博客 -->

对于NAT来说,最重要的就是搞清楚PREROUTING和POSTROUTING链了。这个可以这么简单的理解,数据包从外部流入,在进入主机前给它PREROUTING,也就是“预路由”,即改变分组数据的目标地址或端口号。通常所说的端口转发就是在这里了。

举个简单的例子,在OpenStack的网络管理中,通常一个虚拟机会有一个外网IP和一个内网IP,那么节点的iptables规则里面就会有类似这样的语句

iptables -t nat -A PREROUTING -d 115.12.XX.XX -j DNAT --to-destination 192.168.1.111
iptables -t nat -A POSTROUTING -s 192.168.1.111 -j SNAT --to-source 115.12.XX.XX

这条语句的意思就是目标地址为虚拟机外部地址115.12.XX.XX的数据包会被iptables重定向(修改数据包的目的地址)到192.168.1.111,同时,从192.168.1.111发出的数据包,iptables会将其源地址修改为115.12.XX.XX。从内部这里没有涉及端口,如果有端口,再加上--dport和--sport即可。

详细的流程可以参考http://www.opsers.org/security/iptables-related-concepts-and-processes-the-packet-figure.html

下面就说一下基本的命令吧,要说复杂iptables还真复杂,不过正常使用的话下面这些也差不多够了。

1 -t    指定表名
2 -A   新增规则(ADD)
3 -I    插入规则,需要指定插入的位置
4 -D    删除规则,只需要指定位置,不需要再重新写一遍当前规则
5 -L    列出当前所有规则
6 -V   显示当前iptables版本号

注意一点,如果不指定表名,则默认是filter表。

另外指出发行版的一点不同,在RHEL系(CentOS/Fedora)上,可以使用

service iptables restart
或
systemctl restart iptables.service

来重启iptables服务以加载默认的规则,而在Debian系(Ubuntu一众)则没有iptables这个服务,如果需要清空所有iptables规则,则需要

1 iptables -t filter -F
2 iptables -t filter -X
3 iptables -t nat -F
4 iptables -t nat -X
5 iptables -P INPUT ACCPET
6 iptables -P OUTPUT ACCEPT
7 iptables -P FORWARD ACCEPT

这样等同于所有规则都没有生效,也即关闭了iptables。另外Debian系提供了ufw作为简单的防火墙控制工具。

SELinux

这个恐怕是让更多人头疼的东西。我更是听说红帽有些工程师在解决问题时也是 先关掉这东西。

首先明白一点,SELinux是干什么用的,同样是为了计算机的安全,那么它和iptables的功能有重叠吗?

答案是没有。

它们的定位是不同的。iptables是防火墙,防范来自网络的入侵和实现网络地址转发、QoS等功能,而SELinux则可以理解为是作为Linux文件权限控制(即我们知道的rwx)的补充存在的。

我们知道,Linux的文件权限主要是rwx三类,即读、写、执行。撇开那些特殊的如s/u/t位不提,这三个权限控制真的能保证系统的绝对安全吗?

以Apache Http服务器为例(好像在说SELinux的时候那些前辈总是喜欢拿这个来举例子)。当一台服务器上跑着HTTP服务,我们访问这台服务器时是以apache用户来访问系统上的文件的,在HTTP的DocumentRoot目录下的文件对我们来说是可读的,而同样,单纯看rwx的权限,/etc/passwd这个敏感文件对apache用户也是可读的,因为它的权限位是-rw-r--r--,也就是对o(thers)是可读的,因此可以这样认为,网络攻击者如果可以以apache用户登录系统,它就可以查看/etc/passwd文件,知道系统中有哪些用户等等信息。但如果开启了SELinux就不会出现这种情况。为什么呢?

你可以用ls -Zl来查看SELinux有关的信息(前提是开启了SELinux服务)

可以看到,在默认的HTTPDocumentRoot目录下的文件有

system_u:object_r:httpd_sys_content_t:s0

这样的安全上下文,其中的类型字段httpd_sys_content_t即表明这是http的内容文件,可以被http程序访问。显然其他目录下的文件没有同样的类型字段。这也就是为什么当你手动修改了DocumentRoot目录之后虽然在iptables里已经开放了网络访问,但仍然无法打开网页的原因了——因为apache用户对你新指定的目录下的文件没有读取的权限,因此SELinux是建立在Linux标准的权限控制基础上的增强型Linux。

还需要注意一点,当你复制一个文件到另一个目录时,新复制的文件会继承目标目录的SELinux上下文,而如果是移动文件则会保留源文件的SELinux上下文(context)。

例如需要让新目录可以被apache访问,需要对新目录执行

chcon -R -t httpd_sys_content_t /srv/www

其中-R是recursive即递归执行,-t是指定类型,这个类型可以用

semanage fcontext -l | grep '/var/www'

来获得。

要给一个目录下的所有文件设置安全上下文,可以用

semanage -a -t public_content_t '/srv/ww(/.*)'

注意,这里用的是正则表达式而不是用"*"作为通配符。

写这篇文章的目的不是具体介绍这两个工具具体怎么用,因为那是参考手册的工作,而我想说的是其实它们远没有你想像的那么难,不要听别人说它们有多复杂,只把它们当成普通的命令来学习来用也就好了。我身边的一位很厉害的网络工程师对iptables玩的炉火纯青,却对SELinux一无所知。我是不太理解,如果按照一般的学习的心态来看待两种技术(或者说工具)其复杂度也差不多,只要理解了它们的用途或者说目的,就可以很得心应手的使用它们了。

参考:

[1]. Linux防火墙(Linux Firewalls Attack Detection and Response with iptables, psad, and fwsnot)

[2]. 鸟哥的Linux私房菜(服务篇)http://vbird.dic.ksu.edu.tw/linux_server/0210network-secure_4.php#selinux

转载于:https://www.cnblogs.com/UnixAgain/p/3500743.html

iptables和SELinux漫谈相关推荐

  1. 关闭iptables和SELINUX

    2019独角兽企业重金招聘Python工程师标准>>> 关闭iptables和SELINUX: # chkconfig iptables off # vi /etc/sysconfi ...

  2. centos selinux mysql 5.6_centos 6.4下安装mysql 5.6.11

    今天有空来测试下最新的centos6.4下安装最新数据可mysql5.6.11 系统安装在这里不再叙述 centos6.4采用最小化安装 mysql5.6.11采用源码包安装 初始化系统:关掉ipta ...

  3. 【Linux】时间同步设置+防火墙设置+SELinux设置

    时间同步设置 在大数据集群环境中,要求每台集群的时间必须是同步的,这样我们就会要求每台集群的时间必须和一台服务的时间是同步的.接下来介绍一下步骤: 1,设置ntp客户端 yum -y install ...

  4. linux 关闭防火墙firewall,centos中关闭防火墙(firewall)及SELinux

    centos在不断的版本更新迭代过程中,在centos7中默认使用的是firewall作为防火墙. centos7关闭firewall 查看运行状态:firewall-cmd --state 临时停止 ...

  5. 关闭防火墙和selinux

    关闭防火墙和selinux Redhat使用了SELinux来增强安全,关闭的办法为: 永久有效 修改 /etc/selinux/config 文件中的 SELINUX="" 为 ...

  6. 【Linux集群教程】13 集群安全防御 - SELinux 功能

    3 SELinux 3.1 SELinux 前世今生 系统安全评级:D(安全性最低) < C1 < C2 < B1 < B2 < B3 < A1(安全性最高). L ...

  7. 《构建高可用Linux服务器》互动网首发

    书名:构建高可用Linux服务器 ISBN:9787111359423 作者:余洪春 定价:79.00元 出版时间:2011年10月 出版社:机械工业出版社 订书页面 编辑推荐: 基于实际生产环境,从 ...

  8. linux ftp随机端口,linuxFTP生产环境配置

    1.ftp采用两个端口控制: A 20端口用于数据传输. B 21端口用于控制,或指建立TCP连接. 2.主动方式连接过程: [注意]:C表示客户端 S表示服务器端 A. S端要开启20.21端口: ...

  9. oracle 11g完全安装教程(CentOS)

    oracle下载链接:http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html oracle ...

最新文章

  1. 两个程序员的泰国普吉岛之行
  2. Sequelize 4.43.0 发布,基于 Nodejs 的异步 ORM 框架
  3. 【Android 界面效果9】9patch图片
  4. 【Java】synchronized关键字笔记
  5. 天融信防火墙重置配置_天融信防火墙配置手册
  6. 【C语言】全局变量、本地变量、静态本地变量(书写规范代码,正确定义变量,防止未知错误)
  7. python接口封装_Python 接口测试之接口关键字封装
  8. 怎么屏蔽还有照片_朋友圈该不该屏蔽父母?网友:发个自拍还被嫌丑,我能怎么办.........
  9. 小猿圈学习Linux之shell脚本中cd命令无效的解决方法
  10. C#中,如何随意拖动PictureBox?
  11. java使用Poi导出excel表格
  12. ubuntu20.04 安装Dukto
  13. DNS 协议是什么?
  14. 基于改进正弦余弦算法的函数寻优算法
  15. 显卡1060和1660测试对比
  16. 0x50 动态规划(练习)20:干草堆(题解)
  17. 2020美容师(中级)复审模拟考试及美容师(中级)模拟考试系统
  18. 小尝试:基于指标体系的数据仓库搭建和数据可视化
  19. 华为鸿蒙到底出来了没,你知道华为鸿蒙到底是什么吗?
  20. angular 系列八 ui-router详细介绍及ngRoute工具区别

热门文章

  1. debian stretch + kernel 4.4 固件发布(支持硬件加速),可安装kodi
  2. STM32硬件复位时间
  3. Linux—磁盘和文件系统管理(二)
  4. Unable to compile template. Check the Errors list for details 问题解决办法
  5. AD如何清理过期电脑
  6. .Net 4.0 之 Dynamic 动态类型
  7. 给各位读者朋友们、热心访问本博客的朋友们的一份新年贺卡
  8. 大数据分析方法管不管用
  9. 大数据平台的搭建和数据分析
  10. 了解令人困惑的物联网平台世界