Linux之Cent OS 7 服务管理和防火墙配置

1 CentOS7最小化安装需要安装的基础工具包:

[zwj01@localhost ~]$ sudo yum install lrzsz tree net-tools nmap vim bash-completion lsof dos2unix nc telnet ntp wget rng-tools psmisc -y

2 服务管理:

从CentOS 7开始,服务管理和防火墙配置有了很大的变化。系统服务脚本目录是/usr/lib/systemd(软件包安装的单元)和/etc/systemd/(系统管理员安装的单元,优先级更高),有系统(system)和用户(user)之分,如需要开机没有登陆的情况下就能运行的程序,定义在系统(system)服务里,即/usr/lib/systemd/system目录下,每一个服务以.service结尾。

下面以Nginx服务为例,定义为系统服务:

1)安装Nginx(略)

2)创建Nginx服务文件

[zwj@localhost system]$ sudo vim /usr/lib/systemd/system/nginx.service

[Unit]

Description=nginx

After=network.target

[Service]

Type=forking

ExecStart=/usr/local/nginx/sbin/nginx

ExecReload=/usr/local/nginx/sbin/nginx -s reload

ExecStop=/usr/local/nginx/sbin/nginx -s quit

PrivateTmp=true

[Install]

WantedBy=multi-user.target

配置文件说明:

[Unit]:服务的说明

Description:描述服务

After:描述服务类别

[Service]服务运行参数的设置

Type=forking是后台运行的形式

ExecStart为服务的具体运行命令

ExecReload为重启命令

ExecStop为停止命令

PrivateTmp=True表示给服务分配独立的临时空间

注意:[Service]的启动、重启、停止命令全部要求使用绝对路径

[Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3

3)设置开机启动:

systemctl enable nginx.service

4)启动Nginx服务:

systemctl start nginx.service

查看所有已启动的服务:systemctl list-units --type=service

显示服务列表:systemctl list-unit-files

值的说明:

enable:开机启动。被systemd启用了,即systemd已把它加载入内存里了。此时systemd认识(know)它

disable:禁止开机启动。没启用,即没有被systemd加载入内存,此时这个unit仅仅只是个文本文件

static:该unit文件里没用INSTALL项,也就不能设为开机启动。

masked:类似加锁,此时该unit无论如何都启动不了。

显示某项服务的当前状态:systemctl status crond.service

显示某项服务是否Active:systemctl is-active crond.service

停止某项服务:systemctl stop crond.service

开启某项服务:systemctl start crond.service

重启某项服务:systemctl restart crond.service

禁止某项服务自启动:systemctl disable crond.service

允许某项服务自启动:systemctl enable crond.service

查看某项服务是否开机启动:systemctl is-enabled crond.service

附 1:Sysvinit (CentOS 6)运行级别和 systemd (CentOS 7)目标的对应表

Sysvinit 运行级别

Systemd 目标

备注

0

runlevel0.target, poweroff.target

关闭系统。

1, s, single

runlevel1.target, rescue.target

单用户模式。

2, 4

runlevel2.target, runlevel4.target, multi-user.target

用户定义/域特定运行级别。默认等同于 3。

3

runlevel3.target, multi-user.target

多用户,非图形化。用户可以通过多个控制台或网络登录。

5

runlevel5.target, graphical.target

多用户,图形化。通常为所有运行级别 3 的服务外加图形化登录。

6

runlevel6.target, reboot.target

重启

emergency

emergency.target

紧急 Shell

附 2:服务类型

编写自定义的 service 文件时,可以选择几种不同的服务启动方式。启动方式可通过配置文件 [Service] 段中的 Type= 参数进行设置。

Type=simple(默认值):systemd认为该服务将立即启动。服务进程不会fork。如果该服务要启动其他服务,不要使用此类型启动,除非该服务是socket激活型。

Type=forking:systemd认为当该服务进程fork,且父进程退出后服务启动成功。对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求,使用此类型启动即可。使用此启动类型应同时指定 PIDFile=,以便systemd能够跟踪服务的主进程。

Type=oneshot:这一选项适用于只执行一项任务、随后立即退出的服务。可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。

Type=notify:与 Type=simple 相同,但约定服务会在就绪后向 systemd 发送一个信号。这一通知的实现由 libsystemd-daemon.so 提供。

Type=dbus:若以此方式启动,当指定的 BusName 出现在DBus系统总线上时,systemd认为服务就绪。

Type=idle: systemd会等待所有任务(Jobs)处理完成后,才开始执行idle类型的单元。除此之外,其他行为和Type=simple 类似

3 防火墙管理:

firewalld 将配置储存在 /usr/lib/firewalld/ (系统配置,尽可能不去修改)和 /etc/firewalld/ (用户配置)中的各种 XML 文件里

