您的位置:首页 > 运维架构 > Linux

Linux网络相关、firewalld、netfilter及其5表5链、iptables语法

2018-07-11 14:49 691 查看
1、Linux 网络相关



ifconfig 查看网卡IP,见下图,





net-tools 包之前安装过了,这边还可以执行这个命令 yum install net-tools ,是因为做了更新。ip add 命令见下图,



两个命令相比较,ifconfig 的结果显得比较清爽,方便查看。ifconfig类似于windows的ipconfig,不加任何选项和参数只打印当前网卡的IP相关信息(子网掩码、网关等)在之前的章节中介绍过它。

ifconfig 有个 -a 选项,见下图,



当网卡没有IP的时候,这个命令是不显示的,加上 -a 就可以查看到。

关于关闭网卡和启动网卡的命令,具体操作见下图,



在PuTTY上操作,属于远程连接,使用的是 ens33 这个网卡,使用命令 ifdown 操作是没有意义的,会直接把这个终端断掉,没有办法继续打命令。所以要回到原始的虚拟机上面up回来,在虚拟机上先用 ifconfig 命令查看,见下图,



可以看到,ens33上面没有IP地址了。现在重新打开,输入命令 ifup ens33 ,回车,见下图,



可以看到 IP 地址又出现了,然后PuTTY上显示下图,



以上就是关闭网卡ifdown和启动网卡ifup的操作,那么这两个命令什么时候用呢?有时候会单独对一个网卡做更改,比如改了配置文件,需要重启服务,这个时候不想所有的网卡都重启一遍,只想重启指定的网卡,这个时候就可以使用 ifdown 和 ifup 命令来操作。但是远程连接的话,最好不要使用 ifdown 这个命令,会直接连不上服务器,导致远程操作不了。所以,我们应该这样操作,输入命令 ifdown ens33 && ifup ens33 ,回车,见下图,



两个命令一起执行就没有问题了。

还可以给网卡设定虚拟的IP,具体操作见下图,



进入目录 network-scripts ,拷贝文件 ifcfg-ens33 ,这边 \:0 反斜杠 \ 是为脱义后面的 : 。然后进入文件,



更改的内容,具体见下图红色框框,



保存后退出,重启网卡服务,见下图,



接着查看 ifconfig ,见下图,



可以看到,多了一个网卡 ens33:0 ,IP地址为 192.168.218.150 。接着试一下这个网卡能不能 ping ,用Windows来ping ,见下图,



可以看到,结果是可以的。如何启动Windows的这个界面,直接在桌面左下方的搜索栏里面搜索 ping ,然后选择红色框框内容,点击进去即可。



系统查看网卡是否连接,具体操作见下图,



mii-tool ens33 命令和 ethtool ens33 命令都可以查看网卡是否连接,显示的结果分别是 ok 和 yes ,都是可以连接的意思。而不能连接的话,显示的是 no 。

更改主机名,使用命令 hostnamectl set-hostname lyslinux-001 ,见下图,



更改主机名之后,需要重启,前缀名称才会更新,图中使用命令 bash ,进入子shell也可以实现前缀主机名更新。

接着查看配置文件,见下图,



这些是在网卡配置文件里面定义的,输入命令 vi /etc/sysconfig/network-scripts/ifcfg-ens33 ,回车,即可查看,



都是在这里面定义的,我们也可以自己定义一个DNS2,上图红色框框内容是增加上去的。保存后退出,往下操作,



重启网卡之后,可以看到DNS的配置文件多了上图红色框框的内容。当然也可以临时编辑文件 /etc/resolv.conf ,输入命令 vim /etc/resolv.conf ,回车,见下图,



这里面的内容是可以更改的,但是更改的内容仅当次生效,重启系统之后就会被配置文件的内容覆盖掉。所以想要永久生效的话,还是需要更改配置文件。

下面说一下文件 /etc/hosts ,见下图,



接着改一下文件的解析,回车,见下图,



