iptables—包過濾(網絡層)防火牆

一:Linux 防火牆基礎:

Linux防火牆體系主要工作在網絡層,針對TCP/IP數據包實施過濾和限制,屬於典型的包過濾防火牆(也稱網絡層防火牆);

Linux防火牆體系基於內核編碼實現,具有非常穩定的性能和高效率,因此被廣泛的應用。

1.Netfilteriptables的區別:

  • Netfilter:指的是Linux內核中實現包過濾防火牆的內部結構,不以程序或文件的形式存在,屬於“內核態”(KernelSpace,又稱內核空間)的防火牆功能體系;

  • Iptables:指的是用來管理Linux防火牆的命令程序,通常位於/sbin/iptables,屬於“用戶態”(UserSpace,又稱用戶空間)的防火牆管理體系;

2.包過濾的工作層次:

主要是網絡層,針對IP數據包;體現在對包內的IP地址、端口等信息的處理上;

3.Iptables 的表、鏈結構:

iptables作用:爲包過濾機制的實現提供規則(或策略),通過各種不同的規則,告訴netfilter對來自某些源、前往某些目的或具有某些協議特徵的數據包應該如何處理。

規則鏈

  • 規則的作用:對數據包進行過濾或處理

  • 鏈的作用:容納各種防火牆規則

  • 鏈的分類依據:處理數據包的不同時機

默認包括5種規則鏈

  • INPUT:處理入站數據包

  • OUTPUT:處理出站數據包

  • FORWARD:處理轉發數據包

  • POSTROUTING鏈:在進行路由選擇後處理數據包(對數據鏈進行源地址修改轉換)

  • PREROUTING鏈:在進行路由選擇前處理數據包(做目標地址轉換)

INPUTOUTPUT鏈主要用在“主機型防火牆”中,即主要針對服務器本機進行保護的防火牆;而FORWARDPREROUTINGPOSTROUTING鏈多用在“網絡型防火牆”中。

規則

  • 表的作用:容納各種規則鏈

  • 表的劃分依據:防火牆規則的作用相似

默認包括4個規則表

  • raw表:確定是否對該數據包進行狀態跟蹤;對應iptable_raw,表內包含兩個鏈:OUTPUTPREROUTING

  • mangle表:爲數據包的TOS(服務類型)、TTL(生命週期)值,或者爲數據包設置Mark標記,以實現流量整形、策略路由等高級應用。其對應iptable_mangle,表內包含五個鏈:PREROUTINGPOSTROUTINGINPUTOUTPUTFORWARD

  • nat表:修改數據包中的源、目標IP地址或端口;其對應的模塊爲iptable_nat,表內包括三個鏈:PREROUTINGPOSTROUTINGOUTPUT

  • filter表:確定是否放行該數據包(過濾);其對應的內核模塊爲iptable_filter,表內包含三個鏈:INPUTFORWARDOUTPUT

4.規則表之間的順序:

rawàmangleànatàfilter 

規則鏈之間的順序

  • 入站:PREROUTINGàINPUT

  • 出站:OUTPUTàPOSTROUTING

  • 轉發:PREROUTINGàFORWARDàPOSTROUTING

規則鏈內的匹配順序

  • 按順序依次檢查,匹配即停止LOG策略例外

  • 若找不到相匹配的規則,則按該鏈的默認策略處理

二:編寫防火牆規則:

iptables 的基本語法、控制類型:

語法構成:    iptables [ -t  表名選項 [鏈名] [條件] [ -j 控制類型

注意事項:

  • 不指定表名時,默認指filter

  • 不指定鏈名時,默認指表內的所有鏈

  • 除非設置鏈的默認策略,否則必須指定匹配條件

  • 選項、鏈名、控制類型使用大寫字母,其餘均爲小寫

數據包的常見控制類型:

  • ACCEPT:允許通過

  • DROP:直接丟棄,不給出任何迴應

  • REJECT:拒絕通過,必要時會給出提示

  • LOG:在/var/log/messages文件中記錄日誌信息,然後傳給下一條規則繼續匹配(匹配即停止對LOG操作不起作用,因爲LOG只是一種輔助動作,並沒有真正的處理數據包)

eg:在filter表(-t filter)的INPUT鏈中插入(-I)一條拒絕(-jREJECT)發給本機的使用ICMP協議的數據包(-picmp):

測試PCping 設置防火牆主機,查看結果是無法連接到端口:

添加、查看、刪除規則等基礎操作:

1、添加新的規則

  • -A:在鏈的末尾追加一條規則-p協議名”

eg:在filterINPUT鏈的末尾添加一條防火牆規則:

  • -I:在鏈的開頭(或指定序號)插入一條規則

eg:添加兩條規則分別位於filter表的第1條、第2條(其中省略了“-tfilter”選項,默認使用filter

2、查看規則列表:

  • -L:列出所有的規則條目

eg:查看filterINPUT鏈中的所有規則,並顯示規則序號:

  • -n:以數字形式顯示地址、端口等信息

eg:以數字地址形式查看filterINPUT鏈中的所有規則:

  • -v:以更詳細的方式顯示規則信息

  • –line-numbers:查看規則時,顯示規則的序號

刪除、清空規則

  • -D:刪除鏈內指定序號(或內容)的一條規則

eg:刪除filterINPUT鏈中的第2條規則:

  • -F:清空所有的規則

eg:清空filterINPUT鏈中的所有規則:

設置默認策略

當找不到任何一條能夠匹配的數據包的規則時,則執行默認策略(默認策略的控制類型爲ACCEPT(允許)、DROP(丟棄)兩種。

  • -P:爲指定的鏈設置默認規則

  • -X:刪除自定義的規則鏈

eg:將filter表中FORWARD鏈中的默認策略設爲丟棄,OUTPUT鏈的默認策略設爲允許

[root@iptables ~]# iptables -t filter -P FORWARD DROP

[root@iptables ~]# iptables -P OUTPUT ACCEPT

注意:當使用管理選項“-F”清空鏈,默認策略不受影響。因此若要修改默認策略,必須通過管理選項“-P”重新進行設置。默認策略並不參與鏈內規則的順序編排,因此在其他規則之前或之後設置並無區別。

3、規則的匹配條件

a:通用匹配:

  • 可直接使用,不依賴於其他條件或擴展

  • 包括網絡協議、IP地址、網絡接口等條件

常見的通用匹配條件:

協議匹配:-p  協議名

egtcpudpicmpall(針對所有IP數據包)),可用的協議類型存放於Linux系統的/etc/procotols文件中;

eg:丟棄通過icmp協議訪問防火牆本機的數據包、允許轉發經過防火牆的除icmp協議以外的數據包:

[root@iptables ~]# iptables -I INPUT -p icmp -j DROP

[root@iptables ~]# iptables -A FORWARD -p ! icmp -j ACCEPT

地址匹配-s  源地址、 -d  目的地址

可以是IP地址、網段地址,但不建議使用主機名、域名地址,因爲解析過程會影響效率

eg:拒絕轉發源地址爲192.168.10.100的數據、允許轉發源地址位於192.168.1.0/24網段的數據:

[root@iptables ~]# iptables -A FORWARD -s 192.168.10.100 -j REJECT

[root@iptables ~]# iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT

當遇到小規模的網絡掃描或攻擊時,封IP地址是比較有效的方式。

eg:添加防火牆規則封鎖來自172.16.16.0/24網段的頻繁掃描、登錄窮舉等不良企圖:

[root@iptables ~]# iptables -I INPUT -s 172.16.16.0/24 -j DROP

[root@iptables ~]# iptables -I FORWARD -s 172.16.16.0/24 -j DROP

接口匹配-i  入站網卡、-o  出站網卡

eg:丟棄從外網接口eth0訪問防火牆本機且源地址爲私有地址的數據包:

[root@iptables ~]# iptables -A INPUT -i eth0 -s 172.16.0.0/12 -j DROP

b:隱含匹配:

  • 要求以特定的協議匹配作爲前提

  • 包括端口、TCP標記、ICMP類型等條件

常用的隱含匹配條件:

端口匹配–sport  源端口、–dport  目的端口

單個端口號或者以冒號“:”分隔的端口範圍都是可以接受的,但不連續的多個端口不能採用這種方式。

eg:允許爲網段192.168.1.0/24轉發DNS查詢數據包:

[root@iptables ~]# iptables -A FORWARD -s 192.168.1.0/24 -p udp –dport 53 -j ACCEPT

[root@iptables ~]# iptables -A FORWARD -d 192.168.1.0/24 -p udp –sport 53 -j ACCEPT

eg:構建vsftpd服務器時,開放2021端口,以及用於被動模式的端口範圍24500~24600

[root@iptables ~]# iptables -A INPUT -p tcp –dport 20:21 -j ACCEPT

[root@iptables ~]# iptables -A INPUT -p tcp –dport 24500:24600 -j ACCEPT

TCP標記匹配–tcp-flags   檢查範圍  被設置的標記

針對協議爲TCP、用來檢查數據包的標記位(–tcp-flags);

“檢查範圍”指出需要檢查數據包的哪幾個標記,“被設置的標記”則明確匹配對應值爲1的標記,多個標記之間以逗號進行分隔。

eg:拒絕從外網接口eth0直接訪問防火牆本機的TCP請求,但允許其他主機發給防火牆的TCP等響應數據包請求:

[root@iptables ~]# iptables -P INPUT DROP

[root@iptables ~]# iptables -I INPUT -i eth0 -p tcp –tcp-flags SYN,RST,ACK SYN -j DROP

[root@iptables ~]# iptables -I INPUT -i eth0 -p tcp –tcp-flags ! –syn -j ACCEPT

–syn”用來兼容舊版本iptables的形式,等同於“–tcp-flags SYN,RST,ACK SYN

ICMP類型匹配–icmp-type  ICMP類型

ICMP類型使用字符串或數字代碼表示:

  • Echo-Request代碼爲8——表ICMP請求;

  • Echo-Reply代碼爲0——ICMP回顯;

  • Destination-Unreachable代碼3——ICMP目標不可達;

eg:禁止從其他主機ping本機,但是允許本機ping其他主機:

[root@iptables ~]# iptables -A INPUT -p icmp –icmp-type 8 -j DROP

[root@iptables ~]# iptables -A INPUT -p icmp –icmp-type 0 -j ACCEPT

[root@iptables ~]# iptables -A INPUT -p icmp –icmp-type 3 -j ACCEPT

[root@iptables ~]# iptables -A INPUT -p icmp -j DROP

查看可用的ICMP協議類型:iptables  -p   icmp   -h

c:顯式匹配:

  • 要求以“-m 擴展模塊的形式明確指出類型

  • 包括多端口、MAC地址、IP範圍、數據包狀態等條件

常用的顯式匹配條件:

多端口匹配-m  multiport  –sports  源端口列表

                          -m  multiport  –dports  目的端口列表

eg:允許本機開放2580110143端口,以便提供電子郵件服務:

[root@iptables ~]# iptables -A INPUT -p tcp -m multiport –dport 25,80,110,143 -j ACCEPT

IP範圍匹配-m  iprange  –src-range  IP範圍

用來檢查數據包的源地址、目標地址,其中IP範圍採用“起始地址—結束地址”的形式:

eg:禁止轉發源IP地址位於192.168.1.10192.168.1.20之間的TCP數據包:

[root@iptables ~]# iptables -A FORWARD -p tcp -m iprange –src-range 192.168.1.10-192.168.1.20 -j ACCEPT

MAC地址匹配-m  mac  –mac-source  MAC地址

因爲MAC地址的侷限性,此類匹配一般只適用於內部網絡。

eg:根據MAC地址封鎖主機,禁止其訪問本機的任何應用:

[root@iptables ~]# iptables -A INPUT -m mac –mac-source 00:01:02:03:04:cc -j DROP

狀態匹配-m  state –state  連接狀態

  • 基於iptables的狀態跟蹤機制用來檢查數據包的連接狀態(State

  • 常見的連接狀態包括NEW(與任何連接無關的)、ESTABLISHED(響應請求或者已建立連接的)、RELATED(與已有連接有相關性的,egFTP數據連接)。

eg:禁止轉發與正常TCP連接無關的非“–syn”請求數據包(如僞造的一些網絡攻擊數據包):

[root@iptables ~]# iptables -A FORWARD -m state –state NEW -p tcp ! –syn -j DROP

eg:只開放本機的web服務(80端口),但對發給本機的TCP應答數據包予以放行,其他入站數據包均丟棄:

[root@iptables ~]# iptables -I INPUT -p tcp -m multiport –dport 80 -j ACCEPT

[root@iptables ~]# iptables -I INPUT -p tcp -m state –state ESTABLISHED -j ACCEPT

[root@iptables ~]# iptables -P INPUT DROP

iptables 防火牆首次配置介紹就到這裏了,希望對大家有幫助!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章