防火墙分类
硬件:
用途: 整个企业入口
三层路由: H3C 华为 Cisco(思科)
深信服
软件:
用途: 网站内部封ip
iptables 写入到Linux内核中以后服务docker
firewalld Centos7
云防墙
阿里云:安全组
名词
容器:瓶子罐子存放东西 表(table):存放链的容器链(chain):存放规则的容器规则(policy):准许或拒绝规则 | Netfilter | 表(tables) | 链(chains) | 规则(Policy) | | —- | —- | —- | —- | | 一栋楼 | 楼里的房子 | 房子里的柜子 | 柜子里衣服,摆放规则 | | iptables | nat/filter | | |
防火墙规则匹配流程
- 防火墙是层层过滤的,实际是按照配置规则的顺序从上到下,从前到后进行过滤的。
- 如果匹配上规则,即明确表示是阻止还是通过,数据包就不再向下匹配新的规则.
- 如果规则中没有明确表明是阻止还是通过的,也就是没有匹配规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。
- 防火墙的默认规则是所有规则执行完才执行的。
表与链
四表五链
四表:filter表(**默认**) nat表 raw表 mangle表
nat表的功能一般在云服务器不能用 filter表可以
filter表
| filter表 | 强调:主要和主机自身相关,真正负责主机防火墙功能的(过滤流入流出主机的数据包) filter表示iptables默认使用的表,这个表定义了三个链( chains ) 企业工作场景:主机防火墙 |
|---|---|
| INPUT | 负责过滤所有目标地址是本机地址的数据包通俗来说:就是过滤进入主机的数据包 |
| FORWARD | 负责转发流经主机的数据包。起转发的作用,和NAT关系很大,后面会详细介绍LVS NAT模式, net.ipv4.ip_forward=0 |
| OUTPUT | 处理所有源地址是本机地址的数据包 通俗的讲:就是处理从主机发出去的数据包 |
NAT表
| NAT表 | 负责网络地址转换的,即来源与目的IP地址和port的转换。 应用:和主机本身无关,一般用于局域网共享上网或者特殊的端口转换服务相关。 工作场景: 1.用于企业路由( zebra )或网关( iptables ),共享上网( POSTROUTING ) 2.做内部外部IP地址一对一映射( dmz),硬件防火墙映射IP到内部服务器,ftp服务( PREROUTING ) 3. WEB,单个端口的映射,直接映射80端口( PREROUTING ) 这个表定义了3个链,nat功能相当于网络的acl控制。和网络交换机acl类似。 |
|---|---|
| OUTPUT | 和主机放出去的数据包有关,改变主机发出数据包的目的地址。 |
| PREROUTING | 在数据包到达防火墙时,进行路由判断之前执行的规则,作用是改变数据包的目的地址、目的端口等 就是收信时,根据规则重写收件人的地址。. 例如:把公网IP : xxx.xxx.xxx.xxx映射到局域网的xx.xx.xx.xx服务器.上。 如果是web服务,可以报80转换为局域网的服务器9000端口上 |
| POSTROUTING | 在数据包离开防火墙时进行路由判断之后执行的规则,作用改变数据包的源地址,源端口等 写好发件人的地址,要让家人回信时能够有地址可回。 例如。默认笔记本和虚拟机都是局域网地址,在出网的时候被路由器将源地址改为了公网地址。 生产应用:局域网共享上网。 |
perrouting 数据来之前postrouting 数据离开的时候
安装和使用
安装
~]# yum install iptables iptables-services -y启动Centos7~]# systemctl start iptables.service~]# systemctl enable iptables.serviceCentos6~]# /etc/init.d/iptables.service~]# chkconfig iptables on
命令参数
-n 不要吧ip端口转换成服务名 例如0.0.0.0/0 会自动转换成anywhere-t 指定表(默认是filter表)-I 添加规则(放在最前 写拒绝规则的时候使用)-A append 添加规则(放在最后) 后面指定链(INPUT..)-p 指定协议--dport (dest)目标端口 指定端口后面需要指定协议 tcp/udp/icmp(ping)/all-j 处理的方法(DROP|ACCEPT)或者REJECT-D 删除规则-s (source)指定源IP 范围 或者网段--line-number 显示行号-m multiport 可以添加多个端口
DROP 丢掉数据无返回信息
REJECT 丢掉数据返回信息
查看当前防火墙规则
~]# iptables -t nat -nL~]# iptables -t filter -nL~]# iptables -nLChain INPUT (policy ACCEPT) <---默认规则 放行target prot opt source destinationACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHEDACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0ACCEPT all -- 0.0.0.0/0 0.0.0.0/0ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibitedChain FORWARD (policy ACCEPT)target prot opt source destinationREJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibitedChain OUTPUT (policy ACCEPT)target prot opt source destination
防火墙关闭后 如果使用iptables -nL查看 , iptables会自动开启
模块加载
modprobe ip_tables 是防火墙的核心模块,负责维护防火墙的规则表,通过这些规则,实现防火墙的核心功能。归纳起来,主要有三种功能:包过滤( filter ) NAT 以及包处理( mangle )modprobe iptable_filter 防火墙数据包过滤模块,实现对数据包的过滤与放行功能modprobe iptable_nat 防火墙数据包转发模块,用于对数据包进行修改,从而实现数据转发的目的modprobe ip_conntrack 主要用于修改应用层协议控制包,无比重要的作用就是实现natmodprobe ip_conntrack_ftp 与ftp服务nat映射相关的模块modprobe ip_nat_ftp 与ftp 服务nat映射相关的模块modprobe ipt_state 防火墙状态信息模块,在新版centos6系统中已经忽略此模块的加载
查看
~]# lsmod |egrep "nat|filter|ipt"iptable_nat 12875 0nf_nat_ipv4 14115 1 iptable_natnf_nat 26787 1 nf_nat_ipv4ipt_REJECT 12541 2nf_reject_ipv4 13373 1 ipt_REJECTnf_conntrack 133053 4 nf_nat,nf_nat_ipv4,xt_conntrack,nf_conntrack_ipv4iptable_filter 12810 1ip_tables 27126 2 iptable_filter,iptable_natlibcrc32c 12644 3 xfs,nf_nat,nf_conntrack
清空规则
iptables -Z 清空所有规则,不会处理默认规则iptables -X 删除用户自定义的链iptables -F 链的计数器清零(数据包计数器与数据包字节计数器)
删除规则
只删除某一个规则
查看规则的行号
~]# iptables -nL --line-numberChain INPUT (policy ACCEPT)num target prot opt source destination1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/03 ACCEPT all -- 0.0.0.0/0 0.0.0.0/04 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:225 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibitedChain FORWARD (policy ACCEPT)num target prot opt source destination1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibitedChain OUTPUT (policy ACCEPT)num target prot opt source destination
删除第一行规则
~]# iptables -D INPUT 1
添加规则举例
拒绝规则写在前面
filter表
黑名单模式
实现只能通过内网访问22端口
iptables -A INPUT -p tcp ! -s 172.16.1.0/24 --dport 22 -j DROP
!表示 不是172.16.1.0/24这个网段就拒绝
屏蔽端口
# 只能访问80 443 22iptables -I INPUT -p tcp -m multiport ! --dport 80,443,22 -j DROP# 屏蔽范围端口iptables -I INPUT -p tcp -m muLtiport --dport 1024:2048 j DROP测试是否成功 可以用 nc-kl 1025然后另一台机器telnet
禁用某个IP
~]# iptables -I INPUT -p tcp -s 10.0.0.6 -j DROP
禁ping
iptables -I INPUT -p icmp -j DROP
ICMP 协议 是ping的协议
ping在其中的类型是8 所以命令中准确点可以加上—icmp-type 8
通过内核参数也可以禁ping
# 临时~]# echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all永久~]# net.ipv4.icmp_echo_ignore_a11=1 写入到/etc/sysctl.conf~]# sysct1 -P #生效
限制并发速率
--m limit 限制模块-m limit --1imit 10/minute# 每分钟只能有10个数据包(单位可以是second/minute/hour)
白名单模式
只允许10网段通过
iptables -A INPUT -s 10.0.0.0/24 -j ACCEPT 只允许10网段通过iptables -P INPUT DROP # 修改默认规则为拒绝
nat表
共享上网
云服务器不能用 阿里云可以用NAT网关
需要把共享上网主机的内核转发模块打开net.ipv4.ip_forward=1iptables -t nat -A POSTROUTING -s 172.16.1.0/24 j SNAT --to-source 10.0.0.61#修改的是POSTROUTING链 源ip是172.16.1. 0/24 经过防火墙处理修改为10.0.0.61然后另一台主机网关修改为10.0.0.61的内网IP
端口转发
用户访问a机器的一个端口 转发到b机器的一个端口
iptables -t nat -A PREROUTING -d 10.0.0.61 -p tcp --dport 9001 -j DNAT -- to-destination 172.16.1.7:22访问10.0.0.61的9000端口转发到了172.16.1.7的22端口
规则的备份 及永久生效
永久生效
~]# iptables-save >/etc/sysconfig/iptables #启动默认找的配置文件恢复~]# iptables-restore </etc/sysconfig/iptables
备份
~]# iptables-save >>/root/rul[root@web03 ~]# lltotal 8-rw-------. 1 root root 1499 Jan 10 14:42 anaconda-ks.cfg-rw-r--r-- 1 root root 472 May 14 10:55 rul~]# cat rul# Generated by iptables-save v1.4.21 on Tue May 14 10:55:43 2019*filter:INPUT ACCEPT [0:0]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [181:16663]-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT-A INPUT -p icmp -j ACCEPT-A INPUT -i lo -j ACCEPT-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT-A INPUT -j REJECT --reject-with icmp-host-prohibited-A FORWARD -j REJECT --reject-with icmp-host-prohibitedCOMMIT# Completed on Tue May 14 10:55:46 2019~]#~]# iptables -X~]# iptables -F~]# iptables -Z~]#~]# iptables-restore </root/rul~]# iptables -nLChain INPUT (policy ACCEPT)target prot opt source destinationACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHEDACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0ACCEPT all -- 0.0.0.0/0 0.0.0.0/0ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibitedChain FORWARD (policy ACCEPT)target prot opt source destinationREJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibitedChain OUTPUT (policy ACCEPT)target prot opt source destination
