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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于iptables

發(fā)布時(shí)間:2025/5/22 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于iptables 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

防火墻(Firewalld)是一種隔離工具,防范與非授權(quán)的訪問,使主機(jī)更安全。它主要工作與網(wǎng)絡(luò)或主機(jī)的邊緣,對(duì)于進(jìn)出本網(wǎng)絡(luò)或主機(jī)的通信報(bào)文根據(jù)事先定義好的規(guī)則進(jìn)行匹配檢測;對(duì)于能夠被規(guī)則所匹配到的報(bào)文做出相應(yīng)的處理。

??? 防火墻的分類:

??? 主機(jī)防火墻:工作范圍是單個(gè)主機(jī)

??? 網(wǎng)絡(luò)防火墻:工作范圍是整個(gè)網(wǎng)絡(luò);網(wǎng)絡(luò)防火墻中還可以包含主機(jī)防火墻

??? 防火墻的實(shí)現(xiàn)方式:

????? 硬件防火墻:NetScreen、CheckPoint

????? 軟件防火墻:iptables

本文所介紹的iptables就是Linux的軟防火前的實(shí)現(xiàn)。

?iptables最主要的特點(diǎn)就是4表5鏈,以及每種不同的表所對(duì)應(yīng)不同的鏈; ??

??? 5鏈:prerouting、input、output、forward、postrouting

??? 4表:filter、mangle、nat、raw

????? filter:主要功能是過濾;對(duì)應(yīng)的鏈為:input、output、forward

????? mangle:主要功能是拆解報(bào)文、做出修改、重新封裝;對(duì)應(yīng)的鏈為:prerouting、input、output、forward、postrouting

????? nat:主要功能是網(wǎng)絡(luò)地址轉(zhuǎn)換;對(duì)應(yīng)的鏈為:prerouting、postrouting、output

????? raw:在限定的時(shí)間范圍內(nèi),關(guān)閉在nat表上的啟用的連接追蹤機(jī)制;對(duì)應(yīng)的鏈為:output、prerouting

????同一鏈上的不同表的應(yīng)用優(yōu)先級(jí):raw、mangle、nat、filter


報(bào)文在主機(jī)內(nèi)的流向示意圖:

報(bào)文流向有兩種:

??? 流入本機(jī)的報(bào)文:報(bào)文流入-->prerouting-->input-->output-->postrouting-->報(bào)文流出

??? 由本機(jī)轉(zhuǎn)發(fā)報(bào)文:報(bào)文流入-->prerouting-->forward-->postrouting-->postrouting

??? 注意:報(bào)文是由本機(jī)處理,但是是否轉(zhuǎn)發(fā)是由路由來決定的;在報(bào)文流入本機(jī)之后,路由1會(huì)判斷報(bào)文的目標(biāo)地址是否為本機(jī),如果是,則流入input;如果不是,則流入forwrad,在報(bào)文離開本機(jī)之前路由2會(huì)判斷報(bào)文經(jīng)由那個(gè)接口送往下一個(gè)網(wǎng)關(guān)(下一跳),同時(shí)在轉(zhuǎn)發(fā)之前,要確保轉(zhuǎn)發(fā)功能是開啟的;1表示開啟,0表示關(guān)閉:

[root@wtc?~]#vim??/etc/sysctl.conf [root@wtc?~]#net.ipv4.ip_forward?=?0??##?把0更改為1即為開啟 [root@wtc?~]#/sbin/sysctl?-p??????##修改之后立即生效

iptables的規(guī)則:根據(jù)規(guī)則匹配條件嘗試匹配檢查報(bào)文,對(duì)成功匹配的報(bào)文做出相應(yīng)的處理

?????? 組成部分:匹配條件、處理動(dòng)作

??????? 匹配條件:基本匹配、擴(kuò)展匹配

??????? 處理動(dòng)作:基本處理動(dòng)作、擴(kuò)展處理動(dòng)作、自定義處理動(dòng)作

