本指南將嘗試解釋如何在易于理解的語言中使用linux上的iptables。
概覽
iptables是一個基于規則的防火墻,它將按順序處理每個規則,直到找到匹配的規則。Todo:包括這里的例子
用法
iptables實用程序通常預先安裝在您的linux發行版上,但實際上并沒有運行任何規則。大多數發行版都會發現這個實用程序:
/sbin/iptables
阻止單個IP地址
您可以使用-s
參數阻止IP,將10.10.10.10
替換為您要阻止的地址。在這個例子中你會注意到,我們使用-I
參數(或者-insert
也是這樣),而不是追加,因為我們要確保這個規則首先出現在任何允許規則之前。
/sbin/iptables -I INPUT -s 10.10.10.10 -j DROP
允許來自IP地址的所有流量
您可以通過使用與上述相同的命令來交替地允許來自IP地址的所有流量,但用ACCEPT
替換DROP
。在任何DROP
規則之前,您需要確保此規則首先出現。
/sbin/iptables -A INPUT -s 10.10.10.10 -j ACCEPT
阻止所有地址的端口
您可以通過使用-dport
開關并添加要阻止的服務的端口來完全阻止端口通過網絡訪問。在這個例子中,我們將阻止mysql端口:
/sbin/iptables -A INPUT -p tcp --dport 3306 -j DROP
允許從單個IP單個端口
您可以添加-s
命令以及-dport
命令來進一步將規則限制在特定端口:
/sbin/iptables -A INPUT -p tcp -s 10.10.10.10 --dport 3306 -j ACCEPT
查看當前規則
您可以使用以下命令查看當前規則:
/sbin/iptables -L
這應該給你一個類似于以下內容的輸出:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 192.168.1.1/24 anywhere
ACCEPT all -- 10.10.10.0/24 anywhere
DROP tcp -- anywhere anywhere tcp dpt:ssh
DROP tcp -- anywhere anywhere tcp dpt:mysql
當然,實際的輸出會更長一些。
清除當前規則
您可以使用flush
參數清除所有當前的規則。如果您需要將規則放在正確的順序中,或者當您進行測試時,這非常有用
/sbin/iptables --flush
分配特定
雖然大多數Linux發行版都包含一種iptables形式,但其中的一些也包括使管理更容易的包裝。這些“插件”通常采用初始化腳本的形式,這些腳本在啟動時可以初始化iptables,盡管一些發行版還包括嘗試簡化常見情況的全面封裝應用程序。
Gentoo
Gentoo上的iptables初始化腳本能夠處理許多常見的情況。對于初學者,它允許您配置iptables在啟動時加載(通常是您想要的):
rc-update add iptables default
使用init腳本,可以使用易于記憶的命令加載和清除防火墻:
/etc/init.d/iptables start
/etc/init.d/iptables stop
init腳本處理在啟動/停止時持久保留當前防火墻配置的詳細信息。因此,您的防火墻始終處于您離開的狀態。如果需要手動保存新的規則,init腳本也可以處理這個:
/etc/init.d/iptables save
此外,您可以將防火墻還原到先前保存的狀態(對于您正在嘗試使用規則,現在要恢復以前的工作配置):
/etc/init.d/iptables reload
最后,init腳本可以將iptables置于“panic”模式,其中所有傳入和傳出的流量都被阻止。我不知道為什么這種模式是有用的,但所有的Linux防火墻似乎都有
/etc/init.d/iptables panic
警告:如果通過SSH連接到服務器,請不要啟動緊急模式;你將被斷開連接!您應該將iptables置于恐慌模式中的唯一時間是您身體在電腦前。