增加上图红色框框的内容,保存后退出。继续 ping www.qq123.com,见下图,



可以发现IP地址变了,更改文件的解析就可以实现,但是这个操作仅仅在本机生效。在Windows上操作肯定是不行的,见下图,



网站可以运行,但是IP地址不一样。

文件 /etc/hosts 的解析,支持一个IP多个域名,输入命令 vim /etc/hosts ,回车,见下图,



增加上图红色框框的内容,保存后退出,ping www.333.com,见下图,



可以看到,输入的两个解析内容,生效的是后面的解析。说明重复的内容中,以后面的内容为准生效。一行里面可以支持一个IP对应多个域名,仅支持一行的内容,换行就不能生效了,并且左边是IP,右边是域名。

总结:

ifconfig 查看网卡IP

yum install net-tools 安装或更新 ifconfig 命令

ip add 查看网卡IP,结果相比于 ifconfig 命令杂乱

ifconfig -a 当网卡没有IP的时候,这个命令是不显示的,加上 -a 就可以查看到

ifdown 关闭网卡

ifup 启动网卡

ifdown ens33 && ifup ens33 关闭和启动网卡ens33同时进行,用于远程连接服务器时

mii-tool ens33 命令和 ethtool ens33 命令都可以查看网卡是否连接,显示的结果分别是 ok 和 yes

hostnamectl set-hostname lyslinux-1 更改主机名为 lyslinux-1

vi /etc/sysconfig/network-scripts/ifcfg-ens33 可以更改配置文件为自定义内容

/etc/hostname 主机名配置文件

/etc/resolv.conf DNS配置文件

vi /etc/hosts 更改文件 /etc/hosts 的解析,可以实现IP地址的更改,但是更改仅仅在本机生效,一行里面同时也支持一个IP多个域名,仅支持一行的内容,换行就不能生效了,并且左边是IP,右边是域名。在重复的内容中,以后面的内容为准生效。

2、selinux

什么是防火墙

防火墙是指设置在不同网络或网络安全域之间的一系列部件的组合, 它能增强机构内部网络的安全性.

防火墙通过访问控制机制, 从而决定:

* 哪些内部请求允许访问外部服务(即出去的包),

* 哪些外部请求允许访问内部服务(即进入的包).

它可以根据网络传输的类型决定IP包是否可以传进或传出内部网.

通过使用防火墙可以实现以下功能:

* 可以保护易受攻击的服务;

* 控制内外网之间网络系统的访问;

* 集中管理内网的安全性, 降低管理成本;

* 提高网络的保密性和私有性;

* 记录网络的使用状态, 为安全规划和网络维护提供依据.



selinux 是 Redhat/CentOS 系统特有的安全机制。不过因为这个东西限制太多,配置也特别繁琐所以几乎没有人去真正应用它。所以装完系统,我们一般都要把selinux关闭,以免引起不必要的麻烦。关闭 selinux 的方法为,使 “SELINUX=disabled”, 默认为 enforcing。

输入命令 vi /etc/selinux/config ,回车,见下图,



将上图红色框框的内容改为 disable 之后,保存退出。保存该配置文件后,重启机器方可生效。我们可以使用 getenforce 命令获得当前 selinux 的状态,见下图,



3、 netfilter 防火墙

Netfilter是Linux 2.4.x引入的一个子系统,它作为一个通用的、抽象的框架,提供一整套的hook函数的管理机制,使得诸如数据包过滤、网络地址转换(NAT)和基于协议类型的连接跟踪成为了可能。

netfilter的架构就是在整个网络流程的若干位置放置了一些检测点(HOOK),而在每个检测点上登记了一些处理函数进行处理。

centos6和centos7都有iptables,这里的iptables是一个工具(或者叫命令),在centos6上的防火墙叫做netfilter,centos7上防火墙叫做firewalld,而它们底层都是基于iptables的。三者的具体关系见下图,



怎么关闭 firewalld 防火墙,见下图,



systemctl disable firewalld 命令表示先停止防火墙服务,然后 systemctl stop firewalld 命令表示关闭防火墙服务。

