iptables詳解(12):iptables動作總結之一
前文一直在介紹iptables的匹配條件,並沒有對動作進行過總結,那麽此處,我們就來總結一下iptables中的動作。
之前的舉例中已經用到了一些常用動作,比如ACCEPT、DROP、REJECT等。
其實,"動作"與"匹配條件"一樣,也有"基礎"與"擴展"之分。
同樣,使用擴展動作也需要借助擴展模塊,但是,擴展動作可以直接使用,不用像使用"擴展匹配條件"那樣指定特定的模塊。
之前用到的ACCEPT與DROP都屬於基礎動作。
而REJECT則屬於擴展動作。
之前舉過很多例子,我們知道,使用-j可以指定動作,比如
-j ACCEPT
-j DROP
-j REJECT
其實,"動作"也有自己的選項,我們可以在使用動作時,設置對應的選項,此處以REJECT為例,展開與"動作"有關的話題。
動作REJECT
REJECT動作的常用選項為--reject-with
使用--reject-with選項,可以設置提示信息,當對方被拒絕時,會提示對方為什麽被拒絕。
可用值如下
icmp-net-unreachable
icmp-host-unreachable
icmp-port-unreachable,
icmp-proto-unreachable
icmp-net-prohibited
icmp-host-pro-hibited
icmp-admin-prohibited
當不設置任何值時,默認值為icmp-port-unreachable。
我們來動手實踐一下,在主機139上設置如下規則,如下圖所示,當沒有明確設置--reject-with的值時,默認提示信息為icmp-port-unreachable,即端口不可達之意。
此時在另一臺主機上向主機139發起ping請求,如下圖所示,提示目標端口不可達。
那麽我們將拒絕報文的提示設置為"主機不可達",示例如下
如上圖所示,我們在設置拒絕的動作時,使用了--reject-with選項,將提示信息設置為icmp-host-unreachable,完成上述操作後,我們再次在在另一臺主機上向主機139發起ping請求。
如下圖所示。
可以看到,ping請求被拒絕時,提示信息已經從"目標端口不可達"變成了"目標主機不可達"。
動作LOG
在本博客中,前文並沒有對LOG動作進行示例,此處我們來了解一下LOG動作。
使用LOG動作,可以將符合條件的報文的相關信息記錄到日誌中,但當前報文具體是被"接受",還是被"拒絕",都由後面的規則控制,換句話說,LOG動作只負責記錄匹配到的報文的相關信息,不負責對報文的其他處理,如果想要對報文進行進一步的處理,可以在之後設置具體規則,進行進一步的處理。
示例如下,下例表示將發往22號端口的報文相關信息記錄在日誌中。
如上圖所示,上述規則表示所有發往22號端口的tcp報文都符合條件,所以都會被記錄到日誌中,查看/var/log/messages即可看到對應報文的相關信息,但是上述規則只是用於示例,因為上例中使用的匹配條件過於寬泛,所以匹配到的報文數量將會非常之多,記錄到的信息也不利於分析,所以在使用LOG動作時,匹配條件應該盡量寫的精確一些,匹配到的報文數量也會大幅度的減少,這樣冗余的日誌信息就會變少,同時日後分析日誌時,日誌中的信息可用程度更高。
註:請把剛才用於示例的規則刪除。
從剛才的示例中我們已經了解到,LOG動作會將報文的相關信息記錄在/var/log/message文件中,當然,我們有可以將相關信息記錄在指定的文件中,以防止iptables的相關信息與其他日誌信息相混淆,修改/etc/rsyslog.conf文件(或者/etc/syslog.conf),在rsyslog配置文件中添加如下配置即可。
#vim /etc/rsyslog.conf
kern.warning /var/log/iptables.log
加入上述配置後,報文的相關信息將會被記錄到/var/log/iptables.log文件中。
完成上述配置後,重啟rsyslog服務(或者syslogd)
#service rsyslog restart
服務重啟後,配置即可生效,匹配到的報文的相關信息將被記錄到指定的文件中。
LOG動作也有自己的選項,常用選項如下(先列出概念,後面有示例)
--log-level選項可以指定記錄日誌的日誌級別,可用級別有emerg,alert,crit,error,warning,notice,info,debug。
--log-prefix選項可以給記錄到的相關信息添加"標簽"之類的信息,以便區分各種記錄到的報文信息,方便在分析時進行過濾。
註:--log-prefix對應的值不能超過29個字符。
比如,我想要將主動連接22號端口的報文的相關信息都記錄到日誌中,並且把這類記錄命名為"want-in-from-port-22",則可以使用如下命令
完成上述配置後,我在IP地址為192.168.1.98的客戶端機上,嘗試使用ssh工具連接上例中的主機,然後查看對應的日誌文件(已經將日誌文件設置為/var/log/iptables.log)
如上圖所示,ssh連接操作的報文的相關信息已經被記錄到了iptables.log日誌文件中,而且這條日誌中包含"標簽":want-in-from-port-22,如果有很多日誌記錄,我們就能通過這個"標簽"進行篩選了,這樣方便我們查看日誌,同時,從上述記錄中還能夠得知報文的源IP與目標IP,源端口與目標端口等信息,從上述日誌我們能夠看出,192.168.1.98這個IP想要在14點11分連接到192.168.1.139(當前主機的IP)的22號端口,報文由eth4網卡進入,eth4網卡的MAC地址為00:0C:29:B7:F4:D1,客戶端網卡的mac地址為F4-8E-38-82-B1-29。
除了ACCEPT、DROP、REJECT、LOG等動作,還有一些其他的常用動作,比如DNAT、SNAT等,我們會在之後的文章中對它們進行總結。
希望這篇文章能夠對你有所幫助。
iptables詳解(12):iptables動作總結之一