Linux之firewalld,tcpwrap,xinetd

firewalld:

1.firewall-cmd:编辑防火墙策略的工具

2.firewalld使用命令行接口配置火墙

(1)firewall-cmd --state                                ###查看火墙状态

firewall-cmd --get-active-zones              ###查看当前活动的域


firewall-cmd --set-default-zone=trusted      ###设置默认域为trusted域


firewall-cmd --get-services                   ###显示所有火墙提供的服务


firewall-cmd --zone=public --list-all        ###显示public域的信息


firewall-cmd --get-zones                      ###显示所有工作域


firewall-config                                       ###图形管理界面

firewall-cmd --list-all-zones                  ###列出所有工作域的信息

(2)防火墙工作的域以及允许连接的服务

ROL                    

block(限制)             ###拒绝所有网络连接

dmz(非军事区)           ###仅接受ssh服务

drop(丢弃)               ###任何接受的数据包都被丢弃,没有任何回复

external(外部)         ###出去的ipv4网络连接通过此区域伪装和转发,仅接受ssh服务       

home(家庭)             ###仅接受ssh,mdns,ipp-client,samba-client,或dhcpv6-client

internal(内部)          ###仅接受ssh,mdns,ipp-client,samba-client,dhcpv6-client

public(公共)            ###仅接受ssh,dhcpv6-client

trusted(信任)          ###接受所有连接

work(工作)             ###仅接受ssh,ipp-client或dhcpv6-client

注意:/usr/lib/firewalld/services/          ###有火墙提供所有服务的信息,以xml(可扩展标记语言)记录


3.网络接口的管控

(1)server(双网卡)

eth0:172.25.254.104

eth1:192.168.0.104

firewall-cmd --change-interface=eth1 --zone=trusted        ###把eth1加入信任区

firewall-cmd --remove-interface=eth1                                ###把eth1从信任区移除


firewall-cmd --add-interface=eth1 --zone=public               ###把eth1加入public区


echo 172.25.254.104 > /var/www/html/index.html             ###为了区分,的确从eth1

访问到了apache的发布内容,所以把eth0的IP作为默认发布文件

(2)client IP:172.25.254.204


客户端本来不能访问http的默认发布文件,把网卡eth1加入防火墙信任区,客户端就可以通过eth1去访问http

实现了一台主机控制两个工作域,eth1受trusted控制,eth0受public控(客户端本来不能通过172.25.254.204经由服务端的网卡eth1去访问服务端的默认发布文件,但把服务端的eth1加入信任区,即可访问)


4.对源IP的管控

server:(把之前添加到信任区trusted的网卡eth1移除,不然会对下面的实验有影响)

firewall-cmd --add-source=192.168.0.0/24   --zone=trusted    ###添加192.168.0.0/24的网段到信任区

firewall-cmd --get-active-zones

ROL

  sources: 172.25.0.252/32

public

  interfaces: eth0 eth1

trusted

  sources: 192.168.0.0/24192.168.0.0/24


client IP:192.168.0.204(192.168.0.0/24网段的源IP已经加入信任区,所以客户端可以访问)


5.防火墙中服务的添加

(1)配置文件的修改

firewall-cmd --zone=public --add-service=http

vim /etc/httpd/conf/httpd.conf

:

Listen 8080


systemctl restart httpd.service

测试:

client IP:172.25.254.204

firefox http://172.25.254.104:8080(把http服务添加到了防火墙,端口改为8080,还是无法访问,因为防火墙的默认文件中http是80端口)


server:

vim  /usr/lib/firewalld/services/http.xml 


systemctl restart firewalld.service   ###重启防火墙服务

成功访问


防火墙添加了http服务,但是火墙默认http端口还是80,修改了火墙默认端口为8080后,就可以访问

(2)端口的添加

server:(把火墙默认端口重新改回成80,不影响后面的实验)

vim /usr/lib/firewalld/services/http.xml     ###把默认端口改成80

:80

firewall-cmd --zone=public --add-port=8080/tcp        ###添加8080端口,http配置文件也要修改端口为8080

client


6.reload与complete-reload的区别

client:ssh@root172.25.254.104           ###先连接server

server:

firewall-cmd --zone=public --permanent --remove-service=ssh    ###把ssh服务永久移除

firewall-cmd --reload                   ###在刷新之前建立的连接,即使已经移除ssh服务,客户端依旧可以和服务端通信

firewall-cmd --complete-reload   ###在刷新之前建立的连接,移除服务,完全刷新后断开连接

7.火墙高级规则(直接端口模式添加规则优先应用防火墙高级规则,如果不熟悉iptables,使用直接接口非常危险)

firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -s 172.25.254.204 -p tcp --dport 8080 -j REJECT   ##从172.25.254.204来的数据包通过8080端口全部拒绝

