Linux-命令

  1. 添加权限方法及注意事项:

字母权限法很灵活,无论目录还是文件都可以随意添加删除超级权限

chmod u+s ... 添加SUID

chmod g+s ... 添加SGID

chmod +s ...同时添加SUID和SGID

chmod -s ...同时删除SUID和SGID

chmod o+t ...添加Sticky

chmod +t ...同上

数字权限表示法添加/删除时:

数字权限法可以同时删除文件的所有三种超级权限

chmod 0755 FILE

chmod  755 FILE

数字权限法只能删除目录的Sticky.不能删除目录的SUID和SGID.

数字权限法每次只能设置一种超级权限.添加权限时:

对于文件,会删除掉原有的其他超级权限.

对于目录,添加SUID或SGID时,Sticky会被删除.

所有表示为大写字母的权限均为无效(故障)权限,因为缺少了相应的x权限.

几个权限位映射参考:

SUID: user, 占据属主的执行权限位;

s: 属主拥有x权限

S:属主没有x权限

SGID: group,  占据group的执行权限位;

s: group拥有x权限

S:group没有x权限

Sticky: other, 占据ohter的执行权限位;

t: other拥有x权限

T:other没有x权限

  1. S位的核查命令

find / -type f -perm /6000 (centos6以上)

find / -type f -perm +6000 (centos6支持,centos7不支持

刚刚安装的centos7.4的系统中,已经有s位的:

/usr/bin/fusermount

/usr/bin/wall

/usr/bin/ksu

/usr/bin/chfn

/usr/bin/passwd

/usr/bin/chsh

/usr/bin/su

/usr/bin/Xorg

/usr/bin/ssh-agent

/usr/bin/chage

/usr/bin/gpasswd

/usr/bin/newgrp

/usr/bin/mount

/usr/bin/pkexec

/usr/bin/umount

/usr/bin/write

/usr/bin/crontab

/usr/bin/cgclassify

/usr/bin/cgexec

/usr/bin/at

/usr/bin/sudo

/usr/bin/staprun

/usr/bin/locate

/usr/sbin/unix_chkpwd

/usr/sbin/pam_timestamp_check

/usr/sbin/userhelper

/usr/sbin/lockdev

/usr/sbin/netreport

/usr/sbin/usernetctl

/usr/sbin/mount.nfs

/usr/sbin/postdrop

/usr/sbin/postqueue

/usr/lib/polkit-1/polkit-agent-helper-1

/usr/lib64/dbus-1/dbus-daemon-launch-helper

/usr/lib64/vte-2.91/gnome-pty-helper

/usr/libexec/flatpak-bwrap

/usr/libexec/utempter/utempter

/usr/libexec/openssh/ssh-keysign

/usr/libexec/sssd/krb5_child

/usr/libexec/sssd/ldap_child

/usr/libexec/sssd/selinux_child

/usr/libexec/sssd/proxy_child

/usr/libexec/spice-gtk-x86_64/spice-client-glib-usb-acl-helper

/usr/libexec/qemu-bridge-helper

/usr/libexec/abrt-action-install-debuginfo-to-abrt-cache

21、sudo命令的详细解释及内容核查

一、sudo执行命令的流程
将当前用户切换到超级用户下,或切换到指定的用户下,
然后以超级用户或其指定切换到的用户身份执行命令,执行完成后,直接退回到当前用户。
具体工作过程如下:
当用户执行sudo时,系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo的权限
-->确认用户具有可执行sudo的权限后,让用户输入用户自己的密码确认
-->若密码输入成功,则开始执行sudo后续的命令

 

二、不需要输入密码的情况
1.root执行sudo时不需要输入密码(eudoers文件中有配置root ALL=(ALL) ALL这样一条规则)
2.欲切换的身份与执行者的身份相同,不需要输入密码
3./etc/sudoers文件设置为允许用户在不输入该用户的密码的情况下使用所有命令
如设置允许wheel用户组中的用户在不输入该用户的密码的情况下使用所有命令
( %wheel        ALL=(ALL)       NOPASSWD: ALL)

 

三、/etc/sudoers文件解释
[root@test ~]# cat /etc/sudoers
## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
##该文件允许特定用户像root用户一样使用各种各样的命令,而不需要root用户的密码 
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
## 在文件的底部提供了很多相关命令的示例以供选择,这些示例都可以被特定用户或  
## ## 用户组所使用  
## This file must be edited with the 'visudo' command.
## 该文件必须使用"visudo"命令编辑

## Host Aliases
#主机别名
## Groups of machines. You may prefer to use hostnames (perhap using 
## wildcards for entire domains) or IP addresses instead.
## 对于一组服务器,你可能会更喜欢使用主机名(可能是全域名的通配符)
## 或IP地址代替,这时可以配置主机别名
  
# Host_Alias     FILESERVERS = fs1, fs2
# Host_Alias     MAILSERVERS = smtp, smtp2

## User Aliases
#用户别名
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname 
## rather than USERALIAS
## 这并不很常用,因为你可以通过使用组来代替一组用户的别名  
# User_Alias ADMINS = jsmith, mikem


## Command Aliases
## These are groups of related commands...
## 指定一系列相互关联的命令(当然可以是一个)的别名,通过赋予该别名sudo权限,  
## 可以通过sudo调用所有别名包含的命令,下面是一些示例


## Networking
#网络操作相关命令别名  
Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient,
 /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, 
 /sbin/mii-tool

## Installation and management of software
#软件安装管理相关命令别名  
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum

## Services
#服务相关命令别名 
Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig

## Updating the locate database
#本地数据库升级命令别名  
Cmnd_Alias LOCATE = /usr/sbin/updatedb

## Storage
#磁盘操作相关命令别名
Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount

## Delegating permissions
#代理权限相关命令别名 
Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp

## Processes
#进程相关命令别名
Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall

## Drivers
#驱动命令别名
Cmnd_Alias DRIVERS = /sbin/modprobe
#环境变量的相关配置
# Defaults specification

#
# Disable "ssh hostname sudo <cmd>", because it will show the password in clear. 
#         You have to run "ssh -t hostname sudo <cmd>".
#
Defaults    requiretty

Defaults    env_reset
Defaults    env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR \
                        LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \
                        LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
                        LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \
                        LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \
                        _XKB_CHARSET XAUTHORITY"

## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## 下面是规则配置:什么用户在哪台服务器上可以执行哪些命令(sudoers文件可以在多个系统上共享)
## Syntax:
##语法
##      user    MACHINE=COMMANDS
##  用户 登录的主机=(可以变换的身份) 可以执行的命令  
##
## The COMMANDS section may have other options added to it.
## 命令部分可以附带一些其它的选项  
##
## Allow root to run any commands anywhere 
## 允许root用户执行任意路径下的任意命令 
root    ALL=(ALL)       ALL

## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
## 允许sys中户组中的用户使用NETWORKING等所有别名中配置的命令
  
## Allows people in group wheel to run all commands
# %wheel        ALL=(ALL)       ALL
## 允许wheel用户组中的用户执行所有命令  
## Same thing without a password
## 允许wheel用户组中的用户在不输入该用户的密码的情况下使用所有命令
# %wheel        ALL=(ALL)       NOPASSWD: ALL

## Allows members of the users group to mount and unmount the
## cdrom as root
## 允许users用户组中的用户像root用户一样使用mount、unmount、chrom命令 
# %users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

## Allows members of the users group to shutdown this system
# %users  localhost=/sbin/shutdown -h now
## 允许users用户组中的用户像root用户一样使用shutdown命令

 

四、实际案例演示

实例1:让普通用户fieldyang具有/etc/init.d/nagios脚本重启的权限,可以在/etc/sudoers添加如下设置:

[root@test ~]# visudo

fieldyang ALL=NOPASSWD:/etc/init.d/nagios restart

 

实例2:让普通用户fieldyang具有所有超级用户的权限而又不用输入密码

[root@test ~]# visudo
fieldyang ALL=(ALL)NOPASSWD:ALL
[fieldyang@test ~]#sudo su - 
[fieldyang@test ~]#pwd
/root

 

实例3:针对MySQL数据库的设置,让test组中的test用户具备/etc/init.d/mysqld的权限
######################## mysql ################
1.
[root@test ~]# groupadd test
[root@test ~]# useradd -g test -m -d /home/test -s /bin/bash test
[root@test ~]# passwd test
2.
[root@test ~]# visudo
# test ALL=(ALL) NOPASSWD: /etc/init.d/mysqld
test ALL=(ALL)  /etc/init.d/mysqld
3. start/stop mysql
    3.1) start mysql
        login test
[root@test ~]# su test
[test@test ~]$ sudo /etc/init.d/mysqld start
    3.2) stop mysql
        login test
