需要做网站建设的行业有哪些,沧州网站建设哪家好,二维码生成器永久免费版下载,千库网素材官网添加权限方法及注意事项: 字母权限法很灵活,无论目录还是文件都可以随意添加删除超级权限
chmod us ... 添加SUID
chmod gs ... 添加SGID
chmod s ...同时添加SUID和SGID
chmod -s ...同时删除SUID和SGID
chmod ot ...添加Sticky
chmod t ...同上 数字权限表示法添加/删除…添加权限方法及注意事项: 字母权限法很灵活,无论目录还是文件都可以随意添加删除超级权限
chmod us ... 添加SUID
chmod gs ... 添加SGID
chmod s ...同时添加SUID和SGID
chmod -s ...同时删除SUID和SGID
chmod ot ...添加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权限
Sgroup没有x权限
Sticky: other, 占据ohter的执行权限位
t: other拥有x权限
Tother没有x权限 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文件解释 [roottest ~]# 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 arent 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 MACHINECOMMANDS ## 用户 登录的主机可以变换的身份 可以执行的命令 ## ## 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添加如下设置
[roottest ~]# visudo
fieldyang ALLNOPASSWD:/etc/init.d/nagios restart 实例2让普通用户fieldyang具有所有超级用户的权限而又不用输入密码
[roottest ~]# visudo fieldyang ALLALL)NOPASSWD:ALL [fieldyangtest ~]#sudo su - [fieldyangtest ~]#pwd /root 实例3针对MySQL数据库的设置让test组中的test用户具备/etc/init.d/mysqld的权限 ######################## mysql ################ 1. [roottest ~]# groupadd test [roottest ~]# useradd -g test -m -d /home/test -s /bin/bash test [roottest ~]# passwd test 2. [roottest ~]# 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 [roottest ~]# su test [testtest ~]$ sudo /etc/init.d/mysqld start 3.2) stop mysql login test [roottest ~]# su test [testtest ~]$ sudo /etc/init.d/mysqld stop
实例4针对tomcat的设置让test组中的test用户具备tomcat操作的权限 ######################## tomcat ################ 1. [roottest ~]# groupadd test [roottest ~]# useradd -g test -m -d /home/test -s /bin/bash test [roottest ~]# passwd test 2. [roottest ~]# 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. [roottest ~]# 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 [roottest ~]# su test [testtest ~]$ sudo /usr/local/tomcat/bin/startup.sh [testtest ~]$ ss -ntlup | grep java [testtest ~]$ curl -I http://localhost:8080 4.2) stop tomcat login test [roottest ~]# su test [testtest ~]$ 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
SELinuxSecurity-Enhanced Linux安全增强型Linux是美国国家安全局NAS对于强制访问控制的实现在这种访问控制体系的限制下进程只能访问哪些在他的任务中所需的文件。SELinux在类型强制服务器中合并了多级安全性或一种可选的多类策略并采用了基于角色的控制概念。
在SELinux中定义了许多类型TYPE每一个进程、文件、设备等都必须标识他所属的类型进程只能读取相同类型的文件如果没有相关类型并且SELinux不允许读取的时候则无法读取文件。SELinux除了约束进程读取文件的能力之外还限制进程对设备、网络联机、通信端口、跨进程通信的读取能力并提供更细致的读取控制。 SELinux的特点
Ø MAC对访问的控制彻底化对所有的文件、目录、端口的访问都是基于策略设定的可以由管理员自行设定的。
Ø RBAC对于用户只是赋予最小权限。用户被划分成了一些角色即使是root用户如果不具备sysadm_r的角色的话也不能执行相关的管理。哪一个角色可以执行哪些域是可以修改的。
Ø 安全上下文当启动SELinux的时候所有文件与对象都有安全上下文。 二SELinux状态和应用模式
1/etc/selinux/config文件详解
[rootlocalhost ~]# 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.
SELINUXenforcing
# SELINUXTYPE can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPEtargeted 1应用模式设置
enforcing强制模式只要SELinux不允许就无法执行
permissive允许模式将该时间记录下来依然允许执行
disabled禁用SELinux
2策略类型设置
在使用策略类型时必须先安装策略类型的软件包
targeted保护常见的网络服务是SELinux的默认值 minimumSELinux最低基本策略 mls提供符合MLS机制的安全性 2查看SELinux状态
使用sestatus命令查看系统运行SELinux的状态、应用模式、布尔值以及sestatus.cong文件内列出的文件和进程的安全上下文。
-v详细检查进程和文件的安全上下文
-b显示当前布尔值状态
[rootlocalhost ~]# 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
SELINUXdisabled
SELINUXTYPEtargeted 4查看和更改SELinux应用模式
1 查看SELinux应用模式
[rootlocalhost ~]# getenforce
Enforcing
2 更改SELinux应用模式
使用setenforce命令可以切换SELinux应用模式
enforcing或1强制模式
permissive或0允许模式
[rootlocalhost ~]# 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_tJAVA相关的执行文件
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 查看用户账户安全上下文
[rootlocalhost ~]# id -Z
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
2 查看进程安全上下文
[rootlocalhost ~]# 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 查看文件和目录安全上下文
[rootlocalhost ~]# ls -Z /root/anaconda-ks.cfg
-rw-------. root root system_u:object_r:admin_home_t:s0 /root/anaconda-ks.cfg
[rootlocalhost ~]# 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递归到子目录 [rootlocalhost ~]# getfattr -m . -d /root/anaconda-ks.cfg
getfattr: Removing leading / from absolute path names
# file: root/anaconda-ks.cfg
security.selinuxsystem_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范围设置指定范围的目标安全环境。 [rootlocalhost ~]# chcon -tetc_t /root/anaconda-ks.cfg
[rootlocalhost ~]# 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文件 [rootlocalhost ~]# 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软件包中的文件的安全上下文
[rootlocalhost ~]# ls -Z /etc/crontab
-rw-r--r--. root root system_u:object_r:system_cron_spool_t:s0 /etc/crontab
[rootlocalhost ~]# chcon -t user_home_t /etc/crontab
[rootlocalhost ~]# ls -Z /etc/crontab
-rw-r--r--. root root system_u:object_r:user_home_t:s0 /etc/crontab
[rootlocalhost ~]# rpm -qf /etc/crontab
crontabs-1.10-33.el6.noarch
[rootlocalhost ~]# 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
[rootlocalhost ~]# fixfiles -R crontabs restore
[rootlocalhost ~]# 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文件的安全上下文
[rootlocalhost ~]# restorecon /root/anaconda-ks.cfg
[rootlocalhost ~]# 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系统文件的安全上下文。 [rootlocalhost ~]# touch /.autorelable
重启系统需要较长时间 四策略类型
1策略类型简介
SELinux策略是用来定义SELinux的读取规则比如哪一个安全上下文的进程允许或禁止读取哪一个对象。Linux会把每一个Linux策略类型的资料存储在/etc/selinux策略类型名目录中。 例targeted策略类型的内容targeted目录中的文件或子目录都是用来存储SELinux策略类型的数据
[rootlocalhost ~]# 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 [rootlocalhost ~]# ls -l /etc/selinux/targeted/policy/ \\policy是targeted中最重要的目录
总用量 7124
-rw-r--r--. 1 root root 7292701 7月 1 2016 policy.24
[rootlocalhost ~]# ls /etc/selinux/targeted/policy/
policy.24 \\ policy.24是该策略类型数据库文件文件名后的数子是该策略类型数据库的版本 2安装和使用策略类型
1 查看/etc/selinux目录此时只有一个targeted目录每一个策略类型都会有一个目录的
[rootlocalhost ~]# 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软件包
[rootlocalhost ~]# rpm -qa selinux-policy-minimum
[rootlocalhost ~]# yum -y install selinux-policy-minimum
3 查看是否已经存在策略类型
[rootlocalhost ~]# 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 使用新的策略类型
[rootlocalhost ~]# vi /etc/selinux/config
SELINUXenforcing
SELINUXTYPEminimum
5 重新启动Linux系统 3查看策略类型信息
查看策略类型需要安装setools-console和setools-libs软件包然后才能使用seinfo命令查看。
1 安装装setools-console和setools-libs软件包
[rootlocalhost ~]# yum -y install setools-console
[rootlocalhost ~]# 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的信息
[rootlocalhost ~]# 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类型时所有的规则
[rootlocalhost ~]# 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布尔值
[rootlocalhost ~]# 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布尔值
[rootlocalhost ~]# 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的布尔值
[rootlocalhost ~]# getsebool httpd_can_network_connect
httpd_can_network_connect -- off
[rootlocalhost ~]# setsebool httpd_can_network_connect on
[rootlocalhost ~]# getsebool httpd_can_network_connect
httpd_can_network_connect -- on 例子禁用httpd_can_network_connect的布尔值
[rootlocalhost ~]# setsebool httpd_can_network_connect off
[rootlocalhost ~]# getsebool httpd_can_network_connect
httpd_can_network_connect -- off 六管理策略模块
使用semodule命令可以管理SELinux策略模块比如显示、安装、升级、删除、激活以及禁用策略模块。 semodule命令选项
-l显示安装的模块
-R重装策略模块
-B建立和承诺改装策略模块
-I 策略模块安装一个新的模块
-u 策略模块升级策略模块
-e 策略模块激活策略模块
-d 策略模块禁用策略模块
-b 策略模块安装新的基础模块
-r 策略模块删除策略模块 例查看SELinux加载的策略模块
[rootlocalhost ~]# 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策略模块
[rootlocalhost ~]# semodule -l | grep apache
apache 2.1.2 例禁用zebra策略模块
[rootlocalhost ~]# semodule -d zebra [rootlocalhost ~]# semodule -l | grep zebra
zebra 1.10.1 Disabled 例激活zebra模块
[rootlocalhost ~]# semodule -e zebra
[rootlocalhost ~]# semodule -l | grep zebra
zebra 1.10.1 例删除zebra模块
[rootlocalhost ~]# semodule -r zebra
[rootlocalhost ~]# semodule -l | grep zebra 七图形界面管理SELinux
需要先安装policycoreutils-gui软件包
[rootlocalhost ~]# yum -y install policycoreutils-gui
【系统】à【管理】à【SELinux管理】打开SELinux维护界面在application-other-selinx。。
1状态 2布尔值
3文本标记
4用户映射
5SELinux用户
6网络端口
7策略模块
8进程域 23、linux下敏感信息的核查
1、/etc/issue和motd
当我们不想让其他用户知道我们的系统版本和内核信息只限登录时就可以修改issue文件当我们想修改登录提示信息时可以修改motd文件。
#修改成其他防止泄漏系统信息 [rootserv01 etc]# vim /etc/issue
[rootserv01 etc]# cat /etc/issueRed Hat Enterprise Linux Server release 6.1 (Santiago) Kernel \r on an \m
[rootserv01 etc]# cat /etc/issue Windows Server 2020 #修改欢迎信息提供友好的提示 [rootserv01 etc]# vim /etc/motd [rootserv01 etc]# cat /etc/motd Welcome to zhink learn
#下次登录时就不会显示系统版本和内核信息并会显示欢迎信息 [rootlarrywen mail]# ssh 192.168.1.11 root192.168.1.11s 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、 状态检测工作在层 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地址 egiptables -A INPUT -m mac --mac-source f0:1b:12:12:22:4f -j DROP
3、IP范围匹配-m iprange --src-range IP范围 egiptables -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 目的端口列表 egiptables -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-port3306/tcp --permanent
firewall-cmd --zonepublic --add-port80/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核心其实都是netfilternetfilter是linux的一个内核模块iptables命令是linux内核自带的。 防火墙的类型
1. 从软、硬件形式上分为 软件防火墙和硬件防火墙以及芯片级防火墙。 2.从防火墙技术分为 “包过滤型”和“应用代理型”两大类。 3.从防火墙结构分为 单一主机防火墙、路由器集成式防火墙和分布式防火墙三种。 4. 按防火墙的应用部署位置分为 边界防火墙、个人防火墙和混合防火墙三大类。 5. 按防火墙性能分为 百兆级防火墙和千兆级防火墙两类。
CentOS6.5 防火墙
| [linuxlocalhost ~]$service iptable status 查看防火墙的状态
[linuxlocalhost ~]$servcie iptables stop --临时关闭防火墙
[linuxlocalhost ~]$servcie iptables off --永久关闭防火墙
|
1查看iptables开机状态
[rootlocalhost ~]# chkconfig --list | grep iptables iptables 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭
2关闭selinux
[rootlocalhost ~]# vim /etc/selinux/config
#SELINUXenforcingSELINUXdisabled # 修改为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
要开放22808080 端口输入以下命令即可
/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 --zonepublic --list-ports # 查看所有开放的端口
#firewall-cmd --zonepublic --add-port9000-9999/tcp --permanent #开启一个范围的端口
#firewall-cmd --zonepublic --remove-port80/tcp --permanent #删除一个端口
#firewall-cmd --reload #更新防火墙规则
firewall-cmd --zonepublic --add-port80/tcp --permanent #开启端口
命令含义
–zone #作用域
–add-port80/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-zonework
success
指定网卡查询zone
# firewall-cmd --get-zone-of-interfaceens33
work
# firewall-cmd --get-zone-of-interfaceens37
no zone
给指定网卡设置zone
# firewall-cmd --zonepublic --add-interfaceens37
success
给指定网卡修改zone
# firewall-cmd --zonedmz --change-interfacelo
success
给指定网卡删除zone
# firewall-cmd --zonedmz --remove-interfacelo
success
# firewall-cmd --get-zone-of-interfacelo
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 --zonepublic --list-service
ssh dhcpv6-client
把http服务添加指定zone里面
# firewall-cmd --zonepublic --add-servicehttp
success
# firewall-cmd --zonepublic --list-service
ssh dhcpv6-client http
把http服务添加指定zone里面并写入配置文件
# firewall-cmd --zonepublic --add-servicehttp --permanent
success
# cat /etc/firewalld/zones/public.xml
删掉指定zone的http服务
# firewall-cmd --zonepublic --remove-servicehttp
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 --zonework --list-services
ssh dhcpv6-client ftp CentOS 7 以下版本 iptables 命令
如要开放80228080 端口输入以下命令即可 /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并配好了apachephpmysql但是本机就是无法访问。一直就没去折腾了。
具体情况如下
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规则是否生效
[rootecs-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