接着开启 netfilter 防火墙,开启之前,需要先安装一个包,输入命令 yum install -y iptables-services ,回车,见下图,





安装完成之后,就可以开启 iptables 服务,即开启 netfilter 防火墙服务,见下图,



使用命令 iptables -nvL ,可以查看 iptabl
3ff0
es 的默认规则,见下图,



4、netfilter 的5表5链





先 man iptables 查看,回车,见下图,



往下翻,见下图,



以上就是 netfilter 防火墙的5个表,filter,nat,mangle,raw,security(Centos7之前没有这个表) 。

filter 表用于过滤包,最常用的表,有INPUT、FORWARD、OUTPUT三个链

nat 表用于网络地址转换,有PREROUTING、OUTPUT、POSTROUTING三个链

managle 表用于给数据包做标记,然后根据标记去操作那些包,几乎用不到

raw 表可以实现不追踪某些数据包,几乎用不到

security 表在centos6中并没有,用于强制访问控制(MAC)的网络规则,几乎用不到

五个链:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

PREROUTING:作用是在包刚刚到达防火墙时改变它的目的地址,如果需要的话

INPUT:作用于进入本机的包

FORWARD:作用于那些跟本机无关的包

OUTPUT:作用于本机送出的包,改变本地产生的包的目的地址

POSTROUTING:在包就要离开防火墙之前改变其源地址

iptables简介

netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。

iptables基础

规则(rules)其实就是网络管理员预定义的条件,规则一般的定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息 包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规 则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的 主要工作就是添加、修改和删除这些规则。

iptables和netfilter的关系:

这是第一个要说的地方,Iptables和netfilter的关系是一个很容易让人搞不清的问题。很多的知道iptables却不知道 netfilter。其实iptables只是Linux防火墙的管理工具而已,位于/sbin/iptables。真正实现防火墙功能的是 netfilter,它是Linux内核中实现包过滤的内部结构。

iptables传输数据包的过程

① 当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。

② 如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。

③ 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。



下面说法是4表5链的内容,现在是5表5链,多出来的表也几乎用不到。

iptables的规则表和链:

表(tables)提供特定的功能,iptables内置了4个表,即filter表、nat表、mangle表和raw表,分别用于实现包过滤,网络地址转换、包重构(修改)和数据跟踪处理。

链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一 条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据 该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定 义的默认策略来处理数据包。

Iptables采用“表”和“链”的分层结构。具体见下图,



规则表:

1.filter表——三个链:INPUT、FORWARD、OUTPUT

作用:过滤数据包 内核模块:iptables_filter.

2.Nat表——三个链:PREROUTING、POSTROUTING、OUTPUT

作用:用于网络地址转换(IP、端口) 内核模块:iptable_nat

3.Mangle表——五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD

作用:修改数据包的服务类型、TTL、并且可以配置路由实现QOS内核模块:iptable_mangle(别看这个表这么麻烦,咱们设置策略时几乎都不会用到它)

4.Raw表——两个链:OUTPUT、PREROUTING

作用:决定数据包是否被状态跟踪机制处理 内核模块:iptable_raw

规则链:

1.INPUT——进来的数据包应用此规则链中的策略

2.OUTPUT——外出的数据包应用此规则链中的策略

3.FORWARD——转发数据包时应用此规则链中的策略

4.PREROUTING——对数据包作路由选择前应用此链中的规则

(记住!所有的数据包进来的时侯都先由这个链处理)

5.POSTROUTING——对数据包作路由选择后应用此链中的规则

(所有的数据包出来的时侯都先由这个链处理)

规则表之间的优先顺序:

Raw——mangle——nat——filter

规则链之间的优先顺序(分三种情况):

第一种情况:入站数据流向

