日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Iptables 入门进阶

發布時間:2025/3/17 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Iptables 入门进阶 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

一、前言

?

??????? 所謂防火墻就是工作在主機或網絡邊緣,對進出的豹紋根據定義的規則做檢查,進而對匹配到的報文作為相應處理的套件;

??????? 防火墻有軟件防火墻和硬件防火墻;根據位置可分為本機防火墻和網絡防火墻;根據種類可分為包過濾、應用代理、狀態檢測。

·包過濾即檢查每一個數據包,查看包中的一些基本信息,如源地址、目的地址、端口號、協議等

·應用代理工作在應用層,檢查包的所有數據,相對來說會更加安全,但是效率不高,如果對速度要求高,可能會成為瓶頸

·狀態檢測是從動態包過濾上演化而來的,不僅有包過濾的功能,而且可以在每個連接建立時,防火墻會為這個連接構造一個會話狀態,里面包含了這個連接數據包的所有信息,以后這個連接都會基于這個連接的信息進行。狀態檢測可以對包的內容進行分析,從而擺脫了,從而擺脫了傳統防火墻僅局限于過濾包頭信息的弱點,而且這種防火墻可以不必開放過多的端口,從而杜絕了開放過多端口帶來的隱患。

?

?

二、iptables/netfilter

1、iptables的前身叫ipfirewall,2.20核心被ipchain所取代,Linux2.4以后叫iptables,他可以將規則組織成一張表,實現詳細的訪問控制功能。

iptables是一種工具,工作在用戶空間,用于修改信息的過濾規則及其他配置。

netfilter是內核中的一部分,用于定義、保存響應的規則。

?

2、netfilter工作原理

netfilter在內核中提供了一系列表(table),每個表由若干鏈(chain)組成,每個鏈可以由一條或數條規則(rules)組成。在內核空間中設置了5個鉤子函數對進出主機的數據包進行過濾。

1、PREROUTING (路由前)

2、INPUT (進入本機)

3、FORWARD (轉發)

4、OUTPUT (本機流出)

5、POSTROUTING (路由后)
?

?

3、表、鏈、規則、動作

netfilter是表的容器,表是鏈的容器,鏈又是規則的容器。

表(Tables)

raw表 用于配置數據包,raw中的數據包不會被系統追蹤。

mangle表? 該表用于數據包的特殊變更操作,如TOS、TTL、MARK等特性。

nat表 能夠修改數據包,并完成網絡地址轉換。

filter表 用于存放所有防火墻相關的默認表,通常使用該表進行過濾的設置。

raw表有2個內置鏈: PREROUTING, OUTPUT

# iptables -t raw -L

Chain PREROUTING (policy ACCEPT)

target???? prot opt source?????????????? destination????????

Chain OUTPUT (policy ACCEPT)

target???? prot opt source?????????????? destination

?

mangle表有5個內置鏈: PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING

# iptables -t mangle -L

Chain PREROUTING (policy ACCEPT)

target???? prot opt source?????????????? destination????????

Chain INPUT (policy ACCEPT)

target???? prot opt source?????????????? destination????????

Chain FORWARD (policy ACCEPT)

target???? prot opt source?????????????? destination????????

Chain OUTPUT (policy ACCEPT)

target???? prot opt source?????????????? destination????????

Chain POSTROUTING (policy ACCEPT)

target???? prot opt source?????????????? destination

?

nat表有3個內置鏈:PREROUTING, FORWARD, POSTROUTING

# iptables -t nat -L

Chain PREROUTING (policy ACCEPT)

target???? prot opt source?????????????? destination????????

Chain POSTROUTING (policy ACCEPT)

target???? prot opt source?????????????? destination????????

Chain OUTPUT (policy ACCEPT)

target???? prot opt source?????????????? destination

?

filter表有3個內置鏈: INPUT, FORWARD, OUTPUT

# iptables -t filter -L

