Linux探索之旅 | 第四部分第四课:分析网络,隔离防火

《Linux探索之旅 | 第四部分第四课:分析网络,隔离防火》

作者 谢恩铭 转载请注明出处
公众号「程序员联盟」(微信号:ProgrammerLeague )
原文:http://www.jianshu.com/p/96380b0b516b

《Linux探索之旅》全系列

内容简介

  1. 第四部分第四课:分析网络,隔离防火
  2. 第四部分第五课预告:源码编译,安装便利

分析网络,隔离防火

上一课 Linux探索之旅 | 第四部分第三课:文件传输,潇洒同步 比较轻松,这一课有点难度。

俗语说得好:爱国爱家爱师妹! 防火防盗防师兄!

虽然说,Linux本身很安全,至少比Windows安全多了。你看Linux发行版, 基本不需要安装杀毒软件,基于修改的Unix系统的苹果Mac OS系统也几乎不需要装杀毒软件。

相反, 如果Windows不装个杀毒软件,简直不好意思出门跟别人打招呼(日常黑Windows任务完成 :P)。
开个玩笑啦,Windows是很好的系统,小编也有使用Windows系统。

不过,在网络上穿行,还是小心为妙。毕竟网上有不怀好意的黑客(或普通人),想方设法获取我们的隐私,或者控制我们的电脑。

这一课很重要,我们来学习几个厉害的命令,能帮助我们分析网络,再来学习如何使用轻量级的防火墙。

我们将一起学习经由电脑的网络通信是怎么回事。

事实上,当你的电脑连接到互联网(Internet)时,总会有那么一些电脑里的软件会连上网,然后下载或上传信息,很多时候还是偷偷地在后台进行。

如何监控此等“大逆不道”的行径呢?如何知道哪个软件正在与网络通信,在哪个端口上进行呢?就是本课要探究的。

还有,懂得配置防火墙是很必要的,不管是在你的家用电脑上还是在你租用的服务器上。因为这能有效保护电脑,免得一些软件未经你同意就和互联网交换信息。

使用防火墙是一个重要的安全防护措施,特别是每个系统管理员(System Administrator), 更是不能逃避,总要学习。

好了,废话了这么多,开篇入正题吧。

希望你们不要嫌我啰嗦,真的不要… 如果你嫌我啰嗦,你要说出来,你不说出来,我怎么知道你嫌我啰嗦呢?如果你说出来了,但是不够大声,那也是不行的,不大声我听不清楚啊…

好了,好了,不要再扔鸡蛋了… 你,说的就是你啦,还拿了一个番茄准备扔诶,要不要那么夸张…

马上要跨年(2016-2017)了,就原谅小编顽皮一次吧。
提前祝大家圣诞快乐, 新年更精彩!

下文中关于网络方面的知识,可以查阅小编已完结的系列教程《Web探索之旅

host和whois命令:告诉我你是谁

“Just tell me 为什么, 眼神有话要说, 是不是你想要认识我…”, 想起了潘玮柏的《Tell me》这首歌(tell me是英语”告诉我”的意思)。

我们已经知道,每台连上网的电脑都会被一个IP地址所标识,这个IP地址是全球唯一的。

目前,大多数IP地址是这样的形式:

96.172.150.23

这样的形式被称为IPv4格式(以小数点分隔)。IP是Internet Protocol(”网际协议”)的缩写,v是version(”版本”)的首字母,4表示这是”版本四”。

《Linux探索之旅 | 第四部分第四课:分析网络,隔离防火》

不过,因为IPv4的地址不够用的关系,现在已经有不少IP地址的格式是IPv6的格式了,已有的IPv4地址也被慢慢替换成IPv6。IPv6的IP地址类似这样:

fa80::109:62fa:cb80:29d2

上面的是简写形式(两个冒号::用于合并连续的几组0),完整的形式是:

fa80:0000:0000:0000:0109:62fa:cb80:29d2

我们看到, IPv6的IP地址是以冒号分隔的8组4位的16进制(也就是8组16位二进制,因为2的4次方是16),所以 8 * 16 = 128。

IPv6把 IP 地址由IPv4的32 位(4个2的8次方,4 * 8 = 32)增加到 128 位。

2的32次方是42亿多一点。随着互联网的快速成长,IPv4的42亿个地址的分配最终于2011年2月3日用尽。
而IPv6的128位可以提供的IP地址数量可达 2^128 = 3.402823669 × 10^38 (10的38次方) 个。届时每个人家居中的每件电器,每样东西,甚至地球上每一粒沙子都可以拥有好几个IP地址。
根本用不完,IP多就是这么任性~

