一、firewalld的认识
1、firewalld提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的动态防火墙管理工具。
2、firewalld将网卡分为不同的区域,这些区域的区别在于对待来访的用户及传输的数据包的默认动作的不同,通过制定一些安全策略从而保证系统在被访问或传输数据时的安全。
二、firewalld区域(zones)
firewalld分为九个区域,含义如下:
trust(信任):可接受所有的网络连接;
home(家庭):用于家庭网络,仅接受ssh、mdns、ipp-client、samba-client或dhcpv6-client服务连接;
internal(内部):用于内部网络,仅接受ssh、ipp-client、mdns、samba-client或dhcpv6-client服务连接;
work(工作区):用于工作区,仅接受ssh、ipp-client、dhcpv6-client服务连接;
public(公共):用于公共区域的使用,仅接受ssh、dhcpv6-client服务,为firewalld的默认区域;
external(外部区域):出去的ipv4的网络连接经过此区域的伪装和转发,只支持ssh服务;
dmz(非军事区):仅接受ssh服务;
block(限制):拒绝所有的网络服务;
drop(丢弃):任何访问的网络数据包都会被丢弃,没有任何回应。
三、firewalld的控制命令
1、firewalld图形管理工具:firewall-config
2、查看防火墙状态
3、查看被激活的空间(即添加网卡的空间)
4、查看当前默认空间
5、查看firewalld所有的空间
6、查看指定空间的信息
7、查看可通过firewalld进行设定的系统中的服务
8、查看所有空间的所有设定
9、设定默认空间,如下图firewall-cmd --set-default-zone=dmz为设置默认空间为dmz(非军事区):仅接受ssh服务;
四、网络接口改变所属域
1、改变网卡所属域
1)先查看,可以看到,eth0,eth1在dmz域
2)为了实验效果,我们在apache默认发布目录下,写入内容,并重启服务生效
3)这时我们将eth1加入信任域
4)进行测试,用eth1所属网卡访问apache可以查看到刚才我们写入的内容,而eth0不行,表示添加策略成功
2、移除和添加网卡到域
1)移除
2)添加
3、将网段添加到信任域
4、将网段移除出信任域
5、将服务加入信任区域,其实只是将其端口加入允许列表,实验如下
1)先将http加入允许public域
2)此时两块网卡都可以访问
3)此时将http配置文件/etc/httpd/conf/httpd.conf这里改变为8080
4)改变完后,两块网卡都不能访问,即使http已经加入火墙允许列表
5)因为实际上实际火墙默认端口为80,在/usr/lib/firewalld/services/http.xml下可以查看
6)所以为了可以使8080可以使用,可以将8080端口加入允许列表
五、reload和complete-reload的区别
用ssh服务来体现
1)用客户端先ssh链接到服务端
2)此时将ssh移除出火墙允许列表,用reload重启服务
3)此时在用客户端在打开一个shell用ssh链接客户端,将被拒绝
4)但是之前链接的还可以继续使用
5)这是我们如果用complete-reload重启服务
6)之前链接的也将不能工作,会卡住,不能执行命令
reload改变之后的操作不影响之前的操作
complete-reload改变所有操作包括正在运行的
六、特定的规则 direct rules
在linux中想要保证主机的绝对安全以上的策略是远远不够的,还需要一些设定更为复杂、更加具体、更加安全的设定,即特定规则
1)firewall-cmd --direct --get-all-rules查看特定规则,如下图可以看到为空,下面我们进行编写实例
和iptables有点相似,下图的规则表示不允许192.168.0.205这个ip访问本机
2)我们可以查看大条件是允许http服务,但上面我们编写了特定的规则,实验可以看到192.168.0.205ip的这台主机不能访问,但其他主机可以
3)下面我们将刚才编写的数则移除,再次编写在前面加入!,表示除了192.168.0.205这台主机以外,其他的主机不能访问http服务
4)实验测试,此时只有192.168.0.205这台主机可以访问,其他不可以
firewall优先级先去direct规则里查找,如果有则按direct规则运行,如果没有则按默认list-all里的执行(默认允许就可以,没有就不行)
七、设定端口转发
1)firewall-cmd --permanent--add-masquerade打开masquerade伪装功能
2))firewall-cmd --permanent --zone=public--add-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.254.4这条命令的意思为:使用22端口(ssh服务)链接到本机的主机将其链接到172.25.254.4上
3)测试客户端连接172.25.254.105(服务端的ip)结果连接到了172.25.254.4上
八、地址伪装
1、先将masuerade关掉
2、用客户端访问172.25.254.4不能成功
3、加入地址伪装firewall-cmd--add-rich-rule='rule family=ipv4 masquerade'
4、再次用客户端访问172.25.254.4成功并且w查看,实际是192.168.0.205在连接(客户端的网关是服务端的192.168.0.105),显示是172.252.254.105在连接,实现伪装
九、tcpwarp
tcpwarp
保护加载了tcpwarp进程服务安全
1、在/etc/hosts.deny(tcpwarp的黑名单)输入ALL:ALL
真机ssh连接停顿一会提示不能连接
2、在/etc/hosts.allow加入允许ssh服务并指定ip段,并且别人连接后会发一封邮件mail给root
测试,可以连接,服务端查看邮件
3、在/etc/hosts.allow加入允许ssh服务并指定ip段,并且别人连接后会直接提示
测试其他主机连接,连接成功后服务端这边直接提示
4、在/etc/hosts.allow加入允许ssh服务并指定ip段,并且别人连接后在日志里有信息
测试连接成功后,服务端日志查看
十、守护进程
ldd /usr/sbin/服务来查看守护进程是否守护该服务,会出现libxinetde
1、安装 xinetd
2、cd /etc/xinetd.d
vim talnet
自己编写,如下:
disabl=no 表示允许
3、systemctl restart xinetd重启服务
chconfig --list查看talnet打开
4、安装telnet服务
执行telnet localhost测试
执行结果只能登陆非root用户
5、也可以telnet 加ip登陆其他人的非root用户(前提对方也装了telnet且关掉火墙)
6、编辑配置文件vim /etc/xinetd.conf,设定策略
22行开始
no_access = 172.25.254.5黑名单
only_from = 172.25.254.5 白名单(优先级高)
max_load=5 最大负载超过系统的百分之五时,崩掉
cps = 3 2 并发(同时)3表示秒数为3即3秒内不能连接 2表示并发连接数
instances = 2 最大连接数为2
per_source = 10 同一客户端(同一ip)最大连接数为10
十一、SElinux对端口的影响
1、在selinux开启的情况下只能使用服务的固定开放端口,如下图我在配置文件里将http的端口改为6666,在selinux开启的情况下,不能重启服务;将selinux设置为警告状态,则可以修改
2、如果要在selinux开启的情况下改变端口,需要手动将其加入默认端口,下图,我先查看http服务默认端口,没有6666,执行semanage port -a -t http_port_t -p tcp 6666 将其加入默认端口
3、加入完成后,测试,在selinux开启的情况下,在http配置文件里改变端口,重启服务,并查看