8張圖帶你了解iptables的前世今生


1 安全技術和防火牆

1 安全技術和防火牆

  • 入侵檢測系統(Intrusion Detection Systems):特點是不阻斷任何網絡訪問,量化、定位來自內 外網絡的威脅情況,主要以提供報警和事后監督為主,提供有針對性的指導措施和安全決策依據,類 似於監控系統一般采用旁路部署方式

  • 入侵防御系統(Intrusion Prevention System):以透明模式工作,分析數據包的內容如:溢出攻 擊、拒絕服務攻擊、木馬、蠕蟲、系統漏洞等進行准確的分析判斷,在判定為攻擊行為后立即予以 阻斷,主動而有效的保護網絡的安全,一般采用在線部署方式

  • 防火牆( FireWall ):隔離功能,工作在網絡或主機邊緣,對進出網絡或主機的數據包基於一定的 規則檢查,並在匹配某規則時由規則定義的行為進行處理的一組功能的組件,基本上的實現都是默 認情況下關閉所有的通過型訪問,只開放允許訪問的策略,會將希望外網訪問的主機放在DMZ (demilitarized zone)網絡中.

防水牆 
廣泛意義上的防水牆:防水牆(Waterwall),與防火牆相對,是一種防止內部信息泄漏的安全產品。網絡、外設接口、存儲介質和打印機構成信息泄漏的全部途徑。
防水牆針對這四種泄密途徑,在事前、事中、事后進行全面防護。其與防病毒產品、外部安全產品一起構成完整的網絡安全體系。

1.2 防火牆的分類

按保護范圍划分:

  • 主機防火牆:服務范圍為當前一台主機

  • 網絡防火牆:服務范圍為防火牆一側的局域網

按實現方式划分:

  • 硬件防火牆:在專用硬件級別實現部分功能的防火牆;另一個部分功能基於軟件實現,如:華為, 山石hillstone,天融信,啟明星辰,綠盟,深信服, PaloAlto , fortinet, Cisco, Checkpoint, NetScreen(Juniper2004年40億美元收購)等

  • 軟件防火牆:運行於通用硬件平台之上的防火牆的應用軟件,Windows 防火牆 ISA --> Forefront TMG

按網絡協議划分:

  • 網絡層防火牆:OSI模型下四層,又稱為包過濾防火牆

  • 應用層防火牆/代理服務器:proxy 代理網關,OSI模型七層

包過濾防火牆

網絡層對數據包進行選擇,選擇的依據是系統內設置的過濾邏輯,被稱為訪問控制列表(ACL),通過 檢查數據流中每個數據的源地址,目的地址,所用端口號和協議狀態等因素,或他們的組合來確定是否 允許該數據包通過

優點:對用戶來說透明,處理速度快且易於維護

缺點:無法檢查應用層數據,如病毒等

應用層防火牆
應用層防火牆/代理服務型防火牆,也稱為代理服務器(Proxy Server) 將所有跨越防火牆的網絡通信鏈路分為兩段 內外網用戶的訪問都是通過代理服務器上的“鏈接”來實現

優點:在應用層對數據進行檢查,比較安全

缺點:增加防火牆的負載

提示:現實生產環境中所使用的防火牆一般都是二者結合體,即先檢查網絡數據,通過之后再送到應用
層去檢查

2 Linux 防火牆的基本認識

2.1 Netfilter

Linux防火牆是由Netfilter組件提供的,Netfilter工作在內核空間,集成在linux內核中

Netfilter 是Linux 2.4.x之后新一代的Linux防火牆機制,是linux內核的一個子系統。Netfilter采用模塊 化設計,具有良好的可擴充性,提供擴展各種網絡服務的結構化底層框架。Netfilter與IP協議棧是無縫 契合,並允許對數據報進行過濾、地址轉換、處理等操作

Netfilter官網文檔:https://netfilter.org/documentation/