??????? 注意:添加規(guī)則時(shí)的考量點(diǎn);

??????? (1)要實(shí)現(xiàn)什么樣的功能;判斷添加至那個(gè)表上

??????? (2)報(bào)文流經(jīng)的位置;判斷添加至那個(gè)鏈上

??????? (3)同類的規(guī)則,匹配范圍小的放在前面,用于特殊處理

??????? (4)不同類的規(guī)則,匹配范圍大的放在前面

??????? (5)將那些可由一條規(guī)則描述的多個(gè)規(guī)則合并為一個(gè)

??????? (6)設(shè)置默認(rèn)策略

iptables的相關(guān)命令:???

??? iptables [-t table] {-A|-C|-D} chain rule-specification

????

????iptables [-t table] {-A|-C|-D} chain rule-specification

????

????iptables [-t table] -I chain [rulenum] rule-specification

????

????iptables [-t table] -R chain rulenum rule-specification

????

????iptables [-t table] -D chain rulenum

????

????iptables [-t table] -S [chain [rulenum]]

????

????iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]

????

????iptables [-t table] -N chain

????

????iptables [-t table] -X [chain]

????

????iptables [-t table] -P chain target

????

????iptables [-t table] -E old-chain-name new-chain-name


????rule-specification = [matches...] [ -j target]


實(shí)現(xiàn)對(duì)鏈管理:管理一整條鏈

????? -N:新增一條自定義鏈

????? -X:刪除一條自定義鏈(刪除時(shí)要確保鏈下沒有規(guī)則)

????? -P:設(shè)置鏈的默認(rèn)策略

????? -E:重命名于未被引用的自定義鏈(引用計(jì)數(shù)為0,即references為0)


實(shí)現(xiàn)對(duì)規(guī)則管理:管理鏈上的某條規(guī)則?????

???? -A:追加一個(gè)規(guī)則;默認(rèn)為末尾

???? -I:插入一個(gè)規(guī)則;默認(rèn)為最開始處

???? -D:刪除某條規(guī)則

???? -R:指明修改第幾條規(guī)則

???? -F:清空所有的規(guī)則


查看某表上的規(guī)則:

???? -L:列出規(guī)則

???? -n:以數(shù)字格式顯示地址個(gè)端口

???? -v:顯示詳細(xì)信息

???? --line-numbers:顯示鏈上的規(guī)則和編號(hào)

???? -x:顯示計(jì)數(shù)器的精確值


匹配條件:

????基本匹配:netfilter自帶的匹配機(jī)制?? ????????????????

????? [!] -s, --source address[/mask][,...]:原地址匹配(!s是取反)

????? [!] -d, --destination address[/mask][,...]:目標(biāo)地址匹配

????? [!] -i, --in-interface name:限制報(bào)文流入的接口(只能用于prerouting、input、forward這三個(gè)鏈)

? ? ? [!] -o, --out-interface name:限制報(bào)文流出的接口(只能用于output、forward、postrouting這三個(gè)鏈)

? ? ? [!] -p{tcp|udp|icmp}:限制協(xié)議;指明用哪一種協(xié)議

[root@wtc?~]#iptables??-A???INPUT??-s??172.18.0.0/18??-d?172.18.42.200??-p??tcp??-j??ACCEPT [root@wtc?~]#iptables??-A???OUTPUT?-s??172.18.42.200??-d?172.18.0.0/16??-p??tcp??-j??ACCEPT


?擴(kuò)展匹配:經(jīng)由擴(kuò)展模塊引入的匹配機(jī)制;-m? matchname

??????隱式擴(kuò)展:無需指明,可以不適用-m選項(xiàng)專門加載響應(yīng)模塊;前提要使用-p選項(xiàng)可匹配何種協(xié)議

??????顯示擴(kuò)展:需要指明,必須由-m選項(xiàng)專門加載響應(yīng)模塊


隱式擴(kuò)展:??? ????????????????????

?????????tcp:隱含指明了“-m? tcp",有專用選項(xiàng):