我们可以为每一个IP地址绑定一个主机名,主机名的英语是host name。

注意:
这里的主机名其实应该被称为完整主机名: Fully Qualified Domain Name (FQDN),是由主机名(host name)和域名(domain name)一起构成。我们一般会用主机名或域名来代称FQDN,其实不是那么准确。

host name和domain name是不同的概念,有点小复杂。

例如,程序员联盟的服务器的完整主机名是www.coderunity.com,这里的www是主机名,coderunity.com是域名。对应的IP地址是58.96.181.197(假想的IP地址)。

下面的课程中, 我们会用主机名或域名代指FQDN。

相比于记忆一串数字(IPv4)或 数字+字母(IPv6)的IP地址,人脑更擅长记住主机名。如下图,IP地址和主机名对应:

《Linux探索之旅 | 第四部分第四课:分析网络,隔离防火》

IP地址和主机名的互相转换

使用host(host是英语“主机”的意思)这个命令我们可以实现IP地址和主机名的互相转换,例如:

host命令的其他参数选项,可以用man host来查考。

自定义解析

IP地址和主机名的解析是由DNS(Domain Name System,域名解析系统)服务器完成的。我们不深入了解DNS的具体工作原理了,半天解释不完。

因此,当你在浏览器的地址栏里输入coderunity.com 时,你就能收到由网络上的DNS服务器帮你解析出来的IP地址,你就可以访问程序员联盟的官网了。

你当然不能修改DNS服务器上的主机名和IP地址的对应关系列表(因为有风险,会影响到很多人)。但是你可以自定义你电脑上主机名和IP地址的对应关系。

以root身份打开/etc/hosts 文件:

sudo nano /etc/hosts

《Linux探索之旅 | 第四部分第四课:分析网络,隔离防火》

可以看到一些IP地址和主机名的对应关系,例如:

  • 127.0.0.1 对应了localhost。

  • 127.0.1.1 对应了oscar-laptop,就是小编电脑的主机名。

下面还有一些IPv6格式的IP地址。

你可以往里面添加自己的解析对。写在一行里,在IP地址和主机名之间至少要留一个空格。

那么自定义IP地址和主机名之间的解析关系,有什么用呢?

当然有用,有的时候,网络上负责解析域名的DNS服务器可能暂时出现故障(很少见),那这时你在地址栏直接输入IP地址可以访问对应网站,但是输入主机名(域名)则不能访问了,因为没有DNS服务器解析,域名是不能被识别的。

这时,你自定义在本地Linux系统的/etc/hosts文件中的解析规则就可以发挥作用了。你还是可以访问网站。

例如你可以加一条程序员联盟网站的解析对:

58.96.181.197 coderunity.com

但是这样的方法也有缺陷:假如你的主机的IP地址换了,那你输入域名就不能上那个网站了。所以,一般来说,我们还是靠经常更新解析对的网络上的DNS服务器更好(一般一天更新一次)。

对于局域网,这个host文件也是很有用的。

例如在自己家里建立的局域网里面,有你的电脑,还有你老爸的电脑。那你不想记住老爸的电脑的IP地址,怎么办呢?可以添加一条解析对,例如:

192.168.0.7 father-laptop

这样,老爸的电脑的IP地址对应的主机名在你这里就成为father-laptop了,你就可以更方便地访问老爸的电脑。

例如,如果在老爸的电脑里你有一个账户叫oscar,那么用之前学的SSH来登录老爸电脑上的oscar账户,就是:

ssh oscar@father-laptop

就不用输入以下命令了:

ssh oscar@192.168.0.7

whois:了解有关域名的信息

whois这个命令很好记,由who和is两部分组成,who是英语“谁”的意思,is是英语“是”的第三人称单数形式。所以连起来表示:”是谁”。

每一个域名在登记注册时都须要填写:姓,名,联系地址,联系方式,等等。这是规定。

whois命令就可以帮助我们轻松获得域名背后的这些信息。

可以选一个主机名来试试,例如:

whois coderunity.com

你就有小编的邮寄地址啦,要送我新年礼物就赶紧哦。哈哈,开玩笑的~ 我目前在巴黎工作。

ifconfig和netstat命令:控制和分析网络流量

我们接着学习两个非常强大的命令:ifconfig和netstat。

ifconfig:列出网络接口

