防火墙基础概念
Netfilter/iptables 是unix/linux自带的一款优秀且开放源代码的完全*的基于包过滤的防火墙工具
iptables防火墙功能十分强大,使用非常灵活.可以对流入和流出服务的数据包进行很精细的控制
主要工作在OSI7层模型二,三 ,四层.可以对防火墙服务内核进行重新编译,可以支持7层防护(squid+iptables=waf)
防火墙表
防火墙进行防护的策略维度 4个维度
filter表
防火墙使用的默认表。可以实现对数据包过滤处理
表下面含有的链:
INPUT:对访问进入防火墙服务的流量进行管理控制 外面人 -INPUT-> 房子(防火墙)
FORWARD:对访问经过防火墙流量进行管理控制 外面人 - 房子(FORWARD) - 后花园(架构中内部主机) nat配合
OUTPUT:对内部访问外部流量进行管理控制 房子(人) -OUTPUT-> 外面世界
nat表
可以将访问目标或源信息进行转换(映射)
PREROUTING:在进行数据包路由转发之前,对数据包里面目标地址(IP)或者目标端口进行转换
POSTROUTING:在进行数据包路由转发之后,对数据包里面源地址(IP)或者源端口进行转换
mangle表
可以专门用于改写数据包信息(此表用处较少,可以忽略不计)
raw表
可以去除一定的信息(此表用处较少,可以忽略不计)
防火墙配置命令
iptables -t 表信息 -p 链信息 具体规则信息
需求01:禁止某个服务不要被外网访问 ``` iptables -t filter -A INPUT -p tcp --dport 80 -j DROP ``` 需求02:禁止指定地址可以访问,其余地址不能访问 ``` iptables -t filter -I INPUT -s 10.0.0.1 -p tcp --dport 80 -j DROP 需求03:如何对网段信息进行配置? ``` iptables -t filter -I INPUT -s 10.0.0.0/24 -p tcp --dport 80 -j DROP ``` 需求04:只允许指定网段可连入;只允许10.0.0.0/24网段里面的主机可以访问 ``` iptables -t filter -A INPUT ! -s 10.0.0.0/24 -p tcp --dport 23 -j DROP ``` 需求05:多端口访问策略配置 - **连续多端口配置 22-80** ``` iptables -A INPUT -s 10.0.0.10 -p tcp --dport 22:80 -j ACCEPT ``` - **间隔多端口配置 22 24 26 80** ``` iptables -A INPUT -m multiport -s 10.0.0.10 -p tcp --dport 22,24,26,80 -j ACCEPT ``` 需求06:实现访问测试禁ping功能 ``` # 方式一: 对ICMP请求的流量进行阻止 实现禁ping iptables -A INPUT -p icmp --icmp-type 8 -j DROP # 方式二: 对ICMP响应的流量进行阻止 实现禁ping iptables -A OUTPUT -p icmp --icmp-type 0 -j DROP # 简单配置方法: iptables -A INPUT -p icmp --icmp-type any -j DROP ``` 需求07:设置网络限制策略(限制数据传输频率) -m limit --limit n/(second/minute/hour) : 指定单位时间内可以接收或输出多少个数据包 --limit-burst n : 指定达到策略限制标准 ``` iptables -I INPUT -s 10.0.0.7 -p icmp --icmp-type 8 -m limit --limit 6/min --limit-burst 5 -j ACCEPT iptables -I INPUT 2 -s 10.0.0.7 -p icmp --icmp-type 8 -j DROP命令示例
第一个步骤:对内网主机设置内网网关 ``` # tail -2 /etc/sysconfig/network-scripts/ifcfg-eth1 GATEWAY=172.16.1.61 DNS1=223.5.5.5 ifdown eth1 && ifup eth1 ``` 第二个步骤:在防火墙服务器上开启路由转发功能 ``` vim /etc/sysctl.conf net.ipv4.ip_forward = 1 sysctl -p ``` 第三个步骤:配置NAT地址映射功能 ```shell iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.61 需求09:如何实现外网主机访问端口映射 A主机 --- (10.0.0.61)防火墙(172.16.1.61) ---- 内部服务器(172.16.1.8:22) D:10.0.0.61:9000 --> 172.16.1.8:22 第一个步骤:在防火墙服务器上开启路由转发功能 ```shell vim /etc/sysctl.conf net.ipv4.ip_forward = 1 sysctl -p ``` 第二个步骤:在防火墙服务器上设置端口或地址映射功能 ``` iptables -t nat -A PREROUTING -d 10.0.0.61 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.8:22示例2
防火墙自定义链
iptables -N syn-flood
# 创建一个syn-flood自定义链
iptables -A INPUT -i eth0 -syn -j syn-flood
# 将INPUT链中抓取的syn数据流量都放入到syn-flood自定义链中
iptables -A syn-flood -m limit -limit 5000/s -limit-burst 200 -j RETURN
# 一旦获取到流量大于每秒5000,并发大于200时,就执行下一条规则
iptables -A syn-flood -j DROP
# 丢弃syn-flood链上的数据
说明:自定义链避免syn的泛洪攻击
什么是自定义链:
iptables -N port-info
iptables -A port-info -p tcp --dport 8080 -j ACCEPT
iptables -A INPUT -s 10.0.0.0/24 -j port-info
iptables -R INPUT -s 11.0.0.0/8 -j port-info
iptables -A INPUT -s 192.168.1.0/24 -j port-info