Chain INPUT (policy ACCEPT)

target???? prot opt source?????????????? destination????????

Chain FORWARD (policy ACCEPT)

target???? prot opt source?????????????? destination????????

Chain OUTPUT (policy ACCEPT)

target???? prot opt source?????????????? destination

?

?

?

鏈 (Chains)

PREROUTING??? 路有前,到達的數據包

INPUT??????????????? 路由后,發往本機的數據包

FORWARD??????? 路由經過本地的數據包,目的地不是本機

OUTPUT??????????? 路由之前,本地產生的數據包

POSTROUTING 路由后,發往網卡接口之前的數據包

?

動作(Target)

ACCEPT??? 允許數據包通過

DROP?????? 丟棄數據包

REJECT???? 丟棄數據包并返回錯誤

LOG????????? 將符合條件的數據包寫入日志

QUEUE???? 傳遞給應用程序處理該數據包

?

?

4、數據報文的流向

?

4.1 如果是跟本機內部進行通信

流入:--> PREROUTING,? --> INPUT

流出:--> OUTPUT, --> POSTROUTING

?

4.2 有本機轉發

請求: --> PRETOUTING, --> FORWARD, --> POSTROUTING

響應: --> PRETOUTING, --> FORWARD, --> POSTROUTING

?

4.3 數據報文的流向

源IP和目標IP由流向決定;

?

三、規則語法

寫規則:先確定功能(表),確定報文流向,確定要實現的目標,確定匹配條件

Iptables --> 語法檢查 --> netfilter???

注意:規則會立即生效,遠程配置時,首先需要添加放行ssh的規則

?

格式:iptables [-t table] COMMAND chain CRETIRIA -j Target

-t table: raw,mangle,nat,filter

COMMAND:定義如何對規則進行管理

chain:定義在哪個鏈上生效規則,當定義策略時可以省略

CRETIRIA:指定匹配標準

-j Target:如何進行處理

?

例如:允許192.168.56.0/24段的主機訪問本機的22端口

# iptables -A INPUT -s 192.168.56.0/24 -p tcp --dport 22 -j ACCEPT

# iptables -L -n -v --line-numbers ??# 查看定義的規則詳情并顯示行號

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

num?? pkts bytes target???? prot opt ?????????in???? out???? source?????????????? destination????

行號?? 包數? 字計數? 目標???? 協議? 選項 流入接口 ?流出接口? 源地址????? 目的地址

1?????? 36? 2620 ACCEPT???? tcp? --? *????? *?????? 192.168.56.0/24????? 0.0.0.0/0?????????? tcp dpt:22

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

num?? pkts bytes target???? prot opt in???? out???? source?????????????? destination????????

Chain OUTPUT (policy ACCEPT 26 packets, 3104 bytes)

num?? pkts bytes target???? prot opt in???? out???? source?????????????? destination

?

?

四:COMMAND詳解

1、鏈管理命令:

-P:設置默認策略

規則:iptables [-t table] -P chain target

eg:# iptables -t filter -P FORWARD DROP? //設置filter的FORWARD鏈默認為DROP

?

-N:?? 新建一個鏈

規則:iptables [-t table] -N chain

eg:# iptables -t filter -N http_in?? // 在filter表新建一個http_in的鏈

?

-X: 刪除用戶自定義鏈

規則: iptables [-t table] -X [chain]

eg:# iptables -t filter -X http_in? //刪除用戶自定義鏈http_in ( 刪除前此引用數 references 需要為0 )

?

-E: 重命名用戶自定義鏈

規則: iptables [-t table] -E old-chain-name new-chain-name

eg:# iptables -t filter -E http_in httpd_in?? //修改自定義鏈http_in 為httpd_in

?

-F: 清空規則

規則:iptables [-t table] -F [chain [rulenum]] [options...]

eg:# iptables -t filter -F? //清空filter表,鏈和規則可以省略,如果不寫則為清空所有

?