ifconfig是Linux中用于显示或配置网络设备(网络接口卡)的命令,英文全称是(Network) Interface Configuration。if是Interface的缩写,表示“接口”;configuration是“配置”的意思。

一般来说,你的电脑拥有好几个网络接口,也就是说有多种连接网络的方式。

运行ifconfig命令,显示如下:

《Linux探索之旅 | 第四部分第四课:分析网络,隔离防火》

在小编的电脑上显示有三个网络接口,分别是:

  • eth0
  • lo
  • wlan0

在你的电脑上可能网络接口多于三个,也可能少于三个,本不足为奇,取决于你电脑的设备。幸好小编的电脑的三个网络接口都是最常见的三个,详述如下:

  • eth0:对应有线连接(对应你的有线网卡),就是用网线来连接的上网(一般是RJ45网线,见下图),如果你的电脑目前使用网线来上网,那就是在使用这个接口。有些电脑可能同时有好几条网线连着(有好几个有线接口),例如服务器,那么除了eth0(第一块有线网卡),你还会看到例如eth1,eth2,等等。

《Linux探索之旅 | 第四部分第四课:分析网络,隔离防火》 RJ45网线

  • lo:本地回环(Local Loopback的缩写,对应一个虚拟网卡)。可以看到它的IP地址是127.0.0.1,似曾相识是吗?对啊,之前我们在/etc/hosts文件中看到对应localhost的就是这个IP。每台电脑都应该有这个接口,因为它对应着连向… 自己的链接。这也是我们称之为本地回环的原因:所有经由这个接口发送的东西都会回到你自己的电脑。看起来好像并没有什么用,但是有时为了某些缘故(可以百度或Google继续探究),我们需要连接自己。例如用来测试一个网络程序,但又不想让局域网或外网的用户能够查看,只能在此台主机上运行和查看所用的网络接口。比如把 HTTPD服务器指定到回环地址,在浏览器输入 127.0.0.1 就能看到你所架设的Web网站了。但只有你自己能看得到,局域网的其它主机或用户无从知道。

  • wlan0:对应Wi-Fi无线连接(对应你的无线网卡)。假如你有好几块无线网卡,那么会看到wlan1,wlan2,等等。

仔细观察上面ifconfig输出的信息,你猜到小编此时用的是哪种方式连网的吗?

聪明如你应该猜到了(可不要害怕阅读一堆英语哦)。是的,小编此时用的是有线连接的方式上网。证明就在eth0的信息中:

RX packets : 4853
TX packets : 4821

分别是接收包和发送包的数目。RX是receive(表示“接收”)的缩写,TX是transmit(表示“发送”)的缩写。packet是英语“包,数据包”的意思。

而wlan0的信息中,这两行是0。表示没有发送和接收任何数据。

当然,本地回环的这两行也有148呢。所以说,给自己发送东西也是会发生的。

ifconfig命令还可以用来配置网络接口。但这有些超出本课程的范围了,毕竟需要懂一些网络方面的知识才能配置啊,不然配错了就糟了。

但是,有一个简单的配置方式我们可以学习:接口的激活/关闭。

使用格式如下:

ifconfig interface state

替换 :

  • interface:由你想要修改的网络接口名称代替(eth0,wlan0等等)。

  • state:由up或down代替,分别表示激活和关闭对应接口。

例如:

# 关闭eth0这个有线接口,之后就没有任何网络传输会在eth0上进行了。
ifconfig eth0 down
# 激活eth0这个有线接口。
ifconfig eth0 up

配置IP地址

用ifconfig命令可以配置网络接口的IP地址和其他数据

例如:

ifconfig eth0 192.168.120.56 netmask 255.255.255.0 broadcast 192.168.120.255

上面的命令用于给eth0网卡配置IP地址(192.168.120.56),加上子网掩码(255.255.255.0),加上个广播地址(192.168.120.255)。

还有更多命令选项就用man ifconfig来查看吧。

netstat : 网络统计

netstat命令很好记,它由两部分组成:net和stat。

net是network的缩写,表示“网络”;stat是statistics的缩写,表示“统计”。所以顾名思义就是对网络信息进行统计啦。

再论学英语对编程的重要性 : 对于程序员, 为什么英语比数学更重要? 如何学习

假如你没有一些网络方面的知识,那么netstat命令的输出可能难以理解,但是也没那么难。假如你要了解你的电脑正在网络上做什么,那么netstat是不二选择。