[root@centos8 ~]#grep -m 10 NETFILTER /boot/config-4.18.0-240.15.1.el8_3.x86_64
CONFIG_NETFILTER=y
CONFIG_NETFILTER_ADVANCED=y
CONFIG_BRIDGE_NETFILTER=m
CONFIG_NETFILTER_INGRESS=y
CONFIG_NETFILTER_NETLINK=m
CONFIG_NETFILTER_FAMILY_BRIDGE=y
CONFIG_NETFILTER_FAMILY_ARP=y
# CONFIG_NETFILTER_NETLINK_ACCT is not set
CONFIG_NETFILTER_NETLINK_QUEUE=m
CONFIG_NETFILTER_NETLINK_LOG=m
[root@centos8 ~]#


root@ubuntu20:~# grep -m 10 NETFILTER /boot/config-5.8.0-50-generic
CONFIG_NETFILTER=y
CONFIG_NETFILTER_ADVANCED=y
CONFIG_BRIDGE_NETFILTER=m
CONFIG_NETFILTER_INGRESS=y
CONFIG_NETFILTER_NETLINK=m
CONFIG_NETFILTER_FAMILY_BRIDGE=y
CONFIG_NETFILTER_FAMILY_ARP=y
CONFIG_NETFILTER_NETLINK_ACCT=m
CONFIG_NETFILTER_NETLINK_QUEUE=m
CONFIG_NETFILTER_NETLINK_LOG=m
root@ubuntu20:~#

[root@centos7 ~]# grep -m 10 NETFILTER /boot/config-3.10.0-1160.el7.x86_64
CONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set
CONFIG_NETFILTER_ADVANCED=y
CONFIG_BRIDGE_NETFILTER=m
CONFIG_NETFILTER_NETLINK=m
CONFIG_NETFILTER_NETLINK_ACCT=m
CONFIG_NETFILTER_NETLINK_QUEUE=m
CONFIG_NETFILTER_NETLINK_LOG=m
CONFIG_NETFILTER_NETLINK_QUEUE_CT=y
CONFIG_NETFILTER_SYNPROXY=m
[root@centos7 ~]#

2.2 防火牆工具介紹

2.2.1 iptables

由軟件包iptables提供的命令行工具,工作在用戶空間,用來編寫規則,寫好的規則被送往netfilter,告 訴內核如何去處理信息包

[root@centos8 ~]#yum -y install iptables
[root@centos8 ~]#rpm -qi iptables
Name        : iptables
Version     : 1.8.4
Release     : 15.el8_3.3
Architecture: x86_64
Install Date: Tue 11 May 2021 09:32:18 AM CST
Group       : Unspecified
Size        : 1992105
License     : GPLv2 and Artistic 2.0 and ISC
Signature   : RSA/SHA256, Fri 18 Dec 2020 09:02:38 AM CST, Key ID 05b555b38483c65d
Source RPM  : iptables-1.8.4-15.el8_3.3.src.rpm
Build Date  : Fri 18 Dec 2020 07:27:23 AM CST
Build Host  : x86-02.mbox.centos.org
Relocations : (not relocatable)
Packager    : CentOS Buildsys <bugs@centos.org>
Vendor      : CentOS
URL         : http://www.netfilter.org/projects/iptables
Summary     : Tools for managing Linux kernel packet filtering capabilities
Description :
The iptables utility controls the network packet filtering code in the
Linux kernel. If you need to set up firewalls and/or IP masquerading,
you should either install nftables or this package.

Note: This package contains the nftables-based variants of iptables and
ip6tables, which are drop-in replacements of the legacy tools.
[root@centos8 ~]#

[root@centos8 ~]#iptables --version
iptables v1.8.4 (nf_tables)
[root@centos8 ~]#ll /usr/sbin/iptables
lrwxrwxrwx 1 root root 17 Dec 18 07:27 /usr/sbin/iptables -> xtables-nft-multi*
[root@centos8 ~]#


root@ubuntu20:~# iptables --version
iptables v1.8.5 (nf_tables)
root@ubuntu20:~# ll /usr/sbin/iptables
lrwxrwxrwx 1 root root 26  4月 30 16:25 /usr/sbin/iptables -> /etc/alternatives/iptables*
root@ubuntu20:~#

[root@centos7 ~]# yum -y install iptables
[root@centos7 ~]# iptables --version
iptables v1.4.21
[root@centos7 ~]# ll /usr/sbin/iptables
lrwxrwxrwx. 1 root root 13 3月  25 10:18 /usr/sbin/iptables -> xtables-multi
[root@centos7 ~]#

示例:安裝 iptables 的 service 包

