linux防火墙

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则可以理解为将本地主机作为路由器,数据包从本地主机经过,但目标位于本地主机的下游。
对于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即可。
 
 注意一点,如果不指定表名,则默认是filter表。
  • 另外指出发行版的一点不同,在RHEL系(CentOS/Fedora)上,可以使用
service iptables restart
或
systemctl restart iptables.service
来重启iptables服务以加载默认的规则,而在Debian系(Ubuntu一众)则没有iptables这个服务,如果需要清空所有iptables规则,则需要

iptables -t filter -F
iptables -t filter -X
iptables -t nat -F
iptables -t nat -X
iptables -P INPUT ACCPET
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

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访问,需要对新目录执行

linux系统中查看己设置iptables规则

  • 1、iptables -L

查看filter表的iptables规则,包括所有的链。filter表包含INPUT、OUTPUT、FORWARD三个规则链。

说明:-L是–list的简写,作用是列出规则。

  • 2、iptables -L [-t 表名]

只查看某个表的中的规则。

说明:表名一共有三个:filter,nat,mangle,如果没有指定表名,则默认查看filter表的规则列表(就相当于第一条命令)。

举例:iptables -L -t filter

  • 3、iptables -L [-t 表名] [链名]

这里多了个链名,就是规则链的名称。

说明:iptables一共有INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING五个规则链。

举例:iptables -L INPUT

注意:链名必须大写。在Linux系统上,命令的大小写很敏感。

  • 4、iptables -n -L

说明:以数字形式显示规则。如果没有-n,规则中可能会出现anywhere,有了-n,它会变成0.0.0.0/0

  • 5、iptables -nv -L

包含chain INPUT,chain OUTPUT等链
说明:你也可以使用“iptables -L -nv”来查看,这个列表看起来更详细,对技术人员更友好

通过iptables 过滤IP段

  • 封单个IP

iptables -I INPUT -s IP地址 -j DROP

  • 封IP段

iptables -I INPUT -s 192.168.1.0/24 -j DROP

  • 解封:

iptables -D INPUT -s IP地址 -j REJECT

如:
$iptables -t filter -I INPUT -s 10.108.0.0/16 -j ACCEPT
$ iptables -t filter -I OUTPUT -s 10.108.0.0/16 -j ACCEPT

命令的语法格式 匹配即停止
iptabless [-t 表名] 选项 [链名] [条件] [-j 目标操作] ##不打 [-t 表名] 默认为filter
iptables -t filter -I INPUT -s 192.168.4.100 -p tcp --dport 22 -j REJECT ##拒绝192.168.4.100主机用tcp协议访问我的端口22(即不能用ssh访问为)
选项:
-A追加规则
-I插入规则 ##插入第一个行
-L查看规则
-D删除规则:REJECT,DROP,ACCEPT
条件:
源 协议 目标
-s -p --dport
###########################################################
iptables -I INPUT -s 192.168.4.100 -p tcp --dport 80 -j REJECT ##拒绝192.168.4.100主机用tcp协议访问我的端口80(即不能用80端口访问我的web网页)
iptables -I INPUT -s 192.168.4.100 -p icmp -j REJECT ##拒绝192.168.4.100主机用icmp协议访问我(即不能ping我)

注意事项/整体规律
-可以不指定表,默认为filter表
-有规则先匹配规则,没有规则匹配默认规则
-选项/链名/目标操作用大写字母,其余都小写

欢迎使用Markdown编辑器

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

新的改变

我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

  1. 全新的界面设计 ,将会带来全新的写作体验;
  2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
  3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
  4. 全新的 KaTeX数学公式 语法;
  5. 增加了支持甘特图的mermaid语法1 功能;
  6. 增加了 多屏幕编辑 Markdown文章功能;
  7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
  8. 增加了 检查列表 功能。

功能快捷键

撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + Shift + B
斜体:Ctrl/Command + Shift + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G

合理的创建标题,有助于目录的生成

直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

如何改变文本的样式

强调文本 强调文本

加粗文本 加粗文本

标记文本

删除文本

引用文本

H2O is是液体。

210 运算结果是 1024.

插入链接与图片

链接: link.

图片: Alt

带尺寸的图片: Alt

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

如何插入一段漂亮的代码片

博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block
var foo = 'bar';

生成一个适合你的列表

  • 项目
    • 项目
      • 项目
  1. 项目1
  2. 项目2
  3. 项目3
  • 计划任务
  • 完成任务

创建一个表格

一个简单的表格是这么创建的:

项目Value
电脑$1600
手机$12
导管$1

设定内容居中、居左、居右

使用:---------:居中
使用:----------居左
使用----------:居右

第一列第二列第三列
第一列文本居中第二列文本居右第三列文本居左

SmartyPants

SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

TYPEASCIIHTML
Single backticks'Isn't this fun?'‘Isn’t this fun?’
Quotes"Isn't this fun?"“Isn’t this fun?”
Dashes-- is en-dash, --- is em-dash– is en-dash, — is em-dash

创建一个自定义列表

Markdown
Text-to- HTML conversion tool
Authors
John
Luke

如何创建一个注脚

一个具有注脚的文本。2

注释也是必不可少的

Markdown将文本转换为 HTML

KaTeX数学公式

您可以使用渲染LaTeX数学表达式 KaTeX:

Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n1)!nN 是通过欧拉积分

Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=0tz1etdt.

你可以找到更多关于的信息 LaTeX 数学表达式here.

新的甘特图功能,丰富你的文章

Mon 06 Mon 13 Mon 20 已完成 进行中 计划一 计划二 现有任务 Adding GANTT diagram functionality to mermaid
  • 关于 甘特图 语法,参考 这儿,

UML 图表

可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::

张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五

这将产生一个流程图。:

链接
长方形
圆角长方形
菱形
  • 关于 Mermaid 语法,参考 这儿,

FLowchart流程图

我们依旧会支持flowchart的流程图:

Created with Raphaël 2.2.0 开始 我的操作 确认? 结束 yes no
  • 关于 Flowchart流程图 语法,参考 这儿.

导出与导入

导出

如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

导入

如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。


  1. mermaid语法说明 ↩︎

  2. 注脚的解释 ↩︎

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值