1 概述
RHEL7中,firewalld取代了iptables防火墙。两者相同点是都是防火墙管理工具,只是配置策略,策略会由内核的netfilter网络过滤器处理,iptables的策略由netfilter处理,firewalld策略由内核nftables包过滤框架处理
2 iptables
2.1 概述
iptables按照从上到下顺序读取策略,如果读到匹配的则执行匹配规则,不继续往下执行
策略 有两种:通与堵
规则 iptables用于处理或过滤流量的策略叫规则,多个规则可组成一个规则链
规则链 根据数据包处理位置分为五种 prerouting, input, output, forward, postrouting
reject和drop区别:reject是直接拒绝,drop是不处理,外界看来这个机器是不存在,因为看不到响应,响应就和它不存在一样
2.1 使用
iptables属于链路层服务
因为iptables是从上到下识别,所以应将优先级高的放前面
查看iptables策略 iptables -L
清空iptables策略 iptables -F
修改INPUT规则链默认为拒绝 iptables -P INPUT DROP,注意,丢弃要是DROP,不能是REJECT
允许ICMP流量进入(即ping时发的流量) iptables -I INPUT -p icmp -j ACCEPT -I表示插入规则,后面跟规则链、-p表示协议,-P表示target/chain,后面跟规则链和目标两个参数,-j表示目标,目标就是指ACCEPT/DROP这种
iptables无任何策略时,可ping通主机,添加drop策略后就ping不通了
删除INPUT中刚加入的规则,并将默认规则设为允许
iptables -D INPUT 1
iptables -P INPUT ACCEPT
设置INPUT只允许指定网段主机访问本机22端口,拒绝其他流量
iptables -I INPUT -s 192.168.1.3/24 -p tcp --dport 22 -j ACCEPT 注意,应该白名单,所以吧允许规则放前面,未匹配的均不允许
规则设定前,网段主机可以正常ssh目标主机
规则设定后,网段内主机无法ssh目标主机,一直没响应,如果是reject,则ssh直接被拒绝
给INPUT添加拒绝所有人访问本机12345端口的规则
iptables -I INPUT -p tcp --dport 12345 -j REJECT
iptables -I INPUT -p udp --dport 12345 -j REJECT
给INPUT添加拒绝192.168.80.134主机访问本机80端口的策略
iptables -I INPUT -p tcp -s 192.168.80.134 --dport 80 -j REJECT
给INPUT添加拒绝所有主机访问本机1000-1024端口的策略
iptables -A INPUT -p tcp --dport 1000:1024 -j REJECT
iptables -A INPUT -p udp --dport 1000:1024 -j REJECT
注意,下次重启主机,iptables规则会失效,可以使用iptables-save永久保存规则
如果是RHEL567,保存命令未service iptables save
3 firewalld
firewall有命令行和GUI
生效也有runtime和永久生效,命令行如果要永久生效,加入参数--permanent,加入永久生效规则得重启才能生效,如果需要立即生效,执行命令firewall-cmd --reload
和iptables相比,规则不是自上而下识别,而是有优先级,例如富规则比一般规则优先
3.1 使用
1 查看firewalld服务当前使用区域 firewall-cmd --get-default-zone
2 查询指定网卡在firewalld服务中绑定的区域 firewall-cmd --get-zone-of-interface=ens33
3 吧网卡默认区域该文external,使其永久生效 firewall-cmd --permanent --zone=external --change-interface=ens33
4 吧firewalld服务默认区域改为public firewall-cmd --set-default-zone=public
5 启动或关闭firewalld防火墙服务的应急状态模式 firewall-cmd --panic-on/firewall-cmd --panic-off
6 查询ssh和https协议流量是否允许通过
firewall-cmd --zone=public --query-service=ssh
firewall-cmd --zone=public --query-service=https
7 把https协议流量设为永久允许并立即生效
firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd --reload
如果不重启或立即生效,改完再查会发现没改过来
8 把http协议改为永久拒绝,立即生效
firewall-cmd --zone=public --permanent --remove-service=http
firewall-cmd --reload
9 把8080和8081设为允许,仅当前生效
firewall-cmd --zone=public --add-port=8080-8081/tcp
firewall-cmd --zone=public --list-ports
10 把访问本机888端口流量转发到22端口,永久生效
firewall-cmd --permanent --zone=public --add-forward-port=port=888:proto=tcp:toport=22:toaddr=192.168.1.1
firewall-cmd --reload
可正常ssh
11 富规则设定,拒绝某网段所有请求
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.80.0/24" service name="ssh" reject"
3.2 图形管理工具
4 服务访问控制列表
此处介绍的是tcpwrapper
看服务是否支持tcpwrapper:ldd service_name|grep wrapper
设置tcpwrapper的话,编辑/etc/下的hosts.allow/hosts.deny就好了,先匹配allow,没匹配到再匹配deny