16個系統(tǒng)管理員常用的iptables技巧
iptables提供強大的功能來控制進(jìn)出系統(tǒng)的流量。
現(xiàn)代Linux內(nèi)核附帶了一個名為Netfilter的包過濾框架。Netfilter可以允許,刪除和修改進(jìn)出系統(tǒng)的流量。iptables用戶空間命令行工具以此功能為基礎(chǔ),提供強大的防火墻,可以通過添加規(guī)則來配置防火墻以形成防火墻策略。iptables因其豐富的功能和巴洛克式命令語法而非常令人生畏。讓我們探討其中的一些為系統(tǒng)管理員可能遇到許多情況的一套iptables技巧和竅門。
避免鎖定自己
場景:你將對公司主服務(wù)器上的iptables策略規(guī)則進(jìn)行更改。你想避免鎖定自己 ,可能還有其他所有人。(這會花費時間和金錢,導(dǎo)致半夜手機(jī)響起。)
提示#1:在開始處理iptables配置之前先備份它。
使用以下命令備份配置:
- /sbin/iptables-save > /root/iptables-works
提示#2:更好的方法是,在文件名中包含一個時間戳。
使用以下命令添加時間戳:
- /sbin/iptables-save > /root/iptables-works-`date +%F`
你得到一個名稱如下的文件:
- /root/iptables-works-2018-09-11
如果你做了阻止系統(tǒng)工作的事情,你可以快速恢復(fù)它:
提示#3:每次創(chuàng)建iptables策略的備份副本時,都要在名稱中創(chuàng)建一個指向“latest”的文件的鏈接。
- ln –s /root/iptables-works-`date +%F` /root/iptables-works-latest
提示#4:將特定規(guī)則放在底部的策略和通用規(guī)則的頂部。
避免在策略規(guī)則的頂部使用這樣的通用規(guī)則:
- iptables -A INPUT -p tcp --dport 22 -j DROP
在規(guī)則中指定的條件越多,鎖定自己的機(jī)會就越少。而不是上面的非常通用的規(guī)則,使用這樣的內(nèi)容:
- iptables -A INPUT -p tcp --dport 22 –s 10.0.0.0/8 –d 192.168.100.101 -j DROP
此規(guī)則將(-A)附加到INPUT鏈中,規(guī)則將DROP任何源自TCP(-p tcp)端口22( - 端口22)上的CIDR塊10.0.0.0/8的數(shù)據(jù)包發(fā)往IP地址192.168.100.101 (-d 192.168.100.101)。
有很多方法可以更具體。例如,使用-i eth0會將處理限制為服務(wù)器中的單個NIC。這樣,過濾操作將不會將規(guī)則應(yīng)用于eth1。
提示#5:在策略規(guī)則頂部將你的IP地址列入白名單。
這是一種不會鎖定自己的非常有效的方法。
- iptables -I INPUT -s -j ACCEPT
需要將此作為其正常工作的第一條規(guī)則。 記住,-I將其作為第一條規(guī)則插入; -A將其附加到列表的末尾。
提示#6:了解并理解當(dāng)前的所有規(guī)則。
首先不犯錯誤就是成功的一半。如果了解iptables策略背后的內(nèi)部工作原理,它將使你的生活更輕松。如果必須,繪制流程圖。 還要記?。翰呗缘淖饔煤蛻?yīng)該做的事情可能是兩件不同的事情。
設(shè)置工作站防火墻策略
場景:你希望設(shè)置具有限制性防火墻策略的工作站。
提示#1:將默認(rèn)策略設(shè)置為DROP。
- # Set a default policy of DROP
- *filter
- :INPUT DROP [0:0]
- :FORWARD DROP [0:0]
- :OUTPUT DROP [0:0]
提示#2:允許用戶完成工作所需的最少量服務(wù)。
iptables規(guī)則需要允許工作站通過DHCP獲取IP地址,網(wǎng)絡(luò)掩碼和其他重要信息(-p udp --dport 67:68 --sport 67:68)。對于遠(yuǎn)程管理,規(guī)則需要允許入站SSH(--dport 22),出站郵件(--dport 25),DNS( - export 53),出站ping(-p icmp),網(wǎng)絡(luò)時間協(xié)議(--dport 123 --sport 123),以及出站HTTP(--dport 80)和HTTPS(--dport 443)。
- # Set a default policy of DROP
- *filter
- :INPUT DROP [0:0]
- :FORWARD DROP [0:0]
- :OUTPUT DROP [0:0]
- # Accept any related or established connections
- -I INPUT 1 -m state --state RELATED,ESTABLISHED -j ACCEPT
- -I OUTPUT 1 -m state --state RELATED,ESTABLISHED -j ACCEPT
- # Allow all traffic on the loopback interface
- -A INPUT -i lo -j ACCEPT
- -A OUTPUT -o lo -j ACCEPT
- # Allow outbound DHCP request
- -A OUTPUT –o eth0 -p udp --dport 67:68 --sport 67:68 -j ACCEPT
- # Allow inbound SSH
- -A INPUT -i eth0 -p tcp -m tcp --dport 22 -m state --state NEW -j ACCEPT
- # Allow outbound email
- -A OUTPUT -i eth0 -p tcp -m tcp --dport 25 -m state --state NEW -j ACCEPT
- # Outbound DNS lookups
- -A OUTPUT -o eth0 -p udp -m udp --dport 53 -j ACCEPT
- # Outbound PING requests
- -A OUTPUT –o eth0 -p icmp -j ACCEPT
- # Outbound Network Time Protocol (NTP) requests
- -A OUTPUT –o eth0 -p udp --dport 123 --sport 123 -j ACCEPT
- # Outbound HTTP
- -A OUTPUT -o eth0 -p tcp -m tcp --dport 80 -m state --state NEW -j ACCEPT
- -A OUTPUT -o eth0 -p tcp -m tcp --dport 443 -m state --state NEW -j ACCEPT
COMMIT
限制IP地址范圍
場景:貴公司的首席執(zhí)行官認(rèn)為員工在Facebook上花費了太多時間而沒有完成任何工作。 首席執(zhí)行官告訴CIO要對員工在Facebook上浪費時間做些什么。 首席信息官告訴CISO要對員工在Facebook上浪費時間做些什么。 最后,你被告知員工在Facebook上浪費了太多時間,你必須對此做些什么。 你決定阻止對Facebook的所有訪問。首先,使用host和whois命令查找Facebook的IP地址。
- host -t a www.facebook.com
- www.facebook.com is an alias for star.c10r.facebook.com.
- star.c10r.facebook.com has address 31.13.65.17
- whois 31.13.65.17 | grep inetnum
- inetnum: 31.13.64.0 - 31.13.127.255
然后使用CIDR到IPv4轉(zhuǎn)換頁面將該范圍轉(zhuǎn)換為CIDR表示法。 你得到31.13.64.0/18。 要阻止對www.facebook.com的傳出訪問,請輸入:
- iptables -A OUTPUT -p tcp -i eth0 –o eth1 –d 31.13.64.0/18 -j DROP
按時間設(shè)置規(guī)則
場景:拒絕公司員工訪問Facebook的強烈反對導(dǎo)致首席執(zhí)行官放松一點(這和他的行政助理提醒他,她讓HIS Facebook頁面保持最新狀態(tài))。首席執(zhí)行官決定僅在午餐時間(中午12點至下午1點)允許訪問Facebook.com。 假設(shè)默認(rèn)策略是DROP,請使用iptables的時間功能打開訪問權(quán)限。
- iptables –A OUTPUT -p tcp -m multiport --dport http,https -i eth0 -o eth1 -m time --timestart 12:00 --timestart 12:00 –timestop 13:00 –d
- 31.13.64.0/18 -j ACCEPT
此命令將策略設(shè)置為允許(-j ACCEPT)http和https(-m multiport --dport http,https)在中午(--timestart 12:00)和13PM(--timestop 13:00)之間到Facebook.com (-d 31.13.64.0/18)。
按時間調(diào)整-Take 2
場景:在計劃的系統(tǒng)維護(hù)停機(jī)期間,需要在凌晨2點到凌晨3點之間拒絕所有TCP和UDP流量,這樣維護(hù)任務(wù)就不會受到傳入流量的干擾。 這將采取兩個iptables規(guī)則:
- iptables -A INPUT -p tcp -m time --timestart 02:00 --timestop 03:00 -j DROP
- iptables -A INPUT -p udp -m time --timestart 02:00 --timestop 03:00 -j DROP
根據(jù)這些規(guī)則,TCP和UDP流量(-p tcp和-p udp)在輸入的2AM(--timestart 02:00)和3AM(--timestop 03:00)之間被拒絕(-j DROP)( - IUPUT)。
限制與iptables的連接
場景:你的互聯(lián)網(wǎng)連接的Web服務(wù)器受到來自世界各地的不良攻擊,他們試圖使用DoS(拒絕服務(wù))。要減輕這些攻擊,你可以限制單個IP地址與Web服務(wù)器之間的連接數(shù):
- iptables –A INPUT –p tcp –syn -m multiport -–dport http,https –m connlimit -–connlimit-above 20 –j REJECT -–reject-with-tcp-reset
讓我們來看看這條規(guī)則的作用。如果主機(jī)在一分鐘內(nèi)向Web服務(wù)器(-dport http,https)發(fā)出超過20個(--connlimit-大于20)個新連接(-p tcp -syn),則拒絕新連接(-j REJECT),并告訴連接主機(jī)你拒絕連接(--reject-with-tcp-reset)。
監(jiān)控iptables規(guī)則
場景:由于iptables在鏈條中遍歷規(guī)則,因此iptables在“首次匹配獲勝”的基礎(chǔ)上運行,因此經(jīng)常匹配的規(guī)則應(yīng)該接近策略的頂部,而不太頻繁匹配的規(guī)則應(yīng)該接近底部。 你怎么知道哪些規(guī)則最多或最少,所以可以在頂部或底部附近訂購?
提示#1:查看每個規(guī)則被擊中的次數(shù)。
使用此命令:
- iptables -L -v -n –line-numbers
該命令將列出鏈中的所有規(guī)則(-L)。由于沒有指定鏈,所有鏈都將列出詳細(xì)輸出(-v),顯示數(shù)字格式的數(shù)據(jù)包和字節(jié)計數(shù)器(-n),每個規(guī)則開頭的行號對應(yīng)于該規(guī)則在鏈中的位置。
使用數(shù)據(jù)包和字節(jié)計數(shù),您可以將最常訪問的規(guī)則排序到頂部,將最不頻繁遍歷的規(guī)則排在最后。
提示#2:刪除不必要的規(guī)則。
哪些規(guī)則根本沒有獲得任何匹配? 這些將是從政策中刪除的良好候選人。你可以用這個命令找到它:
- iptables -nvL | grep -v "0 0"
注意:這不是零之間的標(biāo)簽; 零之間有五個空格。
提示#3:監(jiān)控正在發(fā)生的事情。
不想要實時監(jiān)控iptables的情況,例如top。 使用此命令動態(tài)監(jiān)視iptables活動的活動,并僅顯示正在遍歷的規(guī)則:
- watch --interval=5 'iptables -nvL | grep -v "0 0"'
看跑'iptables -nvL | grep -v“0 0”'每五秒鐘顯示一次輸出的第一個屏幕。 這使可以觀察數(shù)據(jù)包和字節(jié)數(shù)隨時間的變化。
關(guān)于iptables的報告
場景:你的經(jīng)理認(rèn)為這個iptables防火墻的東西很棒,但每日活動報告會更好。有時寫報告比做工作更重要。
使用數(shù)據(jù)包過濾器/防火墻/ IDS日志分析器FWLogwatch根據(jù)iptables防火墻日志創(chuàng)建報告。 FWLogwatch支持許多日志格式并提供許多分析選項。 它生成日志文件的每日和每月摘要,使安全管理員可以節(jié)省大量時間,更好地控制網(wǎng)絡(luò)安全,并減少未被注意的攻擊。
以下是FWLogwatch的示例輸出:
不僅僅是ACCEPT和DROP
我們已經(jīng)涵蓋了iptables的許多方面,從確保在使用iptables監(jiān)視iptables以可視化iptables防火墻的活動時確保你沒有鎖定自己。這些將讓你開始實現(xiàn)更多的iptables提示和技巧。