1. 程式人生 > >(第九篇)Iptables詳解

(第九篇)Iptables詳解

練習 etc 條目 root 第九篇 包括 路由選擇 網絡掃描 轉發

常見的網絡攻擊形式

1.拒絕服務攻擊:DOS

2.分布式拒絕服務攻擊 DDOS

3.漏洞入侵

4.口令猜測

以上內容簡單了解,具體可自行百度,此處不必知曉。

Linux防火墻基礎

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

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

1.Netfilter和iptables的區別:

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

(filter是過濾器的意思,netfilter即網絡層過濾)

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

(iptables: IP信息包過濾系統)

2.包過濾的工作層次:

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

3.Iptables的表、鏈結構:

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

規則鏈

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

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

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

5種規則鏈

INPUT:處理入站數據包

OUTPUT:處理出站數據包

FORWARD:處理轉發數據包

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

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

INPUT、OUTPUT鏈主要用在“主機型防火墻”中,即主要針對服務器本機進行保護的防火墻;而FORWARD、PREROUTING、POSTROUTING鏈多用在“網絡型防火墻”中。

4個規則表

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

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

默認包括4個規則表:

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

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

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

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

4.規則表之間的順序:

raw->mangle->nat->filter

規則鏈之間的順序

入站:PREROUTING->INPUT

出站:OUTPUT->POSTROUTING

轉發:PREROUTING->FORWARD->POSTROUTING

規則鏈內的匹配順序

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

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

表和鏈的關系:表下面是鏈,表容納鏈

編寫防火墻規則

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

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

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

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

選項、鏈名、控制類型使用大寫字母,其余均為小寫

2.選項(也叫操作)

(1)添加新的規則:

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

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

(2)查看規則列表:

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

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

-v:以更詳細信息顯示規則

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

[root@iptables ~]# iptables -vnL INPUT #常一起搭配使用-vnL

(3)刪除、清空規則:

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

-F:清空所有的規則

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

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

設置默認策略:

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

3.條件(也叫規則)

協議匹配:-p協議名

(eg:tcp、udp、icmp、all(針對所有IP數據包)),可用的協議類型存放於Linux系統的/etc/procotols文件中;

例:

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

(!表示取反,即非icmp)

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

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

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

接口匹配:-i入站網卡(外網)-o出站網卡

端口匹配:--sport源端口、--dport目的端口

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

eg:構建vsftpd服務器時,開放20、21端口,以及用於被動模式的端口範圍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

4.控制類型

ACCEPT:允許通過

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

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

iptables實例

(1)filter表理解配置練習,

現有一臺服務器,裝兩塊網卡,一塊外網網卡名稱是eth0綁定了IP1.1.1.1/32,另一塊內網網卡名稱是eth1綁定了IP192.168.0.2/24。這臺服務器上運行有nginx(80端口)和mysql(3306端口),為這臺服務器實現以下規則的防火墻:

1.默認禁止全部協議和端口訪問

2.開放nginx的任意來源的訪問

3.開放mysql的eth1網卡上的來源IP與eth1同網段的訪問

4.拒絕icmp協議訪問

實現過程

一、首先關閉和禁用系統的防火墻服務(已經關閉過則跳過此步)

systemctl stop firewalld

systemctl disable firewalld

二、清空所有的iptables規則

iptables -P INPUT ACCEPT

iptables -P OUTPUT ACCEPT

iptables -P FORWARD ACCEPT

iptables -X

iptables -F

三、添加新規則

iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

iptables -A INPUT -s 192.168.0.0/24 -i eth1 -p tcp -m tcp --dport 3306 -j ACCEPT

iptables -A INPUT -p icmp -j REJECT

iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

iptables -A INPUT -j DROP

(2)nat表理解練習

現在我們只有一條網線是能上網的,現有1臺服務器有兩塊網卡,能上網的網線接在eth0,還有一塊網卡eth1和很多臺電腦接在同一個內網裏,現在電腦需要上網,為服務器設計一個iptables防火墻,實現電腦可以上網

實現過程

一、首先關閉和禁用系統的防火墻服務(已經關閉過則跳過此步)

systemctl stop firewalld

systemctl disable firewalld

二、清空所有的iptables規則

iptables -t nat -P INPUT ACCEPT

iptables -t nat -P OUTPUT ACCEPT

iptables -t nat -P PREROUTING ACCEPT

iptables -t nat -P POSTROUTING ACCEPT

iptables –t nat -X

iptables –t nat -F

三、添加新規則

iptables -t nat -A POSTROUTING -i eth1 -o eth0 -j MASQUERADE

另外需要開啟內核的包轉發參數:

echo 1 > /proc/sys/net/ipv4/ip_forward

四、其他配置

其他電腦上將網關設置成服務器上eth1網卡的IP就可以上網了。

(第九篇)Iptables詳解