欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

马哥 28_01 _iptables系列之基础原理 有大用

NFS服务端:/var/www:共享出去

NFS客户端: 挂载NFSERVER:/var/www至本地的/var/www

image.png




linux:网络防火墙

    netfilter: 网络过滤器  Frame (是一个内核中的过滤框架,规则生效位置的框架)

    iptables: 生成防火墙规则,并能能够附加在netfilter上,真正实现数据报文过滤的(NAT mangle等规则生成)工具     


网络:    IP报文首部,TCP报文首部


0-1023端口是 系统使用的

0-65535 是所有端口

5000以上是客户连接服务器的端口 (是任意的5000以上)?是吗?

对linux 而言 一切皆文件,每打开一个端口,就是打开一个套接字文件

tcp udp 在 IP协议的data里面



防火墙:硬件,软件             规则:(匹配标准,处理办法)


网络安全百分之六七都是内贼

Framework:    可以是一个硬件,也可以是一个软件,但无论如何我们需要定义规则以后,让其生效,它才能真正工作起来

    默认规则:一般情况下,对于服务器来讲,拒绝所有未知,只开放我们明确已知的报文

            开放: 堵

            关闭: 通


规则:

    匹配标准

        IP:源IP(SIP),目标IP(DIP)

        TCP:SPORT,DPORT  (source port 源端口)(destination port 目标端口),SYN=1,FIN=0,RST=0,ACK=0

        UDP:SPORT,DPORT  (source port 源端口)(destination port 目标端口)

        ICMP:icmp-type (icmp报文类型)(网关不可达,主机不在线,请求超时,主机名称无法解析等等类型)(报文格式各不相同)

ICMP是(Internet Control Message Protocol)Internet控制报文协议(网络控制消息协议)。(三层半的位置)它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

        

(SYN=1,FIN=0,RST=0,ACK=0 是 TCP握手中的第一次)

(SYN=1,FIN=0,RST=0,ACK=1 是 TCP握手中的第二次)

(SYN=0,FIN=0,RST=0,ACK=1 是 TCP握手中的第三次)(ESTABLIEHED) 已建立的连接


数据报文过滤,它就是防火墙

早期没有防火墙的功能 OpenBSD机制,参考别人的机制移植过琮的


linux2.0

    ipfw/firewall

linux2.2

    ipchain/firewall

linux2.4以后

    iptables/netfilter



hook function :钩子函数

1)来本地路 (进)  input

2)从本地走的路(出) output

3)转发的路(转发) forward

事实上钩子函数不止这三个,还有两个

4)到网卡,还未到路由表决策的时候,做手脚    prerouting (在路由决策之前)

5)路由已经作出决策,已到出去的网卡,在网卡的缓冲里,即将发出的时候,做手脚 

这两个位置不是为了允许(放行)或拒绝的,而是为了做地址转换的    postrouting (在路由决策之后,已到网卡,就要离开本机了) (post在什么什么之后)


多个规则组合起来,串起来像一条链,叫规则链:每一条钩子放在规则组合起来,叫一个规则链

规则链:(全大写 )

PREROUTING 

INPUT

OUTPUT

FORWARD

POSTROUTING 


filter(过滤):    表(功能)

    INPUT

    OUTPUT

    FORWARD


nat(地址转换):   表(功能)  nat(network address transactions 网络地址转换)

    PREROUTING 

    POSTROUTING 

还有一个 OUTPUT

 

         mangle(修改报文首部)(拆开,修改,封装):表,把报文拆开,做了修改,再缝上  表 (功能)

         ttl 每过一个网站减去1,mangle可以在这里加上1(本来过一个网关就减去1,我这里加上去,别人就意识不到它的存在了)

mangle 可以修改服务类型之类的,还可以打上标记,可以给报文分给组(分给一号报文,二号报文等等),可以在下面五个上面进行

    PREROUTING 

    INPUT

    OUTPUT

    FORWARD

    POSTROUTING 


        filter的INPUT 不能与 mangle 的 INPUT 放在一起,其实任意两种其实都不可以

        不能交叉存放 ,但彼此间还是按链(按大类)放在一起的


raw(不对报文做任何修改,还原为原来的样子)(原始格式) 表 (功能)

    PREROUTING

    OUTPUT



规则:匹配标准.处理动作









iptables    由四表五链组成

TCP/IP协议中每个钩子函数对应一个链(INPUT OUTPUT FORWARD PREROUTING POSTROUTING )



    500条规则

        能否使用自定义链:

            自定义的链只能被默认链调用以后才能发挥功能的

            可以使用自定义链,但只在被调用时才能发挥作用,而且如果没有被任何一条规则匹配到,还应该有返回机制

            用户名以删除自定义的空链,不能删除非空链,默认链不能被删除


每个规则都有两个内置的计数器

        1)被匹配的报文个数

        2)被匹配的报文大小(体积)之和



iptables  [-t TABLE ]  COMMAND CHAIN [num] 匹配标准(匹配条件) -j 处理办法(处理动作)

                                (COMMAND是iptables的子命令,也可以说成SUBCOMMAND) ( -j 就是 jump的意思)


匹配标准:

    通用匹配 (普通匹配)

            -s,--src  指定源ip地址,源网络

            -d,--dst  指定目标ip地址,目标网络

            -p {tcp|udp|icmp}  指定协议 (指的是四层协议)

            -i INTERFACE  (input interface)(比如 ethX网卡,pptX网络接口):指定数据报文流入的接口 (进来的)

                        PREROUTING,INPUT,FORWARD 用在这些链上,可用于定义的标准链

            -o INTERFACE  (output interface)(比如 ethX网卡,pptX网络接口):指定数据报文流出的接口 (出去的)

                        POSTROUTING,OUTPUT,FORWARD 用在这些链上,可用于定义的标准链

        


    扩展匹配:使用netfilter的扩展模块才能完成的匹配

        隐含扩展:不需要明确指定(特别指明)由哪个模块扩展,因为此时使用了 -p {tcp|udp|icmp}

        显式扩展:必须指明由哪个模块进行的扩展,在 iptables中使用-m选项可完成此功能



-j TARGET (ACTION): j是jump的意思

            ACCEPT 允许,接受,通过

            DROP 拒绝 (悄悄丢弃)(一般用它)

            REJECT 拒绝 (丢弃后,骂人一通)(在测试的情况下才建议用它)


(-A是增加一条规则的意思)

iptables -t filter -A INPUT -s 192.16.0.0/16 -j DROP 访问我本机的都丢弃(无论访问本地的哪个地址都丢弃)

iptables -t filter -A INPUT -s 192.16.0.0/16 -d 172.16.100.7 -j DROP  访问我本机的且我本机上( 172.16.100.7 这个网卡)都丢弃(转发的吧 它就不丢弃吧)






没有关联性的规则应该把范围大(比如 111.111.11.0/24比222.222.22.2 范围大)的放上面,把访问频繁(比如 web比ftp更频繁)的放上面


有关联性的(一个允许,另一个拒绝) 应该把范围小的放上面

比如 (

1.0.0.0/8 允许访问,

1.1.1.1    拒绝访问,

)

必须把 1.1.1.1 放上面,否则 1.1.1.1会允许访问 


规则次序作用很大



image.png

Type of Service(TOS):服务类型

image.png

滑动窗口:一批传多少,双方用来协商发送缓冲 接受缓冲的对应大小

客户端(接收端)收不到就重传

窗口大小:协议一个最佳的传送的大小(一般指接受方的大小)

image.png


image.png



上图是: 帧,   ip报文,    tcp协议报文,    http协议报文  (前面的分别封装后面的,后面的作为前面的data)

(比如 ip报文 封装了 tcp协议报文, tcp协议报文作为ip报文的data)



只要是第一次与对方通信 那么 SYN=1




CLOSED

SYN_SENT:发送状态

SYN_RCV (SYN_RECEIVED):接收状态

ESTABLISHED:连接已建立


image.png


image.png

上图中的 LISTEN 监听

上图中的 SYN_SENT(不是SYN_SEND?) 发送同步请求

上图中的 SYN_RECV(不是SYN_RECD) 接受同步请求

上图中的 ESTABLISHED 是 处于已连接状态



SYN 是发送连接请求

ACK 是确认

FIN 是断开请求

image.png

MSL 就是最大段生存时间 就是报文传输时间吧



image.png

 上图  time-wait1 (time_wait1 )改成  FIN-wait1 (FIN_wait1)更准确吧

 上图  time-wait2 (time_wait2 )改成  FIN-wait2 (FIN_wait2)更准确吧

 上图的 2*MSL Closed 就是 TIME_WAIT吧


 上图的 LAST_ACK 最后确认


TCP状态转移

能够实现TCP状态转移的机器叫做 TCP的有限状态机


image.png


image.png

image.png

image.png


image.png



image.png


image.png


image.png

只要写完规则后,规则后 app(iptables)就没用了

iptables 只是一个规则生成器


image.png

image.png


image.png

只要进入本地网卡之后 送到TCP/IP协议站后,先做路由决策,

(上图 站转发的回路不准确,原转发的路是准确的), 发现是转发的就到转发的位置上

有三个路:1)来本地路 (进) 2)从本地走的路(出) 3)转发的路(转发)(只有一条)

这三个位置(三个门) 就是可以让 iptables 放规则的位置

三个门就是三个钩子




image.png

image.png



image.png

   被第一个钩子匹配到,就不匹配第二个钩子,第二个匹配了,就不匹配第三个钩子了

  

   如果没有关联度的话,就把范围大的放在上面, 比如 http 服务比 ssh 多很多,就把 http 的规则放上面,把访问最频繁的规则请求放在上面

   如果范围大的和范围小的有关联性, ( 1.0.0.0/8网络范围大,1.1.1.2ip范围小  ) 把小的放上面,否则的话把大的放上面的话,大的规则就起作用了,小的规则就不起作用了




image.png


4)到网卡,还未到路由表决策的时候,做手脚

5)路由已经作出决策,已到出去的网卡,在网卡的缓冲里,即将发出的时候,做手脚 

这两个位置不是为了允许(放行)或拒绝的,而是为了做地址转换的


image.png

NAT会话表;保存的是时间 和 地址转换,以及目标地址

地址转换 把原来的源地址 172.16.100.6 改成 12.1.1.6  (通过网卡出去的时候改源地址)

              回应过来的报文 又根据NAT会话表,把12.1.1.6这个目标地址改成 172.16.100.6 (通过网卡进来的进候,改目标地址)

image.png


DNAT:destination ip NAT  (destination network address transfer)


image.png


image.png




image.png





[root@localhost ~]# iptables -t raw -L -n

Chain PREROUTING (policy ACCEPT)

target     prot opt source               destination


Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination

image.png


image.png



四表五链

INPUT OUTPUT FORWARD PREROUTING POSTROUTING 这五个链,也就是五个钩子函数

fiter,nat,mangle,raw 四张表,就是四个功能



image.png


image.png


[root@localhost ~]# rpm -ql iptables        (一般iptables默认是安装上去的)

image.png

image.png

image.png

这些  .so模块就是iptables的扩展模块


image.png




image.png


image.png











普通分类: