基础知识:
iptables的表格:
1、Nat表:用户网络地址转换;
包括:POSTROUTING【路由判断之后】、PREROUTING【路由判断之前】
2、Filter表:
包括:INPUT、OUTPUT、FORWARD
3、Mangle表:用于实现QOS时使用;
iptables的指令、选项和动作
iptables -t 表格名称 指令(大写) 链名称 选项 参数
-t nat
filter
mangle
指令:
-A --append 追加
-R --replace 替换
-D --delete 删除
-I --insert 插入
-N --new 用户自定义链
-X 删除用户自定义的空链
-F --flush 清空链
-P --policy ACCEPT DROP REJECT
链名称 chain
nat POSTROUTING --->SNAT PREROUTING --->DNAT OUTPUT
filter INPUT OUTPUT FORWARD
选项:
选项 参数
来源 -s --source 地址 子网 网段
-i 【-i eth0】
目标 -d --destnation 地址 子网 网段
-o 【-o eth1】
协议 tcp --src-port --dst-port
udp --src-port --dst-port
icmp --icmp-type [!] typename echo-reply (pong) echo-request
动作 -j --jump
SNAT DNAT MASQUERADE
ACCEPT DROP REJECT
REDIRECT
案例:
为iptables增加layer7补丁,实现应用层过滤:
一、所需安装包:
二、重新编译内核添加iptables所需要的模块:
1、合并kernel+layer7补丁
shell> tar jxvf linux-2.6.25.19.tar.gz2 -C /usr/src/
shell> tar zxvf netfilter-layer7-v2.20.tar.gz -C /usr/src/
shell> cd /usr/src/linux-2.6.25.19/
shell> patch -p1 < /usr/src/netfilter-layer7-v2.20/kernel-2.6.25-layer7-2.20.patch
2、配置新内核
shell> cp /boot/config-2.6.18-8.el5 .config //偷个懒,沿用旧的内核配置
shell> make menuconfig
//配置内核时,在“Networking ---> Networking Options ---> Network Packet filtering framework (Netfilter) ”处主要注意两个地方:
1) ---> Code Netfilter Configuration
//将“Netfilter connection tracking suport (NEW)”选择编译为模块(M),需选取此项才能看到layer7支持的配置。
//将ftp、layer7、string、state、time、IPsec、iprange、connlimit……等编译成模块,根据需要看着办。
2) ---> IP: Netfilter Configuration
//将“IPv4 connection tracking support (require for NAT)”编译成模块。
//将“Full NAT”下的“MASQUERADE target support”和“REDIRECT target support”编译成模块。
3、编译及安装模块、新内核
shell> make && make modules_install && make install
//编译安装成后后,重启选择使用新的内核(2.6.25.19)引导系统
三、重新编译iptables
1、卸载现有iptables
shell> rpm -e iptables iptstat --nodeps
2、合并iptables+layer7补丁
shell> tar jxvf iptables-1.4.2.tar.bz2 -C /usr/src/
shell> cd /usr/src/netfilter-layer7-v2.20/iptables-1.4.1.1-for-kernel-2.6.20forward/
shell> cp libxt_layer7.c libxt_layer7.man /usr/src/iptables-1.4.2/extensions/
3、编译安装
shell> cd /usr/src/iptables-1.4.2/
shell> ./configure --prefix=/ --with-ksource=/usr/src/linux-2.6.25.19
shell> make && make install
4、安装l7-protocols模式包
shell> tar zxvf l7-protocols-2008-10-04.tar.gz -C /etc/
shell> mv /etc/l7-protocols-2008-10-04 /etc/l7-protocols
案例:
一、实验要求:
公司有三个部门
工程部门:192.168.10.10--192.168.10.20
软件部门:192.168.10.21--192.168.10.30
经理办:192.168.10.31--192.168.10.40
上班时间:(周一到周五 08:00到17:00)
工程部门:上班时间ftp 不允许qq聊天,不允许使用迅雷,不允许访问网站,下班后无限制;
软件部门:能够访问网站,不允许非法站点sina,不允许使用迅雷,连接数最多3个,不允许聊天,下班后无限制;
经理办公室:能够访问网站,允许qq聊天,下班后无限制;
DMZ区域www服务器进行发布;
二、实验拓扑:
三、环境搭建:
网络地址
内网网卡地址:
外网网卡地址:
DMZ区域网卡地址:
开启路由转发功能:
# vim /etc/sysctl.conf
加载ip_nat_ftp模块:
# modprobe ip_nat_ftp
将FORWARD链的默认过滤设置成DROP:
# iptables -P FORWARD DROP
四、过滤规则:
//对内网用户实现SNAT转换:
# iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth1 -j MASQUERADE
//DMZ区域发布服务器实现DNAT转换:
# iptables -t nat -A PREROUTING -d 192.168.101.45 -p tcp --dport 80 -i eth1 -j DNAT --to 192.168.1.254
//允许dns解析
# iptables -t filter -A FORWARD -m time --timestart 8:00 --timestop 17:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 53 -j ACCEPT
//工程部不允许使用qq和迅雷
# iptables -t filter -A FORWARD -m iprange --src-range 192.168.10.10-192.168.10.20 -m layer7 --l7proto qq -m time --timestart 8:00 --timestop 17:00 --weekdays Mon,Tue,Wed,Thu,Fri -j DROP
# iptables -t filter -A FORWARD -m iprange --src-range 192.168.10.10-192.168.10.20 -m layer7 --l7proto xunlei -m time --timestart 8:00 --timestop 17:00 --weekdays Mon,Tue,Wed,Thu,Fri -j DROP
//工程部可以使用ftp
# iptables -t filter -A FORWARD -m iprange --src-range 192.168.10.10-192.168.10.20 -m time --timestart 8:00 --timestop 17:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 21 -j ACCEPT
# iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
//软件部不允许使用qq和迅雷
# iptables -t filter -A FORWARD -m iprange --src-range 192.168.10.10-192.168.10.20 -m layer7 --l7proto qq -m time --timestart 8:00 --timestop 17:00 --weekdays Mon,Tue,Wed,Thu,Fri -j DROP
# iptables -t filter -A FORWARD -m iprange --src-range 192.168.10.10-192.168.10.20 -m layer7 --l7proto xunlei -m time --timestart 8:00 --timestop 17:00 --weekdays Mon,Tue,Wed,Thu,Fri -j DROP
//软件部上班时间不允许访问sina,其他的可以
# iptables -t filter -A FORWARD -m iprange --src-range 192.168.10.21-192.168.10.30 -m string --string "sina" --algo bm -m time --timestart 8:00 --timestop 17:00 --weekdays Mon,Tue,Wed,Thu,Fri -j DROP
/软件部http最大连接数为3
# iptables -t filter -A FORWARD -m iprange --src-range 192.168.10.21-192.168.10.30 -m connlimit --connlimit-above 3 -m time --timestart 8:00 --timestop 17:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --syn --dport 80 -j DROP
/软件部可以访问其他http资源
# iptables -t filter -A FORWARD -m iprange --src-range 192.168.10.21-192.168.10.30 -m time --timestart 8:00 --timestop 17:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 80 -j ACCEPT
//经理办公室
# iptables -t filter -A FORWARD -m iprange --src-range 192.168.10.31-192.168.10.40 -m time --timestart 8:00 --timestop 17:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 80 -j ACCEPT
# iptables -t filter -A FORWARD -m iprange --src-range 192.168.10.31-192.168.10.40 -m layer7 --l7proto qq -m time --timestart 8:00 --timestop 17:00 --weekdays Mon,Tue,Wed,Thu,Fri -j ACCEPT
//各部门下班可以上网
# iptables -t filter -A FORWARD -s 192.168.10.0/24 -o eth1 -m time --timestart 17:01 --timestop 07:59 -j ACCEPT