安装:yum install firewalld

启动:systemctl start firewalld.service

停止:systemctl stop firewalld.service

禁止自启动:systemctl disable firewalld.service

查看当前详细状态:systemctl status firewalld.service

显示状态:firewall-cmd --state

关于区域(区域定义了网络连接的可信等级,可以把网卡对应到不同的区域。默认区域为public)

获取支持的区域列表:[root@localhost ~]# firewall-cmd --get-zones

work drop internal external trusted home dmz public block

获取活动的区域:[root@localhost ~]# firewall-cmd --get-active-zones

public

interfaces: ens160

获取默认区域:firewall-cmd --get-default-zone

设置默认区域:firewall-cmd --set-default-zone=public

修改接口所属区域:firewall-cmd --zone=home --change-interface=lo

将接口增加到区域:firewall-cmd --zone=public --add-interface=lo

显示接口所在的区域:firewall-cmd --get-zone-of-interface=lo

从区域移除一个接口:firewall-cmd --zone=public --remove-interface=lo

启用区域中的某个服务:firewall-cmd --zone=public --add-service=http

端口管理:

开启端口:firewall-cmd --zone=public --add-port=80/tcp --permanent(--permanent参数表示永久生效,否则重启后则失效)也可以直接指定服务:firewall-cmd --zone=public --add-service=http

删除端口:firewall-cmd --zone=public --remove-port=23/tcp --permanent

重新加载:firewall-cmd --reload

显示开启的服务和端口:firewall-cmd --list-all

获取所有支持的服务:firewall-cmd --get-services

端口转发

启用区域的伪装功能(用于IP和端口映射):firewall-cmd --zone=public --add-masquerade --permanent

查询区域伪状态:firewall-cmd --zone=public  --query-masquerade

IP和端口转发:firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toaddr=192.168.180.131:toport=80 --permanent

本机端口转发:firewall-cmd  --zone=public  --add-forward-port=port=80:proto=tcp:toport=8080

应急模式

启用应急模式阻断所有网络连接:firewall-cmd --panic-on

禁用应急模式:firewall-cmd --panic-off

查询应急模式:firewall-cmd --query-panic

禁止某个IP访问服务器:

firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address="37.49.16.122" drop'

4 网络设置

永久性修改主机名:

hostnamectl set-hostname <主机名>

内网网卡配置:

TYPE=Ethernet

BOOTPROTO=static

DEFROUTE=yes

PEERDNS=yes

PEERROUTES=yes

IPV4_FAILURE_FATAL=no

#IPV6INIT=yes

#IPV6_AUTOCONF=yes

#IPV6_DEFROUTE=yes

#IPV6_PEERDNS=yes

#IPV6_PEERROUTES=yes

#IPV6_FAILURE_FATAL=no

NAME=eno33559296

UUID=fda7f900-0e7d-4b1a-8d45-76c13a

DEVICE=eno33559296

ONBOOT=yes

IPADDR=192.168.10.100

NETMASK=255.255.255.0

外网网卡配置:

TYPE=Ethernet

BOOTPROTO=static

DEFROUTE=yes

PEERDNS=yes

PEERROUTES=yes

#IPV4_FAILURE_FATAL=no

#IPV6INIT=yes

#IPV6_AUTOCONF=yes

#IPV6_DEFROUTE=yes

#IPV6_PEERDNS=yes

#IPV6_PEERROUTES=yes

#IPV6_FAILURE_FATAL=no

NAME=eno16780032

UUID=f75f56c4-ebc5-4394-b5b5-37ebd49

DEVICE=eno16780032

ONBOOT=yes

IPADDR=183.3.221.149

NETMASK=255.255.255.128

GATEWAY=183.3.221.129

或(可以把DNS写进去)

TYPE=Ethernet

BOOTPROTO=none

DEFROUTE=yes

IPV4_FAILURE_FATAL=no

IPV6INIT=yes

IPV6_AUTOCONF=yes

IPV6_DEFROUTE=yes

IPV6_FAILURE_FATAL=no

NAME=eth0

UUID=c342e706-d813-4157-b9c1-b76c6121f1a1

DEVICE=eth0

ONBOOT=yes

IPADDR=61.144.244.107

PREFIX=24

GATEWAY=61.144.244.254

DNS1=202.96.134.133

IPV6_PEERDNS=yes

IPV6_PEERROUTES=yes

IPV6_PRIVACY=no

本文转自 zengwj1949 51CTO博客,原文链接:http://blog.51cto.com/zengwj1949/1932758

上一篇:H3C防火墙端口开启二层模式,网络不通的解决方法
下一篇:zabbix自动监控网络设备juniper防火墙