-Z:??? 計數器清零

規則:iptables [-t table] -Z [chain [rulenum]] [options...]

eg: # iptables -t filter -Z OUTPUT? //將filter表的OUTPUT鏈計數器清空,如果不寫,則為所有計數器清空

?

2、規則管理命令

-A:追加,在當前鏈最后添加一條規則

規則: iptables [-t table] {-A|-D} chain rule-specification

eg:# iptables -t filter -A INPUT -s 192.168.56.0/24 -p tcp --dport 80 -j ACCEPT? //允許192.168.56.0/24網絡訪問本機80端口

?

-I NUM:???? 插入一條規則

規則: iptables [-t table] -I chain [rulenum] rule-specification

eg:# iptables -t filter -I INPUT 2 -s 192.168.56.0/24 -p tcp --dport 80 -j DROP? //第二條插入一條規則,拒絕192.168.56.0/24網絡訪問本機80端口(不寫第幾行默認為第一行)

?

-D NUM: 刪除一條規則

規則:iptables [-t table] -D chain rulenum

eg:# iptables -t filter -D INPUT 2?? //刪除filter表INPUT鏈的第二條規則

?

-R NUM:修改一條規則

規則:iptables [-t table] -R chain rulenum rule-specification

eg:# iptables -t filter -R INPUT 1 -s 192.168.56.0/24 -p tcp --dport 80 -j ACCEPT? //修改filter表INPUT鏈的第一條規則

?

3、查看管理命令

-L: 查看規則

子命令:

-n:不反解析主機名,直接以數組的方式顯示ip

-v:顯示詳細信息? -vv?? -vvv

-x:在計數器上顯示精確值,不做單位換算

--line-numbers:顯示規則的行號

-t 表名: 顯示指定表的信息

eg:# iptables -t filter -L -n -v --line-numbers

Chain INPUT (policy ACCEPT 216 packets, 15244 bytes)

num?? pkts bytes target???? prot opt in???? out???? source?????????????? destination????????

1??????? 0???? 0 ACCEPT???? tcp? --? *????? *?????? 192.168.56.0/24????? 0.0.0.0/0?????????? tcp dpt:80

?

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

num?? pkts bytes target???? prot opt in???? out???? source?????????????? destination????????

?

Chain OUTPUT (policy ACCEPT 196 packets, 22160 bytes)

num?? pkts bytes target???? prot opt in???? out???? source?????????????? destination????????

1??????? 0???? 0 ACCEPT???? tcp? --? *????? *?????? 192.168.56.202?????? 0.0.0.0/0?????????? tcp spt:80

?

?

五、CRETIRIA匹配條件

1、通用匹配: 源地址、目標地址的匹配

-s IP: 指定作為源地址匹配,這里不能為主機名,必須是IP地址或網絡地址

IP | IP/MASK | 0.0.0.0/0.0.0.0

前面可以加!取反,表示除了哪個IP或網絡之外

-d IP: 表示匹配目標地址

-p {tcp|udp|icmp}: 用于匹配協議

-I 網卡名稱:從這塊網卡流入的數據(流入一般是INPUT和PREROUTING)

?

-o 網卡名稱: 從這塊網卡流出的數據 (流出一般是OUTPUT和POSTROUTING)

?

2、擴展匹配

擴展匹配:調用netfilter額外模塊實現特殊檢查機制,(使用到相關功能,要使用iptables命令的-m選項來指定調用哪個模塊)

?

2.1 隱式擴展:對協議的擴展

-p tcp [-m tcp]

[!] --sport PORT[-PORT]

[!] --dport PORT[-PORT]

--tcp-flags: TCP的標志位(SYN, ACK, FIN, PSH, RST, URG)all ??none

有兩個參數

1. 要檢查標志位列表(用逗號分隔)

2. 必須為1的標志位列表(逗號分隔)

--tcp-flags syn,ack,fin,rst syn??此參數等于? --syn

