ubuntu Security配置初步学习

来源:互联网 发布:l300清零软件 编辑:程序博客网 时间:2024/06/10 05:04

一、基础:

1.root与sudo

root账户:ubuntu下默认是锁定了root账户,如需开启,sudo passwd给root设定密码即可开启它。

如果需要锁定禁用:sudo passwd -l root

具有root权限的群组:admin,  

可sudo授权的配置/etc/sudoers

2.添加与删除用户:

sudo adduser name

sudo deluser name

ubuntu默认情况下删除用户会保留其home目录

如果创建一个不能登录shell的用户,则需要将其添加到nologin组
sudo adduser nbame -g nologin

默认情况下新创建的用户其home目录是drwxr-xr-x,所以这将导致任何人可以读取和执行下面的文件,如果这会导致你的安全问题,你可以进行:

sudo chmod 0750 /home/name(不需要加上-R,这可能会导致意想不到的问题,因为已经对目录进行了限制,自然他们无法访问到目录下的文件,所以无需对其下文件进行限制)

如果想改变这种默认行为,你可以修改/etc/adduser.conf:

DIR_HOME=0750

如果你想禁用一个账户:

sudo passwd -l username

启用一个账户:

sudo passwd -u username

3.Passwoed Policy密码策略

我们可以设定密码的最小长度,过期时限,过期提醒等。

3.1设定密码的最小长度 vi  /etc/pam.d/common-password,比如最小8位长度

 password        [success=1 default=ignore]      pam_unix.so obscure sha512 min=8

如果想查看用户的密码配置情况: sudo chage -l username

Last password change                    :  3月 07, 2014   -E
Password expires                    : never 密码过期?   
Password inactive                    : never 密码失效?    
Account expires                        : never账户过期?    
Minimum number of days between password change        : 0  密码可修改的最小时间   -m
Maximum number of days between password change        : 99999密 码必须修改的最大时间长度,即密码的过期时限   -M
Number of days of warning before password expires    : 7 密码过期提示时间   -W

设定密码相关设定:

sudo chage -E 01/31/2014, -m 5 -M 90 -I 30 -W 14 username (此处 -I代表密码过期后多少天失效,账户被禁止)

注意:密码过期后还是可以登录,但是密码失效后账户就会被冻结。

4.关于SSH的账户安全考虑

我们可以禁止一个账户,但是假如这个账户已经通过SSH取得证书,那么它任然可以通过ssh登录主机。

这时我们应该移动/home/username/.ssh/authorized_keys,重命名它。

或者我们可以更彻底地通过改变 vim /etc/ssh/sshd_config文件

AllowGroup sshlogin

然后添加:

sudo addgroup sshlogin

sudo adduser username sshlogin

sudo service sshd restart

二、终端安全:

关闭ctrl+alt+del重启功能:

vim /etc/init/control-alt-delete.conf
注释它:# exec shutdown -r now "Control-Alt-Delete pressed"

三、FireWall防火墙

linux kernel提供了iptables工具用于网络封包过滤。也就是网络防火墙。

我们可以通过ufw这个工具来简化配置

3.1 ufw

ubuntu默认没有开启ufw,:

sudo ufw enable

关闭”sudo ufw disable

查看状态 sudo ufw status [verbose]

操作实例:

sudo ufw allow 22  //开启22端口 我们也可以通过/etc/services里定义的端口与服务名来开启如:sudo ufw allow ssh

sudo ufw insert 1 allow 80 //添加80端口支持

sudo ufw deny 22关闭22端口

sudo ufw  delete deny 关闭22端口

设定可以访问主机的远程ip:允许从主机192.168.0.24及其子网/24到所有ip的ssh即22端口的访问

sudo ufw allow proto tcp from 192.168.0.2/24  to any port 22


查看开启一个服务需要开启的规则:sudo ufw --dry-run allow http

3.2ufw的应用集成

一般应用程序会自带ufw规则并将其安装在/etc/ufw/application.d/

查看安装的规则列表 sudo ufw app list

