Linux防火墙(iptables用法)

一、iptables介绍及防火墙分类

1.1 iptables与netfilter:

iptables并不是真正意义上的防火墙,可以将其理解为一个客户端工具,用户通过iptables这个客户端,将用户的安全设定执行到对应的"安全框架"中,这个"安全框架"才是真正的防火墙,这个框架的名字叫netfilter

netfilter才是防火墙真正的安全框架,位于内核空间
iptables是一个命令行工具,位于用户空间,通过这个命令行工具来操作netfilter。

1.2 防火墙分类

(1)从逻辑上分类
主机防火墙: 针对单个主机进行防护
网络防火墙: 处于网络入口或者边缘,针对网络入口进行防护,服务于防火墙背后的局域网

(2)从物理上分类
硬件防火墙: 在硬件级别实现部分防火墙功能,另一部分功能基于软件实现,性能高,成本高
软件防火墙: 应用软件处理逻辑运行于通用硬件平台之上的防火墙,性能低,成本低

二、iptables四表五链

2.1 四表五链

(1)链: 防火墙的作用在于对经过的报文匹配"规则",然后执行对应的"动作"。所以,当报文经过这些关卡的时候,则必须匹配这个关卡上的规则,这个关卡上有很多条规则,当我们把这些规则串到一个链条上的时候,就形成了"链"。在iptables中定义了五条链:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING。

(2)表: 我们把具有相同功能的规则的集合叫做"表",不同的规则放置在不同的表中工作,在iptables中定义了四种表:
filter表: 负责过滤功能,防火墙:内核模块:iptables_filter
nat表: network address translation,网络地址转换功能;内核模块:iptables_nat
mangle表: 拆解报文,做出修改,并重新封装的功能;内核模块:iptables_mangle
raw表: 关闭nat表上启用的连接追踪机制;内核模块:iptables_raw

2.2 表和链的关系

rawPREROUTING、OUTING
manglePREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING
natPREROUTING、OUTPUT、POSTROUTING (centos7中还有INPUT,centos6中没有)
filterINPUT、FORWARD、OUTPUT

因为数据包经过一个"链"的时候,会将当前链的所有规则都匹配一遍,因此iptables为我们定义了四张"表",当它们处于同一条"链"时,执行的优先级如下:raw–>mangle–>nat–>filter

三、iptables基本用法

3.1 匹配条件与处理动作

(1)匹配条件

  • 基本匹配条件:源地址Source IP、目标地址Destintion IP
  • 扩展匹配条件:源端口Source Port、目标端口Destintion Port

(2)处理动作

  • ACCEPT:允许数据包通过
  • DROP:直接丢弃数据包,不给任何回应信息
  • REJECT:拒绝数据包通过,必要时会给数据发送端一个响应信息
  • SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题
  • MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上
  • DNAT:目标地址转换
  • REDIRECT:在本机做端口映射
  • LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,即除了记录以外,不对数据包做任何其他操作,仍然让下一条规则去匹配

3.2 常用操作命令

(1)iptables常用命令:

-A:将一个规则添加到链末尾
-D:删除匹配的规则
-R:替换匹配的规则
-I:在指定的链的指定编号位置插入一个规则
-F:删除指定链或所有链的规则
-L:列出指定链中所有规则
-t:指定要操作的表
-v:列出详细信息
-n:不解析IP地址,直接显示
–line-numbers:显示规则序号
-N:创建用户自定义链
-X:删除指定的用户自定义链
-E:更改自定义链的名称

(2)常见设置参数:

–dport:指定目标TCP/IP端口
–sport:指定源TCP/IP端口
-p:指定协议
-j DROP:丢弃
-j ACCEPT:允许
-j REJECT:拒绝
-j LOG:在/var/log/messages中登记分组匹配的记录
-m mac -mac:绑定MAC地址
-s:指定源地址或地址段
-d:指定目标地址或地址段
-s !:指定源地址以外的

3.3 实际操作

下图-t选项指定要操作的表(不指定-t选项时默认就是filter表),-L选项列出规则:
在这里插入图片描述
下图是更加详细的显示:(-n不解析IP地址,-v列出详细信息,–line-numbers显示规则序号)
在这里插入图片描述

四、iptables规则配置

在配置之前先将系统的环境清零

[root@localhost ~]# iptables -F ##清理规则

[root@localhost ~]# iptables -nvL ##再次查看时没有任何规则

Chain INPUT (policy ACCEPT 6 packets, 384 bytes)
pkts bytes target prot opt in out source destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 3 packets, 280 bytes)
pkts bytes target prot opt in out source destination

清理之后,可以看到INPUT、FORWARD、OUTPUT默认策略都是ACCEPT