表示檢查syn,ack,fin,rst 4個位,其中syn必須為1,其他的必須為0。用于檢測三次握手的第一次握手。

可簡寫為--syn

eg:# iptables -A INPUT -p tcp --dport 21 --tcp-flags syn,ack,rst,fin syn? -j ACCEPT? //允許tcp21端口的 syn,ack,rst,fin 其中syn為1 的數據包(即第一次握手)

# iptables -A OUTPUT -p tcp --sport 21 --tcp-flags all syn,ack? -j LOG? //檢查tcp21端口的所有數據包,其中syn,ack為1 的記錄到日志(即第二次握手)

?

-p udp [-m udp]:? UDP協議的擴展

[!] --dport? port[:port]

[!] --sport? port[:port]

eg:

?

-p icmp [-m icmp]: icmp數據報文的擴展

--icmp-type

0: echo-reply, ping響應

8: echo-request,ping請求

eg:

//響應外部ping本機

# iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT

# iptables -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT?

//允許本機ping外部主機

# iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT

# iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT

?

2.2? 顯式擴展

-m 擴展模塊名稱

模塊: iptables,netfilter各擁有一部分代碼

?

multiport: 多端口匹配

可以用于匹配非連續或連續端口;最多指定15個端口;

選項:

[!] ?--source-ports,--sports port[,port|,port:port]...

[!] --destination-ports,--dports port[,port|,port:port]…

[!] --ports port[,port|,port:port]…

eg:

# iptables -I INPUT -d 192.168.56.102 -p tcp -m multiport --dports 22,80 -j ACCEPT? //允許訪問本地22,80端口

# iptables -I OUTPUT -s 192.168.56.102 -p tcp -m multiport --sports 22,80 -j ACCEPT?? //允許本地22,80 端口響應

?

Iprange: 用于匹配指定范圍內的IP地址

匹配一段連續的地址而非整個網絡時用

選項:

[!] --src-range from[-to]?? 匹配源地址

[!] --dst-range from[-to]?? 匹配目標地址

eg:

# iptables -A INPUT -d 192.168.56.102 -p tcp --dport 22-m iprange --src-range 192.168.56.1-192.168.56.100 -j ACCEPT ?//允許 192.168.56.1-192.168.56.100 ip段訪問本機22端口數據包

# iptables -A OUTPUT -s 192.168.56.102 -p tcp --sport 22 -m iprange --dst-range 192.168.56.1-192.168.56.100 -j ACCEPT? //允許響應 192.168.56.1-192.168.56.100 ip段22端口數據包

?

string: 字符串匹配,能夠檢測報文應用層中的字符串(linux? kernel >= 2.6.14)

字符匹配檢查高效算法

bm,kmp

選項:

--algo {bm|kmp}??? 指定算法

[!] --string "STRING"??? 匹配指定的字串

[!] --hex-string"HEX_STRING":? HEX_STRING為編碼成16進制的字串;

eg:iptables -A INPUT -m string --algo kmp --string "sex" -j DROP? //使用kmp 算法拒絕字符串有sex的包訪問

?

time: 基于時間做訪問控制

選項:

--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

--timestart hh:mm[:ss]

--timestop hh:mm[:ss]

[!] --monthdays day[,day...]?? Possible values are 1 to 31

[!] --weekdays day[,day...]?? Possible values are Mon, Tue, Wed, Thu, Fri, Sat, Sun, or values ?from 1 to 7, respectively.

eg:

# iptables -A FORWARD -p tcp --dport 80 -m time --timestart 9:00 --timestop 18:00 --weekday Mon,Tue,Wed,Thu,Fri -j DROP??? //周一至周五每天8:00到18:00 禁止通過本機上網

?

connlimit: 連接數限制,對每個IP所能夠發起并發數做限制;

選項:

[!] --connlimit-above N: 匹配大于N個限制

eg: //允許22最大連接數為2個,超過會被丟棄