开启摸个应用的规则:sudo ufw allow Samba或sudo  ufw allow from 192.168.0.0/24 any app Samba这种形式具体控制

查看规则详细:sudo ufw app info Samba

四、IP Masquerading IP伪装

1.NAT(Network AddressTranslation)基本概念

在计算机网络中,网络地址转换(Network Address Translation或简称NAT),也叫做网络掩蔽或者IP掩蔽(IP masquerading),是一种在IP封包通过路由器或防火墙时重写源IP地址或目的IP地址的技术。这种技术被普遍使用在有多台主机但只通过一个公有IP地址访问因特网的私有网络中。根据规范,路由器是不能这样工作的,但它的确是一个方便并得到了广泛应用的技术。当然,NAT也让主机之间的通信变得复杂,导致通信效率的降低。

网络地址转换(NAT,Network Address Translation)属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术,它被广泛应用于各种类型Internet接入方式和各种类型的网络中。原因很简单,NAT不仅完美地解决了lP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。

NAT(Network Address Translation,网络地址转换)是将IP 数据包头中的IP 地址转换为另一个IP 地址的过程。在实际应用中,NAT 主要用于实现私有网络访问公共网络的功能。这种通过使用少量的公有IP 地址代表较多的私有IP 地址的方式,将有助于减缓可用IP地址空间的枯竭。

1990年代中期,NAT是作为一种解决IPv4地址短缺以避免保留IP地址困难的方案而流行起来的。网络地址转换在很多国家都有很广泛的使用。所以NAT就成了家庭和小型办公室网络连接上的路由器的一个标准特征,因为对他们来说,申请多余的IP地址的代价要高于所带来的效益。

在一个典型的配置中,一个本地网络使用一个专有网络的指定子网(比如192.168.x.x或10.x.x.x)和连在这个网络上的一个路由器。这个路由器占有这个网络地址空间的一个专有地址(比如 192.168.0.1),同时它还通过一个或多个因特网服务提供商提供的公有的IP地址(叫做“过载” NAT)连接到因特网上。当信息由本地网络向因特网传递时,源地址被立即从专有地址转换为公用地址。由路由器跟踪每个连接上的基本数据,主要是目的地址和端口。 当有回复返回路由器时,它通过输出阶段记录的连接跟踪数据来决定该转发给内部网的哪个主机;如果有多个公用地址可用,当数据包返回时,TCP或UDP客户机的端口号可以用来分解数据包。对于因特网上的一个系统,路由器本身充当通信的源和目的地址。流行在网络上的一种看法认为,IPv6的广泛采用将使得NAT不再需要,因为NAT只是一个处理IPv4的地址空间不足的方法。

私有 IP 地址是指内部网络或主机的IP 地址,公有IP 地址是指在因特网上全球唯一的IP 地址。
RFC 1918 为私有网络预留出了三个IP 地址块,如下:
A 类:10.0.0.0~10.255.255.255
B 类:172.16.0.0~172.31.255.255
C 类:192.168.0.0~192.168.255.255
上述三个范围内的地址不会在因特网上被分配,因此可以不必向ISP 或注册中心申请而在公司或企业内部自由使用。

架设需求
由前面 NAT( Network Address Translation ) 的介绍,我们知道他可以作为宽带分享的主机,当然也可以管理一群在NAT 主机后面的 Client 计算机。所以 NAT 的功能至少有这两项:
①宽带分享:这是 NAT 主机的最大功能。
②安全防护:NAT 之内的 PC 联机到 Internet 上面时,他所显示的 IP 是 NAT 主机的公共 IP,所以 Client 端的 PC 当然就具有一定程度的安全了!外界在进行 portscan(端口扫描) 的时候,就侦测不到源Client 端的 PC 。

虽然NAT可以借助于某些代理服务器来实现,但考虑到运算成本和网络性能,很多时候都是在路由器上来实现的。

NAT的实现方式有三种,即静态转换Static Nat、动态转换Dynamic Nat和端口多路复用OverLoad。

但是NAT也有其局限性。不再介绍,以上介绍部分取自维基百科与百度百科

2.ufw中IP伪装配置

首先得开启包转发:

vim /etc/default/ufw:

DEFAULT_FORWARD_POLICY="ACCEPT"

然后vim /etc/ufw/sysctl.conf开启对ipv4,ipv6的支持:

net/ipv4/ip_forward=1

对于ipv6:

net/ipv6/conf/default/forwarding=1

# nat Table rules*nat:POSTROUTING ACCEPT [0:0]# Forward traffic from eth1 through eth0.-A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE# don't delete the 'COMMIT' line or these nat table rules won't be processedCOMMIT最后,禁止并重新激活ufw来运用修改sudo ufw disable && sudo ufw enable

3.iptables伪装:

除了使用ufw伪装之外,我们还可以使用iptables伪装

    类似于ufw,激活IPv4包投递的第一步是编辑/etc/sysctl.conf并注释掉以下行:    net.ipv4.ip_forward=1    如果你想激活IPv6投递,还要注释掉:    net.ipv6.conf.default.forwarding=1    接下来,执行sysctl命令来激活配置文件中的新设置。    sudo sysctl -p    如今根据一条iptables规则即可完成IP伪装,视您的网络而定,其配置可能略有不同。    sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE    上面的命令假定您的个人地址空间是 192.168.0.0/16,同时您的网络连接设备是 ppp0。这个语法失效,如下所示:        -t nat -- 该规则将进入 nat 表        -A POSTROUTING -- 该规则将被追加 (-A) 到 POSTROUTING 链        -s 192.168.0.0/16 -- 该规则将被应用在源自指定地址空间的流量上        -o ppp0 -- 该规则应用于计划通过指定网络设备的流量。        -j MASQUERADE -- 匹配该规则的流量将如上所述 "跳转" (-j) 到 MASQUERADE (伪装) 目标。    过滤表中的每个处理链都有一个默认的 ACCEPT 策略(policy),但如果您是为网关设备添加防火墙,那么您可能会将这些策略设置为 DROP 或 REJECT。在这种情况下您伪装过的数据流需要允许通过 FORWARD 链,以使得上述规则正确执行。    sudo iptables -A FORWARD -s 192.168.0.0/16 -o ppp0 -j ACCEPT    sudo iptables -A FORWARD -d 192.168.0.0/16 -m state \    --state ESTABLISHED,RELATED -i ppp0 -j ACCEPT    上面的命令将允许从你的本地网络到互联网的所有连接,以及和这些连接相关的、返回产生它们的计算机的所有流量。    如果您想在重启以后应用IP伪装,您可能需要编辑/etc/rc.local并加入上面使用的任一命令。例如加入没有过滤的第一条命令:    iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE

4.日志:

防火墙日志对于识别攻击、调试防火墙规则和发现你网络上不正常活动方面非常重要。一定要在防火墙里包含日志生成规则并且日志规则一定是在任何终结性规则之前使用(用来觉得字节包裹命运:如ACCEPT, DROP 或者 REJECT)。

如果你在使用ufw,你可以在终端输入以下内容以开启登录:

sudo ufw logging on

为退出登录ufw,在以上命令中用off替换on即可。

如果您要使用ufw来代替iptables,请输入:

sudo iptables -A INPUT -m state --state NEW -p tcp --dport 80 \
-j LOG --log-prefix "NEW_HTTP_CONN: "

5.其他工具:

有许多工具可以帮助你不用深奥的iptables的知识就创建一个完整的防火墙。图形操作界面的有:

fwbuilder功能很强大,使用过类似于Checkpoint FireWall-1等商业防火墙软件的管理员会对它很面熟。
如果你更倾向于使用有纯文本配置文件的命令行工具
Shorewall是一个非常强大的帮助你配置高级防火墙的解决方案,它适合于任何类型的网络。

五、其他:

1.apparmor

请参考:

apparmor:https://help.ubuntu.com/13.10/serverguide/apparmor.html

2.自签发证书:

概念

开始之前介绍几个SSL相关的概念:
CA(Certification Authority,认证中心)
SSL (Secure Sockets Layer,安全套接层协议)
TLS(Transport Layer Security,传输层安全)
CSR (Certificate Signing Request,证书签名请求)

流程

需要启用SSL的服务器自己生成CSR,然后让权威的CA进行签名认证或者 自己创建一个CA证书,然后给自己的CSR签名,不过这样的证书不会被浏览器认可

生成一个证书签署请求 (CSR):

无论您是从一家 CA 那儿获得证书或是生成您自己签署的证书,第一步就是生成钥匙。

如果数字证书被服务进程使用(比如Apache,Postfix,Dovecot等等),一个没有密码保护的私钥是适用的。私钥没有密码保护可以让服务在没有人工干预的情况下启动,通常这是启动服务的首选方式。

在终端提示符下运行以下命令来为这个证书签名请求(CSR)生成keys

openssl genrsa -des3 -out server.key 2048 //需要密码的(openssl genrsa -out server.key 2048 //无需密码的 )
接下来生成无需密码的安全key:

openssl rsa -in server.key -out server.key.insecuremv server.key server.key.securemv server.key.insecure server.key
以上server.key.secure是需要密码的,server.key是无需密码的。

要创建 CSR,可以在终端提示符后运行以下命令:

openssl req -new -key server.key -out server.csr

要创建自己签署的证书,在终端提示符下运行以下命令:

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

上述命令将提示您输入 passphrase。一旦您输入正确的 passphrase,您的证书将被创建并将保存在 server.crt 文件中。

安装证书
您可以通过在终端提示符下运行以下命令来安装密钥文件server.key和证书文件server.crt,或是由您的CA签发的证书文件。
sudo cp server.crt /etc/ssl/certs
sudo cp server.key /etc/ssl/private

现在就可以开始配置应用程序使用certs和key了。如apache 的https,  devocet的IMAPS等


例如对于apache:

#a2enmod ssl
sudo openssl req -x509 -newkey rsa:2048 -keyout apache.pem -out apache.pem -nodes -days 9999

或者通过以下方式生成CA文件

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048  -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt

创建一个默认ssl配置站点:vim /etc/apache2/sites-available/default-ssl

<VirtualHost *:443>        SSLEngine On

SSLCertificateFile   /etc/apache2/ssl/apache.crt

SSLCertificateKeyFile /etc/apache2/ssl/apache.key

 // SSLCertificateFile /etc/apache2/ssl/apache.pem// ,.......
添加端口

打开ports.conf文件在

<IfModule mod_ssl.c>

    Listen 443//添加SSL监听端口

</IfModule>

添加自定义web主目录

  Alias /postfixadmin"/usr/share/postfixadmin/"

  <Directory "/usr/share/postfixadmin/">

      Options Indexes FollowSymLinks MultiViews

      AllowOverride None

       Orderallow,deny

       allowfrom all

  </Directory>

.强制http转到https

打开/etc/apache2/sites-available/default文件

在原有的Alias……行之上添加

Redirect permanent /postfixadmin https://www.xxx.com/postfixadmin  //强制跳转

   Alias /postfixadmin"/usr/share/postfixadmin/"

  <Directory "/usr/share/postfixadmin/">

      Options Indexes FollowSymLinks MultiViews

      AllowOverride None

       Orderallow,deny

       allowfrom all

  </Directory>

重启Apache,完毕

sudo service apache2 restart


参考:http://zh.wikipedia.org/wiki/%E7%BD%91%E7%BB%9C%E5%9C%B0%E5%9D%80%E8%BD%AC%E6%8D%A2

http://baike.baidu.com/view/16102.htm

https://help.ubuntu.com/13.10/serverguide/firewall.html

IptalesHowTO:https://help.ubuntu.com/community/IptablesHowTo

https://help.ubuntu.com/13.10/serverguide/certificates-and-security.html

http://blog.csdn.net/purplebox/article/details/17960425

http://weizhifeng.net/apache-ssl.html

http://weizhifeng.net/apache-ssl.html

0 0
原创粉丝点击