linux系统防火墙常用指令,以及指定ip的访问权限设定,firewalld的端口转接,地址伪装
###以下所有操作,为了便于说明,黄色字体为172.25.254.145主机操作,蓝色字体为172.25.254.245主机操作,白色字体为172.25.254.45真机操作###
一 防火墙常用指令:
首先是防火墙的域,每种域支持不同的访问权限和服务:
常用指令:
firewall-cmd --state #查看防火墙状态
firewall-cmd --get-active-zones #查看防火墙当前域和源
firewall-cmd --get-default-zone #查看防火墙的默认域
firewall-cmd --cmd --get-zones #查看防火墙的所有域
firewall-cmd --list-all-zones #查看防火墙各个域的工作状态
firewall-cmd --set-default-zone=trusted #将防火墙的默认域修改为trusted
firewall-cmd --permanent --add-source=172.25.254245 --zone=trusted #给trusted域添加源
firewall-cmd --permanent --remove-source=172.25.254245 --zone=trusted #移除源
关于接口的配置:
关于防火墙的配置文件在/etc/firewalld下:
关于防火墙本身服务的配置文件在/usr/lib/firewalld下:
比如http.xml文件就是关于对http服务的配置:
文件中有着关于端口的陪置,在文件中修改的陪置都是永久的:
设定允许通过防火墙的服务:
firewall-cmd --permanent --zone=public --add-service=http
http服务的移除:
查看端口:
添加端口:
移除端口:
关于防火墙的重新加载:firewall-cmd --reload #重新加载防火墙
firewall-cmd --complete-reload #完全重新加载防火墙
reload和complete-reload的区别:前者重新加载不会中断已经通过防火墙连接的设备,后者会中断。
二 指定ip的访问权限设定:
防火墙的使用有时候需要针对不同的用户进行不同的权限设定,这时就需要以ip为限定,进行对用户访问权限的设定了。以用户对http服务的访问权限设定为例:
1. 首先使用指令查看http服务的端口为80,也就是说需要设定对80端口访问权限来进行对http服务的权限设定:
2. 使用指令firewall-cmd --list-all指令查看防护墙的服务配置,在service部分并没用http这一服务,就是说,此时所有用户都不能够访问本机的http服务,除非本机的防火墙关闭。但如果将http服务加入到service中,那么所有用户都可以通过防护墙访问本机的http服务了。这样所有的用户都没什么区别了。
3. 所以就需要设定对指定ip的用户可以进行http服务的访问。指令如下,也就是对防火墙添加规则,这个规则将写入到防火墙的INPUT表中。这种添加规则的方式,不需要将http服务添加到防火墙的service服务中。
关于指令中的参数设置:
-p 指定访问方式为tcp
--dport 指定服务端口。在此处指定端口为80也就是http服务所使用的端口,来进行对http服务的访问权限设定
-s 指定用户。此处指定172.25.254.245这个用户,也就是说该用户可以访问本机的http服务
-j 用户访问时的授权。-j有三种状态,分别为ACCEPT、DROP、REJECT
ACCEPT 将封包放行,进行完此处理动作后,将不再比对其它规则,直接跳往下一个规则链,也就是允许访问
REJECT 拦阻该封包,并传送封包通知对方
DROP 丢弃封包不予处理
对于-s这个参数,当有指定用户时,-s后面跟指定用户的ip。当没有-s这个参数时,即指定所有用户。在针对特定用户的访问权限时,添加指定的用户访问权限之后,还需要将其他用户的访问拒绝。如下设定其他所有用户为REJECT:
4. 添加的规则可以使用fire-cmd --direct --get-all-rules查看到:
5. 规则添加成功后,用户的权限设定就完成了。
在允许的172.25.254.245端可以访问到本机的http:
其他的如172.25.254.45这台主机就无法访问:
6. 规则的删除:只需要将指令中的--add 改为--remove
三 端口转接: 指定服务访问本机时转接到另一台主机
1. 以ssh服务的端口转接为例,首先查看ssh服务的端口为22:
3. 由于参数--permanent对于配置文件的修改时永久性的,所以在指令执行之后,需要重新加载防火墙。在firewall-cmd --list-all中可以看到添加的端口转接:
4. 在端口转接的设定完成之后,还需要开启masquerade服务:
5. 这样关于端口转接的配置就完成了。接下来在服务端测试:
使用172.25.254.45这台主机通过ssh服务访问172.252.254.145这台主机,服务将转到172.25.254.245这台主机:
6. 端口转接规则的删除,删除之后重新加载防火墙:
四 地址伪装(访问其他主机时将本机ip伪装为其他ip):
1. 给172.25.254.145这台主机添加两个网卡,并设定成两个不同的网段。一个为172.25.254.145,一个为172.25.0.145:
2. 在172.25.254.245这台主机端,设定网关为172.25.0.145。也就是说,245这台主机访问其他主机时,会首先接到172.25.0.145这台设备上,进行进一步的地址伪装:
3. 在245主机端设定net.ipv4.ip_forward=1,来允许数据的接收和转发:
如果该功能为0,那么vim编辑/etc/sysctl.conf文件,将设定为1的指令写入:
4. 在文件编辑完成之后保存退出,重启网络,这样net.ipv4.ip_forward=1就开启了数据的接收和转发:
5. 在245端执行指令: ssh [email protected] -x 通过ssh服务来访问172.25.254.45这台主机。
在172.25.254.45主机端,使用指令last可以查看到成功连接本机的主机为172.25.254.145而不是172.25.254.245。这样就完成了对于172.25.254.245这台主机ip的地址伪装: