防火墻 之 iptables 匹配條件講解

1? 概述

iptables命令中庐橙,需要根據匹配的條件作出相應的動作羞海,本文將結合例子粒没,講解匹配條件

匹配條件分為基本和擴展的條件

基本:通用的,PARAMETERS藻懒,無需加載模塊剔猿,由iptables/netfilter自行提供

擴展:需要加載擴展模塊(/usr/lib64/xtables/*.so),方可生效嬉荆。其中擴展分為顯示擴展隱式擴展

2實驗環(huán)境準備:

.Centos7:

因為在centos7上归敬,firewalld和iptables是二選一,這里禁用默認的firewalld员寇,啟用iptables

systemctl? stop firewalld.service

systemctl? disable firewalld.service

.Centos6:

centos6上執(zhí)行以下兩個語句弄慰,關掉默認的防火墻策略第美,而不是直接禁用防火墻蝶锋。可以用自定義的防火墻策略

service iptables? stop;

chkconfig??? iptables?off什往;

3基本匹配條件:

無需加載模塊扳缕,由iptables/netfilter自行提供

iptables命令本身就帶有這些功能,不需要添加模塊别威。

定義防火墻要注意躯舔,不要制定錯誤的策略,把自己拒絕了省古。

[!] -s, --sourceaddress[/mask][,...]:源IP地址或范圍

這里可以用!感嘆號表示取反粥庄,如下語句表示僅允許192.168.32.65這個ip,其他的ip都拒絕了豺妓。注意惜互,以下的語句如果192.168.32.65不是本機ip的話,則此次連接就會被拒絕琳拭。這個要注意训堆。

iptables -A INPUT ! -s 192.168.32.65 -j REJECT

表示除了192.168.32.0/24的網段不拒絕,其他網段都拒絕

iptables -A INPUT ! -s192.168.32.0/24 -j REJECT

[!] -d, --destinationaddress[/mask][,...]:目標IP地址或范圍

[!] -p, --protocol protocol:指定協(xié)議白嘁,可使用數字如0(all)

protocol: tcp, udp, icmp,icmpv6,udplite,esp, ah, sctp, mh?? or“all“參看:/etc/protocols

[!] -i, --in-interface name:報文流入的接口坑鱼;只能應用于數據

報文流入環(huán)節(jié),只應用于INPUT絮缅、FORWARD鲁沥、PREROUTING鏈

#以下策略表示eth0拒絕icmp協(xié)議,即禁ping

iptables -A INPUT -i eth0 -p icmp -j REJECT

[!] -o, --out-interface name:報文流出的接口耕魄;只能應用于數據報文流出的環(huán)節(jié)黍析,只應用于FORWARD、OUTPUT屎开、POSTROUTING鏈

4擴展匹配條件:

需要加載擴展模塊(/usr/lib64/xtables/*.so)阐枣,方可生效

.查看幫助maniptables-extensions

4.1隱式擴展:

在使用-p選項指明了特定的協(xié)議時马靠,無需再用-m選項指明擴展模塊的擴展機制,不需要手動加載擴展模塊蔼两。

.tcp協(xié)議的擴展選項

[!] --source-port, --sportport[:port]:匹配報文源端口,可為端口范圍

[!] --destination-port,--dport? port[:port]:匹配報文目標端口,可為范圍

[!] --tcp-flags mask comp

例子:禁止tcp協(xié)議的80端口被訪問

iptables -A INPUT -p tcp--dport 80 -j REJECT

mask需檢查的標志位列表甩鳄,用,分隔

例如SYN,ACK,FIN,RST

comp在mask列表中必須為1的標志位列表,無指定則必須為0额划,用,分隔

tcp協(xié)議的擴展選項

.示例:

--tcp-flags SYN,ACK,FIN,RST SYN表示要檢查的標志位為SYN,ACK,FIN,RST四個妙啃,其中SYN必須為1,余下的必須為0

#以下例子表示要檢查SYN,ACK,FIN,RST四位俊戳,其中SYN,ACK必須為1揖赴,FIN,RST必須為0.

--tcp-flags SYN,ACK,FIN,RST SYN,ACK

#表示檢查所有的位都為1,這個是不正常的報文抑胎,可能是黑客構造的問題報文

--tcp-flags ALL ALL

#表示檢查所有的位都為0燥滑,這個也是不正常報文

--tcp_flagsALL NONE

.[!] --syn:用于匹配第一次握手

相當于:--tcp-flagsSYN,ACK,FIN,RST SYN

.udp協(xié)議的擴展選項

[!] --source-port, --sportport[:port]:匹配報文的源端口;可以是端口范圍

port[:port]:這里的端口是多個端口阿逃,但是必須是連續(xù)的端口

[!]--destination-port,--dportport[:port]:匹配報文的目標端口铭拧;可以是端口范圍

.icmp協(xié)議的擴展選項

[!] --icmp-type{type[/code]|typename}

type/code

0/0 echo-reply????? icmp應答

#以下命令禁止了主機去ping其他主機,因為這樣該機器就不能收到其他主機發(fā)回來的應答的ping包恃锉。

iptables -A INPUT -p icmp--icmp-type 0 -j REJECT

8/0 echo-request icmp請求

#如以下命令拒絕了ping的請求包搀菩,該主機就禁止別的主機來ping,因為把ping的請求包都拒絕了

iptables -A INPUT -p icmp--icmp-type 8 -j REJECT

4.2顯式擴展:

必須使用-m選項指明要調用的擴展模塊的擴展機制破托,要手動加載擴展模塊肪跋,[-mmatchname? [per-match-options]]

.使用幫助,查看顯示擴展的選項

CentOS 6: man iptables

CentOS 7: man iptables-extensions

.1土砂、multiport擴展

注意要加上-m州既,表示要調用multiport這個模塊

以離散方式定義多端口匹配,最多指定15個端口

[!] --source-ports,--sportsport[,port|,port:port]...:指定多個源端口

#以下例子表示拒絕源主機是172.18.50.75的機器的80和21端口的包∥林ィ控制本主機訪問指定主機的指定端口

iptables -A INPUT -s172.18.50.75? -p tcp -m multiport--sports 80,21 -j REJECT

[!]--destination-ports,--dports??port[,port|,port:port]...:指定多個目標端口易桃,這個配置是禁止別的主機來訪問本主機的這些端口⌒烤悖控制別的主機來訪問本主機的指定端口

[!] --portsport[,port|,port:port]...多個源或目標端口

#示例一:

# -s 172.16.0.0/16表示禁止172.16.0.0/16這個網段的主機來訪問

iptables-A INPUT -s 172.16.0.0/16 -d172.16.100.10 -p tcp? -m multiport--dports? 20:22,80 -j ACCEPT

#例子二

iptables -A INPUT -s172.18.50.73 -p tcp -m multiport --dports 80,22 -j REJECT

.2晤郑、iprange擴展

指明連續(xù)的(但一般不是整個網絡)ip地址范圍

[!] --src-range from[-to]源IP地址范圍

#以下語句本機將拒絕來自172.18.50.60-172.18.50.80的ssh連接和80端口的訪問

iptables -A INPUT -miprange --src-range 172.18.50.60-172.18.50.80 -p tcp -m multiport --dports22,80 -j REJECT

[!] --dst-range from[-to]目標IP地址范圍

#以下將本機將拒絕去往172.18.50.60-172.18.50.80ssh連接80端口的訪問

iptables -A INPUT -miprange --dst-range 172.18.50.60-172.18.50.80 -p tcp -m multiport --dports22,80 -j REJECT

#表示來自172.16.100.5-172.16.100.10的ip訪問172.16.100.10這臺主機的80端口都拒絕

iptables -A INPUT -d 172.16.100.10-p tcp --dport 80 -m iprange?--src-range172.16.100.5-172.16.100.10 -j DROP

.3、mac擴展

指明源MAC地址

適用于:PREROUTING,FORWARD贸宏,INPUTchains

[!] --mac-source XX:XX:XX:XX:XX:XX

示例:

#拒絕源ip172.16.0.100的網卡mac為00:50:56:12:34:56的訪問

iptables -A INPUT -s 172.16.0.100 -mmac --mac-source 00:50:56:12:34:56

-j ACCEPT

#拒絕來自源ip:172.16.0.100的所有訪問

iptables-A INPUT -s 172.16.0.100 -jREJECT

.4造寝、string擴展

對報文中的應用層數據做字符串模式匹配檢測

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

bm:Boyer-Moore

kmp:Knuth-Pratt-Morris

--from offset開始偏移

--to offset結束偏移

[!] --string pattern:要檢測的字符串模式,只能處理明文數據

[!] --hex-string pattern:要檢測字符串模式吭练,16進制格式

示例:

#禁止去往目的地是172.18.50.75的80端口中包含有sunny的數據包

iptables -A OUTPUT -d172.18.50.75 -p tcp --sport 80 -m string --algo bm --string "sunny"-j REJECT

#禁止來自172.18.50.75的80端口返回的包中有sunny字符串的包

iptables -A INPUT -s172.18.50.75 -p tcp --sport 80 -m string --algo bm --string "sunny"-j REJECT

.5诫龙、time擴展

根據將報文到達的時間與指定的時間范圍進行匹配

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

--datestopYYYY[-MM[-DD[Thh[:mm[:ss]]]]]

--timestart hh:mm[:ss]時間

--timestop hh:mm[:ss]

[!] --monthdays day[,day...]每個月的幾號

[!] --weekdays day[,day...]星期幾

--kerneltz:內核時區(qū),本地時間鲫咽,不建議使用签赃,CentOS7系統(tǒng)默認為UTC谷异,所以需要轉換時間,差八個小時

注意:centos6不支持kerneltz锦聊,--localtz指定本地時區(qū)(默認)歹嘹,centos6默認使用本地時間

注意:默認情況下,centos7用的是UTC時間(世界協(xié)調時間:UniversalTime Coordinated)孔庭,而中國主機一般都是用CST時間(China Standard TimeUT8:00)尺上,UTC時間比CST時間晚八個小時,所以在centos7上通過iptables來定義時間范圍時圆到,如果系統(tǒng)使用CST時間怎抛,就要減去8個小時,如要定義時間為9:00--18:00芽淡,那么用iptables定義的時間應該是1:00--10:00

centos6默認則是使用的是當地時間马绝,即在中國就是使用CST時間,不需要減去8小時進行轉換

示例:

centos6上以下這配置表示CST時間9:00--12:55吐绵。不允許其他主機訪問80端口

centos7上以下這配置表示UTC時間9:00--12:55迹淌,要轉換為CST時間河绽,需要加上8小時己单,即表示CST時間17:00--20:55期間不允許訪問80端口

iptables -A INPUT -m time--timestart 09:00 --timestop 12:55 -p tcp --dport 80 -j REJECT

在centos6上,以下語句表示星期3,5,6這三天CST時間9:00--12:55期間不允許其他主機訪問80端口

iptables -R INPUT 1 -mtime --weekdays Wed,Fr,Sa --timestart 09:00 --timestop 12:55 -p tcp --dport 80-j REJECT

.6耙饰、connlimit擴展

根據每客戶端IP做并發(fā)連接數數量匹配,可防止CC(ChallengeCollapsar挑戰(zhàn)黑洞)攻擊

--connlimit-upton:連接的數量小于等于n時匹配纹笼,小于或者等于多少的這個數字一般是允許的

--connlimit-above n:連接的數量大于n時匹配,一般大于多少的時候是拒絕

通常分別與默認的拒絕或允許策略配合使用

示例:

#表示同一個主機ip來連接時苟跪,只允許一個ip的ssh進行連接廷痘,當同一ip超過一個ssh連接的時候拒絕ssh連接.但是如果客戶端不是復制出來的時候,那么就不會拒絕

iptables -A INPUT -p tcp--dport 22 -m connlimit --connlimit-above 1 -j REJECT

#以下語句表示訪問80端口的并發(fā)數超過15的時候件已,就拒絕訪問笋额,可以用ab -c 15-n 1000 http://172.18.50.65/這個命令進行測試,當并發(fā)數大于15的時候就會拒絕訪問

iptables -A INPUT -p tcp--dport 80 -m connlimit --connlimit-above 15 -j REJECT

.7篷扩、limit擴展

基于收發(fā)報文的速率做匹配

令牌桶過濾器

--limit rate[/second|/minute|/hour|/day]表示每分鐘或者每秒允許通過多少

--limit-burst number:表示前面幾個包不限制兄猩,超過多少的時候開始限制

兩個選項要一起使用

示例:

#以下語句表示前5個包icmp的請求包不限制,超過5個包后鉴未,每分鐘只運行3個枢冤,

iptables -A INPUT -d 172.16.100.10-p icmp?--icmp-type 8 -m limit --limit3/minute --limit-burst 5 -j ACCEPT

#插入第2條記錄,拒絕所有的icmp請求包

iptables -A INPUT 2 -p icmp -j REJECT

以上兩條規(guī)則要一起加铜秆。默認的行為就拒絕

.8淹真、state擴展

根據”連接追蹤機制“去檢查連接的狀態(tài),較耗資源

.conntrack機制:追蹤本機上的請求和響應之間的關系

.狀態(tài)有如下幾種:

這里的狀態(tài)跟蹤和tcp的狀態(tài)是不一樣的概念连茧。

一般做防火墻策略時核蘸,新發(fā)起的請求拒絕巍糯,但是已經是連接狀態(tài)的包是被允許的。而且一般把允許已經連接的策略放在前面客扎。

NEW:新發(fā)出請求鳞贷;連接追蹤信息庫中不存在此連接的相關信息條目,因此虐唠,將其識別為第一次發(fā)出的請求

ESTABLISHED:NEW狀態(tài)之后搀愧,連接追蹤信息庫中為其建立的條目失效之前期間內所進行的通信狀態(tài)

RELATED:新發(fā)起的但與已有連接相關聯(lián)的連接,如:ftp協(xié)議中的數據連接與命令連接之間的關系

INVALID:無效的連接疆偿,如flag標記不正確

UNTRACKED:未進行追蹤的連接咱筛,如raw表中關閉追蹤

.[!] --state state

.示例:

iptables? -A INPUT -d 172.16.100.10 -p tcp? -m? multiport --dports22,80 -m state --stateNEW,ESTABLISHED -j ACCEPT

一般把正在建立連接的防火墻策略放在前面。這樣不好影響正在連接的用戶杆故,而且效率高迅箩。常用的要放在前面。

iptables? -A OUTPUT -s 172.16.100.10 -p tcp? -m multiport --sports 22,80 -m state --stateESTABLISHED -j ACCEPT

.已經追蹤到的并記錄下來的連接信息庫

/proc/net/nf_conntrack

.調整連接追蹤功能所能夠容納的最大連接數量处铛,這個數值可以更改

/proc/sys/net/nf_conntrack_max

.不同的協(xié)議的連接追蹤時長

/proc/sys/net/netfilter/

.注意:CentOS7需要加載模塊:modprobe? nf_conntrack

.iptables的鏈接跟蹤表最大容量為/proc/sys/net/nf_conntrack_max饲趋,各種狀態(tài)的超時鏈接會從表中刪除;當模板滿載時撤蟆,后續(xù)連接可能會超時

.解決方法兩個:

(1)加大nf_conntrack_max值奕塑,編輯/etc/sysctl.conf這個文件,寫入.nf_conntrack_max = 200000將改為20000.重啟網絡服務后生效

vi /etc/sysctl.conf

net.nf_conntrack_max= 393216

net.netfilter.nf_conntrack_max=393216

(2)降低nf_conntrack? timeout時間

vi /etc/sysctl.conf

net.netfilter.nf_conntrack_tcp_timeout_established=300

net.netfilter.nf_conntrack_tcp_timeout_time_wait=120

net.netfilter.nf_conntrack_tcp_timeout_close_wait=60

net.netfilter.nf_conntrack_tcp_timeout_fin_wait=120

iptables? -t nat?-L -n

9家肯、開放被動模式的ftp服務例子

.(1)裝載ftp連接追蹤的專用模塊:

一般不定義OUTPUT龄砰,否則很可能會把自己主機出去的連接拒絕。

跟蹤模塊路徑:/lib/modules/kernelversion/kernel/net/netfilter

vim /etc/sysconfig/iptables-config #配置文件

IPTABLES_MODULES="nf_conntrack_ftp"

modprobe? nf_conntrack_ftp

檢查:lsmod | grep ftp查看是否成功加載模塊讨衣,nf_conntrack_ftp這個模塊如果不加載换棚,將不能識別ftp服務,不能進行跟蹤反镇,導致策略失敗

.(2)放行請求報文:

命令連接:NEW,ESTABLISHED

數據連接:RELATED,ESTABLISHED

iptables? –IINPUT -d LocalIP? -p tcp? -m state --state ??RELATED,ESTABLISHED -j ACCEPT

iptbles? -A INPUT -d LocalIP? -p tcp--dport?21 -m state --state NEW -j ACCEPT

例子

iptables -A INPUT -m state--state ESTABLISHED,RELATED -j ACCEPT

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

.(3)放行響應報文:

#這一步可以不操作

iptables? -I OUTPUT?-s LocalIP? -p tcp-m state --state? ESTABLISHED -j ACCEPT

開放被動模式的ftp服務示例

yum install vsftpd

systemctl start vsftpd

modprobe nf_conntrack_ftp

iptables -F

iptables -A INPUT -m state--state RELATED,ESTABLISHED -j ACCEPT

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

iptables -A OUTPUT -mstate --state ESTABLISHED -j ACCEPT

iptables -P INPUT DROP

iptables -P OUTPUT DROP

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末固蚤,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子歹茶,更是在濱河造成了極大的恐慌夕玩,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辆亏,死亡現場離奇詭異风秤,居然都是意外死亡,警方通過查閱死者的電腦和手機扮叨,發(fā)現死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門缤弦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人彻磁,你說我怎么就攤上這事碍沐±晖保” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵累提,是天一觀的道長尘喝。 經常有香客問我,道長斋陪,這世上最難降的妖魔是什么朽褪? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮无虚,結果婚禮上缔赠,老公的妹妹穿的比我還像新娘。我一直安慰自己友题,他們只是感情好嗤堰,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著度宦,像睡著了一般踢匣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上戈抄,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天离唬,我揣著相機與錄音,去河邊找鬼呛凶。 笑死男娄,一個胖子當著我的面吹牛行贪,可吹牛的內容都是我干的漾稀。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼建瘫,長吁一口氣:“原來是場噩夢啊……” “哼崭捍!你這毒婦竟也來了?” 一聲冷哼從身側響起啰脚,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤殷蛇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后橄浓,有當地人在樹林里發(fā)現了一具尸體粒梦,經...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年荸实,在試婚紗的時候發(fā)現自己被綠了匀们。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡准给,死狀恐怖泄朴,靈堂內的尸體忽然破棺而出重抖,到底是詐尸還是另有隱情,我是刑警寧澤祖灰,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布钟沛,位于F島的核電站,受9級特大地震影響局扶,放射性物質發(fā)生泄漏恨统。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一三妈、第九天 我趴在偏房一處隱蔽的房頂上張望延欠。 院中可真熱鬧,春花似錦沈跨、人聲如沸由捎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狞玛。三九已至,卻和暖如春涧窒,著一層夾襖步出監(jiān)牢的瞬間心肪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工纠吴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留硬鞍,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓戴已,卻偏偏與公主長得像固该,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子糖儡,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內容