? [!]? --source-port,--sport? port[:port]:匹配報(bào)文中的tcp首部的源端口;可以是端口范圍

? [!] --destination-port,--dport? port [:port]:匹配報(bào)文中的tcp首部的目標(biāo)端口;可以是端口范圍

? [!] --tcp-flags? mask comp:檢查報(bào)文中mask指明的tcp標(biāo)志位,而要這些標(biāo)志位comp必須為1

? ? ? ? ? ? 例如:--tcp-flags ?syn,fin,ack,rst?? syn

????????????? ????此時(shí): syn必須為1

? [!] --syn:

? ? ?--syn相當(dāng)于"--tcp-flags? syn,fin,ack,syn“,tcp中的第一次握手

[root@wtc?~]#?iptables?-A?INPUT?-s?0/0?-d?10.0.1.2?-p?tcp?--dport?80?--tcp-flags?SYN,ACK,FIN,RST?SYN??-j?ACCEPT [root@wtc?~]#?iptables?-A?INPUT?-d?0/0?-s?10.0.1.2?-p?tcp?--sport?80?-j?ACCEPT

udp:??? ????????????????

? [!]? --source-port,--sport? port[:port]:匹配報(bào)文中的tcp首部的源端口;可以是端口范圍

? [!] --destination-port,--dport? port [:port]:匹配報(bào)文中的tcp首部的目標(biāo)端口;可以是端口范圍

????????
????????icmp:隱含指明了“-m icmp”,有專用選項(xiàng)

? ? ? ? ?? ????[!] --icmp-type ?{type[/code][typename]

???????????? type/code:

???????????? 0/0:表示響應(yīng)

???????????? 0/8:表示請(qǐng)求

[root@wtc?~]#iptables??-A?INPUT??-s?0/0?-d?172.18.42.200?-p?icmp?--icmp-type?8?-j?ACCEPT [root@wtc?~]#iptables??-A?OUTPUT?-s?172.18.42.200?-d?0/0?-p?icmp?--icmp-type?0?-j?ACCEPT

?顯示擴(kuò)展:??? ????????????????????

????(1)multiport擴(kuò)展:以離散方式定義多端口匹配;最多指定15個(gè)端口;?

? [!] --source-ports,--sports port[,port|,port:port]...:指定多個(gè)源端口;

? [!] --destination-ports,--dports port[,port|,port:port]...:指定多個(gè)目標(biāo)端口;

? [!] --ports port[,port|,port:port]...:同時(shí)匹配多個(gè)端口(指明多個(gè)端口;)

[root@wtc?~]#iptables??-A?INPUT??-s?0/0?-d?172.18.42.200?-p?tcp?-m?multiport?--dports?80,22?-j?ACCEPT [root@wtc?~]#iptables??-A?OUTPUT?-s?172.18.42.200?-d?0/0?-p?tcp?-m?multiport?--sports?80,22?-A?ACCEPT

(2)iprange擴(kuò)展:指明一段連續(xù)的ip地址范圍作為源地址或目標(biāo)地址匹配?

? [!] --src-range from[-to]:源IP地址;

? [!] --dst-range from[-to]:目標(biāo)IP地址;

[root@wtc?~]#iptables?-A?INPUT??-d?172.18.42.200?-p?tcp?-dport?80?-m?iprange?--src-range?172.18.42.1-172.18.42.100?-j?ACCEPT [root@wtc?~]#iptables?-A?OUTPUT?-s?172.18.42.200?-p?tcp?-sport?80?-m?iprange?--dst-range?172.18.42.1-172.18.42.100?-j?ACCEPT

(3)string擴(kuò)展:對(duì)報(bào)文中的應(yīng)用層數(shù)據(jù)做字符串模式匹配檢測;

????????--algo {bm|kmp}:字符串匹配檢測算法;

????????bm:Boyer-Moore

????????kmp:Knuth-Pratt-Morris

? ?[!] --string pattern:要檢測的字符串模式;

? ?[!] --hex-string pattern:要檢測的字符串模式(16進(jìn)制格式);

[root@wtc?~]#iptables?-I?OUTPUT?-s?172.18.42.200?-d?0/0?-p?tcp?-sport?80?-m?string?--algo?bm?--string?"wtc"?-j?A?DROP

注意:要求越嚴(yán)格的越要放在前面;之所以使用“OUTPUT”是因?yàn)樵诮邮芰藞?bào)文之后才能夠響應(yīng)輸出;如果直接是“INPUT”使用“DROP”,則報(bào)文會(huì)被直接拒絕,根本不會(huì)流入本機(jī)內(nèi)部


