您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關(guān)有用的iptables常用示例有哪些,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
格式
iptables [-t 表名] 選項 [鏈名] [條件] [-j 控制類型]
-P 設(shè)置默認策略:iptables -P INPUT (DROP|ACCEPT)
-F 清空規(guī)則鏈
-L 查看規(guī)則鏈
-A 在規(guī)則鏈的末尾加入新規(guī)則
-I num 在規(guī)則鏈的頭部加入新規(guī)則
-D num 刪除某一條規(guī)則
-s 匹配來源地址IP/MASK,加嘆號”!”表示除這個IP外。
-d 匹配目標地址
-i 網(wǎng)卡名稱 匹配從這塊網(wǎng)卡流入的數(shù)據(jù)
-o 網(wǎng)卡名稱 匹配從這塊網(wǎng)卡流出的數(shù)據(jù)
-p 匹配協(xié)議,如tcp,udp,icmp
–dport num 匹配目標端口號
–sport num 匹配來源端口號
在開始創(chuàng)建iptables規(guī)則之前,你也許需要刪除已有規(guī)則。命令如下:
iptables -F(or)iptables –flush
鏈的默認政策設(shè)置為”ACCEPT”(接受),若要將INPUT,FORWARD,OUTPUT鏈設(shè)置成”DROP”(拒絕),命令如下:
iptables -P INPUT DROPiptables -P FORWARD DROPiptables -P OUTPUT DROP
當INPUT鏈和OUTPUT鏈都設(shè)置成DROP時,對于每一個防火墻規(guī)則,我們都應(yīng)該定義兩個規(guī)則。例如:一個傳入另一個傳出。在下面所有的例子中,由于我們已將DROP設(shè)置成INPUT鏈和OUTPUT鏈的默認策略,每種情況我們都將制定兩條規(guī)則。當然,如果你相信你的內(nèi)部用戶,則可以省略上面的最后一行。例如:默認不丟棄所有出站的數(shù)據(jù)包。在這種情況下,對于每一個防火墻規(guī)則要求,你只需要制定一個規(guī)則——只對進站的數(shù)據(jù)包制定規(guī)則。
例:丟棄來自IP地址x.x.x.x的包
BLOCK_THIS_IP="x.x.x.x"iptables -A INPUT -s "$BLOCK_THIS_IP" -j DROP
注:當你在log里發(fā)現(xiàn)來自某ip地址的異常記錄,可以通過此命令暫時阻止該地址的訪問以做更深入分析
例:阻止來自IP地址x.x.x.x eth0 tcp的包
iptables -A INPUT -i eth0 -s "$BLOCK_THIS_IP" -j DROPiptables -A INPUT -i eth0 -p tcp -s "$BLOCK_THIS_IP" -j DROP
例:允許所有來自外部的SSH連接請求,即只允許進入eth0接口,并且目標端口為22的數(shù)據(jù)包
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
例:僅允許來自于192.168.100.0/24域的用戶的ssh連接請求
iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
例:允許所有來自web – http的連接請求
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
例:允許所有來自web – https的連接請求
iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
允許多個端口從外界連入,除了為每個端口都寫一條獨立的規(guī)則外,我們可以用multiport將其組合成一條規(guī)則。如下所示:
例:允許所有ssh,http,https的流量訪問
iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
請注意,這與允許ssh連入的規(guī)則略有不同。本例在OUTPUT鏈上,我們允許NEW和ESTABLISHED狀態(tài)。在INPUT鏈上,我們只允許ESTABLISHED狀態(tài)。ssh連入的規(guī)則與之相反。
例:僅允許從內(nèi)部連接到網(wǎng)域192.168.100.0/24
iptables -A OUTPUT -o eth0 -p tcp -d 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
下面的規(guī)則允許輸出安全的網(wǎng)絡(luò)流量。如果你想允許用戶訪問互聯(lián)網(wǎng),這是非常有必要的。在服務(wù)器上,這些規(guī)則能讓你使用wget從外部下載一些文件
iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
注:對于HTTP web流量的外聯(lián)請求,只需要將上述命令中的端口從443改成80即可。
使用iptables可以實現(xiàn)傳入web流量的負載均衡,我們可以傳入web流量負載平衡使用iptables防火墻規(guī)則。
例:使用iptables nth將HTTPS流量負載平衡至三個不同的ip地址。
iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:443iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 1 -j DNAT --to-destination 192.168.1.102:443iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 2 -j DNAT --to-destination 192.168.1.103:443
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPTiptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPTiptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
例:在服務(wù)器上允許127.0.0.1回環(huán)訪問。
iptables -A INPUT -i lo -j ACCEPTiptables -A OUTPUT -o lo -j ACCEPT
防火墻服務(wù)器上的其中一個網(wǎng)卡連接到外部,另一個網(wǎng)卡連接到內(nèi)部服務(wù)器,使用以下規(guī)則允許內(nèi)部網(wǎng)絡(luò)與外部網(wǎng)絡(luò)的通信。此例中,eth2連接到外部網(wǎng)絡(luò)(互聯(lián)網(wǎng)),eth0連接到內(nèi)部網(wǎng)絡(luò)(例如:192.168.1.x)。
iptables -A FORWARD -i eth0 -o eth2 -j ACCEPT
iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPTiptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT
如果你使用NIS管理用戶帳戶,你需要允許NIS連接。如果你不允許NIS相關(guān)的ypbind連接請求,即使SSH連接請求已被允許,用戶仍然無法登錄。NIS的端口是動態(tài)的,先使用命令rpcinfo –p來知道端口號,此例中為853和850端口。
rpcinfo -p | grep ypbind
例:允許來自111端口以及ypbind使用端口的連接請求
iptables -A INPUT -p tcp --dport 111 -j ACCEPTiptables -A INPUT -p udp --dport 111 -j ACCEPTiptables -A INPUT -p tcp --dport 853 -j ACCEPTiptables -A INPUT -p udp --dport 853 -j ACCEPTiptables -A INPUT -p tcp --dport 850 -j ACCEPTiptables -A INPUT -p udp --dport 850 -j ACCEPT
注:當你重啟ypbind之后端口將不同,上述命令將無效。有兩種解決方案:1)使用你NIS的靜態(tài)IP 2)編寫shell腳本通過“rpcinfo – p”命令自動獲取動態(tài)端口號,并在上述iptables規(guī)則中使用。
例:允許來自網(wǎng)絡(luò)192.168.101.0/24的rsync連接請求
iptables -A INPUT -i eth0 -p tcp -s 192.168.101.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT
很多情況下,MySQL數(shù)據(jù)庫與web服務(wù)跑在同一臺服務(wù)器上。有時候我們僅希望DBA和開發(fā)人員從內(nèi)部網(wǎng)絡(luò)(192.168.100.0/24)直接登錄數(shù)據(jù)庫,可嘗試以下命令:
iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT
Sendmail和postfix都使用了25端口,因此我們只需要允許來自25端口的連接請求即可。
iptables -A INPUT -i eth0 -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT
例:允許IMAP/IMAP2流量,端口為143
iptables -A INPUT -i eth0 -p tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp --sport 143 -m state --state ESTABLISHED -j ACCEPT
例:允許IMAPS流量,端口為993
iptables -A INPUT -i eth0 -p tcp --dport 993 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp --sport 993 -m state --state ESTABLISHED -j ACCEPT
例:允許POP3訪問
iptables -A INPUT -i eth0 -p tcp --dport 110 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp --sport 110 -m state --state ESTABLISHED -j ACCEPT
例:允許POP3S訪問
iptables -A INPUT -i eth0 -p tcp --dport 995 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp --sport 995 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
上述例子中:
-m limit: 啟用limit擴展
–limit 25/minute: 允許最多每分鐘25個連接(根據(jù)需求更改)。
–limit-burst 100: 只有當連接達到limit-burst水平(此例為100)時才啟用上述limit/minute限制。
例:將來自422端口的流量全部轉(zhuǎn)到22端口。
這意味著我們既能通過422端口又能通過22端口進行ssh連接。啟用DNAT轉(zhuǎn)發(fā)。
iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22
除此之外,還需要允許連接到422端口的請求
iptables -A INPUT -i eth0 -p tcp --dport 422 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp --sport 422 -m state --state ESTABLISHED -j ACCEPT
第一步:新建名為LOGGING的鏈
iptables -N LOGGING
第二步:將所有來自INPUT鏈中的數(shù)據(jù)包跳轉(zhuǎn)到LOGGING鏈中
iptables -A INPUT -j LOGGING
第三步:為這些包自定義個前綴,命名為”IPTables Packet Dropped”
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7
第四步:丟棄這些數(shù)據(jù)包
iptables -A LOGGING -j DROP
看完上述內(nèi)容,你們對有用的iptables常用示例有哪些有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。