本文记录Linux网络技术与实现读书笔记,这是一本已经停产了的书,在豆瓣上评分颇高,此书为第二版,第一版书名为-更安全的Linux网络。笔记记录的形式不会采取面面俱到的方式,精选一些比较重要的内容,如果你没有接触过这方面的内容,阅读本文可能会有强烈的不适感。

TCP UDP及Socket的关系

端口的分类

公认的端口:0-1023
注册的端口:1024-49151
动态端口:49152-65535

端口的作用

假设我们在服务器端主机运行了Web SSH及DNS三项服务。在TCP/IP的网络规范中,当一个网络应用运行起来时,都会占用一个端口,如服务器端的Web服务器启动时,即会占用Socket中的端口80,我们简称为TCP port 80,而SSH服务是TCP Port22,DNS服务则是UDP Port 53.
在客户端启动浏览器、SSH客户端及DNS客户端这三个网络应用程序后也会占用某一个端口。可以通过tcpdump wireshark等抓包工具抓包,可以看到客户端发送到服务器的包中包含Source port及Destination port,服务器端会将应答数据包发送给Source port。

何谓内核

内核指的是操作系统的内核。内核对于操作系统来说是极为重要的部分,其主要用来执行系统资源的分配及调度。例如,当一个应用程序运行时所使用内存区段的起始和终止位置,或者现在这个时刻哪个应用程序可以访问硬盘等,都由内核来负责分配;而一个操作系统稳定与否,内核的优劣是关键指标。

Netfilter命令结构

Netfilter存在四部分:filter nat mangle raw
filter:filter是Netfilter中最重要的机制,其任务是执行数据包的过滤操作,也就是起到防火墙的作用。存在三条链:INPUT FORWARD OUTPUT
nat:nat(Network Address Translation,NAT)是防火墙上一个不可或缺的重要机制,其功能是IP分享器。
存在三条链:PREROUTING POSTROUTING OUTPUT
mangle:mangle是一个很特殊的机制,我们可以通过mangle机制来修改经过防火墙内的数据包的内容,存在五条链:PREROUTING POSTROUTING OUTPUT INPUT FORWARD
raw:负责加快数据包穿过防火墙机制的速度,由此提高防火墙的性能。存在PREROUTING OUTPUT两条链。

规则的匹配

采用first match原则即优先匹配,以filter表INPUT链为例,当我们添加规则时,这些规则时按照先后顺序一条一条被加入到INPUT链中,因此第一条被加进来的规则就是rule 1,最后被加进来的规则就是INPUT链中的最后一条规则。当一个数据包进入INPUT链之后,filter机制就会根据该数据包的特征,从INPUT链中的第一条规则逐一向下匹配,一旦匹配成功,则不管后面的规则内容是什么,这就是所说的优先匹配。
如果从INPUT链第一条到最后一条都没有匹配成功时使用每个链的最底端的默认策略。不管链中有多少规则,默认策略永远在每个链的最底端,而且每个链的默认策略各自独立。

iptables命令参数

iptables -t Table -操作方式 规则条件
-t Table目前的Netfilter版本内置filter nat mangle及row四个表。即Netfilter的四大功能。-t参数的含义是选择我们所要操作的功能,如果这个字段没有输入,默认则时filter表。

-操作方式
-L:将所选择的表内容列出
-A:在指定的链中添加新规则
-F:将所选择的表内容清除
-P:设置某个链的默认策略

规则条件:

-p tcp -j ACCEPT
-p udp -j ACCEPT
-p icmp -j ACCEPT

例如列出filter表的所有内容

iptables -t filter -L

列出filter表中INPUT链的内容

iptables -t filter -L INPUT

清除filter表中的所有内容

iptables -t filter -F

清除filter表中INPUT链的内容

iptables -t filter -F INPUT

将规则添加到filter表的INPUT链中

iptables -t filter -A INPUT -p icmp -j ACCEPT

-t是指定添加到filter表,-A INPUT将规则加入到INPUT链中 -p icmp -j ACCEPT则是具体的规则

将FORWARD链的默认策略设置为DROP

iptables -t filter -P FOREARD DROP

-P FORWARD 本次所要设置的是FORWARD链的策略
DROP 将FORWARD链的默认策略设置为DROP
iptables的-F参数不会影响到默认策略的状态,要改变默认策略的状态,一定要使用-P的参数来设置。

在INPUT链中插入新规则

iptables -t filter -I INPUT  2  -p  tcp  -j  ACCEPT

-t filter 本次要使用的功能是filter
-I INPUT 在INPUT链中插入新的规则
2 插入到第二条规则的位置
规则:-p tcp -j ACCEPT是本次要插入的规则内容。

我们也可以使用如下命令清晰看到INPUT链第二条规则已经变为我们刚刚插入的规则

iptables -t filter -L INPUT --line-number

取代INPUT链内已存在的规则

iptables -t filter -R INPUT 2 -p tcp -j ACCEPT

删除INPUT链中已经存在的规则

iptables -t filter -D INPUT 2

以上七个参数总结如下:
-L :列出表的内容
-F:清除表的内容
-A:加入新规则
-P:设置默认策略
-I:插入新规则
-R:取代规则
-D:删除规则
我们上面的例子针对的是filter表,同样该参数适用于nat mangle raw表。

iptables规则语法