[root@test ~]# su test
[test@test ~]$ sudo /etc/init.d/mysqld stop


实例4:针对tomcat的设置,让test组中的test用户具备tomcat操作的权限
######################## tomcat ################
1. 
[root@test ~]# groupadd test
[root@test ~]# useradd -g test -m -d /home/test -s /bin/bash test
[root@test ~]# passwd test
2.
[root@test ~]# visudo
    # test ALL=(ALL)  /usr/local/tomcat/bin/shutdown.sh,/usr/local/tomcat/bin/startup.sh
    test ALL=(ALL) NOPASSWD: /usr/local/tomcat/bin/shutdown.sh,/usr/local/tomcat/bin/startup.sh
3.
[root@test ~]# vim /usr/local/tomcat/bin/catalina.sh
    ### JDK 
    export JAVA_HOME=/usr/local/jdk
    export JRE_HOME=$JAVA_HOME/jre
4. start/stop tomcat
    4.1) start tomcat
        login test
[root@test ~]# su test  
[test@test ~]$ sudo /usr/local/tomcat/bin/startup.sh
[test@test ~]$ ss -ntlup | grep java
[test@test ~]$ curl -I http://localhost:8080

    4.2) stop tomcat
        login test
[root@test ~]# su test 
[test@test ~]$ sudo /usr/local/tomcat/bin/shutdown.sh

22、selinux安全配置的核查

一:SELinux简介

在SELinux访问控制体系的限制下,进程只能访问那些在他的任务中所需要的文件,从而实现系统的安全性。

1:常见的读取控制机制

(1) DAC

(Discretionary Access Control,任意式读取控制),每个对象都会记录一个拥有者的信息。只要是对象的拥有,就可以获得该对象的完全控制权限。DAC允许拥有者完全权限。其他需要读取该对象的时候,必须授予适当的权限。但是每个对象仅有一组拥有者的信息,如果需要更复杂的读取控制能力,必须使用ACL。ACL是DAC的延伸,在ACL环境下,可以为不同的用户设置一组权限,对不同的用户设置不同的权限。

(2) MAC

(Mandatory Access Control,强制性读取控制),为每一个对象添加一个安全的上下文。进程和用户除了具备传统的权限之外,还必须获得SELinux的授权,才能读取对象。

(3) RBAC

(Role-based Access Control,角色基础读取控制),以用户所属的角色进行读取权限判定的动作。

(4) MLS

(Mulit-Live Security,多层次安全),以对象的机密等级来决定进程对该对象的读取权限。

2:什么是SELinux

SELinux(Security-Enhanced Linux,安全增强型Linux)是美国国家安全局(NAS)对于强制访问控制的实现,在这种访问控制体系的限制下,进程只能访问哪些在他的任务中所需的文件。SELinux在类型强制服务器中合并了多级安全性或一种可选的多类策略,并采用了基于角色的控制概念。

在SELinux中定义了许多类型(TYPE),每一个进程、文件、设备等都必须标识他所属的类型进程只能读取相同类型的文件,如果没有相关类型,并且SELinux不允许读取的时候,则无法读取文件。SELinux除了约束进程读取文件的能力之外,还限制进程对设备、网络联机、通信端口、跨进程通信的读取能力,并提供更细致的读取控制。

 

SELinux的特点:

Ø MAC:对访问的控制彻底化,对所有的文件、目录、端口的访问都是基于策略设定的,可以由管理员自行设定的。

Ø RBAC:对于用户只是赋予最小权限。用户被划分成了一些角色,即使是root用户,如果不具备sysadm_r的角色的话,也不能执行相关的管理。哪一个角色可以执行哪些域是可以修改的。

Ø 安全上下文:当启动SELinux的时候,所有文件与对象都有安全上下文。

 

 

 

二:SELinux状态和应用模式

1:/etc/selinux/config文件详解

[root@localhost ~]# cat /etc/selinux/config

 

# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:

#     enforcing - SELinux security policy is enforced.

#     permissive - SELinux prints warnings instead of enforcing.

#     disabled - No SELinux policy is loaded.

SELINUX=enforcing

# SELINUXTYPE= can take one of these two values:

#     targeted - Targeted processes are protected,

#     mls - Multi Level Security protection.

SELINUXTYPE=targeted

 

(1)应用模式设置

enforcing:强制模式,只要SELinux不允许,就无法执行

permissive:允许模式,将该时间记录下来,依然允许执行

disabled:禁用SELinux

(2)策略类型设置

在使用策略类型时必须先安装策略类型的软件包

targeted:保护常见的网络服务,是SELinux的默认值

      minimum:SELinux最低基本策略

      mls:提供符合MLS机制的安全性

 

2:查看SELinux状态

使用sestatus命令查看系统运行SELinux的状态、应用模式、布尔值以及sestatus.cong文件内列出的文件和进程的安全上下文。

-v:详细检查进程和文件的安全上下文

-b:显示当前布尔值状态

[root@localhost ~]# sestatus

SELinux status:                 enabled       \\SELinux状态,enabled启用,disabled禁用

SELinuxfs mount:                /selinux      \\SELiuux fs文件系统挂在目录

Current mode:                   enforcing    \\SELinux目前的应用模式

Mode from config file:          enforcing       \\在配置文件中设置的SELinux应用模式

Policy version:                 24            \\使用中的SELinux策略类型版本

Policy from config file:        targeted          \\在配置文件中设置的SELinux策略类型

 

3:启用或禁用SELinux

修改/etc/selinux/config文件,以禁用SELInux(若要启用,SELinux字段应设置为enforcing或permissive)

SELINUX=disabled

SELINUXTYPE=targeted

 

4:查看和更改SELinux应用模式

(1) 查看SELinux应用模式

[root@localhost ~]# getenforce

Enforcing

(2) 更改SELinux应用模式

使用setenforce命令可以切换SELinux应用模式

enforcing或1:强制模式

permissive或0:允许模式

[root@localhost ~]# setenforce 0

 

三:安全上下文

安全上下文是一组和进程或对象有关的安全属性,每一个进程或对象都会记录一条安全上下文,将其作为SELinux判断进程是否能读取对象的依据。

1:安全上下文格式

(1) USER字段

USER字段用来记录登录系统后所属的SELinux身份。USER字段通常以_u为后缀。

 

常用的USER:

Ø user_u:真实用户类型的使用者

Ø system_u:系统账户类型的使用者

Ø root:超级用户的使用者

(2) ROLE字段

ROLE字段用来存储进程、领域或对象所扮演的角色信息,使用ROLE代表多个TYPE的组合,ROLE字段通常以_r为后缀。

 

常用的ROLE

Ø staff_r:内部的用户角色

Ø user_r:其他或不分类的用户角色

Ø object_r:文件、设备或其他无法分类的对象

Ø secadm_r:允许做安全管理的用户角色

 

(3) TYPE字段

TYPE字段用来定义该对象的类别。TYPE字段通常以_t为后缀

 

通常的TYPE字段

unconfiged_:未设置类型

default_t:默认类别

mn_t:代表挂载点的类型,/mnt中的文件类型属于这个类别

boot_t:作为开机文件的类型,/boot中的文件多数属于这个类别

bin_t:作为二进制执行文件,/bin中的文件多数属于这个类别

sbin_t:作为系统管理类型的文件,/sbin中的文件属于这个类别

device_t:代表设备文件,/dev中的文件属于这个类别

lib_t:链接库类别,/lib中的文件属于这个类别

var_t:代表存储于/var中的文件类别

usr_t:代表存储于/usr中的文件类别

etc_t:存储于/etc中的文件类别

tty_device_t:代表终端或控制台设备

su_exec_t:具备su功能的执行文件

java_exec_t:JAVA相关的执行文件

public_content_t:公共内容类型文件,比如FTP、NFS等服务器中的文件

shadow_t:代表存储密码数据的文件类别

http_t:作为HTTP服务器文件的类别

 

(4) LEVEL和CATEGORY字段

用来定义其隶属的安全等级和分类。LEVEL字段定义为s0~S15,共16个,s0机密等级最低,s15机密等级最高。CATEGORY字段定义为c0~c1023,共1024个。

2:查看安全上下文

(1) 查看用户账户安全上下文

[root@localhost ~]# id -Z

unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

(2) 查看进程安全上下文

[root@localhost ~]# ps -ax -Z

Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ

LABEL                              PID TTY      STAT   TIME COMMAND

system_u:system_r:init_t:s0          1 ?        Ss     0:01 /sbin/init

system_u:system_r:kernel_t:s0        2 ?        S      0:00 [kthreadd]

system_u:system_r:kernel_t:s0        3 ?        S      0:00 [migration/0]

system_u:system_r:kernel_t:s0        4 ?        S      0:00 [ksoftirqd/0]

system_u:system_r:kernel_t:s0        5 ?        S      0:00 [migration/0]

system_u:system_r:kernel_t:s0        6 ?        S      0:00 [watchdog/0]

(3) 查看文件和目录安全上下文

[root@localhost ~]# ls -Z /root/anaconda-ks.cfg

-rw-------. root root system_u:object_r:admin_home_t:s0 /root/anaconda-ks.cfg

[root@localhost ~]# ls -dZ /root

dr-xr-x---. root root system_u:object_r:admin_home_t:s0 /root

 

3:修改文件的安全上下文

(1) 查看文件系统对象扩展属性

getfattr命令查看文件系统对象的扩展属性。

-m . 匹配所有格式的扩展属性,默认的是user.xxx,即"^user\."。

-d 获得所有扩展属性值

-d -e hex 使用16进制编码dump出对应扩展属性的值

--absolute-names 不过滤路径分隔符('/')

-n 指定扩展属性的名称

-R递归到子目录

 

[root@localhost ~]# getfattr -m . -d /root/anaconda-ks.cfg

getfattr: Removing leading '/' from absolute path names

# file: root/anaconda-ks.cfg

security.selinux="system_u:object_r:admin_home_t:s0"

(2) 修改文件安全上下文

使用chcon命令修改文件的SELinux安全上下文

-h, --no-dereference:影响符号连接而非引用的文件。

--reference=参考文件:使用指定参考文件的安全环境,而非指定值。

-R, --recursive:递归处理所有的文件及子目录。

-v, --verbose:为处理的所有文件显示诊断信息。

-u, --user=用户:设置指定用户的目标安全环境。

-r, --role=角色:设置指定角色的目标安全环境。

-t, --type=类型:设置指定类型的目标安全环境。

-l, --range=范围:设置指定范围的目标安全环境。

 

[root@localhost ~]# chcon -tetc_t /root/anaconda-ks.cfg

[root@localhost ~]# ls -Z /root/anaconda-ks.cfg

-rw-------. root root system_u:object_r:etc_t:s0       /root/anaconda-ks.cfg

4:修复安全上下文

(1) 查看默认安全上下文

使用matchpathcon命令可以得到制定文件的默认SELinux安全上下文。

-p:使用前缀的速度解答

-N:不使用解答

-n:不显示路径

-V:在磁盘匹配默认上验证文件上下文

-f <file_context_file文件>:使用备用file_context文件

 

[root@localhost ~]# matchpathcon /root/anaconda-ks.cfg

/root/anaconda-ks.cfg system_u:object_r:admin_home_t:s0

(2) 使用fixfiles命令修复安全上下文

使用fixfiles命令可以修复RPM软件包里的文件的安全上下文。

-l <日志文件>:将输出保存到制定的日志文件

-F:强制重置上下文为匹配file_context的自定义文件

-f:清楚/tmp目录

-R <RPM软件包名称>:使用rpm数据库,以发现指定数据包中的所有文件和恢复文件的上下文

 

例:修复crontabs软件包中的文件的安全上下文

[root@localhost ~]# ls -Z /etc/crontab

-rw-r--r--. root root system_u:object_r:system_cron_spool_t:s0 /etc/crontab

[root@localhost ~]# chcon -t user_home_t /etc/crontab

[root@localhost ~]# ls -Z /etc/crontab

-rw-r--r--. root root system_u:object_r:user_home_t:s0 /etc/crontab

[root@localhost ~]# rpm -qf /etc/crontab

crontabs-1.10-33.el6.noarch

[root@localhost ~]# fixfiles -R crontabs check

/sbin/restorecon reset /etc/crontab context system_u:object_r:user_home_t:s0->system_u:object_r:system_cron_spool_t:s0

[root@localhost ~]# fixfiles -R crontabs restore

[root@localhost ~]# ls -Z /etc/crontab

-rw-r--r--. root root system_u:object_r:system_cron_spool_t:s0 /etc/crontab

(3) 使用restorecon命令修复安全上下文

使用该命令可以恢复SELinux文件属性,即恢复文件的安全上下文。

-i:忽略不存在的文件

-f <文件名>:包含由应用程序处理的文件列表

-e <目录>:制定要排除的目录

-R:递归处理目录

-n:不改变任何文件标签

-o <文件名>:保存不正确的上下文列表到输出文件中

-v:显示文件标签

-F:强制恢复文件安全上下文

-p:没1000个文件显示速度

 

例:恢复/root/anaconda-ks.cfg文件的安全上下文

[root@localhost ~]# restorecon /root/anaconda-ks.cfg

[root@localhost ~]# ls -Z /root/anaconda-ks.cfg

-rw-------. root root system_u:object_r:admin_home_t:s0 /root/anaconda-ks.cfg

(4) 重新产生安全上下文

如果需要修复非常多的文件的安全上下文,则建议重新产生安全上下文,为Linux整个系统中的每一个文件重新产生正确的安全上下文。Linux在开机的时候,会检查是否需要启动SELinux子系统,以及是否有/.autorelabel文件,Linux系统使用fixfiles重新生成Linux系统文件的安全上下文。

 

[root@localhost ~]# touch /.autorelable

重启系统(需要较长时间)

 

四:策略类型

1:策略类型简介

SELinux策略是用来定义SELinux的读取规则,比如哪一个安全上下文的进程允许或禁止读取哪一个对象。Linux会把每一个Linux策略类型的资料存储在/etc/selinux策略类型名目录中。

 

例:targeted策略类型的内容(targeted目录中的文件或子目录都是用来存储SELinux策略类型的数据)

[root@localhost ~]# ls -l /etc/selinux/targeted/

总用量 24

drwxr-xr-x. 4 root root 4096 7月   1 2016 contexts     \\存储策略类型的安全上下文

drwxr-xr-x. 2 root root 4096 11月 24 2013 logins       \\

drwxr-xr-x. 3 root root 4096 7月   1 2016 modules     \\存储策略类型的模版数据

drwxr-xr-x. 2 root root 4096 7月   1 2016 policy       \\存储策略类型的二进制类型数据库

-rw-r--r--. 1 root root  607 11月 24 2013 setrans.conf   \\定义某一个安全等级和类别的转译名称

-rw-r--r--. 1 root root  106 7月   1 2016 seusers       \\自动生成libsemanage

 

[root@localhost ~]# ls -l /etc/selinux/targeted/policy/      \\policy是targeted中最重要的目录,

总用量 7124

-rw-r--r--. 1 root root 7292701 7月   1 2016 policy.24

[root@localhost ~]# ls /etc/selinux/targeted/policy/

policy.24      \\ policy.24是该策略类型数据库文件,文件名后的数子是该策略类型数据库的版本

 

 

2:安装和使用策略类型

(1) 查看/etc/selinux目录(此时只有一个targeted目录,每一个策略类型都会有一个目录的)

[root@localhost ~]# ls -l /etc/selinux/

总用量 20

-rw-r--r--. 1 root root  458 7月   1 2016 config

-rw-r--r--. 1 root root  113 11月 23 2013 restorecond.conf

-rw-r--r--. 1 root root   76 11月 23 2013 restorecond_user.conf

-rw-r--r--. 1 root root 2271 2月  22 2013 semanage.conf

drwxr-xr-x. 6 root root 4096 7月   1 2016 targeted

(2) 安装selinux-policy-minimum软件包

[root@localhost ~]# rpm -qa selinux-policy-minimum

[root@localhost ~]# yum -y install selinux-policy-minimum

(3) 查看是否已经存在策略类型

[root@localhost ~]# ls -l /etc/selinux/总用量 24

-rw-r--r--. 1 root root  458 7月   1 2016 config

drwxr-xr-x. 6 root root 4096 3月  15 14:10 minimum

-rw-r--r--. 1 root root  113 11月 23 2013 restorecond.conf

-rw-r--r--. 1 root root   76 11月 23 2013 restorecond_user.conf

-rw-r--r--. 1 root root 2271 2月  22 2013 semanage.conf

drwxr-xr-x. 6 root root 4096 7月   1 2016 targeted

(4) 使用新的策略类型

[root@localhost ~]# vi /etc/selinux/config

SELINUX=enforcing

SELINUXTYPE=minimum

(5) 重新启动Linux系统

 

3:查看策略类型信息

查看策略类型需要安装setools-console和setools-libs软件包,然后才能使用seinfo命令查看。

(1) 安装装setools-console和setools-libs软件包

[root@localhost ~]# yum -y install setools-console

[root@localhost ~]# yum -y install setools-libs

(2) 查看策略类型信息

