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 ~]#
下一篇: PHP 的 self 关键字用法
推荐阅读
-
linux网络配置命令(linux网络配置的详细过程)
-
linux修改hostname的配置文件(linux中修改主机名的命令)
-
linux配置防火墙详细步骤(iptables命令使用方法)
-
Linux ifconfig命令详解和使用示例(Linux网络参数配置和查看)
-
Linux netstat命令详解和使用例子(显示各种网络相关信息)
-
linux虚拟机网络配置与网络配置常用命令使用介绍
-
linux使用tcpdump命令监视指定网络数据包的方法
-
linux中rz、sz命令的安装配置方法
-
linux一些基本命令以及初级网络配置方法
-
linux修改hostname的配置文件(linux中修改主机名的命令)