设置防火墙
CentOS 7版本已经舍弃了iptables,改用firewall-cmd来设置防火墙相关配置,我从网上总结了一下,基本是够用了。也是走了一些弯路。希望下面的内容可以对大家学习有帮助。
CentOS 6 以上版本的请查看:CentOS 6 iptables 防火墙设置_dling8的博客-CSDN博客
1.云主机的防火墙一般默认为关闭状态,无法使用 firewall-cmd 命令;
2.首先编辑文件:
vim /usr/lib/firewalld/services/ssh.xml
修改远程连接的端口号,默认为22,若你没有修改过默认端口号,此处不用修改;
<port protocol="tcp" port="22"/>
我的远程连接端口号设置成了12022,则修改为:
<port protocol="tcp" port="12022"/>
注意:此处若不修改,也可在第3步中添加对应的端口号。
3.添加其它开放端口,编辑文件 (这个文件目录和步骤2中不是同一个噢!):
vim /etc/firewalld/zones/public.xml
在文件中添加(端口号根据自身需求添加):
<port protocol="tcp" port="80"/>
----------------------------------中间为public.xml文件内容-------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name="ssh"/>
<service name="dhcpv6-client"/>
<port protocol="tcp" port="80"/>
<port protocol="tcp" port="8001"/>
<port protocol="tcp" port="8080"/>
<port protocol="tcp" port="12306"/>
<port protocol="tcp" port="10080"/>
<rule family="ipv4">
<port protocol="tcp" port="8002"/>
<accept/>
</rule>
</zone>
----------------------------------中间public.xml为文件内容-------------------------------------------
4.在启动firewalld.service服务前,需要关闭该服务的开机自动启动功能(默认一般是关闭的),防止我们上面端口设置错误,导致启动服务后无法连接远程的尴尬情况。如果无法连接,还可以重启云主机。
systemctl disable firewalld
检查是否设置成功:
systemctl is-enable firewalld
若显示disabled则表示设置成功
5.此时可以放心的启动firewalld.service服务了
systemctl restart firewalld
6.启动后,若远程连接正常,则说明设置正确,可以查看防火墙运行状态
systemctl status firewalld
7.此时可以使用 firewall-cmd 命令了,先来添加一个端口(--permanent参数表示永久有效,若不加重启系统后失效)
/*每次进行 添加/删除 操作时,必须执行:firewall-cmd --reload,否则使用命令:firewall-cmd --list-all,进行查看时,可能还未生效*/
firewall-cmd --permanent --add-port=9888/tcp
默认zone为public(可以在/etc/firewalld/firewalld.conf中设置),上面的语句等同于:
firewall-cmd --permanent --zone=public --add-port=9888/tcp
也可以指定zone,例如:
firewall-cmd --permanent --zone=abc --add-port=9888/tcp
会把端口配置到abc.xml文件中,前提你要先添加这个文件
通过下面的命令,可以查看所有添加的规则、服务、端口等
firewall-cmd --list-all
8.添加端口后记得重载,才能刷新配置,以下两个命令都可以,任选一
firewall-cmd --reload
systemctl restart firewalld
9.firewall-cmd命令有很多,可以通过 firewall-cmd -h 查看
10.其它设置:
/**设置任意ip访问服务器的 10022端口**/
方式一:
<port protocol="tcp" port="10022"/>
方式二:
<rule family="ipv4">
<port protocol="tcp" port="10022"/>
<accept/>
</rule>
/**指定 ip:122.10.70.234 访问服务器的 514端口**/
<rule family="ipv4">
<source address="122.10.70.234"/>
<port protocol="udp" port="514"/>
<accept/>
</rule>
端口转发
每次进行 添加/删除 操作时,必须执行:firewall-cmd --reload,否则使用命令:firewall-cmd --list-all,进行查看时,可能还未生效
1.需先开启允许伪装IP,否则设置转发无效
firewall-cmd --query-masquerade // 检查是否允许伪装IP
firewall-cmd --permanent --add-masquerade // 允许防火墙伪装IP
firewall-cmd --permanent --remove-masquerade // 禁止防火墙伪装IP
2.设置转发: 注意 --zone=public 为默认的,可以不用写
a 本机端口转发:转发 tcp 8001端口 至 8002
firewall-cmd --zone=public --permanent --add-forward-port=port=8001:proto=tcp:toport=8002
b 本机转发到其它IP的相同端口:转发 tcp 8001端口 至 121.196.223.183:10869
firewall-cmd --zone=public --permanent --add-forward-port=port=8001:proto=tcp:toaddr=121.196.223.183
c 本机转发到其它IP的不同端口:转发 tcp 8001端口 至 121.196.223.183:10869
firewall-cmd --zone=public --permanent --add-forward-port=port=8001:proto=tcp:toport=80:toaddr=121.196.223.183
firewall-cmd --zone=public --permanent --add-forward-port=port=8080:proto=tcp:toport=80:toaddr=121.196.223.183
/*我在别的zone里面添加好像没用,大家可以试试*/
### 注意1 如果不做下面的修改,当你重新启动系统后,并不会进行转发。(为了保证成功率,此处建议修改)
1.编辑文件
vim /etc/sysctl.conf
2.修改参数为 1 ,注意 等号 前后都有空格
net.ipv4.ip_forward = 1
3.使刚刚的修改立即生效,执行后会打印出配置信息
sysctl -p
### 注意2 在配置正确的情况下,如果转发并未生效,可以尝试使用命令:systemctl restart firewalld,重启下防火墙