前文一直在介紹iptables的匹配條件,並無對動做進行過總結,那麼此處,咱們就來總結一下iptables中的動做。vim
以前的舉例中已經用到了一些經常使用動做,好比ACCEPT、DROP、REJECT等。ssh
其實,"動做"與"匹配條件"同樣,也有"基礎"與"擴展"之分。tcp
一樣,使用擴展動做也須要藉助擴展模塊,可是,擴展動做能夠直接使用,不用像使用"擴展匹配條件"那樣指定特定的模塊。工具
以前用到的ACCEPT與DROP都屬於基礎動做。.net
而REJECT則屬於擴展動做。debug
以前舉過不少例子,咱們知道,使用-j能夠指定動做,好比rest
-j ACCEPT日誌
-j DROPblog
-j REJECTip
其實,"動做"也有本身的選項,咱們能夠在使用動做時,設置對應的選項,此處以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動做只負責記錄匹配到的報文的相關信息,不負責對報文的其餘處理,若是想要對報文進行進一步的處理,能夠在以後設置具體規則,進行進一步的處理。
示例以下,下例表示將發往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等,咱們會在以後的文章中對它們進行總結。
但願這篇文章可以對你有所幫助。