1 Iptables簡介
- Iptables 更確切的說是一個應(yīng)用程序静秆,工作在linux的用戶層牵素,對 Linux 內(nèi)核防火墻中的表進行管理严衬。因為Linux 系統(tǒng)具有強大的網(wǎng)絡(luò)協(xié)議棧功能,可以連接因特網(wǎng)或 LAN笆呆、服務(wù)器或連接 LAN 和因特網(wǎng)的代理服務(wù)器请琳, 所以需要一種內(nèi)置能力來針對網(wǎng)絡(luò)信息進行過濾,linux內(nèi)核2.4.x 版本之后就具備了IP信息包過濾這種能力赠幕。如果利用Iptables 進行適合配置它只允許合法的網(wǎng)絡(luò)流量進出系統(tǒng)俄精,而禁止其它任何網(wǎng)絡(luò)流量。為了確定網(wǎng)絡(luò)流量是否合法榕堰,系統(tǒng)管理員可以利用Iptables 來預(yù)定義的一組規(guī)則竖慧。這些規(guī)則告訴linux內(nèi)核某個流量是否合法以及對于來自某個源、至某個目的地或具有某種協(xié)議類型的網(wǎng)絡(luò)流量要做些什么逆屡。
2 內(nèi)核配置
- 一般來說2.4.x 版本之后的內(nèi)核中默認是把防火墻相關(guān)主要的內(nèi)核選項自動編譯進內(nèi)核的圾旨,如果沒有那需要自己手動進行配置,有些是必須配置的魏蔗,有些是可選的(根據(jù)實際應(yīng)用需要看是否需要這方面的過濾砍的,因為這些過濾是在內(nèi)核中做的,如果不是必須的話建議不要選上莺治,免的影響系統(tǒng)開銷廓鞠,內(nèi)核默認也沒有把所有防火墻選項都選上)。
$ bitbake -c menuconfig linux-quic
- 具體配置位置
→ Networking support → Networking options → Network packet filtering framework (Netfilter)
-
必選的配置(如果要讓防火墻工作必須有的配置)
Network packet filtering framework (Netfilter)
選上(默認已選上),允許計算機作為網(wǎng)關(guān)或防火墻谣旁。
Netfilter Xtables support (required for ip_tables)
選上(默認已選上),有了它床佳,你才能使用過濾、偽裝榄审、NAT砌们。它 為內(nèi)核加入了iptables標識框架。沒有它瘟判,iptables毫無作用怨绣。
- 其他選項都是可選的角溃,具體介紹可以直接看menuconfig里面的help介紹拷获,或者去下面的網(wǎng)站查看:
https://www.frozentux.net/iptables-tutorial/cn/iptables-tutorial-cn-1.1.19.html#KERNELSETUP
這個網(wǎng)站日期有點遠了,僅提供一個參考减细。
3 在設(shè)備上配置Iptables服務(wù)
Iptables的最新源碼可以去www.netfilter.org?官網(wǎng)下載匆瓜。不過設(shè)備上也有安裝iptables的工具,經(jīng)過測試是可以使用的,由于時間關(guān)系沒有下載最新的iptables源碼進行編譯測試驮吱。
# which iptables
/usr/sbin/iptables
1)把啟動腳本和服務(wù)腳本放到/etc/init.d目錄
$adb push iptables-start.sh /etc/init.d/.
$adb push iptables.sh /etc/init.d/.
2)配置啟動腳本
查看運行等級
# runlevel
N 5
說明啟動時會從 rc5.d目錄下按順序去啟動腳本
在rc5.d目錄建立啟動鏈接
#cd cd /etc/rc5.d
#ln -s ../init.d/iptables-start.sh S99start_iptables
備注:下面是我寫好的iptables的啟動腳本和服務(wù)腳本
- iptables-start.sh
#!/bin/sh
# copyright (c) 2017-2027, xiamen yaxon. All rights reserved.
# iptables Start iptables firewall
#
# runlevel 5 in S99
# description: starts
/etc/init.d/iptables.sh start
- iptables.sh
#!/bin/sh
# copyright (c) 2017-2027, xiamen yaxon. All rights reserved.
# iptables {start|stop|restart|save}
#
# description: starts, stops and restart
IPTABLES_DIR='/etc/sysconfig'
IPTABLES_RULE='/etc/sysconfig/iptables'
IPTABLES_ERROR_CODE=3
start() {
#如果/etc/sysconfig/iptables不存在茧妒,返回值出錯碼
[ ! -f "$IPTABLES_RULE" ] && return $IPTABLES_ERROR_CODE
echo "get firewall rules"
#清除之前的規(guī)則
iptables -F
iptables -X
iptables -Z
#恢復(fù)之前配置的防火墻規(guī)則
iptables-restore < ${IPTABLES_RULE}
if [ $? -eq 0 ]; then
echo "restore firewall rules success"
else
echo "restore firewall rules failure"; return $IPTABLES_ERROR_CODE
fi
}
save() {
if [ ! -d "$IPTABLES_DIR" ]; then
mkdir -p $IPTABLES_DIR
fi
iptables-save > ${IPTABLES_RULE}
if [ $? -eq 0 ]; then
echo "save firewall rules success"
else
echo "save firewall rules failure"; return $IPTABLES_ERROR_CODE
fi
}
stop() {
#暫時不處理
echo "stop firewall success"
}
restart() {
stop;
start;
}
case "$1" in
start)
start
RETVAL=$?
;;
save)
save
RETVAL=$?
;;
stop)
stop
RETVAL=$?
;;
restart)
restart
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|restart|save}"
RETVAL=$?
;;
esac
exit $RETVAL
3)iptables的規(guī)則配置
可以使用iptables工具進行配置,具體配置規(guī)則可以參考https://www.frozentux.net/iptables-tutorial/cn/iptables-tutorial-cn-1.1.19.html#INCLUDE.RCFIREWALL
可以根據(jù)實際需要進行選擇配置,這里不再介紹。
4)iptables.sh腳本的使用
啟動,iptables的規(guī)則不會自動保存,需要每次系統(tǒng)運行時重新加載這些規(guī)則左冬,下面的命令可以重新去加載之前配置的規(guī)則
#/etc/init.d/iptables.sh start
重啟桐筏,如果想放棄正在配置的規(guī)則可以用下面的命令
#/etc/init.d/iptables.sh restart
存儲,在使用iptables進行配置完規(guī)則,可以用下面的指令存儲規(guī)則,因為系統(tǒng)不會自動保存配置規(guī)則,重啟之后配置的規(guī)則會丟掉拇砰,所以配置完需要存儲一下規(guī)則才會保存下來
#/etc/init.d/iptables.sh save
參考文獻
[1] https://www.frozentux.net/iptables-tutorial/cn/iptables-tutorial-cn-1.1.19.html#INCLUDE.RCFIREWALL
[2] http://www.netfilter.org/projects/conntrack-tools/index.html
[3] http://www.faqs.org/docs/iptables/
[4] 鳥哥的linux私房菜-服務(wù)器(第三版/第九章)