firewall-cmd --direct --get-all-rules       ###查看添加的规则

firewall-cmd --direct --remove-rule ipv4 filter INPUT 0 -s 192.168.0.204 -p tcp --dport 80 -j REJECT  ##移除规则


firewall-cmd --direct --add-rule ipv4 filter INPUT 0 ! -s 172.25.254.204 -p tcp --dport 80 -j REJECT  ###除了//192.168.0.204,别的都不能访问http

client IP:172.25.254.204成功访问


真机IP:172.25.254.78不能访问


8.端口转发

server:

firewall-cmd --permanent --zone=public --add-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.254.5  ###通过22端口连接的都转到172.25.254.5

firewall-cmd --permanent --add-masquerade    ###开启伪装功能

firewall-cmd --reload                        ###刷新



client IP:192.168.0.204

连接server,转到172.25.254.78


9.地址伪装

server:

firewall-cmd --permanent --zone=public --remove-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.254.5

firewall-cmd --permanent --remove-masquerade          ###移除伪装功能

firewall-cmd --add-rich-rule='rule family=ipv4 masquerade'      ###添加高级规则


client:

ssh root@172.25.254.78      ###连接真机           

w  -i   ##看到是172.25.254.104在连接,实际上是192.168.0.204在连接,实现了地址的伪装



tcpwrap(tcp护照)

白名单权限高于黑名单

vim /etc/hosts.deny

ALL:ALL          ##所有服务的所有请求都拒绝,所以真机不能连接服务端


vim /etc/hosts.allow

:

sshd:172.25.254. :spawn echo `date` from %c to %s > /dev/pts/1    ###把登录的信息发送到/dev/pts/0也就是当前所在的shell(ps查看当前设备)


真机连接服务端,直接弹出登录信息


sshd:172.25.254. :spawn echo `date` from %c to %s | mail -s waring root  ##把登录的信息发到root的邮箱


在服务端mail查看邮箱


sshd:172.25.254. :spawnecho `date` from %c to %s >> /var/log/messages   ##发送到日志


服务端日志显示8:41:19来自于172.25.254.78的ssh连接


sshd:172.25.254.  EXPECT 172.25.254.104          ##172.25.254.网段除了172.25.254.104都可以ssh服务


172.25.254.78不能连接服务端


mail  ##查看邮箱

ldd /usr/sbin/sshd         ###查看sshd的插件,有wrap,selinux,保护ssh服务


服务的连接大致需要通过以下几步权限:

firewalld-->tcpwrap-->守护程序(xinetd)-->service(服务本身)-->selinux-->文件系统的权限

守护进程(xinetd):

yum install telnet -y                ###类似于sshd服务,企业6之前使用,要使用telnet-server服务就要安装telnet服务

yum install telnet-server -y     ###telnet服务器

yum install xinetd -y               ###守护进程

systemctl start xinetd.service     ###开启进程

systemctl stop firewalld.service   ##关闭火墙,让火墙允许telnet服务,方便下面实验


vim /etc/xinetd.d/telnet

:

service telnet

   {

   

         socket_type = stream

         protocol = tcp

         user = root

         server = /usr/sbin/in.telnetd

         disable = no

         flags = REUSE

         wait = no

  }

vim /etc/xinetd.conf              ###这个是xinetd的主配置文件,受守护进程(xinetd)保护的服务都可以生效,也可以把配置文件写到每个服务里都可以生效


systemctl restart xinetd.service         ###重启守护进程

no_access = 172.25.254.204 ###黑名单

only_from = 172.25.254.78  ###白名单


max_load=5    ###最大负载超过系统的百分之五时,崩掉

cps = 3 2        ###并发执行 3表示3秒内不能连接; 2表示同时连接telnet的服务用户数,因为无法同时操控几台主机,这里不再演示

instances = 10  ###最大连接数

per_source = 2###同一客户端(同一ip)最大连接数


chkconfig --list          ###查看守护进程管控的服务

telnet localhost | IP         ###连接本地,root用户默认黑名单 | 远程通过IP连接


SElinux对端口的影响

查看http开启的端口

vim /etc/httpd/conf/httpd.conf

: Listen 666

systemctl restart httpd           ###重启服务不能启动


查看日志,给出了解决方案是selinux的权限问题,

setsebool -P httpd_can_network_connect 1      ###把所有的http端口都开启,显然不安全


可以把自定义端口666,加到selinux允许的http端口


重启http服务成功,同时selinux也没有被关闭,更加安全


删除自定义的http端口666,服务又不能启动了


权限是一层套一层,每一步都很重要,少开启了哪个权限,服务都不能启动,运维重要的就是安全,开启最少的权限能实现要求即可,权限越大越不安全

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值