Linux IPTables 常用規則及示例


本文將幫助您建立可直接用於日常需求的 IPTables 規則。這些示例將作為基本模板,您可以根據這些規則並結合您的具體需求來操作 iptables。

刪除 IPTables 或現有規則

在開始構建新的 IPTables 規則集之前,您應該清理所有預設規則和現有規則。使用 IPTables flush 命令,以下是一些示例:

#iptables --flush
(or)
# iptables --F

預設策略鏈

預設策略為 ACCEPT,將 INPUT、FORWARD、OUTPUT 的策略更改為 DROP。

# iptables -P INPUT DROP
# iptables -P FORWARD DROP
# iptables -P OUTPUT DROP

對於每個防火牆規則,我們需要定義兩條規則,即一條用於入站,另一條用於出站。

如果我們信任內部使用者,我們可以對入站規則使用 DROP,而默認出站將為 ACCEPT。

允許 HTTP & HTTPS 入站連線

以下規則將允許所有 HTTP & HTTPS (80 & 443) 的入站流量。

iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

僅允許 SSH 連線到網路

以下規則僅允許來自內部網路的出站 ssh 連線,這意味著我們只能從 192.168.87.0/24 網路進行 ssh 連線。

iptables -A OUTPUT -o eth0 -p tcp -d 192.168.100.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT

允許 TCP 流量的入站 MySQL 埠 (3306)。

以下示例展示了 eth0 網絡卡上 3306 埠 (mysql) 的入站和出站流量。

iptables -A INPUT -i eth0 -p tcp --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT

允許特定網路的入站 MySQL 埠 (3306)

以下示例將允許特定網路 192.168.87.x 使用 3306 (mysql) 埠。

iptables -A INPUT -i eth0 -p tcp -s 192.168.87.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT

使用單條規則允許多個埠

以下規則將允許來自外部的多個埠的入站連線,而不是編寫多條規則,我們也可以像下面這樣一起編寫多埠規則。

這裡,我們允許 mysql、Http 和 Https 在一條規則中。

iptables -A INPUT -i eth0 -p tcp -m multiport --dports 3306,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 3306,80,443 -m state --state ESTABLISHED -j ACCEPT

允許出站 MySQL

這與入站連線不同,我們在 OUTPUT 鏈上允許新的和已建立的連線,而在 INPUT 中,我們只允許已建立的連線。

當我們嘗試從 Linux 機器連線到 MySQL 伺服器時,此規則將僅允許出站 MySQL 連線。

iptables -A OUTPUT -o eth0 -p tcp --dport 3306-m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT

允許 Sendmail 流量

這些規則將允許使用 sendmail 或 postfix 25 埠傳送郵件。

iptables -A INPUT -i eth0 -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT

允許 IMAP & POP3 埠

此規則將允許傳送或接收來自 IMAP 或 POP3 的電子郵件。

iptables -A INPUT -i eth0 -p tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 143 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 110 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 110 -m state --state ESTABLISHED -j ACCEPT

將 5722 埠轉發到 22(SSH)

這些規則將轉發來自 5722 埠的所有流量到 22 埠。這意味著,ssh 的入站連線可以來自 5722 和 22 埠。

iptables -t nat -A PREROUTING -p tcp -d 192.168.87.100 --dport 5722 -j DNAT --to 192.168.87.200:22

允許 873 (rsync) 埠進行備份

這些規則將允許您使用 rsync 從特定網路進行備份或複製資料。

iptables -A INPUT -i eth0 -p tcp -s 192.168.87.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT

阻止 IP 地址

如果我們想阻止特定的 IP 地址。

BLOCK_ADDRESS="192.168.87.100"
# iptables -A INPUT -s "$BLOCK_ADDRESS" -j DROP

如果我們想阻止某些正在下載或嘗試訪問伺服器的 IP 地址,這將非常有用,我們可以阻止該 IP 地址以進行進一步調查。

# iptables -A INPUT -i eth0 -s “$ BLOCK_ADDRESS ” -j DROP
# iptables -A INPUT -i eth0 -p tcp -s “$ BLOCK_ADDRESS ” -j DROP

以上示例將阻止 eth0 上針對該特定 IP 地址的 TCP/IP 流量。

如果要限制來自外部的伺服器訪問,可以在變數中新增網路。

透過使用以上 iptables 規則或修改規則和埠,我們可以保護連線或網路/伺服器的安全。我們還可以根據需要修改網路或埠以適應我們的環境。這些 iptables 規則以簡單的 shell 指令碼格式編寫,因此我們可以在編寫 shell 指令碼時將它們應用於多個伺服器。

更新於:2020年1月31日

瀏覽量:10K+

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.