(第九篇)Iptables詳解
常見的網絡攻擊形式
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詳解