使用seinfo命令查看SELinux策略的组建有关的信息

 

seinfo命令选项

-x:为每个组件匹配表达式显示更多详细信息

--stats:显示策略的统计信息

-l:显示约束语句时显示换行符

-A:列出SELinux的状态、规则布尔值、身份识别、角色、类型等所有信息。

-t:列出SELinux所有类型(type)的种类。

-r:列出SELinux所有角色(role)的种类。

-u:列出SELinux所有身份识别(user)的种类。

-b:列出所有规则的种类(布尔值)。

例:查看SELinux策略类型targeted的信息

[root@localhost ~]# seinfo /etc/selinux/targeted/policy/policy.24

 

Statistics for policy file: /etc/selinux/targeted/policy/policy.24

Policy Version & Type: v.24 (binary, mls)

 

   Classes:            81    Permissions:       235

   Sensitivities:       1    Categories:       1024

   Types:            3637    Attributes:        280

   Users:               9    Roles:              12

   Booleans:          217    Cond. Expr.:       257

   Allow:          291034    Neverallow:          0

   Auditallow:        123    Dontaudit:      226650

   Type_trans:      33142    Type_change:        38

   Type_member:        48    Role allow:         19

   Role_trans:        308    Range_trans:      4521

   Constraints:        90    Validatetrans:       0

   Initial SIDs:       27    Fs_use:             23

   Genfscon:           83    Portcon:           446

   Netifcon:            0    Nodecon:             0

   Permissives:        75    Polcap:              2

 

(3) 搜索策略类型

使用seinfo命令可以查询SELinux的策略提供多少相关规则,如果查到的相关类型或者布尔值,想要知道详细规则时,使用sesearch命令查询。

 

sesearch命令选项:

-a:列出该类型或布尔值的所有相关信息

-t:后面还要接类型,例如 -t httpd_t

-b:后面还要接布尔值的规则,例如 -b httpd_enable_ftp_server

-d:不搜索类型的属性

-R:使用正则表达式匹配

-n:问每个规则显示行号(如果有)

-S:搜索规则的语义而不是语法

-C:为条件规则显示条件表达式

 

规则类型:

-A:搜索允许规则

--neverallow:搜索neverallow规则

--auditallow:搜索auditallow规则

--dontaudit:搜索dontaudit规则

-T:搜索type_transition、type_member和type_change规则

--role_allow:搜索角色允许规则

--role_trans:搜索role_transition规则

--range_trans:搜索range_transition规则

--all:搜索所有规则类型

 

例:搜索targeted策略类型中httpd_t读取etc_t类型时所有的规则

[root@localhost ~]# sesearch -A -s httpd_t -t etc_t /etc/selinux/targeted/policy/policy.24

Found 14 semantic av rules:

   allow httpd_t file_type : filesystem getattr ;

   allow domain etc_t : file { ioctl read getattr lock open } ;

   allow domain etc_t : dir { ioctl read getattr lock search open } ;

   allow domain etc_t : lnk_file { read getattr } ;

   allow httpd_t etc_t : file { ioctl read getattr lock open } ;

   allow httpd_t etc_t : dir { ioctl read getattr lock search open } ;

   allow httpd_t etc_t : lnk_file { read getattr } ;

   allow domain configfile : file { ioctl read getattr lock open } ;

   allow domain configfile : dir { ioctl read getattr lock search open } ;

   allow domain configfile : lnk_file { read getattr } ;

   allow httpd_t configfile : file { ioctl read getattr lock open } ;

   allow httpd_t configfile : dir { ioctl read getattr lock search open } ;

   allow httpd_t configfile : lnk_file { read getattr } ;

   allow httpd_t etc_t : dir { getattr search open } ;

 

五:布尔值

1:查看布尔值

使用gesebool命令查看SELinux布尔值

-a:列出目前系统上面的所有布尔值条款设置为开启或关闭值。

 

例:查看所有SELinux布尔值

[root@localhost ~]# getsebool -a

abrt_anon_write --> off

abrt_handle_event --> off

allow_console_login --> on

allow_cvs_read_shadow --> off

allow_daemons_dump_core --> on

allow_daemons_use_tcp_wrapper --> off

allow_daemons_use_tty --> on

allow_domain_fd_use --> on

 

例:查看httpd_can_network_connect布尔值

[root@localhost ~]# getsebool httpd_can_network_connect

httpd_can_network_connect --> off

 

2:修改布尔值

setsebool命令是用来修改SElinux策略内各项规则的布尔值。setsebool命令和getsebool命令是SELinux修改和查询布尔值的一套工具组。

当值设置为1、on、true是标识启用布尔值,当值为0、false、off时为禁用布尔值。使用setsebool修改SELinux的布尔值时只能改变当前运行的布尔值,Linux系统重启后,将继续加载默认配置,如果需要永久改变,需要使用-P选项。

 

 

例:启用httpd_can_network_connect的布尔值

[root@localhost ~]# getsebool httpd_can_network_connect

httpd_can_network_connect --> off

[root@localhost ~]# setsebool httpd_can_network_connect on

[root@localhost ~]# getsebool httpd_can_network_connect

httpd_can_network_connect --> on

 

例子:禁用httpd_can_network_connect的布尔值

[root@localhost ~]# setsebool httpd_can_network_connect off

[root@localhost ~]# getsebool httpd_can_network_connect

httpd_can_network_connect --> off

 

六:管理策略模块

使用semodule命令可以管理SELinux策略模块,比如显示、安装、升级、删除、激活以及禁用策略模块。

 

semodule命令选项

-l:显示安装的模块

-R重装策略模块

-B建立和承诺改装策略模块

-I <策略模块>:安装一个新的模块

-u <策略模块>:升级策略模块

-e <策略模块>:激活策略模块

-d <策略模块>:禁用策略模块

-b <策略模块>:安装新的基础模块

-r <策略模块>:删除策略模块

 

例:查看SELinux加载的策略模块

[root@localhost ~]# semodule -l

abrt 1.2.0

accountsd 1.0.0

ada 1.4.0

afs 1.5.3

aiccu 1.0.0

aide 1.5.0

amanda 1.12.0

amtu 1.2.0

 

例:查看apache策略模块

[root@localhost ~]#  semodule -l | grep apache

apache 2.1.2

 

 

例:禁用zebra策略模块

[root@localhost ~]# semodule -d zebra

 [root@localhost ~]#  semodule -l | grep zebra

zebra 1.10.1 Disabled

 

例:激活zebra模块

[root@localhost ~]# semodule -e zebra

[root@localhost ~]#  semodule -l | grep zebra

zebra 1.10.1

 

例:删除zebra模块

[root@localhost ~]# semodule -r zebra

[root@localhost ~]#  semodule -l | grep zebra

 

七:图形界面管理SELinux

需要先安装policycoreutils-gui软件包

[root@localhost ~]# yum -y install policycoreutils-gui

【系统】à【管理】à【SELinux管理】,打开SELinux维护界面,(在application-other-selinx。。)

1:状态

 

2:布尔值

3:文本标记

4:用户映射

5:SELinux用户

6:网络端口

7:策略模块

8:进程域

23、linux下敏感信息的核查

1、/etc/issue和motd

当我们不想让其他用户知道我们的系统版本和内核信息(只限登录时),就可以修改issue文件;当我们想修改登录提示信息时,可以修改motd文件。

#修改成其他,防止泄漏系统信息
[root@serv01 etc]# vim /etc/issue

[root@serv01 etc]# cat /etc/issue
Red Hat Enterprise Linux Server release 6.1 (Santiago)
Kernel \r on an \m

[root@serv01 etc]# cat /etc/issue
Windows Server 2020
#修改欢迎信息,提供友好的提示
[root@serv01 etc]# vim /etc/motd
[root@serv01 etc]# cat /etc/motd
Welcome to zhink learn

#下次登录时就不会显示系统版本和内核信息,并会显示欢迎信息
[root@larrywen mail]# ssh 192.168.1.11
root@192.168.1.11's password:
Last login: Fri Sep 20 18:35:32 2013
Welcome to zhink learn

24、防火墙配置示例

  • 防火墙简介

 防火墙,一种高级访问控制设备,置于不同网络安全域之间,它通过相关的安全策略来控制(允许、拒绝、监视、记录)进出网络的访问行为。防火墙主要由服务访问规则、验证工具、包过滤和应用网关4个部分组成。实质上是指由软硬件组合成的一个在内外网之间构造的一种保护屏障,它是一种隔离技术。因此从物理上区分,可以分为软件和硬件防火墙,从逻辑上区分,可以分为主机和网络防火墙,而我们现在要讲到的iptables,是属于防火墙中的软件防火墙的范畴,但它只是一个命令行工具或者说是一种客户端代理,并不是真正的防火墙,用户通过这个代理,把安全设定执行到真正的防火墙框架中,这个框架叫做Netfilter。

