Loading... > 防火墙策略可基于流量的源目地址、端口号、协议、应用等信息来定制 > > 防火墙使用预先定制的策略规则监控出入的流量 > > 若流量与某一条策略规则匹配,则执行相应的处理,反之丢弃 > > `iptables` 服务会把配置好的防火墙策略交给内核层面的 `netfilter` 网络过滤器来处理 > > `firewalld` 服务会把配置好的防火墙策略交给内核层面的 `nftables` 包过滤框架来处理 # 一. iptables > 早期linux系统中,默认使用iptables来配置防火墙 ## 1. 策略与规则链 - 防火墙会`自上至下` 读取策略规则,在`找到匹配项后` 立即结束匹配并执行`匹配项中定义的行为` - 如果读完所有规则没有匹配,就执行`默认的策略` - 一般,防火墙策略规则的设置有两种 - - 放行 - 阻止 - 当默认为阻止时,需要设置`允许规则` ,否则都无法访问 - 当默认为允许时,需要设置`禁止规则` ,否则都可以访问,防火墙失去意义 - iptables把`用于处理或过滤流量的策略` 称为`规则` ,`多条规则` 组成`规则链` - 规则链依据`数据包处理位置` 的不同,分为: - - PREROUTING 在进行路由前处理数据包 - INUT 处理流入数据包 - OUTPUT 处理流出数据包 - FORWARD 处理转发的数据包 - POSTROUTING 在进行路由后处理数据包 ## 2. iptables基本命令 | 参数 | 作用 | | ----------- | -------------------------------------- | | -P | 设置默认策略 | | -F | 清空规则链 | | -L | 查看规则链 | | -A | 在规则链的末尾加入新规则 | | -I num | 在规则链的头部加入新规则 | | -D num | 删除某一条规则 | | -s | 匹配来源地址IP/MASK, 加 `!` 表示反选 | | -d | 匹配目标地址 | | -i 网卡名称 | 匹配从该网卡流入的数据 | | -o 网卡名称 | 匹配从该网卡流出的数据 | | -p | 匹配协议,如TCP、UDP、ICMP | | --dport num | 匹配目标端口号 | | --sport num | 匹配来源端口号 | ``` # -L参数,查看已有的防火墙规则链 iptables -L # -F参数,清空已有的防火墙规则链 iptables -F # 把INPUT规则链默认规则设置为拒绝 iptables -P INPUT DROP # INPUT规则链添加允许ICMP流量进入的规则 iptables -I INPUT -p icmp -j ACCEPT # 删除INPUT规则链中刚刚加入的那条规则(允许ICMP),并把默认策略设置为允许 iptables -D INPUT 1 iptables -P INPUT ACCEPT # INPUT规则链设置为只允许 指定望断的主机访问本机的22端口,拒绝来自其他所有主机的流量 iptables -I INPUT -s 192.168.10.0/24 -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j REJECT # INPUT规则链添加拒绝所有人访问本机12345端口的规则 iptables -I INPUT -p tcp --dport 123456 -j REJECT iptables -I INPUT -p udp --dport 123456 -j REJECT # INPUT规则链中添加 拒绝192.168.10.5主机访问本机80端口 的规则 iptables -I INPUT -p tcp -s 192.168.10.5 --dport 80 -j REJECT # INPUT规则链添加 拒绝所有主机访问本机1000~1024端口 的规则 iptables -I INPUT -p tcp --dport 1000:1024 -j REJECT iptables -I INPUT -p udp --dport 1000:1024 -j REJECT ``` # 二. firewalld > 支持CLI和GUI > > 支持动态更新技术 > > 加入了区域(zone)概念 - 区域名称及策略规则 | 区域 | 默认策略规则 | | -------- | --------------------------------------------------------------------------------------------------------------------- | | trusted | 允许所有数据包 | | home | 拒绝流入的流量,除非与流出的流量相关如果流量与 `ssh、mdns、ipp-client、amba-client、dhcpv6-client` 有关,则允许流量 | | internal | 等同于home | | work | 拒绝流入的流量,除非与流出的流量相关如果流量与 `ssh、ipp-client、dhcpv6-client` 有关,则允许 | | public | 拒绝流入的流量,除非与流出的流量相关如果流量与 `ssh、dhcpv6-client` 有关,则允许 | | external | 拒绝流入的流量,除非与流出的流量相关如果流量与 `ssh` 服务有关,则允许 | | dmz | 拒绝流入的流量,除非与流出的流量相关如果流量与 `ssh` 服务有关,则允许 | | block | 拒绝流入的流量,除非与流出的流量有关 | | drop | 拒绝流入的流量,除非与流出的流量有关 | ## 1. 终端管理工具 - `firewall-cmd` 参数及作用 - - 使用firewall配置的策略默认为`运行时(Runtime)` 模式,系统重启后失效 - 永久配置需要在`firewall-cmd` 命令设置规则时添加`--permanent` - 设置永久配置后,如要立即生效,必须使用`firewall-cmd reload` 或`系统重启` | 参数 | 作用 | | --------------------------- | ----------------------------------------------------------- | | --get-default-zone | 查询默认的区域名称 | | --set-default-zone=区域名称 | 设置默认的区域,使其永久生效 | | --get-zones | 显示可用的区域 | | --get-services | 显示预定义的服务 | | --get-active-zones | 显示当前正在使用的区域和网卡名称 | | --add-source= | 将源自此IP或子网的流量导向指定的区域 | | --remove-source= | 不再将自此IP或子网的流量导向某个指定区域 | | --add-interface=网卡名称 | 将源自该网卡的所有流量导向某个指定区域 | | --change-interface=网卡名称 | 将某个网卡与区域进行关联 | | --list-all | 显示当前区域的网卡配置参数、资源、端口以及服务等信息 | | --list-all-zones | 显示所有区域的网卡配置参数、资源、端口以及服务等信息 | | --add-service=服务名 | 设置默认区域允许该服务的流量 | | --add-port=端口号/协议 | 设置默认区域允许该端口/协议的流量 | | --remove-service=服务名 | 设置默认区域不再允许该服务的流量 | | --remove-port=端口号/协议 | 设置默认区域不再允许该端口/协议的流量 | | --reload | 让 `永久生效` 的配置规则立即生效,并覆盖掉当前的配置规则 | | --panic-on | 开启应急状况模式 | | --panic-off | 关闭应急状况模式 | - 使用示例 ``` #查看firewalld 服务当前使用的区域 firewall-cmd --get-default-zone #查看eno16777728网卡在firewalld服务中的区域 firewall-cmd --get-zone-of-interface=eno16777728 #把firewalld服务中eno16777728网卡的默认区域修改为external,并在系统重启后生效, #分别查看当前与永久模式下的区域名称 firewall-cmd --permanent --zone=external --change-interface=eno16777728 firewall-cmd --get-zone-of-interface=eno16777728 firewall-cmd --permanent --get-zone-of-interface=eno16777728 #把firewalld服务的当前默认区域设置为public firewall-cmd --set-default-zone=public firewall-cmd --get-default-zone #启动/关闭firewalld防火墙服务的应急状况模式,,阻断一切网络连接 firewall-cmd --panic-on firewall-cmd --panic-off #查看public 区域是否允许请求SSH和HTTPS协议的流量 firewall-cmd --zone=public --query-service=ssh firewall-cmd --zone=public --query-service=https #把firewalld服务中请求HTTPS协议的流量设置为永久允许,并立即生效 firewall-cmd --zone=public --add-service https firewall-cmd --zone=public --permanent --add-service=https firewall-cmd --reload #把firewalld服务中请求HTTPS协议的流量设置为永久拒绝,并立即生效 firewall-cmd --zone=public --permanent --remove-service=https firewall-cmd --reload #把在firewalld服务中访问8080和8081端口的流量策略设置为允许,但仅当前生效 firewall-cmd --zone=public --add-port=8080-8081/tcp firewall-cmd --zone=public --list-ports #把访问本机888端口的流量转发到22端口,并且要求当前和长期均有效 firewall-cmd --permanent --zone=public --add-forward-port=port=888:proto=tcp:toport=22:toaddr=192.168.10.10 firewall-cmd --reload ``` ## 2.图形管理工具 - `firewall-config` - 功能: - - 1.选择运行时模式活永久模式的配置 - 2.可选的策略集合区域列表 - 3.常用的系统服务列表 - 4.当前正在使用的区域 - 5.管理当前被选中区域中的服务 - 6.管理当前呗选中区域中的端口 - 7.开关SNAT技术 - 8.设置端口转发策略 - 9.控制请求icmp服务的流量 - 10.管理防火墙的富规则 - 11.管理网卡设备 - 12.被选中区域的服务,若勾选了相应服务前面的复选框,则表示与之相关的流量 - 13.firewall-config工具的运行状态  # 三. 服务的访问控制列表 > TCP Wrappers是RHEL7系统中默认启动的一款流量监控程序,它能根据来访主机的地址与本机的目标服务程序做出允许或拒绝的操作. > > TCP Wrappers服务的防火墙策略由两个控制列表文件所控制,用户可以编辑允许控制列表文件来放行对服务的请求流量,也可以编辑拒绝控制列表文件来组织对服务的请求流量. - 控制列表文件修改后立即生效 - 系统会先检查允许控制列表文件`/etc/host.allow` ,如果匹配到相应的允许策略后会立即放行流量 - 如果没有匹配,则进一步匹配拒绝控制列表文件`/etc/host.deny` ,若找到匹配项则拒绝该流量 - 如果两个文件都没有匹配到,则默认放行 - 控制列表文件中的常用参数 | 客户端类型 | 示例 | 满足示例的客户端列表 | | -------------- | -------------------------- | ----------------------------- | | 单一主机 | 192.168.10.10 | IP为192.168.10.10的主机 | | 指定网段 | 192.168.10. | IP段为192.168.10.0/24的主机 | | 指定网段 | 192.168.10.0/255.255.255.0 | IP段为192.168.10.0/24的主机 | | 指定DNS后缀 | .linux.com | 所有dns后缀为.linux.com的主机 | | 指定主机名称 | www.linux.com | 主机名为www.linux.com的主机 | | 指定所有客户端 | ALL | 所有主机 | - 需要遵循的两个规则 - - 编写拒绝策略规则时,填写的是服务名称,而非协议名称 - 建议先编写拒绝策略规则,再编写允许策略规则,以便直观的看到相应的效果 Last modification:December 7, 2021 © Allow specification reprint Like 0 If you think my article is useful to you, please feel free to appreciate