从外界到达防火墙的数据包,先被PREROUTING规则链处理(是否修改数据包地址等),之后会进行路由选择(判断该数据包应该发往何处),如果数据包 的目标主机是防火墙本机(比如说Internet用户访问防火墙主机中的web服务器的数据包),那么内核将其传给INPUT链进行处理(决定是否允许通 过等),通过以后再交给系统上层的应用程序(比如Apache服务器)进行响应。

第二冲情况:转发数据流向

来自外界的数据包到达防火墙后,首先被PREROUTING规则链处理,之后会进行路由选择,如果数据包的目标地址是其它外部地址(比如局域网用户通过网 关访问QQ站点的数据包),则内核将其传递给FORWARD链进行处理(是否转发或拦截),然后再交给POSTROUTING规则链(是否修改数据包的地 址等)进行处理。

第三种情况:出站数据流向

防火墙本机向外部地址发送的数据包(比如在防火墙主机中测试公网DNS服务器时),首先被OUTPUT规则链处理,之后进行路由选择,然后传递给POSTROUTING规则链(是否修改数据包的地址等)进行处理。

以上内容,详见 /detail/2636728342.html

扩展(selinux了解即可)

1. selinux教程 http://os.51cto.com/art/201209/355490.htm

2.selinux pdf电子书 http://pan.baidu.com/s/1jGGdExK

总结:

getenforce 查看当前 selinux 的状态,Enforcing 表示开启,Permissive 表示关闭。

setenforce 0 临时关闭 selinux

vi /etc/selinux/config 进入配置selinux文件,更改SELINUX=disabled,可以永久关闭selinux

systemctl disable firewalld 表示先停止防火墙服务

systemctl stop firewalld 表示关闭防火墙服务

5个表: filter,nat,mangle,raw,security

5个链: PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

本机: PREROUTING →INPUT →OUTPUT →POSTROUTING

非本机:PREROUTING→FORWARD→POSTROUTING

5、iptables 语法



查看规则,输入命令 iptables -nvL ,回车,见下图,



现在重启下,再查看,见下图,



可以看到,规则没有改变。那么规则在哪里保存的呢?见下图,



清空规则,使用命令 iptables -F ,见下图,



清空规则之后,使用命令 iptables -nvL,就看不到默认规则了,但是配置文件 /etc/sysconfig/iptables 里面的内容没有改变。也就是说,想要把当前的规则保存到配置文件里,还需要执行一个命令 service iptables save ,这样清空的规则才会生效。如果不保存的话,可以重启 iptables ,就会加载回来,见下图,



也就是说,重启服务器或是重启 iptables 规则,都会去加载配置文件上的规则。

这些默认的规则都在 filter 这个表上,-t 是指定表,不使用 -t 的话,默认就是 filter 这个表。nat 表里面都是没有规则的,见下图,



service iptables save 保存规则。当我们把规则写完之后,仅仅在当前内存中生效。想要重启后还依然生效,就要做这个保存规则的操作。

-Z (大写)可以把计数器清零,具体操作见下图,



注意上图左边的红色框框的内容,一开始是有数据的,执行了 -Z 的命令之后,就清零了。然后一会会之后又有数据了,因为每时每刻都在通信。

现在给filter表增加一条规则,输入命令 iptables -A INPUT -s 192.168.188.1 -p tcp --sport 1234 -d 192.168.188.128 --dport 80 -j DROP ,回车,见下图,



这条命令省略了 -t ,默认为 filter 表;-A 表示增加一条规则,另外还有-I (大写的i)表示插入一条规则,-D删除一条规则;INPUT 表示针对的链,还可以是OUTPUT或者FORWORD;-s 表示后面跟着指定的来源IP,-p 表示协议(tcp, udp, icmp),--sport/--dport 后跟来源端口/目标端口;-d 后跟目的IP(主要针对内网或者外网);-j 后跟动作(DROP即把包丢掉,REJECT即包拒绝;ACCEPT即允许包)。上图中,最下面的红色框框内容就是刚刚增加上去的规则。

总结一下各个选项的作用:

-A/-D :增加删除一条规则;

-I :插入一条规则,其实跟-A的效果一样;