netstat可以显示很多信息,但是我们可以用参数来控制显示信息的种类和样式。下面介绍几个常用的参数吧:

netstat -i : 网络接口的统计信息

首先,试试i参数吧:

netstat -i

会显示一张统计列表,列出你电脑的所有网络接口的一些统计信息,例如小编的电脑就列出了eth0,lo,wlan0这三个接口的使用信息。

netstat -uta : 列出所有开启的连接

运行

netstat -uta

《Linux探索之旅 | 第四部分第四课:分析网络,隔离防火》

参数uta分别表示:

  • -u : 显示UDP连接(u是udp的首字母)

  • -t : 显示TCP连接(t是tcp的首字母)

  • -a : 不论连接的状态如何,都显示(a是all的首字母)

TCP和UDP是两种不同的协议,用于在网络上传输数据。

UDP(User Datagram Protocol,用户数据报协议)一般用于网络游戏,音频通讯(例如Skype)。
除此之外,一般来说TCP(Transmission Control Protocol,传输控制协议)是最常用的。一般在互联网上都是用TCP/IP协议。

我们也可以只显示TCP连接的信息:

netstat -ta

或者只显示UDP连接的信息(不常用):

netstat -ua

再来看看上面图片中state(状态)那一列的信息,有好几种不同状态:

  • ESTABLISHED:与远程电脑的连接已建立。establish是英语“建立”的意思。

  • TIME_WAIT : 连接正在等待网络上封包的处理,一旦处理完毕就开始关闭连接。time是英语“时间”的意思,wait是英语“等待”的意思。。

  • CLOSE_WAIT:远程服务器中止了连接(也许你太久没什么动作,处在不活跃状态)。close是英语“关闭”的意思。

  • CLOSED:连接没有被使用。关闭了。

  • CLOSING:连接正在关闭,但有些数据还没有发送完毕。

  • LISTEN:监听着可能进入的连接。此时连接还没有被使用。listen是英语“听”的意思。

当然,状态还不止这几种,其他的可以在netstat的命令手册中找到(用man netstat)。

我们再来看看端口的信息,就是上面图片中冒号(:)之后的数据。

事实上,我们连接其他电脑,可以透过不同的端口(port),有点类似门户。比如我去朋友家,可能进他们的厨房门,书房门,地下室门,等等。

不同的端口用处不同。进厨房门可能看看做菜如何,进书房门可能一窥书香,进地下室门可能去品品葡萄酒。反正卧室门是不可以随便进的~

摘自百度百科:

“端口”是英文port的意译,可以认为是设备与外界通讯交流的出口。
端口可分为虚拟端口和物理端口。
其中虚拟端口指计算机内部或交换机路由器内的端口,不可见。例如计算机中的80端口、21端口、23端口等。
物理端口又称为接口,是可见端口,例如计算机背板的RJ45网口,交换机路由器集线器等RJ45端口。电话使用的RJ11插口也属于物理端口的范畴。

如下图所示:

《Linux探索之旅 | 第四部分第四课:分析网络,隔离防火》

你可以加上-n参数,假如你想让端口信息以数字的形式显示,而不是像上图中那样有点看不懂的状态,比如https,nfs,mysql等等。

  • 80端口是为HTTP(HyperText Transport Protocol,超文本传输协议)开放的,此为上网冲浪使用次数最多的协议,主要用于WWW(World Wide Web,万维网)传输信息的协议。可以通过HTTP地址(即常说的“网址”)加“:80”来访问网站,因为浏览网页服务默认的端口号都是80,因此只需输入网址即可,不用输入“:80”了。

  • 110端口是为POP3(邮件协议3)服务开放的,用于收发电子邮件。

  • 21端口用于FTP(File Transfer Protocol,文件传输协议)服务,FTP服务主要是为了在两台计算机之间实现文件的上传与下载。上一课我们学习过FTP相当的知识。

netstat -lt : 列出状态是LISTEN的统计信息

netstat -lt

netstat -s : 列出总结性的统计信息

netstat -s

还有更多命令选项就用man netstat来查看吧。

iptables:参考系防火墙

现在既然我们已经知道如何分析网络传输,我们就趁热打铁,学习如何用防火墙来过滤网络传输。

Linux下著名的防火墙是iptables。它有点年纪了,已经服役十几年。iptables命令可以制定一些规则,规定其他电脑可以使用哪些端口来连接你的电脑(入),以及你的电脑可以连接哪些端口(出)。也可以通过IP地址来过滤。类似下图所示:

