Linux 防火牆iptables
阿新 • • 發佈:2021-12-30
內容概要
- Iptables
內容詳細
防火牆
什麼是防火牆
防止別人惡意訪問。
防火牆種類
硬體防火牆
F5
軟體防火牆
iptables
firewalld
iptables基本介紹
使用者 ---> 呼叫iptables ---> ip_tables核心模組 ---> Netfilter(系統安全框架) ---> 過濾請求
什麼是包過濾防火牆
什麼是包
在資料傳輸過程,並不是一次性傳輸完成的;而是將資料分成若干個資料包,一點一點的傳輸。
什麼是包過濾防火牆
過濾資料包的防火牆。
包過濾防火牆如何實現
通過系統安全框架,過濾資料包。
Iptables鏈的概念
# 四表五鏈 1、那四個表,有哪些作用 具備某種功能的集合叫做表。 filter: 負責做過濾功能呢 INPUT、OUTPUT、FORWARD nat: 網路地址轉換 PREROUTING、INPUT、OUTPUT、POSTROUTING mangle: 負責修改資料包內容 PREROUTING、INPUT、OUTPUT、POSTROUTING、FORWARD raw: 負責資料包跟蹤 PREROUTING、OUTPUT 2、那五條鏈,執行在那些地方 PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING 1) PREROUTING: 主機外報文進入位置,允許的表mangle, nat(目標地址轉換,把本機地址轉換為真正的目標機地址,通常指響應報文) 2) INPUT:報文進入本機使用者空間位置,允許的表filter, mangle 3) OUTPUT:報文從本機使用者空間出去的位置,允許filter, mangle, nat 4) FOWARD:報文經過路由並且發覺不是本機決定轉發但還不知道從哪個網絡卡出去,允許filter, mangle 5) POSTROUTING:報文經過路由被轉發出去,允許mangle,nat(源地址轉換,把原始地址轉換為轉發主機出口網絡卡地址) 流入本機:PREROUTING --> INPUT --> PROCESS(程序) 經過本機:PREROUTING --> FORWARD --> POSTROUTING 從本機流出:PROCESS(程序) --> OUTPUT --> POSTROUTING
Iptables流程圖
流入本機: A ---> PREROUTING ---> INPUT ---> B 流出本機:OUTPUT ---> POSTROUTING ---> B 經過本機: A ---> OUTPUT ---> POSTROUTING | ---> PREROUTING ---> FORWARD ---> POSTROUTING ---> C ---> PREROUTING ---> INPUT ---> B filter : INPUT 、FORWARD、 OUTPUT nat : PREROUTING 、 INPUT、 OUTPUT、 POSTROUTING raw : PREROUTING、 OUTPUT mangle : PREROUTING INPUT FORWARD OUTPUT POSTROUTING
Iptables的使用
1、安裝Iptables
[root@m01 ~]# yum install iptables*
2、啟動Iptables
[root@m01 ~]# systemctl start iptables
3、關閉firewalld
[root@m01 ~]# systemctl disable --now firewalld
格式:iptables -t 表名 選項 鏈名稱 條件 動作
-t 指定操作的表
-L --list 列出當前的規則
-v 顯示資料包和資料包大小
-n 不反解地址
-A --append 追加一條規則到鏈中
-I --insert 插入一條規則,插入到頂部
-F --flush 清空
-Z --zero 清空計數器( 包數量 、包大小)
-D --delete 刪除鏈中的規則
-R --replace 修改
-S --list-rules 列出所有的規則
-N --new-chain 建立一個自定義 鏈
-X --delete-chain 刪除一個自定義鏈
-P --policy 指定鏈的預設策略
iptables動作
ACCEPT 將資料包放行,進行完此處理動作後,將不再比對其它規則,直接跳往下一個規則鏈。
REJECT 攔阻該資料包,並傳送資料包通知對方。
DROP 丟棄包不予處理,進行完此處理動作後,將不再比對其它規則,直接中斷過濾程式。
REDIRECT 將包重新導向到另一個埠,進行完此處理動作後,將會繼續比對其它規則。
Iptables基本的條件匹配
TCP(http)
UDP
ICMP(ping)
ALL
-s、-d 源地址、目標地址
源地址: 傳送請求的地址
目標地址: 訪問的地址
--sport源埠、--dport 目標埠
源埠 : 傳送請求的埠
目標埠: 訪問的埠
-i、-o、-m、-j 動作
-i : 進來的網絡卡
-o : 出去的網絡卡
-m : 指定模組
-j : 轉發動作
-p :指定協議
案例
案例1:只允許22埠可以訪問,其他埠全部無法訪問。
iptables -t filter -A INPUT -p TCP --dport 22 -j ACCEPT
iptables -t filter -A INPUT -p TCP -j DROP
案例2:只允許22,80,443埠可以訪問,其他埠全部無法訪問。
iptables -t filter -A INPUT -p TCP --dport 22 -j ACCEPT
iptables -t filter -A INPUT -p TCP --dport 80 -j ACCEPT
iptables -t filter -A INPUT -p TCP --dport 443 -j ACCEPT
iptables -t filter -A INPUT -p TCP -j DROP
案例3:只允許22,80,443埠可以訪問,其他埠全部無法訪問,但是本機可以訪問百度。
案例4:要求使用192.168.15.81能夠通過22埠連結,但是其他的不行
iptables -t filter -A INPUT -p TCP -d 192.168.15.81 --dport 22 -j ACCEPT
iptables -t filter -A INPUT -p TCP -j DROP
案例5:只允許192.168.15.71能夠通過22埠連結,其他的不行。
iptables -t filter -A INPUT -p TCP -s 192.168.15.71 -d 192.168.15.81 --dport 22 -j ACCEPT
iptables -t filter -A INPUT -p TCP -j DROP
案例6:要求192.168.15.71對外部不可見
iptables -t filter -A INPUT -p TCP -d 192.168.15.71 -j DROP
案例7:要求使用eth0網絡卡的所有請求全部拒絕
iptables -t filter -A INPUT -p TCP -i etho -j DROP
使用172.16.1.71登入進來的視窗,不允許訪問百度。
iptables -t filter -I OUTPUT -p TCP -o eth1 -j DROP
案例8:要求訪問伺服器的8080埠轉發至80埠
iptables -t nat -A PREROUTING -p TCP --dport 8080 -j REDIRECT --to-port 80
案例9:要求只允許windows通過ssh連線192.168.15.81,其他的拒絕
iptables -t filter -I INPUT -p TCP -s 192.168.15.1 -d 192.168.15.81 --dport 22 -j ACCEPT
iptables -t filter -I INPUT -p TCP --dport 22 -j DROP
知識儲備:
檢視本機端口占用的命令:
netstat -nutlp
模組
拓展iptables的功能的。
-m : 指定模組
1、連續匹配多個埠(multiport)
--dports : 指定多個埠(不同埠之間以逗號分割,連續的埠使用冒號分割)。
2、指定一段連續的ip地址範圍(iprange)
--src-range from[-to]: 源地址範圍
--dst-range from[-to] 目標地址範圍
3、匹配指定字串(string)
--string pattern # 指定要匹配的字串
--algo {bm|kmp} # 匹配的查詢演算法
4、根據時間段匹配報文(time)
--timestart hh:mm[:ss] # 開始時間
--timestop hh:mm[:ss] # 結束時間
--monthdays day[,day...] # 指定一個月的某一天
--weekdays day[,day...] # 指定周 還是 周天
5、禁ping, 預設本機無法ping別人 、別人無法ping自己
--icmp-type {type[/code]|typename}
echo-request (8) 請求
echo-reply (0) 迴應
6、限制連結數,併發連線數(connlimit)
--connlimit-upto n # 如果現有連線數小於或等於 n 則 匹配
--connlimit-above n # 如果現有連線數大於n 則匹配
7、針對 報文速率 進行限制。 秒、分鐘、小時、天。
--limit rate[/second|/minute|/hour|/day] # 報文數量
--limit-burst number # 報文數量(預設:5)
案例
1、要求將22,80,443以及30000-50000之間所有的埠向外暴露,其他埠拒絕
iptables -t filter -A INPUT -p TCP -m multiport --dports 22,80,443,30000:50000 -j ACCEPT
iptables -f filter -A INPUT -p TCP -j DROP
2、要求訪問資料包中包含HelloWorld的資料不允許通過。
iptables -t filter -A INPUT -p TCP -m string --string "Hello World" --algo kmp -j DROP
3、要求192.168.15.1 - 192.168.15.10之間的所有IP能夠連線192.168.15.81,其他拒絕
iptables -t filter -A INPUT -p TCP -m iprange --src-range 192.168.15.1-192.168.15.10 -j ACCEPT
iptables -f filter -A INPUT -p TCP -j DROP
4、要求每天的12到13之間,不允許訪問
iptables -t filter -A INPUT -p TCP -m time --timestart 12:00 --timestop 13:00 -j DROP
必須使用UTC時間
5、要求別人不能ping本機,但是本機可以ping別人
iptables -t filter -A INPUT -p TCP -m icmp --icmp-type "echo-request" -j DROP
6、要求主機連線最多有2個
iptables -t filter -A INPUT -p TCP --dport 22 -m connlimit --connlimit-above 2 -j DROP
7、要求限制速率在500k/s左右
iptables -t filter -A INPUT -p TCP -m limit 333/s -j ACCEPT
iptables -t filter -A INPUT -p TCP -j DROP