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 指令碼時將它們應用於多個伺服器。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP