• <acronym id='wiyui'><em id='wiyui'></em><td id='wiyui'><div id='wiyui'></div></td></acronym><address id='wiyui'><big id='wiyui'><big id='wiyui'></big><legend id='wiyui'></legend></big></address>

    <code id='wiyui'><strong id='wiyui'></strong></code>

          <i id='wiyui'></i>
          <dl id='wiyui'></dl>
          <i id='wiyui'><div id='wiyui'><ins id='wiyui'></ins></div></i>
            <span id='wiyui'></span><fieldset id='wiyui'></fieldset>

          1. <tr id='wiyui'><strong id='wiyui'></strong><small id='wiyui'></small><button id='wiyui'></button><li id='wiyui'><noscript id='wiyui'><big id='wiyui'></big><dt id='wiyui'></dt></noscript></li></tr><ol id='wiyui'><table id='wiyui'><blockquote id='wiyui'><tbody id='wiyui'></tbody></blockquote></table></ol><u id='wiyui'></u><kbd id='wiyui'><kbd id='wiyui'></kbd></kbd>
          2. <ins id='wiyui'></ins>

          3. Linux 服务器安全配置

            • 时间:
            • 浏览:14
            • 来源:124软件资讯网
              第一部门:RedHat Linux篇
                1.概述
                Linux服务器版本:RedHat Linux AS
                对于开放式的操作系统---Linux  ,系统的宁静设定包罗系统服务最小化、限制远程存取、隐藏主要资料、修补宁静毛病、接纳宁静工具以及经常性的宁静检查等  。本文主要从用户设置、怎样开放服务、系统优化等方面举行系统的宁静设置  ,以到达使Linux服务器更宁静、稳固  。
                2.用户治理
                在 Linux系统中  ,用户帐号是用户的身份标志 ,它由用户名和用户口令组成  。系统将输入的用户名存放在/etc/passwd文件中  ,而将输入的口令以加密的形式存放在/etc/shadow文件中  。在正常情形下 ,这些口令和其他信息由操作系统掩护  ,能够对其举行会见的只能是超级用户(root)和操作系统的一些应用法式  。可是若是设置不妥或在一些系统运行堕落的情形下 ,这些信息可以被通俗用户获得 。进而  ,不怀美意的用户就可以使用一类被称为“口令破解”的工具去获得加密前的口令 。
                2.1 删除系统特殊的的用户帐号和组帐号:
                #userdel username
                userdel adm
                userdel lp
                userdel sync
                userdel shutdown
                userdel halt
                userdel news
                userdel uucp
                userdel operator
                userdel games
                userdel gopher
                以上所删除用户为系统默认建立 ,可是在常用服务器中基本不使用的一些帐号  ,可是这些帐号常被黑客使用和攻击服务器  。
                #groupdel username
                groupdel adm
                groupdel lp
                groupdel news
                groupdel uucp
                groupdel games
                groupdel dip
                同样  ,以上删除的是系统安装是默认建立的一些组帐号 。这样就淘汰受攻击的时机  。
                2.2 用户密码设置:
                安装linux时默认的密码最小长度是5个字节 ,但这并不够  ,要把它设为8个字节 。修改最短密码长度需要编辑login.defs文件(vi /etc/login.defs)
                PASS_MAX_DAYS 99999 ##密码设置最长有用期(默认值)
                PASS_MIN_DAYS 0 ##密码设置最短有用期
                PASS_MIN_LEN 5 ##设置密码最小长度
                PASS_WARN_AGE 7 ##提前几多天忠告用户密码即将逾期 。
                2.3 修改自动注销帐号时间:
                自动注销帐号的登录 ,在Linux系统中root账户是具有最高特权的  。若是系统治理员在脱离系统之前遗忘注销root账户  ,那将会带来很大的宁静隐患  ,应该让系统会自动注销  。通过修改账户中“TMOUT”参数  ,可以实现此功效 。TMOUT按秒盘算  。编辑你的profile文件(vi /etc/profile),在"HISTSIZE="后面加入下面这行:
                TMOUT=300
                300 ,表现300秒  ,也就是表现5分钟  。这样  ,若是系统中上岸的用户在5分钟内都没有行动 ,那么系统会自动注销这个账户  。
                2.4 给系统的用户名密码存放文件加锁:
                chattr +i /etc/passwd
                chattr +i /etc/shadow
                chattr +i /etc/gshadow
                chattr +i /etc/group
                注:chattr是改变文件属性的下令  ,参数i代表不得恣意更动文件或目录,此处的i为不行修改位(immutable)  。检察要领:lsattr /etc/passwd
                3.服务治理
                在Linux系统的服务治理方面  ,若是想做到服务的最好宁静  ,其中主要的就是升级服务自己的软件版本  ,另外一个就是关闭系统不使用的服务  ,做到服务最小化  。
                3.1 关闭系统不使用的服务:
                cd /etc/init.d ##进入到系统init历程启动目录
                在这里有两个要领 ,可以关闭init目录下的服务 ,一、将init目录下的文件名mv成*.old类的文件名  ,即修改文件名  ,作用就是在系统启动的时间找不到这个服务的启动文件  。二、使用chkconfig系统下令来关闭系统启动品级的服务  。
                注:在使用以下任何一种要领时  ,请先检查需要关闭的服务是否是本服务器特殊需要启动支持的服务 ,以防关闭正常使用的服务 。
                第一种:修改文件名的要领
                Cd /etc/init.d/
                mv apmd apmd.old ##条记本需要
                mv netfs netfs.old ## nfs客户端
                mv yppasswdd yppasswdd.old ## NIS服务器 ,此服务毛病许多
                mv ypserv ypserv.old ## NIS服务器  ,此服务毛病许多
                mv dhcpd dhcpd.old ## dhcp服务
                mv portmap portmap.old ##运行rpc(111端口)服务必须
                mv lpd lpd.old ##打印服务
                mv nfs nfs.old ## NFS服务器  ,毛病极多
                mv sendmail sendmail.old ##邮件服务, 毛病极多
                mv snmpd snmpd.old ## SNMP  ,远程用户能从中获得许多系统信息
                mv rstatd rstatd.old ##制止运行r服务 ,远程用户可以从中获取许多信息
                mv atd atd.old ##和cron很相似的准时运行法式的服务
                第二种:使用chkcofig下令来关闭不使用的系统服务
                chkconfig ?Clevel 35 apmd off
                chkconfig ?Clevel 35 netfs off
                chkconfig ?Clevel 35 yppasswdd off
                chkconfig ?Clevel 35 ypserv off
                chkconfig ?Clevel 35 dhcpd off
                chkconfig ?Clevel 35 portmap off
                chkconfig ?Clevel 35 lpd off
                chkconfig ?Clevel 35 nfs off
                chkconfig ?Clevel 35 sendmail off
                chkconfig ?Clevel 35 snmpd off
                chkconfig ?Clevel 35 rstatd off
                chkconfig ?Clevel 35 atd off
                注:以上chkcofig 下令中的3和5是系统启动的类型  ,3代表系统的多用启动方式  ,5代表系统的X启动方式  。
                3.2 给系统服务端口列表文件加锁
                主要作用:防止未经允许的删除或添加服务
                chattr +i /etc/services
                3.3 修改ssh服务的root登录权限
                修改ssh服务设置文件  ,使的ssh服务不允许直接使用root用户来登录  ,这样建设系统被恶意登录攻击的时机 。
                vi /etct/ssh/sshd_config
                PermitRootLogin yes
                将这行前的#去掉后  ,修改为:PermitRootLogin no
                4.系统文件权限
                Linux 文件系统的宁静主要是通过设置文件的权限来实现的  。每一个Linux的文件或目录  ,都有3组属性  ,划分界说文件或目录的所有者 ,用户组和其他人的使用权限(只读、可写、可执行、允许SUID、允许SGID等) 。特殊注重  ,权限为SUID和SGID的可执行文件 ,在法式运行历程中 ,会给历程赋予所有者的权限  ,若是被黑客发现并使用就会给系统造成危害 。
                4.1 修改init目录文件执行权限:
                chmod -R 700 /etc/init.d/*
                4.2 修改部门系统文件的SUID和SGID的权限:
                chmod a-s /usr/bin/chage
                chmod a-s /usr/bin/gpasswd
                chmod a-s /usr/bin/wall
                chmod a-s /usr/bin/chfn
                chmod a-s /usr/bin/chsh
                chmod a-s /usr/bin/newgrp
                chmod a-s /usr/bin/write
                chmod a-s /usr/sbin/usernetctl
                chmod a-s /usr/sbin/traceroute
                chmod a-s /bin/mount
                chmod a-s /bin/umount
                chmod a-s /bin/ping
                chmod a-s /sbin/netreport
                4.3 修改系统指导文件
                chmod 600 /etc/grub.conf
                chattr +i /etc/grub.conf
                5.系统优化
                5.1 虚拟内存优化:
                一样平常来说 ,linux的物理内存险些是完全used  。这个和windows很是大的区别  ,它的内存治理机制将系统内存充实使用  ,并非windows无论多大的内存都要去使用一些虚拟内存一样  。
                在/proc/sys/vm/freepages中三个数字是当前系统的:最小内存空缺页、最低内存空缺页和最高内存空缺  。
                注重  ,这里系统使用虚拟内存的原则是:若是空缺页数目低于最高空缺页设置  ,则使用磁盘交流空间  。当到达最低空缺页设置时 ,使用内存交流  。内存一样平常以每页4k 字节分配  。最小内存空缺页设置是系统中内存数目的2倍;最低内存空缺页设置是内存数目的4倍;最高内存空缺页设置是系统内存的6倍 。
                以下以1G内存为例修改系统默认虚拟内存参数巨细:
                echo "2048 4096 6444" >/proc/sys/vm/freepages
                6.日志治理
                6.1 系统指导日志:
                dmesg
                使用 dmesg 下令可以快速检察最后一次系统指导的指导日志 。通常它的
                内容会许多 ,以是您往往会希望将其通过管道传输到一个阅读器  。
                6.2 系统运行日志:
                A、Linux 日志存储在 /var/log 目录中  。这里有几个由系统维护的日志文件  ,但其他服务和法式也可能会把它们的日志放在这里  。大多数日志只有 root 才可以读  ,不外只需要修改文件的会见权限就可以让其他人可读  。
                以下是常用的系统日志文件名称及其形貌:
                lastlog 记载用户最后一次乐成登录时间
                loginlog 不良的上岸实验记载
                messages 记载输出到系统主控台以及由syslog系统服务法式发生的新闻
                utmp 记载当前登录的每个用户
                utmpx 扩展的utmp
                wtmp 记载每一次用户登录和注销的历史信息 wtmpx 扩展的wtmp
                vold.log 记载使用外部介质泛起的错误
                xferkig 记载Ftp的存取情形 sulog 记载su下令的使用情形
                acct 记载每个用户使用过的下令
                aculog 拨出自动呼叫记载
                B、/var/log/messages
                messages 日志是焦点系统日志文件  。它包罗了系统启动时的指导新闻  ,以及系统运行时的其他状态新闻 。IO 错误、网络错误和其他系统错误都市记载到这个文件中 。其他信息  ,好比某小我私家的身份切换为 root  ,也在这里列出 。若是服务正在运行 ,好比 DHCP 服务器  ,您可以在 messages 文件中视察它的运动  。通常 ,/var/log/messages 是您在做故障诊断时首先要检察的文件  。
                C、/var/log/XFree86.0.log
                这个日志记载的是 Xfree86 Xwindows 服务器最后一次执行的效果 。若是您在启动到图形模式时遇到了问题  ,一样平常情形从这个文件中会找到失败的缘故原由  。
                D、在/var/log 目录下有一些文件以一个数字末端  ,这些是已轮循的归档文件  。日志文件会变得特殊大  ,特殊粗笨 。Linux 提供了一个下令来轮循这些日志  ,以使您的当前日志信息不会淹没在旧的无关信息之中  。 logrotate 通常是准时自动运行的  ,可是也可以手工运行  。当执行后 ,logrotate 将取恰当前版本的日志文件 ,然后在这个文件名最后附加一个“.1”  。其他更早轮循的文件为“.2”、“.3”  ,依次类推 。文件名后的数字越大 ,日志就越老  。
                可以通过编辑 /etc/logrotate.conf 文件来设置 logrotate 的自动行为  。通过 man logrotate 来学习 logrotate 的所有细节  。
                其中:
                # rotate log files weekly
                weekly
                这里代表每个日志文件是每个星期循环一次  ,一个日志文件生存一个星期的内容 。
                # keep 4 weeks worth of backlogs
                rotate 4
                这里代表日志循环的次数是4次 ,即可以生存4个日志文件  。
                E、定制日志
                可以通过编辑 /et/syslog.conf 和 /etc/sysconfig/syslog 来设置它们的行为  ,可以定制系统日志的存放路径和日志发生级别 。
                6.3 系统各用户操作日志:
                last
                单独执行last指令 ,它会读取位于/var/log目录下  ,名称为wtmp的文件  ,并把该给文件的内容记载的登入系统的用户名单所有显示出来  。
                history
                history 下令能够生存最近所执行的下令 。若是是root下令所生存的下令内容在/root/.bash_history文件中 ,若是是通俗用户  ,操作所下令生存在这个用户的所属目录下  ,即一样平常的/home/username/.bash_history  。这个history的生存值可以设置  ,编辑/etc /profile文件  ,其中的HISTSIZE=1000的值就是history生存的值  。
                7.防火墙
                7.1 iptables类型防火墙:
                7.1.1 iptables观点:
                Iptalbes(IP包过滤器治理)是用来设置、维护和检查Linux内核的IP包过滤规则的 。
                可以界说差别的表 ,每个表都包罗几个内部的链 ,也能包罗用户界说的链  。每个链都是一个规则列表  ,对对应的包举行匹配:每条规则指定应当怎样处置惩罚与之相匹配的包  。这被称作'target'(目的)  ,也可以跳向统一个表内的用户界说的链  。
                通过使用用户空间  ,可以构建自己的定制规则 ,这些规则存储在内核空间的信息包过滤表中 。这些规则具有目的  ,它们告诉内核对来自某些源、前往某些目的地或具有某些协议类型的信息包做些什么  。若是某个信息包与规则匹配  ,那么使用目的 ACCEPT 允许该信息包通过 。还可以使用目的 DROP 或 REJECT 来壅闭并杀死信息包 。对于可对信息包执行的其它操作  ,另有许多其它目的  。
                凭据规则所处置惩罚的信息包的类型 ,可以将规则分组在链中  。处置惩罚入站信息包的规则被添加到 INPUT 链中  。处置惩罚出站信息包的规则被添加到 OUTPUT 链中  。处置惩罚正在转发的信息包的规则被添加到 FORWARD 链中 。这三个链是基本信息包过滤表中内置的缺省主链 。另外  ,另有其它许多可用的链的类型(如 PREROUTING 和 POSTROUTING)  ,以及提供用户界说的链  。每个链都可以有一个计谋  ,它界说“缺省目的”  ,也就是要执行的缺省操作  ,当信息包与链中的任何规则都不匹配时  ,执行此操作 。
                建设规则并将链放在适当的位置之后  ,就可以最先举行真正的信息包过滤事情了  。这时内核空间从用户空间接受事情  。当信息包到达防火墙时  ,内核先检查信息包的头信息 ,尤其是信息包的目的地  。我们将这个历程称为路由  。
                若是信息包源自外界并前往系统  ,而且防火墙是打开的  ,那么内核将它通报到内核空间信息包过滤表的 INPUT 链 。若是信息包源自系统内部或系统所毗连的内部网上的其它源  ,而且此信息包要前往另一个外部系统 ,那么信息包被通报到 OUTPUT 链  。类似的 ,源自外部系统并前往外部系统的信息包被通报到 FORWARD 链  。
                7.1.2 iptables实例1:
                #!/bin/sh
                # 克制系统的转发包功效
                echo 0 > /proc/sys/net/ipv4/ip_forward
                # 清晰iptables原有规则 ,并设置iptables默认规则
                iptables -t nat -F POSTROUTING
                iptables -t nat -F PREROUTING
                iptables -t nat -F OUTPUT
                iptables -F
                iptables -P INPUT DROP
                iptables -P FORWARD ACCEPT
                iptables -P OUTPUT ACCEPT
                # 在input规则中需要打开的tcp、upd端口
                iptables -A INPUT -j ACCEPT -p tcp --dport 80
                iptables -A INPUT -j ACCEPT -p tcp --dport 22
                iptables -A INPUT -j ACCEPT -p tcp --dport 25
                iptables -A INPUT -j ACCEPT -p tcp --dport 1352
                iptables -A INPUT -p udp --destination-port 53 -j ACCEPT
                # 在input规则中状态为:STATE RELATED 的包都接受
                iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
                # 启用系统ip转发功效
                echo 1 > /proc/sys/net/ipv4/ip_forward
                < --end-- >
                7.1.3 iptables实例2:
                注:这个实例中  ,只需要设置tcp、udp端口和服务器网络段ip规模即可  ,其他已经默认设置好 。
                #!/bin/sh
                # make:yongzhang
                # time:2004-06-18
                # e-mail: yongzhang@wiscom.com.cn
                PATH=/sbin:/bin:/usr/sbin:/usr/bin
                ##tcp allow ports
                TPORTS="80 22"
                ##udp allow ports
                UPORTS="53"
                ##internal server_ip range
                SERVER_IP="172.18.10.0/24"
                ##disable forwarding
                echo 0 > /proc/sys/net/ipv4/ip_forward
                ##reset default policies
                iptables -P INPUT ACCEPT
                iptables -P FORWARD ACCEPT
                iptables -P OUTPUT ACCEPT
                iptables -t nat -P PREROUTING ACCEPT
                iptables -t nat -P POSTROUTING ACCEPT
                iptables -t nat -P OUTPUT ACCEPT
                ##del all iptables rules
                iptables -F INPUT
                iptables -F FORWARD
                iptables -F OUTPUT
                ##clean all non-default chains
                iptables -X
                iptables -t nat -X
                ##iptables default rules
                iptables -P INPUT DROP
                iptables -P FORWARD DROP
                iptables -P OUTPUT ACCEPT
                ##allow ping packets
                iptables -A INPUT -p ICMP -s 0/0 --icmp-type 0 -j ACCEPT
                iptables -A INPUT -p ICMP -s 0/0 --icmp-type 3 -j ACCEPT
                iptables -A INPUT -p ICMP -s 0/0 --icmp-type 5 -j ACCEPT
                iptables -A INPUT -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT
                iptables -A INPUT -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT
                #iptables -A INPUT -p ICMP -s 0/0 --icmp-type 11 -m limit --limit 5/s -j ACCEPT
                iptables -A FORWARD -p ICMP -j ACCEPT
                ##enable forwarding
                iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
                ##STATE RELATED for router
                iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
                ##accept internal packets on the internal i/f
                iptables -A INPUT -s $SERVER_IP -p tcp -j ACCEPT
                ##open ports on router for server/services
                ##TCP PORTS
                for ATP in $TPORTS
                do
                iptables -A INPUT ! -s $SERVER_IP -d $SERVER_IP -p tcp --destination-port $ATP -j ACCEPT
                iptables -A FORWARD -p tcp --destination-port $ATP -j ACCEPT
                done
                ##UDP PORTS
                for AUP in $UPORTS
                do
                iptables -A INPUT -p udp --destination-port $AUP -j ACCEPT
                iptables -A FORWARD -p udp --destination-port $AUP -j ACCEPT
                done
                ##bad_packets chain
                ##drop INVALID packets immediately
                iptables -A INPUT -p ALL -m state --state INVALID -j DROP
                ##limit SYN flood
                #iptables -A INPUT -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
                #iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
                ##deny all ICMP packets,eth0 is external net_eth
                #iptables -A INPUT -i eth0 -s 0.0.0.0/0 -p ICMP -j DROP
                ##allow loopback
                iptables -A INPUT -i lo -p all -j ACCEPT
                iptables -A OUTPUT -o lo -p all -j ACCEPT
                ##enable forwarding
                echo 1 > /proc/sys/net/ipv4/ip_forward
                < --end-- >
                7.2 ipchains类型防火墙:
                7.2.1 ipchains观点:
                Ipchains 被用来安装、维护、检查Linux内核的防火墙规则 。规则可以分成四类:IP input链、IP output链、IP forward链、user defined 链  。
                一个防火墙规则指定包的花样和目的  。当一个包进来时, 焦点使用input链来决议它的运气  。 若是它通过了, 那么焦点将决议包下一步该发往那边(这一步叫路由)  。如果它是送往另一台机械的, 焦点就运用forward链 。若是不匹配 ,进入目的值所指定的下一条链 ,那有可能是一条user defined链  ,或者是一个特定值: ACCEPT ,DENY  ,REJECT  ,MASQ  ,REDIRECT  ,RETURN  。
                ACCEPT意味着允许包通过  ,DENY 扔偷换就象没有受到过一样  ,REJECT也把包扔掉 ,但(如果它不是 ICMP 包)发生一个 ICMP 回复来告诉发包者  ,目的地址无法到达(请注重DENY和REJECT对于ICMP包是一样的)  。
                MASQ 告诉焦点伪装此包  ,它只对forward 链和user defined链起作用  ,想让它起作用, 编译焦点时必须让 IP Masquerading 起作用 。
                REDIRECT只对input链和user defined链起作用  。它告诉焦点把无论应送到那边的包改送到一个当地端口. 只有 TCP 和 UDP 协议可以使用此指定. 恣意用 '-j REDIRECT' 指定一个端口(名字或编号)可以使送往此的包被重定向到某个特殊的端口, 纵然它被标志为送到其它端口  。想让它起作用  ,编译内核时  ,必须让CONFIG_IP_TRANSPARENT_PROXY起作用 。
                最后的一个目的指定是 RETURN, 它跳过它下面的所有规则, 直到链的末尾 。
                任何其它的目的指定表现一个用户自界说的链 。包将在谁人链中通过. 如果谁人链没有决议此包的运气, 那么在谁人链中的传输就完成了  ,包将通过当前链的下一个规则  。
                7.2.2 ipchains实例:
                ##扫除input规则的规则  ,并改变input默认的规则链计谋为REJECT
                -F input
                -P input REJECT
                ##以下是允许input规则链的tcp端口为:80 81 22 123
                -A input -s 0/0 -d 0/0 80 -p tcp -y -j ACCEPT
                -A input -s 0/0 -d 0/0 81 -p tcp -y -j ACCEPT
                -A input -s 0/0 -d 0/0 22 -p tcp -y -j ACCEPT
                -A input -s 0/0 -d 0/0 123 -p udp -j ACCEPT
                ##设置除了以上允许的input规则链以为  ,拒绝0-1023、2049、6000-6009、7100的tcp和upd端口  ,
                -A input -p tcp -s 0/0 -d 0/0 0:1023 -y -j REJECT
                -A input -p tcp -s 0/0 -d 0/0 2049 -y -j REJECT
                -A input -p udp -s 0/0 -d 0/0 0:1023 -j REJECT
                -A input -p udp -s 0/0 -d 0/0 2049 -j REJECT
                -A input -p tcp -s 0/0 -d 0/0 6000:6009 -y -j REJECT
                -A input -p tcp -s 0/0 -d 0/0 7100 -y -j REJECT
                ##允许系自己统网卡上发生的所有包通过
                -A input -s 0/0 -d 0/0 -i lo -j ACCEPT
                -A input -s 0/0 -d 0/0 -i eth0 -j ACCEPT
                -A input -s 0/0 -d 0/0 -i eth1 -j ACCEPT
                ##扫除output规则的规则  ,并改变output默认的规则链计谋为ACCEPT
                -F output
                -P output ACCEPT
                ##扫除forward规则的规则 ,并改变forward默认的规则链计谋为DENY,设置了forward规则链允许对10.10.11.0/24网段的包可以转发而且做伪装处置惩罚 。
                -F forward
                -P forward DENY
                -A forward -s 10.10.11.0/24 -j MASQ