Linux网络——配置防火墙的相关命令

Linux网络——配置防火墙的相关命令

摘要:本文主要学习了如何在Linux系统中配置防火墙。

iptables命令

iptables准确来讲并不是防火墙,真正的防火墙是运行于系统内核中的netfilter,而iptables仅仅是操作netfilter的一个工具,其所负责的主要功能便是与用户交互,获取到用户的要求,并转化成netfilter可以接受的信息。

链的概念

当客户端访问服务器的WEB服务时,客户端是起点,WEB服务所监听的套接字(IP地址和端口)是终点。当WEB服务需要响应客户端请求时,WEB服务所监听的IP与端口变成了起点,客户端变成了终点。

如果想要防火墙能够达到防火的目的,就需要在内核中的netfilter框架里设置关卡,所有进出的报文都要通过这些关卡,经过检查后,符合放行条件的才能放行,符合阻拦条件的则需要被阻止,于是就出现了INPUT关卡和OUTPUT关卡。如果客户端发来的报文访问的目标地址不是本机,而是其他服务器,这个时候就会用到PREROUTING关卡、FORWARD关卡和POSTROUTING关卡。这些关卡在iptables中被称之为链。

简要说明:INPUT链、OUTPUT链主要用在“主机防火墙”中,即主要针对服务器本机惊醒保护的防火墙。FORWARD链、PREROUTING链、POSTROUTING链多用在“网络型防火墙”中,例如使用Linux防火墙作为网关服务器在公司与Inetnet之间进行安全控制。

链的详细说明:

INPUT链:当收到访问防火墙本机地址的数据包(入站)时,应用此链中的规则。

OUTPUT链:当防火墙本机向外发送数据包(出站)时,应用此链中的规则。

FORWARD链:当接收到需要通过防火墙中转发送给其他地址的数据包(转发)时,应用此链中的规则。

PREROUTING链:在对数据包做路由选择之前,应用此链中的规则。

POSTROUTING链:在对数据包做路由选择之后,应用此链中的规则。

表的概念

每个经过这个关卡的报文,都要将这条链上的所有规则匹配一遍,如果有符合条件的规则,则执行规则对应的动作。但是每个链上的规则可能不止一个,所以把具有相同功能规则的集合叫做表,通过规则表管理规则。

默认的iptables规则表有:

1 filter表,过滤规则表,内核模块是iptables_filter。
2 nat表,网络地址转换规则表,内核模块是iptable_nat。
3 mangle表,修改数据标记位规则表,内核模块是iptable_mangle。
4 raw表,追踪数据规则表,内核模块是iptable_raw。

规则表应用优先级:raw,mangle,nat,filter。

各条规则的应用顺序:链内部的过滤遵循“匹配即停止”的原则,如果对比完整个链也没有找到和数据包匹配的规则,则会按照链的默认策略进行处理。

包过滤流程

安装

CentOS的版本7中,默认没有安装iptables工具,所以需要手动安装:

 1 [root@localhost ~]# yum install -y iptables-services
 2 ...
 3 =============================================================================================================================
 4  Package                             架构                     版本                              源                      大小
 5 =============================================================================================================================
 6 正在安装:
 7  iptables-services                   x86_64                   1.4.21-28.el7                     base                    52 k
 8 为依赖而安装:
 9  iptables                            x86_64                   1.4.21-28.el7                     base                   433 k
10 ...
11 完毕!
12 [root@localhost ~]# 

启动服务

使用管理服务的systemctl命令,启动并查看iptables服务:

 1 [root@localhost ~]# systemctl status iptables
 2 ● iptables.service - IPv4 firewall with iptables
 3    Loaded: loaded (/usr/lib/systemd/system/iptables.service; disabled; vendor preset: disabled)
 4    Active: inactive (dead)
 5 
 6 8月 16 10:38:38 localhost.localdomain systemd[1]: Stopped IPv4 firewall with iptables.
 7 8月 16 10:39:29 localhost.localdomain systemd[1]: Stopped IPv4 firewall with iptables.
 8 [root@localhost ~]# systemctl start iptables
 9 [root@localhost ~]# systemctl status iptables
10 ● iptables.service - IPv4 firewall with iptables
11    Loaded: loaded (/usr/lib/systemd/system/iptables.service; disabled; vendor preset: disabled)
12    Active: active (exited) since 五 2019-08-16 10:41:24 CST; 2s ago
13   Process: 1582 ExecStart=/usr/libexec/iptables/iptables.init start (code=exited, status=0/SUCCESS)
14  Main PID: 1582 (code=exited, status=0/SUCCESS)
15 
16 8月 16 10:41:24 localhost.localdomain systemd[1]: Starting IPv4 firewall with iptables...
17 8月 16 10:41:24 localhost.localdomain iptables.init[1582]: /usr/libexec/iptables/iptables.init:行22: /etc/init.d/func…或目录
18 8月 16 10:41:24 localhost.localdomain iptables.init[1582]: iptables: Applying firewall rules: /usr/libexec/iptables/i…到命令
19 8月 16 10:41:24 localhost.localdomain systemd[1]: Started IPv4 firewall with iptables.
20 Hint: Some lines were ellipsized, use -l to show in full.
21 [root@localhost ~]# 

基本语法

1 iptables [指定表] [选项] [条件] -j [策略]

指定表说明

1 -t 表名:用来指定操作的表,有filter、nat、mangle或raw,默认使用filter。

选项说明

查看的选项:

1 -L 链名:查看指定表指定链的规则,不指定链则查看指定表的所有规则。
2 -v:查看详细信息。
3 -n:以数字格式显示主机地址和端口号。
4 -x:显示计数器的精确值。
5 --line-numbers:查看规则时,显示其在链上的编号。

管理规则的选项:

1 -A 链名:添加新规则于指定链的尾部。
2 -I 链名 数字:添加新规则于指定链的指定位置,默认为首部。
3 -R 链名 数字:替换指定的规则为新的规则。
4 -D 链名 数字:根据规则编号删除规则。

管理链的选项:

1 -N 链名:新建一个自定义的规则链。
2 -X 链名:删除指定表指定自定义链的规则,不指定链则删除指定表的所有自定义链的规则。
3 -F 链名:清空指定表指定链的规则,不指定链则清空指定表的所有规则。
4 -E 原链名 新链名:重命名链。
5 -Z:清空链及链中默认规则的计数器。
6 -P 链名 策略, 设置链路的默认策略。

条件说明

1 -s IP地址:匹配源地址,这里不能指定主机名称,必须是IP。主要有3种,IP、IP/MASK、0.0.0.0/0.0.0.0。地址可以取反,加一个“!”表示除了哪个IP之外。
2 -d IP地址:匹配目标地址,规则同-s。
3 --sport 端口号-端口号:指定源端口,不能指定多个非连续端口,只能指定单个端口。
4 --dport 端口号-端口号:指定目标端口,规则同--sport。
5 -i 网卡:从指定网卡流入的数据,流入一般用在INPUT和PREROUTING上。
6 -o 网卡:从指定网卡流出的数据,流出一般在OUTPUT和POSTROUTING上。
7 -p 协议:匹配协议,这里的协议通常有3种,TCP、UDP、ICMP。
8 -m 端口号,端口号:表示启用多端口扩展。

策略说明

1 ACCEPT:接收数据包。
2 DROP:丢弃数据包。
3 REJECT:被拒绝时,提示被拒绝的原因。
4 REDIRECT:将数据包重新转向到本机或另一台主机的某一个端口,通常功能实现透明代理或对外开放内网的某些服务。
5 SNAT:源地址转换。
6 DNAT:目的地址转换。
7 MASQUERADE:IP伪装。
8 LOG:日志功能。

保存配置

1 [root@localhost ~]# service iptables save
2 iptables: Saving firewall rules to /etc/sysconfig/iptables:[  确定  ]
3 [root@localhost ~]# 

使用举例

查看规则:

 1 [root@localhost ~]# iptables -nvL
 2 Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 3  pkts bytes target     prot opt in     out     source               destination         
 4   584 45376 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
 5     0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
 6     0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
 7     1    52 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
 8     0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
 9 
10 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
11  pkts bytes target     prot opt in     out     source               destination         
12     0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
13 
14 Chain OUTPUT (policy ACCEPT 4 packets, 464 bytes)
15  pkts bytes target     prot opt in     out     source               destination         
16 [root@localhost ~]#

添加规则:

 1 [root@localhost ~]# iptables -A INPUT -m state --state NEW -p tcp --dport 3306 -j ACCEPT
 2 [root@localhost ~]# iptables -nvL
 3 Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 4  pkts bytes target     prot opt in     out     source               destination         
 5   754 57856 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
 6     0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
 7     0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
 8     1    52 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
 9     0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
10     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:3306
11 
12 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
13  pkts bytes target     prot opt in     out     source               destination         
14     0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
15 
16 Chain OUTPUT (policy ACCEPT 4 packets, 592 bytes)
17  pkts bytes target     prot opt in     out     source               destination         
18 [root@localhost ~]#

删除规则:

 1 [root@localhost ~]# iptables -D INPUT 6
 2 [root@localhost ~]# iptables -t filter -nvL
 3 Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 4  pkts bytes target     prot opt in     out     source               destination         
 5   807 61588 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
 6     0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
 7     0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
 8     1    52 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
 9     1   229 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
10 
11 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
12  pkts bytes target     prot opt in     out     source               destination         
13     0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
14 
15 Chain OUTPUT (policy ACCEPT 19 packets, 2004 bytes)
16  pkts bytes target     prot opt in     out     source               destination         
17 [root@localhost ~]# 

猜你喜欢

转载自www.cnblogs.com/shamao/p/11363820.html