基础知识:

一、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对网络流量的过滤

需要的软件包:

iptable的安全设置_第1张图片

一、重新编译内核

1、合并kernel+layer7补丁

tar -jxvf linux-2.6.28.tar\(1\).bz2 -C /usr/src/

tar -zxvf netfilter-layer7-v2.20.tar.gz -C /usr/src/

cd /usr/src/linux-2.6.28/

# patch -p1 < /usr/src/netfilter-layer7-v2.20/kernel-2.6.25-layer7-2.20.patch

2、配置新内核

[root@localhost ~]# cd /usr/src/linux-2.6.28/

[root@localhost linux-2.6.28]# cp /boot/config-2.6.18-164.el5 .config

#沿用旧的内核配置

[root@localhost linux-2.6.28]#make menuconfig

//配置内核时,在“Networking ---> Networking Options ---> Network Packet filtering framework (Netfilter) ”处主要注意两个地方:

1) ---> Core Netfilter Configuration

//将“Netfilter connection tracking suport (NEW)”选择编译为模块(M),需选取此项才能看到layer7支持的配置。

//将layer7、string、state、time、IPsec、iprange、connlimit、ftp……等编译成模块,根据需要自行选择。

iptable的安全设置_第2张图片

clip_image003

iptable的安全设置_第3张图片

clip_image005

clip_image006

2) ---> IP: Netfilter Configuration

//将“IPv4 connection tracking support (require for NAT)”编译成模块。

clip_image008

//将“Full NAT”下的“MASQUERADE target support”和“REDIRECT target support”编译成模块。

clip_image009

3、编译及安装模块、新内核

shell> make && make modules_install && make install

#编译安装成后后,重启选择使用新的内核(2.6.25.19)引导系统

二、重新编译iptables

卸载原来的iptables

[root@localhost ~]# cd /etc/init.d/

[root@localhost init.d]# cp iptables iptables.bak

[root@localhost ~]# rpm -e iptables –nodeps

2、合并iptables+layer7补丁

tar -jxvf iptables-1.4.2.tar.bz2 -C /usr/src/

# cd /usr/src/netfilter-layer7-v2.20/iptables-1.4.1.1-for-kernel-2.6.20forward/

#cp libxt_layer7.c libxt_layer7.man /usr/src/iptables-1.4.2/extensions/

3、编译安装

#cd /usr/src/iptables-1.4.2/

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

[root@localhost iptables-1.4.2]# make && make install

4、安装l7-protocols模式包

[root@localhost ~]# tar zxvf l7-protocols-2008-10-04.tar.gz -C /etc/

[root@localhost ~]# mv /etc/l7-protocols-2008-10-04 /etc/l7-protocols

[root@localhost ~]# mv /etc/init.d/iptables.bak /etc/init.d/iptables

重启iptables服务

[root@localhost ~]# service iptables restart

案例

某公司有三个部门

工程部门 192.168.10.11—192.168.10.20

技术部门 192.168.10.21—192.168.10.30

经理办 192.168.10.31—192.168.10.40

公司上班时间 (周一---周五 08:20:00)

为了提高员工工作效率,现将公司网络做如下整改:

1、工程部门 上班时间可以访问ftp和http

不允许 qq聊天和迅雷下载,下班后无限制

2、软件部门 可以访问http

不允许非法站点sina ,不允许使用迅雷 ,连接数最多3个

不允许聊天 ,下班后无限制

3、经理办公室 可以访问http资源 qq聊天,下班后无限制

4、dmz区域www服务器进行发布

拓扑图

iptable的安全设置_第4张图片

实验步骤

[root@localhost ~]# vim /etc/sysctl.conf

7 net.ipv4.ip_forward = 1

[root@localhost ~]# sysctl -p

