萬盛學電腦網

 萬盛學電腦網 >> 服務器教程 >> Linux下針對路由功能配置iptables的方法詳解

Linux下針對路由功能配置iptables的方法詳解

   作為公司上網的路由器需要實現的功能有nat地址轉換、dhcp、dns緩存、流量控制、應用程序控制,nat地址轉換通過iptables可以直 接實現,dhcp服務需要安裝dhcpd,dns緩存功能需要使用bind,流量控制可以使用tc,應用程序控制:例如對qq的封鎖可以使用 netfilter-layer7-v2.22+17-protocols-2009-05-28.tar.gz來實現

  1、網絡規劃

20151222113716570.png (814×275)

  操作系統是centos5.8

  2、安裝dhcpd

  代碼如下:

  yum install dhcp-3.0.5-31.el5

  vim /etc/dhcp/dhcpd.conf

  ddns-update-style interim;

  ignore client-updates;

  subnet 10.0.0.0 netmask 255.255.255.0 {

  option routers 10.0.0.1;

  option subnet-mask 255.255.255.0;

  option domain-name-servers 10.0.0.1;

  range dynamic-bootp 10.0.0.100 10.0.0.200;

  default-lease-time 21600;

  max-lease-time 43200;

  }

20151222113735955.png (837×146)

  3、安裝bind,實現dns緩存

  代碼如下:

  yum install bind97.i386 bind97-libs.i386 bind97-utils.i386

  vim /etc/named.conf

  options {

  directory "/var/named";

  allow-recursion { 10.0.0.0/24; };

  recursion yes;

  forward first; #將所有請求都進行轉發

  forwarders { 114.114.114.114; }; #定義轉發服務器地址

  };

  zone "." IN {

  type hint;

  file "named.ca";

  };

  zone "localhost" IN {

  type master;

  file "named.localhost";

  allow-transfer { none; };

  };

  zone "0.0.127.in-addr.arpa" IN {

  type master;

  file "named.loopback";

  allow-transfer { none; };

  };

  創建根域文件,默認有

  代碼如下:

  dig -t NS . > /var/named/named.ca

  chown :named /var/named/named.ca

  創建本地正向解析文件,默認有

  代碼如下:

  vim /var/named/named.localhost

  $TTL 1D

  @ IN SOA @ rname.invalid. (

  0 ; serial

  1D ; refresh

  1H ; retry

  1W ; expire

  3H ) ; minimum

  NS @

  A 127.0.0.1

  chown :named /var/named/named.localhost

  創建本地反向解析文件,默認有

  代碼如下:

  vim /var/named/named.loopback

  $TTL 1D

  @ IN SOA @ rname.invalid. (

  0 ; serial

  1D ; refresh

  1H ; retry

  1W ; expire

  3H ) ; minimum

  NS @

  A 127.0.0.1

  PTR localhost.

  chown :named /var/named/named.loopback

  檢查主配置文件

  代碼如下:

  named-checkconf

  檢查根區域配置文件

  代碼如下:

  named-checkzone “.” /var/named/named.ca

  檢查區域文件

  代碼如下:

  named-checkzone “localhost” /var/named/named.localhost

  啟動服務

  代碼如下:

  service named start

  4、重新編譯編譯內核和iptables以支持應用層過濾

  由於實行防火牆功能的是netfilter內核模塊,所以需要重新編譯內核,需要下載新的內核源碼,並使用netfilter-layer7-v2.22作為內核的補丁一起編譯到內核中。而控制netfiler的是iptables工具,因此iptables也必須重新編譯安裝,最後再安裝應用程序過濾特征碼庫17-protocols-2009-05028.tar.gz

  1、給內核打補丁,並重新編譯內核

  2、給iptables源碼打補丁,並重新編譯iptables

  3、安裝17proto

  備份iptables腳本和配置文件

  代碼如下:

  cp /etc/rc.d/init.d/iptables /root/iptables.sysv

  cp /etc/sysconfig/iptables-config /root/iptables-config

  2.6內核下載地址

  https://www.kernel.org/pub/linux/kernel/v2.6/

  netfilter下載地址

  http://download.clearfoundation.com/l7-filter/

  iptables源碼下載地址

  http://www.netfilter.org/projects/iptables/downloads.html

  應用程序特征碼庫下載地址

  http://download.clearfoundation.com/l7-filter/

  代碼如下:

  xz -d linux-2.6.28.10.tar.xz

  tar -xvf linux-2.6.28.10.tar.gz -C /usr/src #新的內核源碼,用於重新編譯

  tar -zxvf netfilter-layer7-v2.22.tar.gz -C /usr/src #內核補丁和iptables補丁 ,只支持到2.6.28

  #進入解壓目錄並創建軟連接

< p>cd /usr/src

 

  ln -sv linux-2.6.28.10 linux

  #進入內核目錄

< p>cd /usr/src/linux

 

  #為當前內核打補丁

< p>patch -p1 < ../netfilter-layer7-v2.22/kernel-2.6.25-2.6.28-layer7-2.22.path

 

  #為了方便編譯內核將系統上的內核配置文件復制過來

< p>cp /boot/config-2.6.18-164.el5 /usr/src/linux/.config

 

  編譯內核

  代碼如下:

  make menuconfig

  Networking support -> Networking Options -> Network packet filtering framework -> Core Netfilter Configuration

   Netfilter connection tracking support

   "lawyer7" match support

   "string" match support

   "time" match support

   "iprange" match support

   "connlimit" match support

   "state" match support

   "conntrack" connection match support

   "mac" address match support

   "multiport" Multiple port match support

  Networking support -> Networign options -> Network packet filtering framework -> IP:Netfiltr Configuration

   IPv4 connection tracking support (required for NAT)

   Full NAT

   MASQUERADE target support

   NETMAP target support

   REDIRECT target support

  在Networking support中選擇 Networking options

  查找Network packet filtering framework(Netfilter)–>Core Netfiler Configrationg–>Netfilter connection tracking support(NEW),”layer7″ match support(NEW),”time” match support(NEW),”iprange”

  查找IP:Netfilter Configuration–>IPv4 connection tracking support,Full NAT(NEW)

  代碼如下:

  make

  make modules_install

  make install

  重啟操作系統選擇新內核登錄

  卸載舊的iptables

  代碼如下:

  rpm -e iptables-1.3.5-9.1.el5 iptables-ipv6-1.3.5-9.1.el5 iptstate-1.4-2.el5 --nodeps

  安裝新的iptables,以支持新的netfiler模塊

  代碼如下:

  tar -jsvf iptables-1.4.6.tar.bz2 -C /usr/src

  cd /usr/src/netfilter-layer7-v2.23

  cd iptables-1.4.3forward-for-kernel-2.6.20forward

  cp * /usr/src/iptables-1.4.6/extensions/

  cd /usr/src/iptables-1.4.6/

  ./configure --prefix=/usr --with-ksource=/usr/src/linux

  make

  make install

  查看安裝後的iptables的文件

  代碼如下:

  ls /usr/sbin |grep iptables

  ls /usr/libexec/xtables

  復制之前備份的配置文件和腳本

  代碼如下:

  cp /root/iptables-config /etc/sysconfig/

  cp /root/iptables.sysv /etc/rc.d/init.d/iptables

  修改腳本中iptables的路徑

  代碼如下:

  vim /etc/rc.d/init.d/iptables

  :.,$s@/sbin/$IPTABLES@/usr/sbin/$IPTABLES@g

  讓iptables服務開機自動啟動

  代碼如下:

  chkconfig --add iptables

  修改iptables 配置文件

  將/etc/sysconfig/iptables-config中的

  IPTABLES_MODULES=”ip_conntrack_netbios_ns” 注釋掉

  安裝協議特征碼

  代碼如下:

  tar xvf 17-protocols-2009-05028.tar.gz

  make install

  完成後在/etc/l7-protocols會生成文件

  支持的協議/etc/l7-protocols/protocols

  添加iptables策略,運行內部網絡上網,禁止qq和視頻

  代碼如下:

  iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to-soure 192.168.6.67

  iptables -A FORWARD -m layer7 --l7proto qq -j DROP

  iptables -A FORWARD -m layer7 --l7proto httpvideo -j DROP

  iptables -A FORWARD -m layer7 --l7proto httpaudio -j DROP

  指定8點到12點無法上網

  復制代碼

  代碼如下:

  iptables -A FORWARD -m time --timestart 08:00 --timestop 12:00 -j DROP

  5、使用tc控制帶寬

  例如公司出口帶寬是10Mbps,個用戶A分配500KB的最大下載帶寬,給用戶B 分配分配的最大下載帶寬是200KB

  A用戶ip:10.0.0.100

  B用戶ip:10.0.0.101

  代碼如下:

  #在eth0網卡上創建一個根隊列規則,隊列規則的算法使用htb,default 2表示指定一個默認類別編號,默認的流量控制策略,如果ip沒有在後面的filter中被匹配到就都是有這個策略

  tc qdisc add dev eth0 root handle 1:0 htb default 2

  #在eth0網卡上定義一個類,prant 1:0中的1對應根隊列規則中的handle 1:0,classid 1:2表示當前這個類的標識,用於應用在後面的得到filter中,rate 200kbsp表示帶寬為200KB/s,ceil 200kbps表示最大帶寬也為200KB/s,prio 2是優先級

  tc class add dev eth0 parent 1:0 classid 1:2 htb rate 200kbps ceil 200kbps prio 2

  tc class add dev eth0 parent 1:0 classid 1:3 htb rate 500kbps ceil 500kbps prio 2

  #將兩個類的默認的fifq隊列規則改為sfq

  tc qdisc add dev eth0 parent 1:2 handle 20 sfq

  tc qdisc add dev eth0 parent 1:3 handle 30 sfq

  #在網卡eth0上的1:0節點(對應qdisc中的handle 1:0)添加一個u32過濾規則,優先級為1,凡是目標地址是10.0.0.100的數據包都使用1:2類(對應classid為1:2的類)

  tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 10.0.0.100 flowid 1:2

  tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 10.0.0.101 flowid 1:3

  如果還有其他用戶例如用戶C和D的ip是102、103,要求的下載帶寬也要求500那麼在加入

  代碼如下:

  tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 10.0.0.102 flowid 1:3

  tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 10.0.0.103 flowid 1:3

  清除eth0上的規則

  代碼如下:

  tc qdisc del dev eth1 root> /dev/null

copyright © 萬盛學電腦網 all rights reserved