Iptables之layer7 – l7
1、给内核打补丁,并重新编译内核
代码:patch -p1#忽略顶层目录,所以patch的选项为p1,这里的数字1是目录层号
执行make menuconfig后进入目录依次选择以下选项并启用相关模块
Networking support → Networking Options →Network packet filtering framework →Core Netfilter Configuration
Networking support → Networking Options →Network packet filtering framework → IP: Netfilter Configuration
[root@layer7 ~]# make
[root@layer7 ~]# make modules_install
[root@layer7 ~]# make install
安装内核完成后会在/etc/grub.conf下生成一个新的条目
[root@layer7 linux]# vim /etc/grub.conf
将default=1修改为default=0
[root@layer7 linux]# reboot
重启一下启用新编译的内核
重启完成查看内核确实是刚才新编译的
2、给iptables源码打补丁,并重新编译iptables
Compiles iptables :
自己编译安装的内核版本中实现netfilter的内核模块与此前红帽系列自带的iptables实现的内核模块名称有所不同,自己编译的内核版本中其内核模块都重命名为xt,此前为ipt
卸载系统自带的iptables包前先备份服务启动脚本以方便使用
安装路径与备份的服务脚本中的路径保持一致即可,如需修改,服务脚本中的路径也要做相应修改;并指明内核源码的目录
Which iptables查看iptables命令路径,编辑刚刚备份的iptables服务脚本做以下两处修改
[root@layer7 iptables-1.4.6]# vim /tmp/bak/iptables
3、安装l7proto的Kernel Patch
提供协议特征包,layer7所支持的QQ,MSN等协调过滤是靠协议本身的某些特征码来识别协议类型的,所以解压该包提供协议特征码的定义
测试:layer7有两块网卡,其中eth0:10.33.1.142可以连接外网,
eth1:192.168.5.125连接内网,修改物理机ip与eth1在同一网段,并设定网关为eth2,编写防火墙规则(图12)通过layer7的eth0代理物理机上网,同时根据协议添加规则禁用QQ(图13)
在物理机上登录QQ进行测试,策略生效,网络正常连接但QQ登录失败(注:策略13要在QQ登录前生效,才能看到测试结果)
添加基于时间的控制策略,规定上网8:00-12:00和下午15:00-18:00时间段内192.168.5.0/24网段不能上网,保存规则到/etc/sysconfig/iptables.admin
[root@layer7 ~]# iptables-restore
读入文件以生效规则
物理机测试,规则生效
利用iptables的recent模块来抵御DOS攻击
1.利用connlimit模块将单IP的并发设置为3;会误杀使用NAT上网的用户,可以根据实际情况增大该值;
2.利用recent和state模块限制单IP在300s内只能与本机建立3个新连接。被限制五分钟后即可恢复访问。
iptables的记录
[root@layer7 ~]# iptables -I INPUT -d 10.33.1.143 -p tcp --dport 22 -m connlimit --connlimit-above 3
[root@layer7 ~]# iptables -I INPUT 2 -d 10.33.1.143 -p tcp --dport 22 -m state --state NEW -m recent
[root@layer7 ~]# iptables -I INPUT 3 -d 10.33.1.143 -p tcp --dport 22 -m state --state NEW -m recent 300 --hitcount 3--name SSH -j DROP
下面对最后两句做一个说明:
1.第二句是记录访问tcp 22端口的新连接,记录名称为SSH
–set 记录数据包的来源IP,如果IP已经存在将更新已经存在的条目
2.第三句是指SSH记录中的IP,300s内发起超过3次连接则拒绝此IP的连接。
–update 是指每次建立连接都更新列表;
–seconds必须与–rcheck或者–update同时使用
–hitcount必须与–rcheck或者–update同时使用
测试远程连接不可超过三个
也可以使用下面的这句记录日志:
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --name SSH --second 300 --hitcount 3 -j LOG --log-prefix "SSH Attack
知识点笔记:
1.自定义新链规定所有数据包先经过mychain过滤再返回到主链
删除mychain时要先删除引用并清空mychain
执行以下命令即可删除[root@layer7 ~]# iptables -X mychain
2.配置防火墙放行http,sshd,ftp服务请求回应包
FTP相关,编辑配置文件/etc/sysconfig/iptables-config 在IPTABLES_MODULES中指明要加载的两个模块ip_nat_ftp ip_conntrack_ftp
[root@wms ~]# iptables -L -n --line-numbers
Chain INPUT (policy DROP)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 10.33.1.117 state RELATED,ESTABLISHED
2 ACCEPT tcp -- 0.0.0.0/0 10.33.1.117 multiport dports 21,22,80 state NEW
3 ACCEPT icmp -- 10.33.100.200 10.33.1.117 icmp type 8 state NEW
4 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy DROP)
num target prot opt source destination
1 ACCEPT all -- 10.33.1.117 0.0.0.0/0 state RELATED,ESTABLISHED
2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0