一、防火墙种类及使用说明
硬件: 整个企业入口
- 三层路由: H3C 华为 Cisco(思科)
- 防火墙: 深信服,绿盟,奇安信.....
软件: 开源软件 网站内部
- iptables 写入到Linux内核中,以后服务docker 工作在 4层(大部分)
- firewalld C7
- nftalbes C8
- ufw (ubuntu firewall)
云防火墙(公有云)
- 安全组 (封ip,封端口)
- NAT网关(共享上网,端口映射....)
- waf应用防火墙(应用防火墙,处理7层的攻击) SQL注入,XSS等攻击. 书写规则(描述攻击过程,关键提示,关键操作.)
二、iptables概述
1、名词解释
容器:瓶子 罐子 存放东西
表(table): 存放链的容器,防火墙最大概念
链(chain): 存放规则的容器
规则(policy):准许或拒绝规则 ,未来书写的防火墙条件就是各种防火墙规则
2、执行过程
- 防火墙是层层过滤的,实际是按照配置规则的顺序从上到下,从前到后进行过滤的。
- 如果匹配成功规则,即明确表示是拒绝(DROP)还是接收(ACCEPT),数据包就不再向下匹配新的规则。
- 如果规则中没有明确表明是阻止还是通过的,也就是没有匹配规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。
- 防火墙的默认规则是所有规则都匹配完才会匹配的。
三、表和链
1、概述
表(table)是对功能的分类,防火墙功能(filter表),共享上网,端口转发(nat表)
链对数据流进行处理,需要使用不同的链(数据流入(INPUT),数据流出(OUTPUT))
iptables 是4表伍链
4表: filter 表 nat表 raw表 mangle表
伍链: INPUT OUTPUT FORWARD PREROUTING POSTROUTING
2、每个表说明
1)filter表
是iptables默认的表,filter表示过滤.
实现防火墙功能:(对数据包的filter过滤)屏蔽或准许,端口,ip.
2)nat表
实现nat功能
实现共享上网(内网服务器上外网)
端口映射和ip映射
参考资料
- 4表5链规则思维导图:www.processon.com/view/link/5...
- 防火墙官方文档:www.frozentux.net/iptables-tu...
四、环境准备和命令
bash
yum install -y iptables-services
#防火墙相关模块 加载到内核中
#临时 直接执行modprobe命令
#永久 写入到开机自启动 rc.local
cat >>/etc/rc.local<<EOF
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state
EOF
#因为firewalld与iptables有冲突,所以先关闭firewalld,在启动iptables
systemctl stop firewalld
systemctl disable firewalld
systemctl enable iptables.service --now
#查看filter表中的规则 ,默认查看的是filter表
iptables -nL
#清空filter表中的规则
iptables -F
iptables命令及其选项 | 指定表 | 指定链 | ip | 具体要求(端口协议) | 端口 | 动作 |
---|---|---|---|---|---|---|
iptables | -t filter | -I AINPUT(规则追加到开头) | -s | -p tcp/udp/icmp | --dprot 目的端口 | -j DRDP |
-A (规则追加到末尾) | -d | --sport 源端口 | -j REJECT | |||
-j ACCEPT |
案例一:禁止22端口
css
#拒绝用户访问22端口
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP
#查看规则并加上序号
iptables -t filter -nL --line-number
#删除规则
iptables -t filter -D INPUT 1 #根据序号删除
案例二:屏蔽某一个IP
css
iptables -I INPUT -s 10.0.0.7 -j DROP
案例三:禁止网段连入
css
iptables -I INPUT -s 10.0.0.0/24 -p tcp --dport 8080 -j DROP
案例四:只允许指定网段连入
css
#只准许 10.0.0.0/24 访问 言外之意 除了 10.0.0.0/24 都拒绝
iptables -I INPUT ! -s 10.0.0.0/24 -j DROP
案例五:指定多个端口
css
iptables -I INPUT -p tcp --dport 8888 -j DROP
iptables -I INPUT -p tcp --dport 9999 -j DROP
#指定多个端口 -m multiport
iptables -A INPUT -m multiport -p tcp --dport 80,443 -j ACCEPT
#如果是 连续的端口 可以不加上-m multiport 1:1024
案例六:防火墙规则的保存与恢复
- iptables-save 进行备份,默认输出到屏幕
- iptables-restore 进行恢复,加上文件
- 写入到/etc/sysconfig/iptables
ruby
iptables-save >/etc/sysconfig/iptables
iptables-restore /etc/sysconfig/iptables
案例七:如何使在命令行执行的iptables规则永久生效
要使iptables规则永久生效,你需要将规则保存到配置文件中。
javascript
iptables-save > /etc/sysconfig/iptables
systemctl restart iptables
五、SNAT实现共享上网
初始:解决公网IP不足的问题。
底层原理:nat表用于实现nat功能. nat网络地址转换.
172.16.1.7 内网服务器实现通过iptables实现共享上网原理详解.
实验环境准备
1、防火墙配置
bash
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.61
#防火墙上开启ip_forward功能(内核转发功能)
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p
注意事项:公网ip不固定情况 iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE
2、web配置网卡
如果后端服务器有两张网卡,记得关闭公网网卡,只保留内网网卡。
例如:eth0 的ONBOOT=no,在把eth1的网卡网关改成防火墙地址。
记得重启网卡
systemctl restart network
案例一:实现把访问10.0.0.3:80的请求转到172.16.1.17:80
css
iptables -t nat -A PREROUTING -p tcp -d 10.0.0.3 --dport 80 -j DNAT --to-destination 172.16.1.17:80
案例二:实现172.16.1.0/24段所有主机通过124.32.54.26外网IP 共享上网
css
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 124.32.54.26
六、DNAT实现端口转发
端口映射为了解决用户进来的问题. 外部的用户访问内网的某个服务器,端口
但是出于安全考虑不建议这样做,你想访问可以使用CLB端口映射实现,或者你想登录可以用虚拟机或跳板机。
也是所谓的DNAT规则。