# iptables -A INPUT -d 192.168.56.102 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j DROP

?

limit: 速率限制

選項:

--limit rate[/second|/minute|/hour|/day]?? 限制包的速率

--limit-burst NUMBER: 最大通過包數,默認為5

eg://限制ping往本地的請求包數量為每分鐘20個,最大通過包數為5個

# iptables -A INPUT -d 192.168.56.202 -p icmp --icmp-type 8 -m limit --limit 20/minute --limit-burst 5 -j ACCEPT

?

state:狀態檢查

選項:

[!] --state STATE

連接追蹤中的狀態有:

NEW:新建一個會話

ESTABLISHED:已建立的連接

RELATED:有關聯的連接

INVALID:無法識別的連接

?

注意:

1、調整連接追蹤功能所能容納的連接的最大數目:

/proc/sys/net/nf_conntrack_max

2、當前追蹤的所有連接

/proc/net/nf_conntrack

3、不同協議或連接類型追蹤時的屬性:

/proc/sys/net/netfilter目錄:

?

例子:放行被動模式下FTP的服務

1、裝載模塊/lib/modules/KERNEL_VERSION/kernel/net/netfilter/

eg:

# modprobe nf_conntrack_ftp

# modprobe nf_nat_ftp

# modprobe nf_conntrack

2、放行請求報文

(1)放行NEW狀態對21端口請求的報文;

eg:# iptables -A INPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT

(2)放行ESTABLISHED以及RELATED狀態的報文

eg:# iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

?

3、放行響應報文

放行ESTABLISHED以及RELATED狀態的報文

eg:# iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

?

六、target 詳解

?

ACCEPT:???? 接受

DROP:???????? 悄悄丟棄

REJECT:?????? 明確拒絕并返回錯誤

SNAT:?????????? 源地址轉換

DNAT:????????? 目的地址轉換

MASQUERADE:?源地址偽裝

REDIRECT:???????????? 重定向;主要用于實現端口重定向

MARK:??????????????????? 打標記

RETURN:???????????????? 返回,在自定義鏈執行完畢后使用RETURN來返回原規則鏈。

?

七、SNAT和DNAT的實現

1、SNAT基于源地址的轉換

源地址轉換就是在進行包的轉發時修改數據包的源地址,此方法可以實現多個內網用戶通過外網地址訪問外網IP的功能呢個。

選項:

--to-source ipaddr[-ipaddr][:port[-port]]

?

例如:

# iptables -t nat -A POSTROUTING -s 192.168.56.0/24 -j SNAT --to-source 192.168.100.2

?

2、MASQUERADE

然而當外網IP為ADSL撥號自動獲取的IP時,外網IP不固定,是動態的分配的。此時可以使用MASQUERADE來實現動態獲取外網地址

?

例如:

# iptables -t nat -A POSTROUTING -s 192.168.56.0/24 -j MASQUERADE

?

3、DNAT基于目的地址的轉換

對于目標地址轉換,數據流向是從外到內,通過對服務器的目標地址轉換,可以讓客戶端通過外網IP來訪問響應服務,而真正的服務卻在內網的服務器上,增加了安全性。

?

選項:

--to-destination [ipaddr][-ipaddr][:port[-port]]

?

例如:

# iptables -t nat -A PREROUTING -d 192.168.100.2 -p tcp --dport 80 -j DNAT --to-destination 192.168.56.102

?

?

?

八、iptables的規則保存與恢復

因為定義的規則當你重啟的時候會失效,所以我們要想永久生效就要保存起來

1、 service iptables save 命令

此命令會保存到默認配置文件,開機自動加載 。 /etc/sysconfig/iptables

?

2、使用 iptables-save命令

# iptables-save > /tmp/iptables?? # 手動保存配置到自定義目錄

?

3、使用iptables-restore命令

# iptables-restore < /tmp/iptables?? 手動加載配置

?

注:

iptables的鏈接跟蹤表最大容量為/proc/sys/net/ipv4/if_conntrack_max,鏈接碰到各種狀態的超時后就會從表中刪除。

所以解決方法一般有兩個:

(1) 加大nf_conntrack_max 值

vi /etc/sysctl.conf

net.ipv4.nf_conntrack_max = 393216

net.ipv4.netfilter.nf_conntrack_max = 393216

?

(2): 降低 nf_conntrack timeout時間

vi /etc/sysctl.conf

net.ipv4.netfilter.nf_conntrack_tcp_timeout_established = 300

net.ipv4.netfilter.nf_conntrack_tcp_timeout_time_wait = 120

net.ipv4.netfilter.nf_conntrack_tcp_timeout_close_wait = 60

net.ipv4.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120

?

?

?

?

?


轉載于:https://blog.51cto.com/wzgl08/1673352

總結

以上是生活随笔為你收集整理的Iptables 入门进阶的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人在线观看一区二区三区 | 国产伦精品一区二区三区视频痴汉 | 手机在线一区二区 | 少妇人妻综合久久中文字幕 | 中文字幕美女 | 色综合天天综合网天天看片 | 黄页网站免费在线观看 | 亚洲艹| 人人插人人草 | 亚洲一区二区三区在线观看视频 | 观看av | av片免费在线 | 午夜一二三区 | 男男野外做爰全过程69 | 欧美综合一区二区 | 国产精品自拍合集 | 日韩一区二区三区四区在线 | 三级一区二区 | 视频成人免费 | www在线视频 | 他趴在我两腿中间添得好爽在线看 | 国产一区二区四区 | 天天干少妇 | 日欧一级片 | 黄色av影院 | 亚洲男同视频 | 51成人 | 黄色aa大片 | 欧美啪啪小视频 | 狠狠干天天干 | 91视频高清 | 高潮网址| 精品交短篇合集 | 免费av一级片 | 午夜高清视频 | 国产激情在线看 | 2023国产精品| 69免费视频| 九九九九色 | yjizz视频| 精品天堂 | 最近中文字幕在线中文视频 | 浮力影院国产第一页 | 精品人伦一区二区三区蜜桃网站 | 秋霞伦理一区二区 | 黄色网址中文字幕 | 亚洲情侣av| 伦伦影院午夜理论片 | 韩国三级视频在线观看 | 黄色三级av | 亚洲精品久久久久 | 天天干天天天天 | 狠狠躁18三区二区一区 | 中文字幕日韩精品在线观看 | 精品人妻大屁股白浆无码 | 精品盗摄一区二区三区 | 国产成人看片 | 日本老太婆做爰视频 | 91久久久久久 | 国偷自拍 | 在线观看日韩av电影 | 欧美 日韩 国产 中文 | 黄色avav | 黄色3级视频 | 国产日韩欧美精品 | 欧美五月婷婷 | 激情五月婷婷丁香 | 日韩成人精品视频 | 欧美午夜精品一区二区三区电影 | 97在线观看免费视频 | 无套内谢的新婚少妇国语播放 | 大地资源二中文在线影视观看 | 91毛片网| 在线天堂在线 | 自拍第一区| 丰满少妇高潮久久三区 | av毛片基地 | 99热91| 无码国产伦一区二区三区视频 | 日本黄色小说 | 91tv国产成人福利 | 成人免费网站黄 | 激情久久网站 | 欧美视频一区在线 | 色呦呦日韩精品 | 久久发布国产伦子伦精品 | 欧美私人影院 | 毛片随便看 | sm乳奴虐乳调教bdsm | 91精品免费在线观看 | 日韩高清国产一区在线 | 67194午夜| 日本午夜激情视频 | 久久精品亚洲天堂 | 久久久久国产精品国产 | 亚洲aaaaa特级| 色综合免费视频 | 欧美日韩精品在线播放 | 欧美大尺度视频 |