[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth1 -j SNAT --to 192.168.101.234

iptable的安全设置_第5张图片

[root@localhost ~]# modprobe ip_nat_ftp #加上ftp模块

修改为iptablse默认拒绝所有,增加安全性能

[root@localhost ~]# iptables -A INPUT -s 192.168.10.15 -p tcp --dport 22 -j ACCEPT

[root@localhost ~]# iptables -A OUTPUT -d 192.168.10.15 -p tcp --sport 22 -j ACCEPT

[root@localhost ~]# iptables -P INPUT DROP

[root@localhost ~]# iptables -P OUTPUT DROP

[root@localhost ~]# iptables -P FORWARD DROP

[root@localhost ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.10.11-192.168.10.20 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 21 -j ACCEPT

[root@localhost ~]# iptables -t filter -A FORWARD -p tcp --sport 21 -j ACCEPT

[root@localhost ~]# iptables -t filter -A FORWARD -p tcp --sport 20 -j ACCEPT

[root@localhost ~]# iptables -t filter -A FORWARD -p tcp --dport 20 -j ACCEPT

或者

基于状态的访问方式,记录数据流出的轨迹,自动返回

[root@localhost ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.10.11-192.168.10.20 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 21 -j ACCEPT

[root@localhost ~]# iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

上班时间工程部可以访问ftp

iptable的安全设置_第6张图片

[root@localhost ~]# iptables -t filter -A FORWARD -s 192.168.10.0/24 -m time --timestart 20:01 --timestop 07:59 -o eth1 -j ACCEPT

下班无限制

iptable的安全设置_第7张图片

软件部

[root@localhost ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.10.21-192.168.10.30 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 80 -j ACCEPT

DNS

[root@localhost ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.10.21-192.168.10.30 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p udp --dport 53 -j ACCEPT

可以访问http的资源

iptable的安全设置_第8张图片

[root@localhost ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.10.21-192.168.10.30 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m string --string "sina" --algo bm -j DROP

[root@localhost ~]# iptables -t filter -I FORWARD 1 -m iprange --src-range 192.168.10.21-192.168.10.30 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m string --string "sina" --algo bm -j DROP

iptable的安全设置_第9张图片

iptable的安全设置_第10张图片

不允许使用迅雷

[root@localhost ~]# iptables -I FORWARD 2 -m iprange --src-range 192.168.10.21-192.168.10.30 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m layer7 --l7proto qq -j DROP

[root@localhost ~]# iptables -I FORWARD 2 -m iprange --src-range 192.168.10.21-192.168.10.30 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m layer7 --l7proto xunlei -j DROP

[root@localhost ~]# iptables -I FORWARD 2 -m iprange --src-range 192.168.10.21-192.168.10.30 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m layer7 --l7proto msnmessenger -j DROP

连接数目不超过三个

[root@localhost ~]# iptables -I FORWARD 2 -m iprange --src-range 192.168.10.21-192.168.10.30 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --syn --dport 80 -m connlimit --connlimit-above 3 -j DROP

iptable的安全设置_第11张图片

经理办公室

[root@localhost ~]# iptables -I FORWARD 2 -m iprange --src-range 192.168.10.31-192.168.10.40 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p udp --dport 53 -j ACCEPT

#放行任何主机访问31——40主机上的TCP协议的53端口上的DNS传输

[root@localhost ~]# iptables -I FORWARD 2 -m iprange --src-range 192.168.10.31-192.168.10.40 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 80 -j ACCEPT

#放行任何主机访问31——40主机上的TCP协议的80端口上的已经建立的传输

[root@localhost ~]# iptables -I FORWARD 2 -m iprange --src-range 192.168.10.31-192.168.10.40 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m layer7 --l7proto qq -j ACCEPT

#允许QQ在工作时间的使用

[root@localhost ~]# iptables -I FORWARD 2 -m iprange --src-range 192.168.10.31-192.168.10.40 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m layer7 --l7proto xunlei -j ACCEPT

#允许QQ在工作时间的使用

可以上网下载

iptable的安全设置_第12张图片

可以聊天

iptable的安全设置_第13张图片

可以浏览新浪站点

iptable的安全设置_第14张图片

上班时间不可以访问FTP

clip_image033

DMZ区域的服务器发布

[root@localhost ~]# iptables -t nat -A PREROUTING -d 192.168.101.234 -p tcp --dport 80 -i eth1 -j DNAT --to 192.168.2.100

#将外网的web访问请求(80端口)通过DNAT转发至内网web服务器192.168.2.100

[root@localhost ~]# iptables -t filter -A FORWARD -d 192.168.2.100 -p tcp --dport 80 -j ACCEPT

iptable的安全设置_第15张图片