《Linux探索之旅 | 第四部分第四课:分析网络,隔离防火》

例如,我想要拦截所有FTP的连接,那么我可以用iptables封锁21端口。

安装iptables防火墙

如果没有安装iptables需要先安装,

# CentOS执行:
sudo yum install iptables
# Debian/Ubuntu执行:
sudo apt-get install iptables

iptables的使用需要root身份

为了使用iptables,你需要切换到root身份:

sudo su

iptables -L : 显示所有规则

iptables -L

《Linux探索之旅 | 第四部分第四课:分析网络,隔离防火》

可以看到三个区域:

  • Chain INPUT : 对应控制《进入》的网络传输的规则。input是英语“输入”的意思。

  • Chain FORWARD : 对应控制《转发》的网络传输的规则。forward是英语“转发”的意思。

  • Chain OUTPUT : 对应控制《出去》的网络传输的规则。output是英语“输出”的意思。

暂时我们还没有制定任何规则。我们慢慢来学习。

1、清除已有iptables规则(慎用)

iptables -F
iptables -X
iptables -Z

2、开放指定的端口

# 允许本地回环接口(即运行本机访问本机)
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
# 允许已建立的或相关连的通行
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许所有本机向外的访问
iptables -A OUTPUT -j ACCEPT
# 允许访问22端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 允许访问80端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 允许FTP服务的21和20端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPTiptables -A INPUT -p tcp --dport 20 -j ACCEPT
# 如果有其他端口的话,规则也类似,稍微修改上述语句就行。
# 禁止其他未允许的规则访问(注意:如果22端口未加入允许规则,SSH链接会直接断开。)
## 1).用DROP方法
iptables -A INPUT -p tcp -j DROP
## 2).用REJECT方法
iptables -A INPUT -j REJECTiptables -A FORWARD -j REJECT

3、屏蔽IP

# 屏蔽单个IP的命令是
iptables -I INPUT -s 123.45.6.7 -j DROP
# 封整个段,即从123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP
# 封IP段从123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP
# 封IP段从123.45.6.1到123.45.6.254的命令是
iptables -I INPUT -s 123.45.6.0/24 -j DROP

4、查看已添加的iptables规则

iptables -L -n

5、删除已添加的iptables规则

# 将所有iptables以序号标记显示,执行:
iptables -L -n --line-numbers
# 要删除INPUT里序号为8的规则,执行:
iptables -D INPUT 8

6、iptables的开机启动及规则保存

CentOS上可能会存在安装好iptables后,iptables并不开机自启动,可以执行一下:

chkconfig --level 345 iptables on
# 将其加入开机启动。

CentOS上可以执行:

service iptables save
# 保存规则。

Debian/Ubuntu上iptables是不会一直保存规则的。

需要按如下步骤进行,让网卡关闭时保存iptables规则,启动时加载iptables规则。

  1. 如果当前用户不是root,即使使用了sudo,也会提示你没有权限,无法保存。所以执行本命令,你必须使用root用户。

  2. 可以使用sudo -i 快速转到root,使用完成,请使用su username切换到普通帐户。

  3. 为了重启服务器后,规则自动加载,我们创建如下文件:

sudo vim /etc/network/if-pre-up.d/iptables

这个iptables文件里的初始内容是:

#!/bin/bash
iptables-save > /etc/iptables.rules

添加执行权限:

chmod +x /etc/network/if-pre-up.d/iptables

附上基础规则:

*filter
:INPUT ACCEPT [106:85568]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [188:168166]
:RH-Firewall-1-INPUT - [0:0]

# 允许本地回环接口(即运行本机访问本机)
-A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

# 允许已建立的或相关连的通行
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 允许所有本机向外的访问
-A OUTPUT -j ACCEPT

# 允许PPTP拨号到外网
-A INPUT -p tcp -m tcp --dport 1723 -j ACCEPT

# 仅特定主机访问Rsync数据同步服务
-A INPUT -s 8.8.8.8/32 -p tcp -m tcp --dport 873 -j ACCEPT

# 仅特定主机访问WDCP管理系统
-A INPUT -s 6.6.6.6/32 -p tcp -m tcp --dport 8080 -j ACCEPT

# 允许访问SSH
-A INPUT -p tcp -m tcp --dport 1622 -j ACCEPT

# 允许访问FTP
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 20 -j ACCEPT

# 允许访问网站服务
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

# 禁止所有未经允许的连接
-A INPUT -p tcp -j DROP

#注意:如果22端口未加入允许规则,SSH链接会直接断开。
#-A INPUT -j REJECT
#-A FORWARD -j REJECTCOMMIT

可以使用一下方法直接载入:

1、复制上面的规则粘贴到这里,保存文件 sudo vim /etc/iptables.test.rules
2、把本规则加载,使之生效。注意,iptables不需要重启,加载一次规则就可以。sudo iptables-restore < /etc/iptables.test.rules
3、查看最新的配置,应该所有的设置都生效了。sudo iptables -L -n
4、保存生效的配置,让系统重启的时候自动加载有效配置(iptables提供了保存当前运行的规则功能)iptables-save > /etc/iptables.rules

看着很复杂,因为还没学习脚本语言和Vim编辑器的关系。刚好,我们第五部分就会学习Vim编辑器和脚本。

如果你想提前试试,也可以看Ubuntu官方的关于保存和配置开机加载iptables规则的文章(英文的):

https://help.ubuntu.com/community/IptablesHowTo#Saving_iptables

我们也见识到了,iptables的配置相当繁复,普通用户简直望而却步。
幸好,有一些软件可以帮助我们减轻痛苦:

UFW – Uncomplicated Firewall

UFW是Uncomplicated Firewall的缩写,顾名思义这个软件是“不复杂的防火墙”,比iptables简单很多。但ufw并不是在每个Linux发行版中都有的,幸好,Ubuntu中有。

当然了,还有更好的图形界面的UFW:gufw

Ubuntu官方GUFW文档:https://help.ubuntu.com/community/Gufw

《Linux探索之旅 | 第四部分第四课:分析网络,隔离防火》

nftables

注意:
新的防火墙子系统/包过滤引擎nftables在 Linux 3.13 中替代有十多年历史的iptables。iptables/netfilter是在2001年加入到2.4内核中。

诞生于2008年的nftables设计替代iptables,它提供了一个更简单的Kernel ABI,减少重复代码,改进错误报告,更有效支持过滤规则。

除了iptables,nftables还将替代ip6tables、arptables和ebtables。Linux内核的第一代包过滤机制是ipfwadm(1.2.1内核,1995年),之后是ipchains(1999年),iptables。nftables是第四代。

nftables引入了一个新的命令行工具nft。nft是iptables及其衍生指令(ip6tables,arptables)的超集。

同时,nft拥有完全不同的语法。如果你习惯于iptables,这是个不好的消息。但是有一个兼容层允许你使用iptables,而过滤是由内核中的nftables完成的。

但是基本的原理是类似的,nftables比iptables更方便,使用更有效率,可以把一些命令合并。

例如,你想用iptables记录并丢弃一个包,你必须写两条规则,一条记录,一条丢弃:

iptables -A FORWARD -p tcp --dport 22 -j LOG
iptables -A FORWARD -p tcp --dport 22 -j DROP

使用nft,你可以把两个目标合并到一起:

nft add rule filter forward tcp dport 22 log drop

所以,假如你的Linux内核版本是3.13之前的,那就继续使用iptables;如果是3.13版本之后,那就用nftables吧(其实nftables要从3.15版本才开始比较成熟)。

还有更多命令选项就用man iptables和man nftables来查看吧。

总结

  1. 在Internet(互联网)上,每台电脑都由IP地址来标识。例如:89.210.135.74

  2. 我们可以把一个主机名绑定到一个IP地址上,主机名相对IP地址更容易被记住。例如:coderunity.com 在很多场合,用主机名就可以代替IP地址了。

  3. host命令可以从IP地址解析出对应主机名,或者从主机名解析出IP地址。

  4. ifconfig命令列出你电脑上的网络接口(对应虚拟网卡或实体网卡),可以配置和操作这些接口。

  5. netstat列出你电脑上打开的连接,说明当下哪些端口正打开着,一个端口就好比引导出入你电脑的门户。

  6. 可以用iptables来拦截进入某些端口的连接,它是一个很不错的防火墙。但是配置比较复杂。iptables配置很繁琐,可以用ufw软件来减轻压力。从Linux 3.13开始,nftables替代了iptables。

第四部分第五课预告

今天的课就到这里,一起加油吧!

下一课我们学习:Linux探索之旅 | 第四部分第五课:源码编译,安装便利

我是 谢恩铭,在巴黎奋斗的软件工程师。
我创建了程序员联盟的 知识星球,欢迎加入。
热爱生活,喜欢游泳,略懂烹饪。
人生格言:「向着标杆直跑」

点赞