[root@centos8 ~]#dnf -y install iptables-services
[root@centos8 ~]#rpm -ql iptables-services
/etc/sysconfig/ip6tables
/etc/sysconfig/iptables
/usr/lib/systemd/system/ip6tables.service
/usr/lib/systemd/system/iptables.service
/usr/libexec/initscripts/legacy-actions/ip6tables
/usr/libexec/initscripts/legacy-actions/ip6tables/panic
/usr/libexec/initscripts/legacy-actions/ip6tables/save
/usr/libexec/initscripts/legacy-actions/iptables
/usr/libexec/initscripts/legacy-actions/iptables/panic
/usr/libexec/initscripts/legacy-actions/iptables/save
/usr/libexec/iptables
/usr/libexec/iptables/ip6tables.init
/usr/libexec/iptables/iptables.init
[root@centos8 ~]#

2.2.2 firewalld

從CentOS 7 版開始引入了新的前端管理工具

軟件包

  • firewalld

  • firewalld-config

管理工具

  • firewall-cmd 命令行工具

  • firewall-config 圖形工作

2.2.3 nftables

此軟件是CentOS 8 新特性,Nftables最初在法國巴黎的Netfilter Workshop 2008上發表,然后由長期的 netfilter核心團隊成員和項目負責人Patrick McHardy於2009年3月發布。它在2013年末合並到Linux內 核中,自2014年以來已在內核3.13中可用。

它重用了netfilter框架的許多部分,例如連接跟蹤和NAT功能。它還保留了命名法和基本iptables設計的 幾個部分,例如表,鏈和規則。就像iptables一樣,表充當鏈的容器,並且鏈包含單獨的規則,這些規 則可以執行操作,例如丟棄數據包,移至下一個規則或跳至新鏈。

從用戶的角度來看,nftables添加了一個名為nft的新工具,該工具替代了iptables,arptables和 ebtables中的所有其他工具。從體系結構的角度來看,它還替換了內核中處理數據包過濾規則集運行時 評估的那些部分。

查看 nftables 軟件包

[root@centos8 ~]#rpm -qi nftables
Name        : nftables
Epoch       : 1
Version     : 0.9.3
Release     : 16.el8
Architecture: x86_64
Install Date: Sat 08 May 2021 02:51:22 PM CST
Group       : Unspecified
Size        : 811386
License     : GPLv2
Signature   : RSA/SHA256, Wed 12 Aug 2020 05:05:16 AM CST, Key ID 05b555b38483c65d
Source RPM  : nftables-0.9.3-16.el8.src.rpm
Build Date  : Wed 12 Aug 2020 04:59:03 AM CST
Build Host  : x86-02.mbox.centos.org
Relocations : (not relocatable)
Packager    : CentOS Buildsys <bugs@centos.org>
Vendor      : CentOS
URL         : http://netfilter.org/projects/nftables/
Summary     : Netfilter Tables userspace utillites
Description :
Netfilter Tables userspace utilities.
[root@centos8 ~]#

CentOS 8 支持三種防火牆服務