4.1 增加规则

(1)[root@localhost ~]# iptables -t filter -I INPUT -s 192.168.1.50 -j DROP ##丢弃所有来自192.168.1.50的报文

[root@localhost ~]# iptables -nvL ##查看

Chain INPUT (policy ACCEPT 8 packets, 512 bytes)
pkts bytes target prot opt in out source destination
0 0 DROP all – * * 192.168.1.50 0.0.0.0/0

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 5 packets, 472 bytes)
pkts bytes target prot opt in out source destination

[root@node1 ~]# ping 192.168.1.12 ##用192.168.1.50的服务器已经无法ping通

PING 192.168.1.12 (192.168.1.12) 56(84) bytes of data.

(2)[root@localhost ~]# iptables -t filter -I INPUT -s 192.168.1.131 -j REJECT ##拒绝所有来自192.168.1.131的报文

[root@localhost ~]# ping 192.168.1.12 ##用192.168.1.131的服务器已经无法ping通,收到拒绝

PING 192.168.1.12 (192.168.1.12) 56(84) bytes of data.
From 192.168.1.12 icmp_seq=1 Destination Port Unreachable
From 192.168.1.12 icmp_seq=2 Destination Port Unreachable
From 192.168.1.12 icmp_seq=3 Destination Port Unreachable

(3)[root@localhost ~]# iptables -t filter -A INPUT -s 192.168.1.102 -j DROP ##添加到最后一行

(4)[root@localhost ~]# iptables -t filter -I INPUT 2 -s 192.168.1.10 -j ACCEPT##具体添加到哪一行(第二行)
在这里插入图片描述

(5)[root@localhost ~]# iptables -t filter -I INPUT -s 192.168.1.102 -p ICMP -j DROP ##丢弃ping

(6)[root@localhost ~]# iptables -t filter -I INPUT -s 192.168.1.50 -p tcp --dport 80 -j REJECT ##拒绝curl

原本用192.168.1.50的服务器访问192.168.1.12的nginx,可以访问:
在这里插入图片描述
添加第(6)个规则后不能访问:
在这里插入图片描述

(7)[root@localhost ~]# iptables -t filter -I INPUT -p ICMP -s 192.168.1.145,192.168.1.102 -j ACCEPT ##接受来自192.168.1.145和192.168.1.102的报文

(8)[root@localhost ~]# iptables -t filter -I INPUT -p ICMP -s 192.168.1.0/24 -j ACCEPT ##接受整个192.168.1网段的报文

(9)[root@localhost ~]# iptables -t filter -I INPUT -p ICMP ! -s 192.168.1.25 -j ACCEPT ##在192.168.42.0/24 屏蔽了 192.168.42.25
!–>排除

(10)[root@localhost ~]# iptables -t filter -A INPUT -j REJECT ##拒绝所有

4.2 删除规则

(1)[root@localhost ~]# iptables -F ##删除所有

(2)[root@localhost ~]# iptables -t filter -D INPUT 2 ##删除第二条

(3)[root@localhost ~]# iptables -t filter -D INPUT -p tcp --sport 22 -j ACCEPT ##删除指定的规则
在这里插入图片描述
4.3 修改规则

(1)[root@localhost ~]# iptables -t filter -I INPUT -s 192.168.1.51 -j DROP
[root@localhost ~]# iptables -nvL
Chain INPUT (policy ACCEPT 35 packets, 2264 bytes)
pkts bytes target prot opt in out source destination
0 0 DROP all – * * 192.168.1.51 0.0.0.0/0

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 19 packets, 1720 bytes)
pkts bytes target prot opt in out source destination
[root@localhost ~]# iptables -t filter -R INPUT 1 -s 192.168.1.51 -j ACCEPT ##利用-R修改,把DROP修改为ACCEPT,修改的会将之前的规则覆盖

[root@localhost ~]# iptables -nvL
Chain INPUT (policy ACCEPT 6 packets, 384 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all – * * 192.168.1.51 0.0.0.0/0

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 3 packets, 296 bytes)
pkts bytes target prot opt in out source destination

(2)[root@localhost ~]# iptables -t filter -P INPUT DROP ##修改链的默认策略

4.4 保存规则

在以上的操作中,所有规则的配置都是临时的,当重启服务或者服务器重启后,规则就会消失,因此要输入一些命令来保存规则:

(1)[root@localhost ~]# service iptables save ##保存到文件,/etc/sysconfig/iptables

(2)[root@localhost ~]# iptables-save ##使用此命令并不能保存当前的iptables规则,但是可以将当前的iptables规则以“保存后的格式”输出到屏幕。因此可以配合重定向保存:iptables-save > /etc/sysconfig/iptables
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值