防火墙扫描流经它的网络通信,通过这样的做法能够过滤掉一些攻击,以免其在目标计算机上被执行。防火墙还可以关闭不使用的端口,而且还能禁止特定端口的流出通信,封锁特洛伊木马。最后,它可以禁止来自特殊站点的访问,从而防止来自不明入侵者的所有通信。

  • 防火墙的作用

工作于主机或网络的边缘,对于进出本主机或网络的报文根据定义好的检查规则作匹配检测,对于能够被规则匹配到的报文做出相应处理的组件;

  • 防火墙的种类

主机防火墙

网络防火墙

  • 防火墙的功能

1、网络安全的屏障

2、强化网络安全策略

3、监控审计

4、监控审计

5、数据包过滤

6、网络IP地址转换

7、虚拟专用网络

8、日志记录与事件通知

  • iptables的优点

最大优点是它可以配置有状态的防火墙,有状态的防火墙能够指定并记住为发送或接收信息包所建立的连接的状态。防火墙可以从信息包的连接跟踪状态获得该信息。在决定新的信息包过滤时,防火墙 所使用的这些状态信息可以增加其效率和速度。这里有4种有效状态,名称分别为ESTABLISHED、INVALID、NEW和RELATED。

  • 防火墙的四表功能

filter :过滤 ,防火墙

nat : network , adress  ,translation , 网络地址转换

mangle : 拆解报文, 做出修改 ,封装报文 。

raw : 关闭nat 表上启用的连接追踪机智

注意   : nat : Network Address Translation ,安全性,网络层+传输层;

Proxy :  代理,应用层;

nat : 

SNAT : 只修改请求报文的源地址;

DNAT : 只修改请求报文的目标地址;

源地址转换 : iptables -t nat -A POSTROUTING -s LocalNET ! -d LocalNET -j SNAT --to -source ExtIP

iptables -t nat -A POSTROUTING -s LocalNET ! -d LocalNET -j MASQUERADE

目标地址转换 : iptables -t nat -A POSTROUTING -d ExtIP --p tcp|udp --dport PORT -j DNAT --to-destination InterServerIP[:PORT]

  • 数据包过滤匹配流程

键 (内置) :

PREROUTTING

INPUT

FORWARD

OUTPUT

POSTROUTING

报文流向

流入 : PREROUTING -->INPUT

流出 : OUTPUT --> POSTROUTING

转发 :PREROUTING --> FORWARD -->POSTROUTING

各功能的分别实现 的位置:

filter : INPUT , FORWARD ,OUTPUT

nat : PREROUTING( DNAT  ), OUTPUT ,POSTROUTING ( SNAT )

mangle : PREROUTING , INPUT ,FORWARD , OUTPUT ,POSTROUTING

raw : PREROUTING , OUTPUT

路由发生的时刻 :

报文进入本机后:

判断目标主机 :

报文发出之前 :

判断经由哪个接口送出下一跳 :

iptables : 四表五链

添加规则时的考虑点 :

(1)  要实现哪种功能 : 判断添加在哪张表上;

(2)  报文流经的路径  :    判断添加在哪张链上;

链 : 链上规则的次序,即为检查的次序 :因此隐含一定的法则

(1) 同类规则(访问同一应用),匹配范围小的放上面;

(2)不同类规则(访问不同应用),匹配到报文频率较大的放上面;

(3)将那些可由一条规则描述的多个规则合并为一个;

(4)设置默认策略;

功能优先级次序  : raw > mangle > nat c >filter

规则 :

组成部分 : 报文的匹配条件,匹配到之后处理动作

匹配条件 : 根据协议报文特征指定

基本匹配条件 :

扩展匹配条件 :

处理动作:

内建处理机制

自定义处理机制

注意 : 报文不会经过自定义链, 只能在内置链上通过规则经行引用后生效。

iptables : 规则管理工具

添加、修改、删除、显示等;

规则和链有计数器:

pkgs : 由规则或链所匹配到报文的个数;

bytes : 由规则或链匹配到的所有报文大小之和;

目标 :

-j TARGET : jump 指定的TARGET

          ACCEPT : 接收

          DROP : 丢弃

          REJECT : 拒绝

          RETURN : 返回调用链

          REDIRECT : 端口重定向

          LOG : 记录日志

          MARK : 做防火墙标记

          DNAT : 目标地址转换

          SNAT : 源地址转换

          MASQUERADE : 地址

核心转发 : /proc/sys/net/ipv4/ip_forward

               /etc/sysct.conf

               net.ipv4.ip_forward = 1

扩展匹配 :-m(指定扩展名)

隐式扩展 :对-p  protocol指明的协议进行的扩展,可省略-m选项;

显式扩展 : 必须显式指明使用的扩展模块(rpm -ql iptables | grep "\.so")

multiport 扩展 :以离散方式定义多端口匹配,最多指定15个端口;

# iptables -I INPUT  -s 172.168.122.1/16 -d 172.168.120 -p tcp -m multiport -dports 22.80 -j ACCEPT

# iptables -I INPUT  -d 172.168.122.1/16 -s 172.168.120 -p tcp -m multiport -dports 22.80 -j ACCEPT

iprange扩展

指明连续的(但一般是不能扩展为整个网络)IP地址范围时使用:

conlimit 扩展

根据每客户端IP(也可以是地址块)做并发连接数数量匹配

--connlimit-above n :连接的数量大于n

--connlimit-upto n :连接的数量小于等于n

limit扩展

基于收发报文的速率做检查

令牌桶过滤器

--limit rate [/second|/minute|/hour|/day]

--limit-burst number

state扩展

根据连接追踪机制检查连接的状态

调整连接追踪功能所能够容纳的最大连接数量

/proc/sys/net/nf_conntrack_max

已经追踪到并记录下的连接

/proc/net/nf_conntrack

可追踪的连接状态

NEW : 新发出的请求:连接追踪模板中不存此连接相关的信息条目,因此,将其识别为第一次发出的请求。

ESTABLISHED :NEW 状态之后,连接追踪模板中为其建立的条目失效之前期间内所进行的通信的状态;

INVALIED : 无法识别的连接

扩展

查看iptables使用说明

CentOS 6 : man iptables

CentOS 7 : man iptables-extensions

 

  • 防火墙【原理】

Netfilter是Linux中的一个子项目,它的主要功能是进行数据包过滤、连接跟踪、地址转换等,而iptables则是netfilter提供的对用户数据包进行过滤、修改等操作的一种命令行工具,当数据包通过网卡进入进入内核时,它得先经过iptables的五条链,这些链都有相应的处理数据包的规则,而我们正是通过在这些链上设置规则来控制管理数据包,从而达到防火墙的功能。每当数据包到达一个链时,iptables就会从链中的所有规则逐一开始校验该数据包是否符合规则中限定的条件。若满足,系统就会根据每个规则定义的方法来处理该数据包;若不满足,iptables则继续检查下一条规则,如果该数据包不符合链中的任意规则,iptables则会该链的默认策略去处理该数据包。

防火墙4种类型:特殊设计的硬件防火墙、数据包过滤型、电路层网关和应用级网关。安全性能高的防火墙系统都是组合运用多种类型防火墙,构筑多道防火墙“防御工事”。

常见的防火墙品牌   :  华为、天融信、深信服、H3C、网域、思科、山石网科、中科网威、飞塔、Juniper、绿盟科技、锐捷网络、启明星辰、佑友、网康、网御星云、NETGEAR、中新金盾、梭子鱼、清信安、D-Link、网神、SonicWALL、迪普科技、东软、博达、paloalto、交大捷普、Check Point、利谱、汉柏。

注意  : 服务器对DDoS攻击流量进行拦截主要是依靠硬件防火墙完成的,

 

  • 服务器机房常用的防火墙介绍

1、金盾抗DDOS防火墙

金盾抗DDOS防火墙是一款针对ISP接入商、IDC服务商开发的专业性比较强的专业防火墙。测试的效果表明,目前的防御算法对所有已知的拒绝服务攻击是免疫的,也就是说,是完全可以抵抗已知DoS/DDoS攻击的。(下图金盾硬件防火墙价格大约88W一台)

2、深信服防火墙

深信服防火墙可以彻底解决所有dos/ddos攻击(synflood、ackflood、udpflood、icmpflood、igmpflood、arpflood、全连接等),针对CC攻击,已推出DosNipe V8.0版本,此核心极其高效安全,在以往抵御一切拒绝服务攻击的基础上,新增加了抵挡CC攻击,新算法可以高效的抵御所有CC攻击及其变种,识别准确率为100%,没有任何误判的可能性。(深信服防火墙)

3、绿盟黑洞抗DDoS防火墙

绿盟黑洞抗DDoS防火墙是国内高防服务器机房中应用比较广泛的一款抗DoS、DDoS攻击产品,其技术比较成熟,而且防护效果显著,已经得到各大IDC机构的共同认可。黑洞目前分百兆、千兆两款产品,分别可以在相应网络环境下实现对高强度攻击的有效防护,性能远远超过同类防护产品。(下图绿盟防火墙)

绿盟黑洞抗DDoS防火墙所带来的防护:

·自身安全:无IP地址,网络隐身。

·能够对SYN Flood、UDP Flood、ICMP Flood和(M)Stream Flood等各类DoS攻击进行防护。

·可以有效防止连接耗尽,主动清除服务器上的残余连接,提高网络服务的品质、抑制网络蠕虫扩散。

·可以防护DNS Query Flood,保护DNS服务器正常运行。

·可以给各种端口扫描软件反馈迷惑性信息,因此也可以对其它类型的攻击起到防护作用

4、Dosnipe防火墙:

Dosnipe防火墙硬件架构部分主体采取工业计算机(工控机),可以承受恶劣的运行环境,保障设备稳定运行;软件平台是FreeBSD,核心部分算法是自主研发的单向一次性非法数据包识别方法,所有的Filter机制都是在挂在驱动级。可以彻底解决所有dos/ddos攻击(synflood、ackflood、udpflood、icmpflood、igmpflood、arpflood、全连接等),针对CC攻击,已推出DosNipe V8.0版本,此核心极其高效安全,在以往抵御一切拒绝服务攻击的基础上,新增加了抵挡CC攻击,新算法可以高效的抵御所有CC攻击及其变种,识别准确率为100%,没有任何误判的可能性。

Dosnipe防火墙升级之后,具备更多的新特性:

·彻底解决最新的M2攻击。

·支持多线路,多路由接入功能。

·支持流量控制功能。

·更强大的过滤功能。

·最新升级,彻底高效的解决所有DDOS攻击,cc攻击的识别率为100%

 

  • 主要类型:

网络层防火墙 :网络层防火墙可视为一种 IP 封包过滤器

应用层防火墙 :应用层防火墙可以拦截进出某应用程序的所有封包,并且封锁其他的封包(通常是直接将封包丢弃)可分为:包过滤型防火墙、应用层网关型防火墙、服务器型防火墙。

**数据库防火墙   : **是一款基于数据库协议分析与控制技术的数据库安全防护系统。基于主动防御机制,实现数据库的访问行为控制、危险操作阻断、可疑行为审计。

防火墙的核心技术 :1、  包过滤(工作在网络层)  2、  应用代理(工作在应用层)  3、  状态检测(工作在2-4层)   4、  完全内容检测()

包过滤防火墙技术原理

1、  简单包过滤防火墙不检查数据区

2、  简单包过滤防火墙不建立连接状态表

3、  前后报文无关

4、  应用层控制很弱

应用代理防火墙技术原理

1、  不检查IP\TCP报头

2、  不建立连接状态表

3、  网络层保护比较弱

防火墙分为网络防火墙和应用层防火墙

1、网络防火墙

网络防火墙就是一个位于计算机和它所连接的网络之间的防火墙。该计算机流入流出的所有网络通信均要经过此防火墙。防火墙对流经它的网络通信进行扫描,这样能够过滤掉一些攻击以免其在目标计算机上被执行。防火墙还可以关闭不使用的端口。而且它还能禁止特定端口的流出通信,封锁特洛伊木马。最后,它可以禁止来自特殊站点的访问,从而防止来自不明入侵者的所有通信

2、应用层防火墙

应用层防火墙是在 TCP/IP 堆栈的“应用层”上运作,您使用浏览器时所产生的数据流或是使用 FTP 时的数据流都是属于这一层。应用层防火墙可以拦截进出某应用程序的所有封包,并且封锁其他的封包(通常是直接将封包丢弃)。理论上,这一类的防火墙可以完全阻绝外部的数据流进到受保护的机器里。

因为应用层防火墙的算法会更复杂,过虑更为严格,所以在部署防火墙的时候,要把应用层防火墙部署到网络防火墙的里边。

Linux防火墙体系主要工作在网络层,针对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙(网络层防火墙)。

  • 二、iptables的表链结构

1、iptables简介

平时说iptables是防火墙,其实iptables是iptables/netfilter组合中的一个,只有iptables/netfilter才应该叫做防火墙,它是基于软件方式工作的网络防火墙。iptables工作于用户空间,是防火墙的规则编写工具,使用iptables编写规则并且发送到netfilter;防火墙的规则刚放到netfilter中,它是一个能够让规则生效的网络架构,工作于内核空间。

【四个表】

iptables的结构是由tables组成,而tables是由链组成,链又是由具体的规则组成。因此我们在编写iptables的规则时,通过要先指定表,再指定链。tables的作用是区分不同功能的规则,并且存储这些规则。

tables的类型分别有:

2、iptables的表、链结构

iptables是由四表五链组成的,想要配置iptables必须先了解这四表五链

优先级:raw表  >  mangle表 >  nat表  >  filter表

①、raw表

RAW表只使用在PREROUTING链和OUTPUT链上,因为优先级最高,从而可以对收到的数据包在连接跟踪前进行处理。一但用户使用了RAW表,在某个链上,RAW表处理完后,将跳过NAT表和ip_conntrack处理,即不再做地址转换和数据包的链接跟踪处理了。

RAW表可以应用在那些不需要做nat的情况下,以提高性能。如大量访问的web服务器,可以让80端口不再让iptables做数据包的链接跟踪处理,以提高用户的访问速度。

raw内含有两个链:PREROUTING和OUTPUT

②、mangle表

mangle表一般是对数据包进行修改用的

比如在网络的转发过程中,数据包要从X到Z,中间夹了一个Y,当数据从X到Y的时候,Y要运行拆包,看是不是自己的,如果是就收下了,如果不就是重新封装,把源IP改为自己的,而不再是X的了,再进行转发。

mangle表中含五个链:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING

③、nat表

用于nat功能(端口映射,地址映射等)

主要用来处理一些将要到达本机路由和将要离开本机路由的数据包,修改数据包中的源、目标IP地址或端口;其对应的模块为iptable_nat。

nat表内含三个链:PREROUTING、POSTROUTING、OUTPUT

④、filter表

一看名字就知道是用来做过滤用的。filter表是iptables的默认表,如果在设置规则时,不指定表,则默认就是在filter表上操作

filter表内含三个链:INPUT、FORWARD、OUTPUT

2)五链

这五条链其实就是针对防火墙策略的规则

①、PREROUTING

路由前,数据包在经过防火墙前应做如何处理

②、INPUT

在数据包进行进入本机前就做何处理,目标是本机,不是网络内的主机

③、OUTPUT

在数据包离开本机时做何处理,源是本机,目标是其它主机

④、FORWARD

对于转发数据包做如何处理,因为本机可能是一台代理服务器,网络内的其它主机在与互联网通信时都需要经过这台服务器的转发

⑤、POSTROUTING

在数据包离开防火墙时做如何处理

INPUT、OUTPUT链主要用在“主机型防火墙”中,即主要针对服务器本机进行保护的防火墙;而FORWARD、PREROUTING、POSTROUTING链多用在“网络型防火墙”中,

简化版【五条链】

链,也称为钩子函数,它是一系列规则的一个组合,当数据包经过这些狗子函数时,她必须完全匹配每一个钩子函数中的所有规则,方能进入下一个钩子函数。

【语法规则】

语法:iptables [-t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]

1)常用的命令选项:

                   -t:指定要操纵的表(四个表);

                   -A:向规则链中添加条目;

                   -D:从规则链中删除条目;

                   -i:向规则链中插入条目;

                   -R:替换规则链中的条目;

                   -L:显示规则链中已有的条目;

                   -F:清楚规则链中已有的条目;

                   -Z:清空规则链中的数据包计算器和字节计数器;

                   -N:创建新的用户自定义规则链;

                   -P:定义规则链中的默认目标;

                   -h:显示帮助信息;

                   -p:指定要匹配的数据包协议类型;

                   -s:指定要匹配的数据包源

2)常用的处理动作:

                   ACCEPT:允许数据包通过

                   DROP:直接丢弃数据包,不给任何回应信息

                   REJECT: 拒绝数据包通过,必要时会给数据发送端一个响应的信息。

                   LOG:在/var/log/messages文件中记录日志然后将数据包传递给下一条规则

                   REDIRECT:  端口映射。

                   SNAT :源地址转换,修改包来源IP为某IP或IP范围,做内网和公网之间的转换。

                   DNAT::目标地址转换。 修改数据包目的地IP为某 Ip 或 IP 范围。

3)常用的条件匹配:

1、状态匹配:-m state --state 连接状态

                   NEW:与任何连接无关的

                   ESTABLISHED:响应请求或已建立连接的

                   RELATED:与已有连接有相关性的,如FTP数据连接

2、MAC地址匹配:-m mac --mac-source MAC地址

                   eg:iptables -A INPUT -m mac --mac-source f0:1b:12:12:22:4f -j DROP

3、IP范围匹配:-m iprange --src-range  IP范围

                   eg:iptables -A FORWARD -p tcp -m iprange --src-range 192.168.0.1-192.168.0.10 -j ACCEPT

4、多端口匹配:-m multiport --sports 源端口列表  和  -m multiport --sports 目的端口列表

                   eg:iptables -A INPUT -p tcp -m multiport --dport 11,29,116,121 -j ACCEPT

4)常用的一些iptables策略:

1、拒绝转发来自192.168.2.33主机的数据

iptables -A FORWARD -s 192.168.2.33 -j REJECT

2、允许转发来自192.168.2.1/99网段的数据

iptables -A FORWARD -s 192.168.2.1/99 -j ACCEPT

3、允许本机开放从TCP端口20-1024提供的应用服务。

iptables -A INPUT -p tcp --dport 20:1024 -j ACCEPT

iptables -A OUTPUT -p tcp --sport 20:1024 -j ACCEPT

4、只允许管理员从202.13.0.0/16网段使用SSH远程登录防火墙主机。

iptables -A INPUT -p tcp --dport 22 -s 202.13.0.0/16 -j ACCEPT

iptables -A INPUT -p tcp --dport 22 -j DROP

5、 允许转发来自192.168.0.0/24局域网段的DNS解析请求数据包。

iptables -A FORWARD -s 192.168.0.0/24 -p udp --dport 53 -j ACCEPT

iptables -A FORWARD -d 192.168.0.0/24 -p udp --sport 53 -j ACCEPT

6、屏蔽ip 110.1.1.1的访问

iptables -I INPUT -s 110.1.1.1 -j DROP

7、屏蔽从123.0.0.1到123.255.255.254   :  iptables -I INPUT -s 123.0.0.0/8 -j DROP

8、屏蔽从从123.45.0.1到123.45.255.254   :  iptables -I INPUT -s 124.45.0.0/16 -j DROP

9、屏蔽从从123.45.6.1到123.45.6.254   :  iptables -I INPUT -s 123.45.6.0/24 -j DROP

10、允许所有本机向外的访问   :  iptables -A OUTPUT -j ACCEPT

11、允许访问22端口   :  iptables -A INPUT -p tcp --dport 22 -j ACCEPT

12、打开3306端口

firewall-cmd --add-port=3306/tcp --permanent

firewall-cmd --zone=public --add-port=80/tcp --permanent      #开启3306端口

5)常用的iptables命令:

1、查看当前 IPTABLES 规则

service iptables status

2、 将所有iptables以序号标记显示

iptables -L -n --line-numbers

3、 比如要删除INPUT里序号为22的规则

iptables -D INPUT 22

iptables数据包的过滤流程

为了更直观的表现数据包的过滤流程,请参考第二步及下图

更多介绍   :  http://blog.51cto.com/linuxgentoo/1542782

注意  :

在centos6上,我们用的是iptables服务,iptables: 包过滤型的防火墙

在centos7上,我们用的是firewalld服务。

同样的,centos6上安装的是iptables包,而centos7上安装的是firewalld包。

centos6还是centos7,核心其实都是netfilter,netfilter是linux的一个内核模块,iptables命令是linux内核自带的。

 

  • 防火墙的类型

1. 从软、硬件形式上分为 软件防火墙和硬件防火墙以及芯片级防火墙。 2.从防火墙技术分为 “包过滤型”和“应用代理型”两大类。 3.从防火墙结构分为 < 单一主机防火墙、路由器集成式防火墙和分布式防火墙三种。 4. 按防火墙的应用部署位置分为 边界防火墙、个人防火墙和混合防火墙三大类。 5. 按防火墙性能分为 百兆级防火墙和千兆级防火墙两类。

  • CentOS6.5 防火墙

| [linux@localhost ~]$service iptable status                                      查看防火墙的状态

[linux@localhost ~]$servcie iptables stop                                     --临时关闭防火墙

[linux@localhost ~]$servcie iptables off                                       --永久关闭防火墙

|

(1)查看iptables开机状态:

[root@localhost ~]# chkconfig --list | grep iptables iptables     0:关闭    1:关闭    2:关闭    3:关闭    4:关闭    5:关闭    6:关闭

(2)关闭selinux

[root@localhost ~]# vim /etc/selinux/config

#SELINUX=enforcingSELINUX=disabled                       # 修改为disabled# SELINUXTYPE= can take one of these

  • LINUX开启允许对外访问的网络端口命令  :

LINUX通过下面的命令可以开启允许对外访问的网络端口:

/sbin/iptables -I INPUT -p tcp --dport 8000 -j ACCEPT                          #开启8000端口

/etc/rc.d/init.d/iptables save                              #保存配置

/etc/rc.d/init.d/iptables restart                          #重启服务

查看端口是否已经开放

/etc/init.d/iptables status

要开放22,80,8080 端口,输入以下命令即可

/sbin/iptables -I INPUT -p tcp –dport 80 -j ACCEPT

/sbin/iptables -I INPUT -p tcp –dport 22 -j ACCEPT

/sbin/iptables -I INPUT -p tcp –dport 8080 -j ACCEPT

2. 修改文件

vim /etc/rc.d/init.d/iptables

添加上述文本

3. 保存:

/etc/rc.d/init.d/iptables save

4. 查看打开的端口:

/etc/init.d/iptables status

5. 重启

5.1 /etc/init.d/iptables restart (临时有效)

5.2 chkconfig iptables off/on (永久有效)

当服务器成为肉鸡时候,采取的措施  :

临时采取的防范措施就是:利用iptables阻止服务器向外发送udp数据包。然后再查找应用,查找漏洞清除木马文件。

iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A OUTPUT -p tcp -j ACCEPT

iptables -A OUTPUT -p udp --dport 53 -j ACCEPT

iptables -P OUTPUT DROP

这个规则就是阻止了除了DNS要用到的53端口的其他一切udp端口,因为在此之前做了只是封掉7000端口,等会儿发现攻击改变了端口。

在服务器流量很大的时候分析本地新增哪些udp端口

netstat -lpnut|grep udp

查找出了是1833端口,然后根据1833端口查找相关的进程

ps -ef|grep 1833

得出的进程为freebsd

然后根据进程查找所对应的应用的位置

lsof | grep -i freebsd

iptables更多介绍:http://www.cnblogs.com/MYue/p/7000821.html

 

  • CentOS 7 防火墙

firewalld有图形界面和工具界面,由于我在服务器上使用,图形界面请参照官方文档,本文以字符界面做介绍

firewalld的字符界面管理工具是 firewall-cmd 

firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running);

firewalld默认配置文件有两个:/usr/lib/firewalld/ (系统配置,尽量不要修改)和 /etc/firewalld/ (用户配置地址)

安装firewalld

# yum install firewalld firewall-config

# systemctl enable firewalld

# systemctl start firewalld

 关闭防火墙:

systemctl stop firewalld.service                            #停止firewall
systemctl disable firewalld.service                      #禁止firewall开机启动

服务

启动一个服务:systemctl start firewalld.service

关闭一个服务:systemctl stop firewalld.service

重启一个服务:systemctl restart firewalld.service

显示一个服务的状态:systemctl status firewalld.service

在开机时启用一个服务:systemctl enable firewalld.service

在开机时禁用一个服务:systemctl disable firewalld.service

查看服务是否开机启动:systemctl is-enabled firewalld.service;echo $?

查看已启动的服务列表:systemctl list-unit-files|grep enabled

  • Centos 7 firewall 命令:

firewall-cmd --list-ports                        #查看已经开放的端口

# firewall-cmd --zone=public --list-ports                        # 查看所有开放的端口

#firewall-cmd --zone=public --add-port=9000-9999/tcp --permanent             #开启一个范围的端口

#firewall-cmd --zone=public --remove-port=80/tcp --permanent          #删除一个端口

#firewall-cmd --reload                          #更新防火墙规则

firewall-cmd --zone=public --add-port=80/tcp --permanent                  #开启端口

命令含义:

–zone       #作用域

–add-port=80/tcp      #添加端口,格式为:端口/通讯协议

–permanent              #永久生效,没有此参数重启后失效

运行、停止、禁用firewalld

systemctl start  firewalld                           #启动firewall

firewall-cmd --reload                           #重启firewall

#关闭状态

systemctl stop firewalld.service                  #停止/禁用firewall

systemctl disable firewalld.service                         #禁止firewall开机启动
firewall-cmd --state  = systemctl status firewalld                  #查看默认防火墙状态(关闭后显示notrunning,开启后显示running;关闭状态(disabled ))

zone 增删查改设

查看全部的zone

# firewall-cmd --get-zones

block dmz drop external home internal public trusted work

查看Firewalld的当前运行状态,输入如下命令:

$ firewall-cmd --state

罗列出预定义的区域:

$ firewall-cmd --get-zones

获取任何特定区域的所有相关信息:

$ firewall-cmd --zone= --list-all

你也能列出所有支持的服务:

$ firewall-cmd --get-services

更新firwalld:

$ firewall-cmd --set-default-zone=

添加或删除额外的服务。

$ firewall-cmd--zone=--add-service= $ firewall-cmd--zone=--remove-service=

你能通过如下命令列出任何特定区域中所有开放的端口:

$ firewall-cmd --zone= --list-ports

你可用如下方式管理TCP/UDP端口的增加与删除:

$ firewall-cmd--zone=--add-port= $ firewall-cmd--zone=--remove-port=

你可以如下命令添加或删除端口的转发:

$ firewall-cmd--zone=--add-forward-port=  $ firewall-cmd--zone=--remove-forward-port=

查看默认的zone

# firewall-cmd --get-default-zone

public

修改默认的zone

# firewall-cmd --set-default-zone=work

success

指定网卡查询zone

# firewall-cmd --get-zone-of-interface=ens33

work

# firewall-cmd --get-zone-of-interface=ens37

no zone

给指定网卡设置zone

# firewall-cmd --zone=public --add-interface=ens37

success

给指定网卡修改zone

# firewall-cmd --zone=dmz --change-interface=lo

success

给指定网卡删除zone

# firewall-cmd --zone=dmz  --remove-interface=lo

success

# firewall-cmd --get-zone-of-interface=lo

no zone

查看所有网卡所在的zone

# firewall-cmd --get-active-zones

dmz

interfaces: ens37

work

interfaces: ens33

service 增删查改设

查看所有的service,(其实都是一些服务的名字)

# firewall-cmd  --get-services

查看当前zone的service

# firewall-cmd --list-services

ssh dhcpv6-client

查看指定zone下的service

# firewall-cmd --zone=public --list-service

ssh dhcpv6-client

把http服务添加指定zone里面

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

success

# firewall-cmd --zone=public --list-service

ssh dhcpv6-client http

把http服务添加指定zone里面,并写入配置文件

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

success

# cat /etc/firewalld/zones/public.xml

删掉指定zone的http服务

# firewall-cmd --zone=public --remove-service=http

success

firewalld 文件

/etc/firewalld/zones/ 是zone类型开头.xml格式文件。还有前面文件.old结尾的文件的备份。例如:

public.xml  public.xml.old。分别保存了现在的文件,和修改之前的备份,用于恢复。

/etc/firewalld/services/ 是service类型的文件。

/usr/lib/firewalld/ 里面的 zones 和 services 目录里,分别保存了模板文件。用于手动添加firewalld规则。

实例

需求:ftpd服务端口21修改为1121。在 work zone下放行。

新增service文件

# cp /usr/lib/firewalld/services/ftp.xml /etc/firewalld/services/

# vim /etc/firewalld/services/ftp.xml

修改为  

新增work文件

# cp /usr/lib/firewalld/zones/work.xml /etc/firewalld/zones/

# vim /etc/firewalld/zones/work.xml

新增一行  

重载firewalld

#  firewall-cmd --reload

查看work zone

# firewall-cmd --zone=work --list-services

ssh dhcpv6-client ftp

  • CentOS 7 以下版本 iptables 命令

如要开放80,22,8080 端口,输入以下命令即可
/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 22 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT

然后保存:
/etc/rc.d/init.d/iptables save

查看打开的端口:
/etc/init.d/iptables status

关闭防火墙 


1) 永久性生效,重启后不会复原

开启: chkconfig iptables on

关闭: chkconfig iptables off

2) 即时生效,重启后复原

开启: service iptables start

关闭: service iptables stop

查看防火墙状态: service iptables status

  • CentOS7和6的默认防火墙的区别

CentOS 7默认使用的是firewall作为防火墙,使用iptables必须重新设置一下

1、直接关闭防火墙

systemctl stop firewalld.service #停止firewall

systemctl disable firewalld.service #禁止firewall开机启动

2、设置 iptables service

yum -y install iptables-services

如果要修改防火墙配置,如增加防火墙端口3306

vi /etc/sysconfig/iptables

增加规则

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

保存退出后

systemctl restart iptables.service                       #重启防火墙使配置生效

systemctl enable iptables.service                       #设置防火墙开机启动

最后重启系统使设置生效即可。

systemctl start iptables.service                           # 打开防火墙

systemctl stop iptables.service                           #关闭防火墙

  • iptables将本机80端口转发到本地8080端口

# iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

 

  • 解决主机不能访问虚拟机CentOS中的站点

前阵子在虚拟机上装好了CentOS6.2,并配好了apache+php+mysql,但是本机就是无法访问。一直就没去折腾了。

具体情况如下

1. 本机能ping通虚拟机

2. 虚拟机也能ping通本机

3.虚拟机能访问自己的web

4.本机无法访问虚拟机的web

后来发现是防火墙将80端口屏蔽了的缘故。

检查是不是服务器的80端口被防火墙堵了,可以通过命令:telnet server_ip 80 来测试。

解决方法如下:

/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT

然后保存:

/etc/rc.d/init.d/iptables save

重启防火墙

/etc/init.d/iptables restart

CentOS防火墙的关闭,关闭其服务即可:

查看CentOS防火墙信息:/etc/init.d/iptables status

关闭CentOS防火墙服务:/etc/init.d/iptables stop

本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:https://www.linuxidc.com/Linux/2016-12/138979.htm

 

  • iptables规则持久化

设定防火墙规则

iptables -A INPUT -s 1.1.1.1/32 -p tcp -m tcp --dport 22 -j DROP

iptables -A INPUT -s 2.2.2.2/32 -p tcp -m tcp --dport 22 -j DROP

iptables -A INPUT -s 3.3.3.3/32 -p tcp -m tcp --dport 22 -j DROP

iptables -A INPUT -s 4.4.4.4/32 -p tcp -m tcp --dport 22 -j DROP

保存防火墙规则

iptables-save > /etc/sysconfig/iptables

设定开机自动恢复iptables规则

vim /etc/rc.d/rc.local

iptables-restore < /etc/sysconfig/iptables

iptables关机自动保存

先清空防火墙规则

iptables -F

保存iptables规则,也就是说将/etc/sysconfig/iptables文件清空

iptables-save > /etc/sysconfig/iptables

手动生成一些iptables规则

iptables -A INPUT -s 1.1.1.1/32 -p tcp -m tcp --dport 22 -j DROP

iptables -A INPUT -s 2.2.2.2/32 -p tcp -m tcp --dport 22 -j DROP

iptables -A INPUT -s 3.3.3.3/32 -p tcp -m tcp --dport 22 -j DROP

iptables -A INPUT -s 4.4.4.4/32 -p tcp -m tcp --dport 22 -j DROP

查看iptables规则是否生效

[root@ecs-7740 init.d]# iptables -nvL

Chain INPUT (policy ACCEPT 27 packets, 1978 bytes)

pkts bytes target prot opt in out source destination

0 0 DROP tcp -- * * 1.1.1.1 0.0.0.0/0 tcp dpt:22

0 0 DROP tcp -- * * 2.2.2.2 0.0.0.0/0 tcp dpt:22

0 0 DROP tcp -- * * 3.3.3.3 0.0.0.0/0 tcp dpt:22

0 0 DROP tcp -- * * 4.4.4.4 0.0.0.0/0 tcp dpt:22

设定关机时自动保存iptables规则
    创建关机时要执行的脚本,并且确保其有执行权限

 vim /etc/init.d/shutdownsh

iptables-save > /etc/sysconfig/iptables

chmod +x /etc/sysconfig/shutdownsh

ls /etc/sysconfig/shutdownsh

-rwxr-xr-x 1 root root 40 Jan 16 22:05 shutdownsh

创建软连接文件至rcN.d路径下,N为运行等级

查看linux的防火墙是否阻止80端口

iptables -vnL  | grep ":80 "

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值