-p :指定协议,可以是tcp,udp或者icmp;

--dport :跟-p一起使用,指定目标端口;

--sport :跟-p一起使用,指定源端口;

-s :指定源IP(可以是一个ip段);

-d :指定目的IP(可以是一个ip段);

-j :后跟动作,其中ACCEPT表示允许包,DROP表示丢掉包,REJECT表示拒绝包;

-i :指定网卡(不常用,但有时候能用到);

还有一种用法 -I(大写的i),输入命令 iptables -I INPUT -p tcp --dport 80 -j DROP ,回车,见下图,



可以看到使用 -I 选项,规则就插入到第一行了。

既然可以增加和插入,肯定也可以删除,使用选项 -D ,输入命令 iptables -D INPUT -p tcp --dport 80 -j DROP ,回车,见下图,



可以看到,第一条插入的规则没有了。同样的,输入命令 iptables -D INPUT -s 192.168.188.1 -p tcp --sport 1234 -d 192.168.188.128 --dport 80 -j DROP ,回车,见下图,



可以看到,增加的最后一条命令也没有了。

这边做一个假设,假如忘记掉之前增加或是插入的规则了,要怎么删除这些规则呢?先把两条规则加上去,见下图,



接着往下操作,输入命令 iptables -nvL --line-number ,回车,见下图,



先给每一行前面增加显示行号,然后再针对行号做操作,输入命令 iptables -D INPUT 7 ,回车,见下图,



可以看到增加和插入的规则,已经成功删除了。再看一下行号,见下图,

可以看到,行号果然还是少了2行的。

还有一个选项 -P(大写), 表示预设策略,这是默认的规则,在PuTTY上远程登录的话,输入命令 iptables -P OUTPUT DROP ,回车,会发现整个断掉了,什么也执行不了,只能重启。-P后面跟链名,策略内容或者为DROP或者为ACCEPT,默认是ACCEPT。

所以要注意:如果你在连接远程服务器,千万不要随便敲这个命令,因为一旦你敲完回车你就会断掉。

这个策略一旦设定后,只能回到原始的虚拟机上,使用命令 iptables -P OUTPUT ACCEPT ,回车,才能恢复成原始状态。

上面这一步 -P 的选项不要随意操作,这边不演示了。

总结:

iptables -nvL 查看 iptables 规则

service iptables restart &n
3ff0
bsp; 重启 iptables 规则

cat /etc/sysconfig/iptables 查看 iptables 配置文件

iptables -F 清空规则

-t 是指定表,不使用 -t 的话,默认就是 filter 这个表

service iptables save 保存规则

-Z (大写) 可以把计数器清零

iptables -A INPUT -s 192.168.188.1 -p tcp --sport 1234 -d 192.168.188.128 --dport 80 -j DROP 给filter表增加一条规则

iptables -I INPUT -p tcp --dport 80 -j DROP 在第一行插入一条规则

iptables -D INPUT -s 192.168.188.1 -p tcp --sport 1234 -d 192.168.188.128 --dport 80 -j DROP 删除增加的规则

iptables -D INPUT -p tcp --dport 80 -j DROP 删除插入的规则

-A/-D :增加删除一条规则;

-I :插入一条规则,其实跟-A的效果一样;

-p :指定协议,可以是tcp,udp或者icmp;

--dport :跟-p一起使用,指定目标端口;

--sport :跟-p一起使用,指定源端口;

-s :指定源IP(可以是一个ip段);

-d :指定目的IP(可以是一个ip段);

-j :后跟动作,其中ACCEPT表示允许包,DROP表示丢掉包,REJECT表示拒绝包;

-i :指定网卡(不常用,但有时候能用到);

iptables -nvL --line-number 每一行规则前面加上行号

iptables -D INPUT 7 删除行号为 7 的规则

iptables -P OUTPUT DROP 用来指定链的默认策略,不要随意执行

iptables -P OUTPUT ACCEPT 恢复链的默认策略
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Linux FirewallD iptables
相关文章推荐