Iptables入門教程

轉自:http://drops.wooyun.org/tips/1424

linux的包過濾功能,即linux防火墻,它由netfilter 和 iptables 兩個組件組成。

netfilter 組件也稱為內核空間,是內核的一部分,由一些信息包過濾表組成,這些表包含內核用來控制信息包過濾處理的規則集。

iptables 組件是一種工具,也稱為用戶空間,它使插入、修改和除去信息包過濾表中的規則變得容易。

?

2014041522224868618.png

0x01 iptables的結構


iptables的結構:

iptables -> Tables -> Chains -> Rules

簡單地講,tables由chains組成,而chains又由rules組成。iptables 默認有四個表Filter, NAT, Mangle, Raw,其對于的鏈如下圖。

enter image description here

0x02 iptables工作流程


enter image description here

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)隱式擴展包括:

enter image description here

c)常用顯式擴展

enter image description here

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 

轉載于:https://www.cnblogs.com/mengzhongshi/p/3710511.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/377039.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/377039.shtml
英文地址,請注明出處:http://en.pswp.cn/news/377039.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《線程管理:傳遞參數、確定線程數量、線程標識》

參考《c Concurrency In Action 》第二章做的筆記 目錄傳遞參數量產線程線程標識傳遞參數 thread構造函數的附加參數會拷貝至新線程的內存空間中,即使函數中的采納數是引用類型,拷貝操作也會執行。如果我們期待傳入一個引用,必須使用std::re…

手把手玩轉win8開發系列課程(14)

這節的議程就是——添加appbar appbar是出現在哪兒了,出現在屏幕的底部。他能使用戶能用手勢或者使用鼠標操作程序。metro UI 重點是在主要的控件使用許多控件,使其用戶使用win8電腦更加的方便。而appBar使其用戶體驗更好。在這節中,我將告訴…

No identities are available for signing 的解決辦法

今天重新上傳做好的app提交到app store,結果就出現標題上的錯誤。“No identities are available for signing”。 以后碰到這樣的問題按照下面幾個步驟來做: 進入Distribution -----下載發布證書 -----雙擊安裝-----重啟Xcode就能上傳了 其他細節 如果再…

半連接反連接

半連接&反連接 1. 半連接 半連接返回左表中與右表至少匹配一次的數據行,通常體現為 EXISTS 或者 IN 子查詢。左表驅動右表。只返回左表的數據,右表作為篩選條件。 可以用 EXISTS、 IN 或者 ANY 舉例:表t1和表t2做半連接,t…

匿名方法和Lambda表達式

出于MVVM學習的需要,復習下匿名方法和Lambda表達式,因為之前用的也比較少,所以用的也不是很熟練,Baidu下相關的知識,寫了這個Demo,目標是用簡單的方法展示這個怎么用。 這里偏重的和LINQ中的Lambda表達式 …

爛橘子

Problem Statement: 問題陳述: Given a matrix of dimension r*c where each cell in the matrix can have values 0, 1 or 2 which has the following meaning: 給定尺寸r * C的矩陣,其中矩陣中的每個單元可以具有其具有以下含義的值0,1或2…

android junit 測試程序

http://blog.csdn.net/to_cm/article/details/5704783 Assert.assertEquals(2, t); 斷言轉載于:https://www.cnblogs.com/wjw334/p/3714120.html

MySQL 8.0.22執行器源碼分析HashJoin —— BuildHashTable函數細節步驟

BuildHashTable函數細節步驟 該函數位置處于hash_join_iterator.cc 403 ~ 560行 step1:如果被驅動表迭代器沒有更多的行數,更新m_state為EOR,然后返回false,表明創建hash表失敗 if (!m_build_iterator_has_more_rows) {m_state…

《那些年啊,那些事——一個程序員的奮斗史》——125

距離離職交接的一個月時間還剩幾天,本來應該是平淡無事的,卻沒想到最后還是波瀾四起。昨天下班前,公司突然停了電。這本是件普通得不能再普通的事情,可沒想到過了一會來電了,或許是波峰電壓太大,或許是穩壓…

python中的元類_Python中的元類

python中的元類Python元類 (Python metaclass) A metaclass is the class of a class. A class defines how an instance of a class i.e.; an object behaves whilst a metaclass defines how a class behaves. A class is an instance of a metaclass. 元類是類的類。 一個類…

MySQL 8.0.22執行器源碼分析HashJoin —— 一些初始化函數的細節步驟

目錄InitRowBuffer(101行~126行)InitProbeIterator(142行~153行)*HashJoinIterator* 的Init(155行~240行)InitializeChunkFiles(364行~401行)InitWritingToProbeRowSavingFile&#…

c語言的宏定義學習筆記

宏定義 在預處理之前,c預處理器會對代碼進行翻譯,譬如用blank替換注釋,去掉多余的空格,刪除末尾的\來拼接行等。 例如: int /*注釋*/ x; 會被翻譯成 int x; printf("this is a s\ entence."); 會被翻譯成 pr…

攝氏溫度轉換華氏溫度_什么是攝氏溫度?

攝氏溫度轉換華氏溫度攝氏溫度 (Celsius) Celsius is a temperature measuring scale which as a SI unit derived from the seven base units stated and described by the International System of Units (SI). 攝氏溫度是一種溫度測量刻度,它是由國際單位制(SI)所…

別人的算法學習之路

http://www.cnblogs.com/figure9/p/3708351.html 我的算法學習之路 關于 嚴格來說,本文題目應該是我的數據結構和算法學習之路,但這個寫法實在太繞口——況且CS中的算法往往暗指數據結構和算法(例如算法導論指的實際上是數據結構和算法導論&a…

git config命令使用第二篇——section操作,多個key值操作,使用正則

接上一篇,git config命令使用第一篇——介紹,基本操作,增刪改查:http://blog.csdn.net/hutaoer06051/article/details/8275069 1. 刪除一個section 命令參數 --remove-section 格式:git config [--local|--global|--system] --rem…

MySQL面試準備——64頁pdf

本筆記為以前整理的零碎的關于Mysql的知識點,有深入源碼的也有淺層的八股。已經被我整理成了一個pdf。 實習崗位正好也是和數據庫內核有關的,之后應該還會更新。做個整理,方便秋招的時候快速回顧吧。 鏈接:鏈接 提取碼&#xff1a…

python點圖_Python | 點圖

python點圖The dot plot is a type of data representation in which each data-point in the figure is represented as a dot. Dot plot underlies discrete functions unlike a continuous function in a line plot. Each value could be correlated but cannot be connecte…

SAP-MM:發票、貸方憑證、事后借記、后續貸記

發票和事后借記 相同點:增加對供應商的應付款 不同點:針對同一訂單收貨,發票要先于事后借記(事后借記是對供應商后期發票金額的補充);發票和金額、訂單數量有關系,而事后借記只是訂單金額調整的…

Dijkstra for MapReduce (1)

<math xmlns"http://www.w3.org/1998/Math/MathML"><mi>x</mi><mo>,</mo><mi>y</mi><mo>&#x2208;<!-- ∈ --></mo><mi>X</mi> </math> 準備研究一下Dijkstra最短路徑算法Hadoop上…

sql的外鍵約束和主鍵約束_SQL約束

sql的外鍵約束和主鍵約束SQL | 約束條件 (SQL | Constraints) Constraints are the guidelines implemented on the information sections of a table. These are utilized to restrict the kind of information that can go into a table. This guarantees the precision and …