Iptables入門教程
0x00 iptables介紹
linux的包過濾功能,即linux防火牆,它由netfilter 和 iptables 兩個元件組成。
netfilter 元件也稱為核心空間,是核心的一部分,由一些資訊包過濾表組成,這些表包含核心用來控制資訊包過濾處理的規則集。
iptables 元件是一種工具,也稱為使用者空間,它使插入、修改和除去資訊包過濾表中的規則變得容易。
0x01 iptables的結構
iptables的結構:
iptables -> Tables -> Chains -> Rules
簡單地講,tables由chains組成,而chains又由rules組成。iptables 預設有四個表Filter, NAT, Mangle, Raw,其對於的鏈如下圖。
0x02 iptables工作流程
0x03 filter表詳解
1. 在iptables中,filter表起過濾資料包的功能,它具有以下三種內建鏈:
INPUT鏈 – 處理來自外部的資料。
OUTPUT鏈 – 處理向外傳送的資料。
FORWARD鏈 – 將資料轉發到本機的其他網路卡裝置上。
2. 資料流向場景
訪問本機:在INPUT鏈上做過濾
本機訪問外部:在OUTPUT鏈上做過濾
透過本機訪問其他主機:在FORWARD鏈上做過濾
3. Iptables基本操作
啟動iptables:service iptables start
關閉iptables:service iptables stop
重啟iptables:service iptables restart
檢視iptables狀態:service iptables status
儲存iptables配置:service iptables save
Iptables服務配置檔案:/etc/sysconfig/iptables-config
Iptables規則儲存檔案:/etc/sysconfig/iptables
開啟iptables轉發:echo "1"> /proc/sys/net/ipv4/ip_forward
0x04 iptables命令參考
命令:
iptables [ -t 表名] 命令選項 [鏈名] [條件匹配] [-j 目標動作或跳轉]
1. 表名
表名:Filter, NAT, Mangle, Raw
起包過濾功能的為表Filter,可以不填,不填預設為Filter
2. 命令選項
選項名 | 功能及特點 |
---|---|
-A | 在指定鏈的末尾新增(--append)一條新的規則 |
-D | 刪除(--delete)指定鏈中的某一條規則,按規則序號或內容確定要刪除的規則 |
-I | 在指定鏈中插入(--insert)一條新的規則,預設在鏈的開頭插入 |
-R | 修改、替換(--replace)指定鏈中的一條規則,按規則序號或內容確定 |
-L | 列出(--list)指定鏈中的所有的規則進行檢視,預設列出表中所有鏈的內容 |
-F | 清空(--flush)指定鏈中的所有規則,預設清空表中所有鏈的內容 |
-N | 新建(--new-chain)一條使用者自己定義的規則鏈 |
-X | 刪除指定表中使用者自定義的規則鏈(--delete-chain) |
-P | 設定指定鏈的預設策略(--policy) |
-n | 用數字形式(--numeric)顯示輸出結果,若顯示主機的 IP地址而不是主機名 |
-P | 設定指定鏈的預設策略(--policy) |
-v | 檢視規則列表時顯示詳細(--verbose)的資訊 |
-V | 檢視iptables命令工具的版本(--Version)資訊 |
-h | 檢視命令幫助資訊(--help) |
--line-number | 檢視規則列表時,同時顯示規則在鏈中的順序號 |
3. 鏈名
可以根據資料流向來確定具體使用哪個鏈,在Filter中的使用情況如下:
INPUT鏈 – 處理來自外部的資料。
OUTPUT鏈 – 處理向外傳送的資料。
FORWARD鏈 – 將資料轉發到本機的其他網路卡裝置上。
4. 條件匹配
條件匹配分為基本匹配和擴充套件匹配,擴充匹配又分為隱式擴充套件和顯示擴充套件。
a)基本匹配包括:
匹配引數 | 說明 |
---|---|
-p | 指定規則協議,如tcp, udp,icmp等,可以使用all來指定所有協議 |
-s | 指定資料包的源地址引數,可以使IP地址、網路地址、主機名 |
-d | 指定目的地址 |
-i | 輸入介面 |
-o | 輸出介面 |
b)隱式擴充套件包括:
c)常用顯式擴充套件
5. 目標值
資料包控制方式包括四種為:
ACCEPT:允許資料包透過。
DROP:直接丟棄資料包,不給出任何回應資訊。
REJECT:拒絕資料包透過,必須時會給資料傳送端一個響應資訊。
LOG:在/var/log/messages 檔案中記錄日誌資訊,然後將資料包傳遞給下一條規則。
QUEUE:防火牆將資料包移交到使用者空間
RETURN:防火牆停止執行當前鏈中的後續Rules,並返回到呼叫鏈(the calling chain)
0x05 Iptables常見命令
a) 1. 刪除iptables現有規則
iptables –F
b) 2. 檢視iptables規則
iptables –L(iptables –L –v -n)
c) 3. 增加一條規則到最後
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
d) 4.新增一條規則到指定位置
iptables -I INPUT 2 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
e) 5. 刪除一條規則
iptabels -D INPUT 2
f) 6.修改一條規則
iptables -R INPUT 3 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
g) 7. 設定預設策略
iptables -P INPUT DROP
h) 8.允許遠端主機進行SSH連線
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
i) 9.允許本地主機進行SSH連線
iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INTPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
j) 10.允許HTTP請求
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
k) 11.限制ping 192.168.146.3主機的資料包數,平均2/s個,最多不能超過3個
iptables -A INPUT -i eth0 -d 192.168.146.3 -p icmp --icmp-type 8 -m limit --limit 2/second --limit-burst 3 -j ACCEPT
l) 12.限制SSH連線速率(預設策略是DROP)
iptables -I INPUT 1 -p tcp --dport 22 -d 192.168.146.3 -m state --state ESTABLISHED -j ACCEPT
iptables -I INPUT 2 -p tcp --dport 22 -d 192.168.146.3 -m limit --limit 2/minute --limit-burst 2 -m state --state NEW -j ACCEPT
0x06 如何正確配置iptables
a) 1. 刪除現有規則
iptables -F
b) 2. 配置預設鏈策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
c) 3. 允許遠端主機進行SSH連線
iptables -A INPUT -i eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT
d) 4. 允許本地主機進行SSH連線
iptables -A OUTPUT -o eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT
e) 5. 允許HTTP請求
iptables -A INPUT -i eth0 -p tcp –dport 80 -m state –state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp –sport 80 -m state –state ESTABLISHED -j ACCEPT
0x07 使用iptables抵抗常見攻擊
1.防止syn攻擊
思路一:限制syn的請求速度(這個方式需要調節一個合理的速度值,不然會影響正常使用者的請求)
iptables -N syn-flood
iptables -A INPUT -p tcp --syn -j syn-flood
iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
iptables -A syn-flood -j DROP
思路二:限制單個ip的最大syn連線數
iptables –A INPUT –i eth0 –p tcp --syn -m connlimit --connlimit-above 15 -j DROP
2. 防止DOS攻擊
利用recent模組抵禦DOS攻擊
iptables -I INPUT -p tcp -dport 22 -m connlimit --connlimit-above 3 -j DROP
單個IP最多連線3個會話
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
只要是新的連線請求,就把它加入到SSH列表中
Iptables -I INPUT -p tcp --dport 22 -m state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP
5分鐘內你的嘗試次數達到3次,就拒絕提供SSH列表中的這個IP服務。被限制5分鐘後即可恢復訪問。
3. 防止單個ip訪問量過大
iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 30 -j DROP
4. 木馬反彈
iptables –A OUTPUT –m state --state NEW –j DROP
5. 防止ping攻擊
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/m -j ACCEPT
個人見解,不足之處求指正。
相關文章
- Android入門教程 | RecyclerView使用入門2021-11-07AndroidView
- ZooKeeper 入門教程2024-10-23
- Dart 入門教程2024-07-19Dart
- Guzzle 入門教程2024-03-11
- Webpack 入門教程2024-03-07Web
- Ceph入門教程2024-05-14
- Vivado入門教程2024-05-30
- Elasticsearch入門教程2021-11-25Elasticsearch
- flask入門教程2021-05-15Flask
- Jmeter入門教程2020-10-30JMeter
- Redux入門教程2019-05-11Redux
- AudioKit 入門教程2019-03-01
- awk 入門教程2018-11-07
- Maven入門教程2019-01-08Maven
- Aseprite入門教程2019-03-10
- Electron入門教程2019-03-11
- HBase入門教程2018-10-10
- vue入門教程2019-04-01Vue
- Twisted 入門 教程2019-02-18
- RabbitMQ入門教程2018-05-09MQ
- CMake入門教程2018-06-27
- SnapKit入門教程2018-05-31APK
- Linux入門教程2018-07-27Linux
- Springboot入門教程2018-08-08Spring Boot
- Vuex入門教程2018-07-01Vue
- Android入門教程 | Kotlin協程入門2021-12-06AndroidKotlin
- 新手入門,webpack入門詳細教程2018-11-15Web
- git 入門教程之github 教程2019-03-29Github
- C++入門教程2024-10-11C++
- stable diffusion 入門教程2024-07-30
- NSIS 入門教程 (三)2024-07-20
- NSIS 入門教程 (一)2024-06-22
- React新手入門 教程2023-12-13React
- (1)入門MasaFramework教程2023-03-13Framework
- GitHub Actions 入門教程2019-09-12Github
- React Hooks 入門教程2019-09-01ReactHook
- Apache Flume 入門教程2018-11-09Apache
- Batch入門教程(2)2019-02-17BAT