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、网络规划

 操作系统是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;
}

 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
#进入解压目录并创建软连接
pcd /usr/src
ln -sv linux-2.6.28.10 linux
#进入内核目录
pcd /usr/src/linux
#为当前内核打补丁
ppatch -p1 ../netfilter-layer7-v2.22/kernel-2.6.25-2.6.28-layer7-2.22.path
#为了方便编译内核将系统上的内核配置文件复制过来
pcp /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

  • linux閰嶇疆璺敱鍛戒护linux閰嶇疆璺敱
    绛旓細绗竴棣栧厛鎵撳紑linux绯荤粺銆傜劧鍚庡垱寤轰笁鍙拌櫄鎷熸満銆傜浜岀劧鍚閰嶇疆涓嶅悓缃戞鐨刬p鍦板潃銆傚啀鍒╃敤ping妫鏌ヨ繛閫氭晥鏋溿傜涓夌劧鍚庤繘鍏ュ埌sysctl.conf鐩綍銆傚啀寮鍚郴缁鐨勮矾鐢卞姛鑳銆傜鍥涚劧鍚庣紪杈憂et.ipv4.ip_forward=1銆傚啀缂栧啓iptables瑙勫垯銆傜浜旂劧鍚庤缃甶p鍦板潃鐨勭綉鍏炽傚啀route-n妫鏌ョ綉鍏崇殑鎯呭喌銆傜鍏劧鍚庢祴璇曚笁鍙拌櫄鎷熺殑ip杩為...
  • Linux鎿嶄綔绯荤粺涓淇敼IP.DNS鍜璺敱閰嶇疆
    绛旓細鍦Linux鎿嶄綔绯荤粺涓淇敼IP銆丏NS鍜璺敱閰嶇疆ifconfig eth0 鏂癷p鐒跺悗缂栬緫/etc/sysconfig/network-scripts/ifcfg-eth0锛屼慨鏀筰p涓銆佷慨鏀笽P鍦板潃[aeolus@db1 network-scripts]$ vi ifcfg-eth0DEVICE=eth0ONBOOT=yesBOOTPROTO=staticIPADDR=219.136.241.211NETMASK=255.255.255.128GATEWAY=219.136.241.254浜...
  • 璋佺煡閬LINUX绯荤粺鎬庝箞杩炰笂缃戝晩
    绛旓細锛戙侀鍏堝紑鍚璺敱鍔熻兘 echo 1 >/proc/sys/net/ipv4/ip_forward (锛戜负鎵撳紑璺敱鍔熻兘锛愪负鍏抽棴璺敱鍔熻兘)锛堝湪杩欎釜瀹為獙閲屽彧瑕佸紑鍚矾鐢卞姛鑳藉氨OK浜嗭級锛掋佸叾瀹冭矾鐢辫缃細A銆佹坊鍔犺矾鐢变俊鎭細route add 鈥搉et 10.0.0.1 netmask 255.0.0.0 gw 192.168.0.1 鎴栬 route add 鈥搉et 10.0.0.1 netmask 25...
  • linux閰嶇疆璺敱鍛戒护linux閰嶇疆璺敱
    绛旓細涓锛氫娇鐢╮oute鍛戒护娣诲姞 浣跨敤route鍛戒护娣诲姞鐨勮矾鐢锛屾満鍣ㄩ噸鍚垨鑰呯綉鍗¢噸鍚悗璺敱灏卞け鏁堜簡锛屾柟娉曪細//娣诲姞鍒颁富鏈虹殑璺敱 routeadd_host192.168.1.11deveth0 routeadd_host192.168.1.12gw192.168.1.1 //娣诲姞鍒扮綉缁滅殑璺敱 routeadd_net192.168.1.11netmask255.255.255.0eth0 routeadd_net192.168.1....
  • Linux涓嬮拡瀵硅矾鐢卞姛鑳介厤缃甶ptables鐨勬柟娉曡瑙
    绛旓細./configure --prefix=/usr --with-ksource=/usr/src/linuxmakemake install鏌ョ湅瀹夎鍚庣殑iptables鐨勬枃浠朵唬鐮佸涓:ls /usr/sbin |grep iptablesls /usr/libexec/xtables澶嶅埗涔嬪墠澶囦唤鐨勯厤缃鏂囦欢鍜岃剼鏈唬鐮佸涓:cp /root/iptables-config /etc/sysconfig/cp /root/iptables.sysv /etc/rc.d/init.d/iptables淇敼鑴氭湰...
  • 濡備綍鍦Linux绯荤粺涓娇鐢╥fconfig鍜宺oute鍛戒护閰嶇疆IP鍦板潃?
    绛旓細閰嶇疆鎺ュ彛: ifconfig eth0 192.168.4.1 netmask 255.255.255.0 up锛岃缃甧th0鐨処P鍦板潃骞舵縺娲汇傛煡鐪嬫帴鍙: ifconfig锛屾樉绀烘墍鏈夌綉缁滄帴鍙i厤缃傚叾娆★紝route鍛戒护鐢ㄤ簬閰嶇疆鍜岀鐞嗚矾鐢辫〃锛氭坊鍔犺矾鐢: route add host 192.168.4.2 dev eth0:1锛屾坊鍔犲埌鐗瑰畾IP鐨勮矾鐢銆傛煡鐪嬭矾鐢: route -n锛屾煡鐪嬭缁嗙殑璺敱淇℃伅...
  • 璺敱linux绯荤粺璺敱linux
    绛旓細绗竴棣栧厛鎵撳紑linux绯荤粺銆傜劧鍚庡垱寤轰笁鍙拌櫄鎷熸満銆傜浜岀劧鍚閰嶇疆涓嶅悓缃戞鐨刬p鍦板潃銆傚啀鍒╃敤ping妫鏌ヨ繛閫氭晥鏋溿傜涓夌劧鍚庤繘鍏ュ埌sysctl.conf鐩綍銆傚啀寮鍚郴缁鐨勮矾鐢卞姛鑳銆傜鍥涚劧鍚庣紪杈憂et.ipv4.ip_forward=1銆傚啀缂栧啓iptables瑙勫垯銆傜浜旂劧鍚庤缃甶p鍦板潃鐨勭綉鍏炽傚啀route-n妫鏌ョ綉鍏崇殑鎯呭喌銆傜鍏劧鍚庢祴璇曚笁鍙拌櫄鎷熺殑ip杩為...
  • linux濡備綍閰嶇疆璺敱?
    绛旓細涓锛氫娇鐢 route 鍛戒护娣诲姞 浣跨敤route 鍛戒护娣诲姞鐨勮矾鐢锛屾満鍣ㄩ噸鍚垨鑰呯綉鍗¢噸鍚悗璺敱灏卞け鏁堜簡锛屾柟娉曪細//娣诲姞鍒颁富鏈虹殑璺敱 route add 鈥揾ost 192.168.168.110 dev eth0 route add 鈥揾ost 192.168.168.119 gw 192.168.168.1 //娣诲姞鍒扮綉缁滅殑璺敱 route add 鈥搉et IP netmask MASK eth0 route add ...
  • Linux涓璚i-Fi鏃犵嚎缃戠粶鍜孉P鏃犵嚎鐑偣鐨勯厤缃鏁欑▼
    绛旓細iw鏄linux涓甯哥敤鐨剋ifi閰嶇疆宸ュ叿,缃戜笂鏈夌浉搴旂殑搴撳拰婧愮爜銆傚叏鍚嶄负wirelessTools銆 閰嶇疆wifi妯″潡,骞惰繛鎺ョ浉搴旂殑鏃犵嚎缃戠粶杩囩▼:涓昏浣跨敤iwpriv鍛戒护 (1)鎵弿鍙敤鐨勬棤绾跨綉缁: 浠g爜濡備笅:iwlist wifi-name scanning   鍏朵腑wifi-name涓烘棤绾跨綉鍗$殑鍚嶅瓧,姣斿缃戝崱eth0灏辨槸绯荤粺榛樿鐨勭綉鍗″悕瀛, wifi-name鍙互鐢╥fconfig鏌ョ湅,涓鑸负...
  • route鍛戒护濡備綍璁剧疆鍜岀鐞Linux缃戠粶璺敱?
    绛旓細route鍛戒护鏄疞inux鍐呮牳涓竴涓噸瑕佺殑缃戠粶绠$悊宸ュ叿锛屽畠鐢ㄤ簬鏌ョ湅鍜岃缃綉缁滆矾鐢辫〃锛岀壒鍒槸閽堝闈欐璺敱鐨勯厤缃銆傚湪涓や釜瀛愮綉涔嬮棿閫氫俊鏃讹紝閫氳繃璺敱鍣鎴栫綉鍏宠繘琛岃繛鎺ャ傚綋浣犵殑Linux绯荤粺澶勪簬灞鍩熺綉涓紝闇瑕侀氳繃缃戝叧璁块棶浜掕仈缃戞椂锛屽氨闇瑕佷娇鐢╮oute鍛戒护鏉ヨ缃粯璁よ矾鐢憋紝纭繚涓绘満鑳藉姝g‘杩炴帴銆傜劧鑰岋紝鐩存帴鍦ㄥ懡浠よ鎵ц鐨剅oute...
  • 扩展阅读:linux配置ip详细步骤 ... linux怎么手动配置ip ... linux静态ip配置参数 ... linux网卡配置命令 ... 路由器配置命令和步骤 ... route命令查看路由表 ... linux配置永久路由 ... linux删除已有的路由 ... linux配置ip地址 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网