(4)time擴(kuò)展:根據(jù)將報(bào)文到達(dá)的時(shí)間與指定的時(shí)間范圍進(jìn)行匹配;

????????--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]:起始日期時(shí)間

????????--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]:結(jié)束日期時(shí)間

????????--timestart hh:mm[:ss]:起始時(shí)間

????????--timestop hh:mm[:ss]:結(jié)束時(shí)間

? [!]--monthdays day[,day...]:匹配1-12月中的某些天

? [!]--weekdays day[,day...]:匹配一個(gè)周中的某些天

????????--kerneltz:使用內(nèi)核上的時(shí)區(qū),而非默認(rèn)的UTC;

[root@wtc?~]#iptables?-A?INPUT?-s?0/0?-d?172.18.42.200?-p?tcp?-dport?80?-m?time?--timestart?08:30:00?--timestop?18:00:00?--weekdays?1,2,3,4,5?-j?ACCEPT

(5)connlimit擴(kuò)展:根據(jù)每客戶端IP做并發(fā)連接數(shù)數(shù)量匹配;即每客戶端最大可同時(shí)發(fā)起的連接數(shù)量

????????--connlimit-upto n:連接的數(shù)量小于等于n時(shí)則匹配;

????????--connlimit-above n:連接的數(shù)量大于n時(shí)匹配

[root@wtc?~]#iptables?-A?INPUT?-s?0/0?-d?172.18.42.200?-p?tcp?-dport?80?-m?connlimit?--connlimit-upto?20?-j?ACCEPT

?(6)limit擴(kuò)展:基于收發(fā)報(bào)文的速率做匹配;

????????--limit rate[/second|/minute|/hour|/day]

????????--limit-burst number?

[root@wtc?~]#iptables?-A?INPUT?-s?0/0?-d?172.18.42.200?-p?tcp?-dport?80?-m?limit?--limit?20/second?--limit-burst?5?-j?ACCEPT

(7)state擴(kuò)展(conntrack的子集):用于對(duì)報(bào)文的根據(jù)”連接追蹤機(jī)制“去檢查連接的狀態(tài)(但是對(duì)服務(wù)的連接數(shù)量會(huì)有很大的影響)

????????連接模板:占用內(nèi)存空間中的一段空間(內(nèi)核空間)

????????[!] --state state?

????????conntrack機(jī)制:追蹤本機(jī)上的請(qǐng)求和響應(yīng)之間的關(guān)系;狀態(tài)有如下幾種:

????????NEW:新發(fā)出請(qǐng)求;連接追蹤模板中不存在此連接的相關(guān)信息條目,因此,將其識(shí)別為第一次發(fā)出的請(qǐng)求;

??????? ESTABLISHED:NEW狀態(tài)之后,連接追蹤模板中為其建立的條目失效之前期間內(nèi)所進(jìn)行的通信狀態(tài);

??????? RELATED:相關(guān)聯(lián)的連接;如ftp協(xié)議中的數(shù)據(jù)連接與命令連接之間的關(guān)系;

??????? INVALID:無法識(shí)別的連接(一般不會(huì)放行)

??????? UNTRACKED:未進(jìn)行追蹤的連接(在連接模板中沒有相關(guān)記錄)? ? ? ? ? ??

[root@wtc?~]#iptables?-A?INPUT??-m?state?--state?ESTABLISHED?-j?ACCEPT [root@wtc??~]#iptables??-A?OUTPUT??-s?172.18.42.200?-d?0/0?-p?tcp?-sport?80?-m?state?--state?NEW?-j?ACCEPT

查看連接追蹤功能所能夠容納的最大連接數(shù)量:

??????? /proc/sys/net/nf_conntrack_max

??????? 修改鏈接追蹤功能所能夠容納的最大連接數(shù)量

??????? echo? Num? >? /proc/sys/net/nf_conntrack_max

??????? sysctl? -w? net.nf_conntrack_max=Num

????????缺點(diǎn):如果連接模板超載,當(dāng)有一個(gè)新的請(qǐng)求時(shí),web網(wǎng)頁會(huì)顯示連接超時(shí);同時(shí)conntrack所能夠連接數(shù)量的最大值取決于/proc/sysnet/nf_conntrack_max的設(shè)定;已經(jīng)追蹤到的記錄并記錄在/prco/net/nf_conntrack文件中,但當(dāng)模板滿載時(shí),后續(xù)的新連接可能會(huì)被超時(shí),而連接超時(shí)的時(shí)長將會(huì)被刪除;解決的辦法有兩個(gè)

????(1)加大nf_conntrack_max的值

[root@wtc?~]#?vim?/proc/sys/net/netfilter/nf_conntrack_max

(2)降低nf_conntrack_timeout文件的的時(shí)間(不同協(xié)議的連接追蹤時(shí)長不同)

[root@wtc?~]#vim?/proc/sys/net/netfilter/nf_conntrack_tcp_timeout_time_wait [root@wtc?~]#vim?/proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established [root@wtc?~]#?vim?/proc/sys/net/netfilter/nf_conntrack_tcp_timeout_fin_wait [root@wtc?~]#?vim?/proc/sys/net/netfilter/nf_conntrack_tcp_timeout_close_wait

開放主/被動(dòng)模式的ftp服務(wù):

????????主動(dòng):

[root@wtc?~]#iptables??-A?INPUT?-d?172.18.42.200?-p?tcp?--dport?21?-m?state?--state?ESTABLISHED?-j?ACCEPT [root@wtc?~]#iptables?-A?OUTPUT?-s?172.18.42.200?-p?tcp?--sport?21?-m?state?--state?ESTABLISHED?-j?ACCEPT

? 被動(dòng):

[root@wtc??~]#modprobe?nf_conntrack_ftp??##內(nèi)核加載nf_conntarck_ftp模塊 [root@wtc??~]#iptables?-A?INPUT?-m?state?--state?ESTABLISHED?RELATED?-j?ACCEPT [root@wtc??~]#iptables?-A?OUTPUT?-s?172.18.42.200?-p?tcp?--sport?21?-m?state?--state?NEW?-j?ACCEPT

?保存編寫好的規(guī)則并開機(jī)啟動(dòng)

[root@wtc?~]#server?iptables?save? [root@wtc?~]#iptables:?Saving?firewall?rules?to?/etc/sysconfig/iptables:[??OK??]??##系統(tǒng)默認(rèn)的保存路徑 [root@wtc?~]#iptables-save?>?/path/to/rule_file??##?可自己指明保存的路徑 [root@wtc?~]#chkconfig??iptables?on??##設(shè)置為當(dāng)前規(guī)則可開機(jī)啟動(dòng) [root@wtc?~]#service??iptables??restart??##會(huì)自動(dòng)從系統(tǒng)默認(rèn)的保存路徑中重載規(guī)則

處理動(dòng)作:

????(1)LOG:匹配報(bào)文中的日志功能

? ? ? ? --log-level? level:(emerg, alert, crit, error, warning, notice,info or debug.)

? ? ? ? --log-prefix? prefix:說明報(bào)文的日志信息是由誰產(chǎn)生的

[root@wtc?~]iptables?-A?FORWARD?-m?state?--state?ESTABLISHED?-j?ACCEPT [root@wtc?~]iptables?-A?FORWARD?-s?0/0?-d172.18.42.200?-p?tcp?-m?multiport?--dports?80,21,23,22?-m?state?-state?NEW?-j?LOG?--log-prefix?"(wtc's?log)"

(2)REDIRECT:端口重定向(之后在報(bào)文流入本機(jī)前才有用:prerouting)

????????--to-ports port[-port]:映射到某個(gè)端口上

[root@wtc?~]iptables?-t?nat?-A?PREROUTING?-d?172.18.42.200?-p?tcp?80?-j?REDIRECT?--to-ports?172.18.42.201:8080 ##?此命令是把80的端口映射在8080上,雖然訪問的是80,但正真提供服務(wù)的是8080

(3)SNAT(本地主機(jī)請(qǐng)求遠(yuǎn)程服務(wù)器):源地址轉(zhuǎn)換;發(fā)生在postrouting

????????修改IP報(bào)文中的源IP地址

????????使用場景:本地網(wǎng)絡(luò)中的主機(jī)可使用統(tǒng)一地址與外部主機(jī)通信,從而實(shí)現(xiàn)地址偽裝

????????請(qǐng)求:由內(nèi)網(wǎng)主機(jī)發(fā)起,修改源IP,如果修改則由管理員定義

????????響應(yīng):修改目標(biāo)IP,由nat自動(dòng)根據(jù)會(huì)話表中追蹤機(jī)制實(shí)現(xiàn)相應(yīng)的修改

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

[root@wtc?~]iptables?-t?nat?-A?POSTROUTING?-s?172.18.42.200?-d?172.18.42.201?-p?tcp?--dport?80?-j?SNAT?--to-source?172.18.42.202 ##請(qǐng)求80端口的是172.18.42.202主機(jī),但正在請(qǐng)求的卻是172.18.42.200主機(jī)

(4)DNAT(遠(yuǎn)程主機(jī)請(qǐng)求本地服務(wù)器):目標(biāo)地址轉(zhuǎn)換;發(fā)生在prerouting????????????

????????修改IP報(bào)文中的目標(biāo)IP

????????使用場景:讓本地網(wǎng)絡(luò)中的吳福氣使用統(tǒng)一的地址想外提供服務(wù),但隱藏了自己的真實(shí)地址

????????請(qǐng)求:有外網(wǎng)主機(jī)發(fā)情,修改其目標(biāo)地址,由管理員定義

????????響應(yīng):修改源地址,但由nat自動(dòng)根據(jù)會(huì)話表中的追蹤機(jī)制來實(shí)現(xiàn)相對(duì)應(yīng)的修改

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

[root@wtc?~]iptables?-t?nat?-A?PREROUTING?-s?172.18.42.200?-d?172.18.42.201?-p?tcp?--dport?80?-j?DNAT?--to-destination?172.18.42.202 ##請(qǐng)求的是172.18.42.201的80端口,但真正提供服務(wù)的卻是172.18.42.202的80端口 [root@wtc?~]iptables?-t?nat?-A?PREROUTING?-s?172.18.42.200?-d?172.18.42.201?-p?tcp?--dport?80?-j?DNAT?--to-destination?172.18.42.202:8080 ##真正提供服務(wù)的是172.18.42.202的8080端口

(5)MASQUERADE:源地址轉(zhuǎn)換;發(fā)生在postrouting

????????當(dāng)源地址為動(dòng)態(tài)獲取的地址時(shí),MASQUERADE會(huì)自動(dòng)判斷要轉(zhuǎn)換為的地址

[root@wtc?~]iptables?-t?nat?-A?POSTROUTING?-s?0/0?-d?172.18.42.201?-j?MASQUERADE


本文出自 “wtc” 博客,請(qǐng)務(wù)必保留此出處http://wangtianci.blog.51cto.com/11265133/1769849

轉(zhuǎn)載于:https://blog.51cto.com/lz001/1827157

總結(jié)

以上是生活随笔為你收集整理的关于iptables的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。