歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 重新封裝一個iptables防止規則重復

重新封裝一個iptables防止規則重復

日期:2017/2/28 14:37:17   编辑:Linux教程

相信很多人都遇到過iptables規則重復的問題,即iptables規則在添加的時候並不會檢查該規則是否已經存在,即便已經存在,它還時會再次添加一遍,這一點和添加路由是完全不同的。很多基於iptables的管理系統都會面對規則的增刪該查的觸發時機問題,稍不注意,後台iptables-save查看的時候,就會發現一大堆重復的規則。然後你就會絞盡腦汁思考到底在哪個觸發點上該刪除規則卻沒有刪除規則...

我本來想修改一下iptables的代碼來訂正這個問題,在添加規則之前,首先檢查一下是否已經存在,若存在就不再添加了。但是最終還是決定用腳本封裝,把iptables重新封裝一下,它的邏輯如下:

1.使用iptables -C命令先檢查一下是否已經有這個規則;

2.如果返回非0,說明沒有這個規則,添加之;

3.如果返回0,直接exit 0。

腳本很簡單:

#!/bin/bash

check=$(echo $@ | sed -e 's/-A/-C/g')
echo $check
xtables-multi iptables $check ;ret=$?
if [ "$ret" -eq 0 ]; then
exit 0;
else
xtables-multi iptables $@;
fi

唯一值得注意的是,系統中的iptables是一個指向iptables-multi的鏈接,而且它的執行是基於main函數中的argv[0]來識別子命令的,如果你將iptables的名字改為了aaa,由於aaa並不是一個正規的子命令,因此將不會執行。

有了上述腳本,就可以非常放心地執行任意iptbales命令了,要說明的是,上述的腳本還十分粗糙!

推薦閱讀:

iptables—包過濾(網絡層)防火牆 http://www.linuxidc.com/Linux/2013-08/88423.htm

Linux防火牆iptables詳細教程 http://www.linuxidc.com/Linux/2013-07/87045.htm

iptables+L7+Squid實現完善的軟件防火牆 http://www.linuxidc.com/Linux/2013-05/84802.htm

iptables的備份、恢復及防火牆腳本的基本使用 http://www.linuxidc.com/Linux/2013-08/88535.htm

Linux下防火牆iptables用法規則詳解 http://www.linuxidc.com/Linux/2012-08/67952.htm

Copyright © Linux教程網 All Rights Reserved