用iptables开启防火墙报错: Failed to start IPv4 firewall with iptables.
错误原因:因为centos7.0默认不是使用iptables方式管理,而是firewalld方式。CentOS6.0防火墙用iptables管理。
解决办法有两个:使用firewalld方式。或者关闭firewalld,然后安装iptables。
一、关闭firewalld,安装iptables过程:
停止并屏蔽firewalld:
systemctl stop firewalld systemctl mask firewalld
安装iptables-services:
yum install iptables-services
设置开机启动:
systemctl enable iptables
停止/启动/重启 防火墙:
systemctl [stop|start|restart] iptables #or service iptables [stop|start|restart]
保存防火墙配置:
按照上述命令配置后的界面:
二、从iptables切换回firewalld
1、先看firewalld的状态:inactive
2、安装firewalld
3、切换到firewalld,切换过程与切换iptables一样
/************下面是iptables的一些命令*******************************/
查询防火墙状态:
[root@localhost ~]# service iptables status
停止防火墙:
[root@localhost ~]# service iptables stop
启动防火墙:
[root@localhost ~]# service iptables start
重启防火墙:
[root@localhost ~]# service iptables restart
永久关闭防火墙:
[root@localhost ~]# chkconfig iptables off
永久关闭后启用:
[root@localhost ~]# chkconfig iptables on
开启端口:
[root@localhost ~]# vim/etc/sysconfig/iptables
/**********下面是firewalld的一些命令*****************************/
#systemctl statusfirewalld //查看状态,看电脑上是否已经安装firewalld
#yum installfirewalld //安装firewalld防火墙
#systemctl startfirewalld.service //开启防火墙
#systemctl stop firewalld.service //关闭防火墙
#systemctl enable firewalld.service //设置开机自动启动
#systemctl disable firewalld.service //设置关闭开机制动启动
#firewall-cmd--reload //在不改变状态的条件下重新加载防火墙
启用某个服务
#firewall-cmd --zone=public --add-service=https //临时
#firewall-cmd --permanent --zone=public --add-service=https //永久
开启某个端口
#firewall-cmd--permanent --zone=public --add-port=8080-8081/tcp //永久
#firewall-cmd --zone=public --add-port=8080-8081/tcp //临时
查看开启的端口和服务
#firewall-cmd--permanent --zone=public --list-services //服务空格隔开 例如 dhcpv6-client https ss
#firewall-cmd--permanent --zone=public --list-ports //端口空格隔开 例如 8080-8081/tcp 8388/tcp 80/tcp
#systemctl restartfirewalld.service //修改配置后需要重启服务使其生效
#firewall-cmd--zone=public --query-port=8080/tcp //查看服务是否生效(例:添加的端口为8080)
/**********下面是systemctl的一些命令*******************************/
观察iptables和firewalld使用的两组命令,发现三个常用的命令:service、chkconfig、systemctl。那么它们分别是做什么的呢?(去网上搜索了一下给出了答案)
systemctl命令是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起。
任务 |
旧指令 |
新指令 |
使某服务自动启动 |
chkconfig --level 3 httpd on |
systemctl enable httpd.service |
使某服务不自动启动 |
chkconfig --level 3 httpd off |
systemctl disable httpd.service |
检查服务状态 |
service httpd status |
systemctl status httpd.service(服务详细信息) systemctl is-active httpd.service(仅显示是否 Active) |
显示所有已启动的服务 |
chkconfig --list |
systemctl list-units --type=service |
启动某服务 |
service httpd start |
systemctl start httpd.service |
停止某服务 |
service httpd stop |
systemctl stop httpd.service |
重启某服务 |
service httpd restart |
systemctl restart httpd.service |
总结:
记是记不住的,实操才可以,熟能生巧。
抓住一个问题,深入去挖,往往能挖出一片,从而扫清一片盲点。深挖能出清泉。
参考文章:
https://www.vkilo.com/rhel-7-iptables-service.html
http://blog.csdn.net/Joe68227597/article/details/75207859
http://www.linuxidc.com/Linux/2012-06/63111.htm
http://man.linuxde.net/systemctl