概述:
iptables防火墻是工作在網絡層,針對TCP/IP數據包實施過濾和限制,屬于典型的包過濾防火墻。以基于網絡層的數據包過濾機制為主,同時提供少量的傳輸層、數據鏈路層的過濾功能。難以判斷數據包對應于何種應用程序(如:QQ、迅雷等)安裝netfilter-layer7補丁包的作用是為Linux內核、iptables添加相應的補丁文件,重新編譯安裝后提供基于應用層(第7層)的擴展功能。通過獨立的l7-protocols協(xié)議包提供對各種應用層協(xié)議的特征識別與定義,便于更新
對內核中的netfilter,打補丁layer7,重新編譯內核
對iptables打補丁,補上layer7模塊,重新iptables
具體步驟
# useradd mockbuild
# rpm -ivh kernel-2.6.32-431.5.1.el6.src.rpm
# cd rpmbuild/SOURCES
# tar xf linux-2.6.32-431.5.1.el6.tar.bz2 -C /usr/src
# cd /usr/src
# ln -sv linux-2.6.32-431.5.1.el6 linux
2、給內核打補丁
# tar xf netfilter-layer7-v2.23.tar.gz
# cd /usr/src/linux
# patch -p1 < /root/netfilter-layer7-v2.23/kernel-2.6.32-layer7-2.23.patch
# cp /boot/config-2.6.32-431.el6.x86_64 .config
安裝依賴包
# yum install -y ncurses-devel
# make menuconfig
選擇需要安裝的layer7模塊
Networking support -> Networking options -> Network packet filtering framework (Netfilter)->?Core Netfilter Configuration -> "layer7" match support
去掉redhat的驗證功能,否則無法編譯
Enable loadable module support -> Modulesigature verification (EXPERIMENTAL) -> Module signature verification (EXPERIMENTAL)
關閉核心內核的API
Cryptographic API -> In-kernel signature checker (EXPERIMENTAL)
對內核的名稱進行標記修改
General setup -> Local version - append to kernel release 改名-layer7
3、編譯并安裝內核
安裝獨立的screen編譯窗口進行編譯
# yum install -y screen
screen命令:
screen:打開一個新的screen
隱藏:Ctrl+a, d
重新打開隱藏的screen:
顯示各screen ID: screen -ls
重新打開: # screen -r Screen_ID
制定內核編譯
# make -j 4?
# make modules_install
# make install
驗證內核是否編譯成功
# ls /boot
# vim /boot/grub/grub.conf
將默認啟動內核改為定制后的內核
4、重啟系統(tǒng),啟用新內核
# tar xf iptables-1.4.20.tar.bz2
# cd iptables-1.4.20
# cp /root/netfilter-layer7-v2.23/iptables-1.4.3forward-for-kernel-2.6.20forward/libxt_layer7.* extensions/
備份原iptables服務啟動文件及配置文件備用
# cp /etc/rc.d/init.d/iptales /root
# cp /etc/sysconfig/iptables-config /root
卸載原有iptables
# rpm -e iptables iptables-ipv6 --nodeps
對iptables進行編譯
# cd /root/iptables-1.4.20
# ./configure --prefix=/usr --with-ksource=/usr/src/linux
# make && make install
# cp /root/iptables /etc/rc.d/init.d/
# cp /root/iptables-config /etc/sysconfig/
啟動iptables
# service iptables status
編輯vim /etc/rc.d/init.d/iptables
將文件中 /sbin/$IPTABLES 修改為 /usr/sbin/$IPTABLES
將/sbin/$IPTABLES改為/usr/sbin/$IPTABLES
6、為layer7模塊提供其所識別的協(xié)議的特征碼
解壓并安裝 l7-protocols-2009-05-28.tar.gz
# tar xf l7-protocols-2009-05-28.tar.gz?
# cd l7-protocols-2009-05-28
# make install
ACCT的功能已經可以在內核參數中按需啟用或禁用。此參數需要裝載nf_conntrack模塊后方能生效。
# vim /etc/sysctl.conf
net.netfilter.nf_conntrack_acct = 1
# modprobe nf_conntrack
使配置生效
# sysctl -p
l7-filter uses the standard iptables extension syntax?
# iptables [specify table & chain] -m layer7 --l7proto [protocol name] -j [action]?
# iptables -A FORWARD -i eth1 -m layer7 --l7proto qq -j REJECT
注意:
網絡防火墻:ip_forward
net.netfilter.nf_conntrack_acct參數只有裝載nf_conntrack模塊后方能生效
8、配置實驗環(huán)境,對layer7的功能進行測試
充當路由功能的機器
外網接口:
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.8.15
BROADCAST=192.168.8.255
NETMASK=255.255.255.0
GATEWAY=192.168.8.254
NETWORK=192.168.8.0
DNS配置
/etc/resolve.conf
nameserver 192.168.8.251
內網接口:
# cd /etc/sysconfig/network-scripts/
# cp ifcfg-eth0 ifcfg-eth1
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=none
IPADDR=172.16.1.254
BROADCAST=172.16.1.255
NETMASK=255.255.255.0
NETWORK=172.16.1.0
內網的機器:
172.16.1.10
DNS:192.168.8.251
GAWEWAY:172.16.1.254
配置192.168.8.251
# vim /etc/sysctl.conf
打開防火墻轉發(fā)功能
net.ipv4.ip_forward = 1
sysctl -p 使配置生效
在防火墻上添加規(guī)則,對來自內網 172.16.1.0網段的機器進行源地址轉換
# iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 192.168.8.15
通過測試發(fā)現可以正常訪問網站和QQ
添加限制QQ的規(guī)則
# iptables -A FORWARD -m layer7 --l7proto qq -j REJECT
再次登錄QQ發(fā)現超時,說明layer7的協(xié)議限制生效了
添加對http的限制,發(fā)現網頁也無法正常打開
# iptables -A FORWARD -m layer7 --l7proto http -j REJECT
-j LOG?
--log-prefix "":指定日志前綴信息
注意:如果同樣的內容要做過濾,日志規(guī)則一定放在過濾規(guī)則之前。