[root@centos8 ~]#systemctl status iptables.service
● iptables.service - IPv4 firewall with iptables
   Loaded: loaded (/usr/lib/systemd/system/iptables.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
[root@centos8 ~]#systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)
[root@centos8 ~]#systemctl status nftables.service
● nftables.service - Netfilter Tables
   Loaded: loaded (/usr/lib/systemd/system/nftables.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:nft(8)
[root@centos8 ~]#

2.3 netfilter 中五個勾子函數和報文流向

Netfilter在內核中選取五個位置放了五個hook(勾子) function(INPUT、OUTPUT、FORWARD、 PREROUTING、POSTROUTING),而這五個hook function向用戶開放,用戶可以通過一個命令工具 (iptables)向其寫入規則 由信息過濾表(table)組成,包含控制IP包處理的規則集(rules),規則被分組放在鏈(chain)上

提示:從 Linux kernel 4.2 版以后,Netfilter 在prerouting 前加了一個 ingress 勾子函數。可以使用這 個新的入口掛鈎來過濾來自第2層的流量,這個新掛鈎比預路由要早,基本上是 tc 命令(流量控制工 具)的替代品

三種報文流向

  • 流入本機:PREROUTING --> INPUT-->用戶空間進程

  • 流出本機:用戶空間進程 -->OUTPUT--> POSTROUTING

  • 轉發:PREROUTING --> FORWARD --> POSTROUTING

2.4 iptables的組成

iptables由五個表table和五個鏈chain以及一些規則組成

鏈(chain)

  • 內置鏈:每個內置鏈對應於一個鈎子函數

  • 自定義鏈:用於對內置鏈進行擴展或補充,可實現更靈活的規則組織管理機制;只有 Hook 鈎子調用自定義鏈時,才生效

五個內置鏈chain

  • INPUT

  • OUTPUT

  • FORWARD

  • PREROUTING

  • POSTROUTING

五個表table

  • filter:過濾規則表,根據預定義的規則過濾符合條件的數據包,默認表

  • nat:network address translation 地址轉換規則表

  • mangle:修改數據標記位規則表

  • raw:關閉啟用的連接跟蹤機制,加快封包穿越防火牆速度

  • security:用於強制訪問控制(MAC)網絡規則,由Linux安全模塊(如SELinux)實現

優先級由高到低的順序為

security -->raw-->mangle-->nat-->filter

表和鏈對應關系

內核中數據包的傳輸過程

  • 當一個數據包進入網卡時,數據包首先進入PREROUTING鏈,內核根據數據包目的IP判斷是否需要轉送出去

  • 如果數據包是進入本機的,數據包就會沿着圖向下移動,到達INPUT鏈。數據包到達INPUT鏈后, 任何進程都會收到它。本機上運行的程序可以發送數據包,這些數據包經過OUTPUT鏈,然后到達 POSTROUTING鏈輸出

  • 如果數據包是要轉發出去的,且內核允許轉發,數據包就會向右移動,經過FORWARD鏈,然后到 達POSTROUTING鏈輸出

查看 iptables 表

[root@centos8 ~]#iptables -vnL -t filter
[root@centos8 ~]#iptables -vnL -t nat
[root@centos8 ~]#iptables -vnL -t mangle
[root@centos8 ~]#iptables -vnL -t raw
[root@centos8 ~]#iptables -vnL -t security

# CentOS 6 nat表不支持INPUT鏈
[root@centos6 ~]#iptables -vnL -t nat

3 iptables

3.1 iptables 規則說明

3.1.1 iptables 規則組成

規則rule:根據規則的匹配條件嘗試匹配報文,對匹配成功的報文根據規則定義的處理動作作出處理,
規則在鏈接上的次序即為其檢查時的生效次序

匹配條件:默認為與條件,同時滿足

基本匹配:IP,端口,TCP的Flags(SYN,ACK等)

擴展匹配:通過復雜高級功能匹配

處理動作:稱為target,跳轉目標

  • 內建處理動作:ACCEPT,DROP,REJECT,SNAT,DNAT,MASQUERADE,MARK,LOG...

  • 自定義處理動作:自定義chain,利用分類管理復雜情形

規則要添加在鏈上,才生效;添加在自定義鏈上不會自動生效

白名單:只有指定的特定主機可以訪問,其它全拒絕(生產環境建議)

# 白名單,沒有被明確允許的都拒絕

iptables -A INPUT -s 10.0.0.10 -j ACCETP                # 允許本機(windows)機器

iptables -A INPUT -i lo -j ACCEPT                      # 允許本地回環地址

iptables -A INPUT -j REJECT                             # 默認全部拒絕

iptables -I INPUT 2 -s 10.0.0.12 -p icmp -j REJECT      # 拒絕 10.0.0.12 ping 本機

黑名單:只有指定的特定主機拒絕訪問,其它全允許,默認方式

3.1.2 iptables規則添加時考量點

  • 要實現哪種功能:判斷添加在哪張表上

  • 報文流經的路徑:判斷添加在哪個鏈上

  • 報文的流向:判斷源和目的

  • 匹配規則:業務需要

3.1.3 環境准備

為了防止 iptables 和 firewalld 出現沖突,我們可以關閉 firewalld

CentOS7+

systemctl stop firewalld.service
systemctl disable  firewalld. service
# 或者
systemctl disable --now firewalld. service

CentOS6

service iptables stop
chkconfig iptables off


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM