iptables概念
防火墙概念
主机防火墙:针对于单个主机进行防护。
网络防火墙:往往处于网络入口或边缘,针对于网络入口进行防护,服务于防火墙背后的本地局域网。网络防火墙和主机防火墙并不冲突,可以理解为,网络防火墙主外(集体), 主机防火墙主内(个人)。
iptables是工作在linux内核中的网络防火墙,netfilter才是防火墙真正的安全框架(framework),iptables和netfilter是一组工具,真正起到防火墙作用的是netfilter,netfilter是内核中的一個過濾框架,iptables是一個生成防火牆規則,並能將其符加在netfilter上,真正實現數據報文過濾、NAT、mangle等規則生成的工具。
防火牆工作在主機或網絡的邊緣,對進出的數據報文進行檢查監控,按事先定義的規則進行相應處理。防火牆可以是硬件或軟件,規則包括匹配標準和處理辦法。
防火牆規則必須放在內核上,因爲我們是不能和內核打交道的,有人在內核的TCP/IP協議棧上開放了幾個位置,開放給用戶空間的應用程序
netfile就是內核中可以放規則的位置;iptables是工作在用戶空間可以寫規則並可通過系統調用放置在內核相應位置的應用程序;報文流向有三種:進來的,出去的和轉發的,在
/proc/sys/net/ipv4/ip_forward
中就是定義是否轉發的;根據IP地址完成路由表中的路由決策,無論從哪進來的只要到了TCPIP協議棧後,下一個就是路由決策Netfilter是Linux操作系统核心层内部的一个数据包处理模块,它具有如下功能:
网络地址转换(Network Address Translate)
数据包内容修改
以及数据包过滤的防火墙功能
iptables概念
- 当客户端访问服务器的web服务时,客户端发送报文到网卡,而tcp/ip协议栈是属于内核的一部分,所以,客户端的信息会通过内核的TCP协议传输到用户空间中的web服务中,而此时,客户端报文的目标终点为web服务所监听的套接字(IP:Port)上,当web服务需要响应客户端请求时,web服务发出的响应报文的目标终点则为客户端,这个时候,web服务所监听的IP与端口反而变成了原点,我们说过,netfilter才是真正的防火墙,它是内核的一部分,所以,如果我们想要防火墙能够达到”防火”的目的,则需要在内核中设置关卡,所有进出的报文都要通过这些关卡,经过检查后,符合放行条件的才能放行,符合阻拦条件的则需要被阻止,于是,就出现了input关卡和output关卡,而这些关卡在iptables中不被称为”关卡”,而被称为”链”。当客户端发来的报文访问的目标地址是其他服务器时,本机的内核要支持IP_FORWARD,我们就可以将报文转发给其他服务器,所以,这个时候,我们就会提到iptables中的其他”链”,他们就是 “路由前”、”转发”、”路由后”,他们的英文名是:PREROUTING、FORWARD、POSTROUTING。如果报文需要转发,那么报文则不会经过input链发往用户空间,而是直接在内核空间中经过forward链和postrouting链转发出去的。
报文的流向:
到本机某进程的报文:PREROUTING –> INPUT
由本机转发的报文:PREROUTING –> FORWARD –> POSTROUTING
由本机的某进程发出报文(通常为响应报文):OUTPUT –> POSTROUTING
将具有相同功能的规则放在一起就是“表”
hook function:鈎子函數,有五個位置。分別是input(進), output(出), forward(轉發), prerouting(路由做出前), postrouting(路由之後再發出)
鈎子函數的規則鏈:INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING;
PREROUTING的规则可以存在于:raw表,mangle表,nat表。
INPUT的规则可以存在于:mangle表,filter表,(centos7中还有nat表,centos6中没有)。
FORWARD的规则可以存在于:mangle表,filter表。
OUTPUT的规则可以存在于:raw表,mangle表,nat表,filter表。
POSTROUTING的规则可以存在于:mangle表,nat表。
filter表:INPUT,OUTPUT,FORWARD;负责过滤功能;内核模块:iptables_filter
nat表:PREROUTING,POSTROUTING,OUTPUT(centos7中还有INPUT,centos6中没有);network address translation,网络地址转换功能;内核模块:iptable_nat
mangle表:INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING;拆解报文,做出修改,并重新封装報文首部的功能;内核模块:iptable_mangle
過濾與mangle是不能放在一起的;
raw表:PREROUTING,OUTPUT;关闭nat表上启用的连接追踪机制;iptable_raw
iptables为我们定义了4张”表”,当他们处于同一条”链”时,执行的优先级如下。
优先级次序(由高而低):
raw –> mangle –> nat –> filter
某些链天生就不能使用某些表中的规则,所以,4张表中的规则处于同一条链的目前只有output链
数据转发流程
- INPUT、OUTPUT是從內核空間到用戶空間實現過濾的,是主機防火牆設置,通過本機轉發的通過FORWARD鏈,是網絡防火牆的設置。路由的轉發功能可以是一臺主機上的兩個網段的地址。一臺交換機上可以配置多個網段的地址,但它們之間不能通信,但如果不同網段的主機的網關指向了一臺網關服務器上一塊網卡的兩個不同網段的地址,且服務器上開通了路由的功能,那麼就可以通信了;因爲IP地址不是屬於網卡的,而是屬於主機的,所以一塊網卡可以连接兩個網絡
- 啓用了ip_forward鏈,默認所有報文都要轉發
- 應該隔離可以被公網訪問的主機與不能被公網訪問的主機,如在網關服務器上放三塊網卡,其中一塊是面對互聯網的,另一塊是面對內網的,最後一塊面對服務器,開放互聯網訪問時只能從面對互聯網的網卡到面對服務器的網卡;所有在面對內網網卡上的報文要想進來必須得是一個響應,其他不允許,網關服務器被叫做三宿主的主機
- netfilter:是一個框架,在TCP/IP協議橈上有5個鈎子函數分別對應5個規則鏈,工作在內核中。不能手動向netfilter中添加數據,要用iptables編寫規則送達netfilter的某個鏈上,但它必須先屬於某張表。默認表是filter,還有nat、mangle表
- 目標地址轉換在進入時改,源地址轉換在出去的時候改。
- 可以使用自定義鏈,但只在被默認鏈調用時才能發揮作用,而且如果沒有自定義鏈中的任何規則匹配,還應該有返回機制。用戶可以刪除自定義的空鏈,默認鏈不能刪除。
- 每個規則都有兩個內置的計數器,一個記錄被匹配的報文個數,一個記錄被匹配的報文大小之和
- DNAT:目標地址轉換,轉換IP報文中的目標IP地址。目標地址轉換DNAT,指在返回結果時將地址轉換爲請求的地址。如一臺服務器上沒有服務,但将其設置成轉換到后端兩臺服務器的地址,一臺80一臺21,用户訪問時訪問的是這臺沒有服務的主機,但返回結果是有服務的兩臺主機的內容,在返回結果時就要將地址轉換成沒有服務的主機的IP。也就是当用户访问一个地址时,这个地址本没有服务,但可将此请求转到相应的地址服务上,并在服务返回结果时自动将源地址转为用户请求的地址,这就是目标地址转换。源地址转换与目标地址转换效果相反。我们只操作一半,另一半转换由服务器自动完成
- SNAT:源地址轉換,轉換IP報文中的源IP地址(可在POSTROUTING或OUTPUT上做,對網關來講只在POSTROUTING上作)。雖然稱爲源地址轉換,但目標IP地址也會轉換,只不過回程的目標地址會轉換
- 在互聯網上發送報文的時候,無論經過任何路由設備源IP與目標IP是不會改變的
- 對linux主機而言,IP地址是屬於主機的,不屬於網卡,配在什麼網卡上並不重要,關鍵是是否屬於這臺主機,無論是否打開轉發功能。這裏所說指一臺主機ping自己的網關地址,在網關這臺主機上的IP網關地址即使不在一個網段上也沒有開轉發功能,同樣可以被ping通。只有在ping第三臺網關指向這臺網關主機另一個網段IP的主機時,才需要轉發。
- 對linux主機而言,IP地址是屬於主機的,不屬於網卡,配在什麼網卡上並不重要,關鍵是是否屬於這臺主機,無論是否打開轉發功能。這裏所說指一臺主機ping自己的網關地址,在網關這臺主機上的IP網關地址即使不在一個網段上也沒有開轉發功能,同樣可以被ping通。只有在ping第三臺網關指向了這臺網關主機另一個網段IP的主機時,才需要轉發。
- 涉及到轉發與本機無關時一定是在FORWARD鏈上做
- iptables在二三四層上進行過濾
处理动作
ACCEPT:允许数据包通过。
DROP:直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。
REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。
SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题。
MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。
DNAT:目标地址转换。
REDIRECT:在本机做端口映射。
LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配。
四表五链
filter表——过滤数据包
Nat表——用于网络地址转换(IP、端口)
Mangle表——修改数据包的服务类型、TTL、并且可以配置路由实现QOS
Raw表——决定数据包是否被状态跟踪机制处理
INPUT链——进来的数据包应用此规则链中的策略
OUTPUT链——外出的数据包应用此规则链中的策略
FORWARD链——转发数据包时应用此规则链中的策略
PREROUTING链——对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理)
POSTROUTING链——对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理)
状态
- NEW:新連接請求。主机连接目标主机,在目标主机上看到的第一个想要连接的包
- ESTABLISHED:已建立的連接。主机已与目标主机进行通信,判断标准只要目标主机回应了第一个包,就进入该状态。
- INVALID:非法連接請求。无效的封包,例如数据破损的封包状态
- RELATED:相關聯的。主机已与目标主机进行通信,目标主机发起新的链接方式,例如ftp