Linux系统三层安全访问控制

当一个系统被用作公开网络的服务器时,这个系统就成为被攻击的目标。对网络服务进行访问控制,是一个服务器管理员面临的最重要的安全任务之一,例如,Linux内核使用一个基于iptables的防火墙来将不受欢迎的网络数据包过滤在内核网络之外。对于使用这种防火墙的网络服务,TCP Wrappers又增加了一层保护,这层保护通过定义哪些主机允许或不允许连接到”wrapped”网络服务上来实现.大多数现代网络服务系统,像SSH,Telnet和FTP,都可以利用Xinetd进程服务来管理,这个Xinetd被称为超级守护进程,在这个服务里可以直接设置访问控制,从而在网络层可以进行三层防护。

1.iptables网络防护

  你可以用命令添加的方式一条一条增加规则,也可以直接编辑文件。

 vim  /etc/iptables.firewall.rules

*filter

#  Allow all loopback (lo0) traffic and drop all traffic to 127/8 that doesn’t use lo0

-A INPUT -i lo -j ACCEPT

-A INPUT -d 127.0.0.0/8 -j REJECT

#  Accept all established inbound connections

-A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

#  Allow all outbound traffic – you can modify this to only allow certain traffic

-A OUTPUT -j ACCEPT

#  Allow HTTP and HTTPS connections from anywhere (the normal ports for websites and SSL).

-A INPUT -p tcp –dport 80 -j ACCEPT

-A INPUT -p tcp –dport 443 -j ACCEPT

#  Allow SSH connections

#

#  The -dport number should be the same port number you set in sshd_config

#

-A INPUT -p tcp -m state –state NEW –dport 22 -j ACCEPT

#  Allow ping

-A INPUT -p icmp -j ACCEPT

#  Log iptables denied calls

-A INPUT -m limit –limit 5/min -j LOG –log-prefix “iptables denied: ” –log-level 7

#  Drop all other inbound – default deny unless explicitly allowed policy

-A INPUT -j DROP

-A FORWARD -j DROP

COMMIT

读取防火墙规则使其生效:

iptables-restore < /etc/iptables.firewall.rules

这些规则将允许以下的服务和端口:HTTP(80),HTTPS(443),SSH(22)和ping功能,其他访问将被拒绝

2.Tcp  wrappers访问控制

Tcp wrapper:又叫TCPD网络资源访问控制器,工作在TCP层,通常情况下只能对基于TCP协议的某些访问做控制的,其实它对应的是一个库文件,由glibc提供的,工作于用户空间用户请求之间。

客户端–>iptables–>TCP_wrapper–>Service本身的访问控制

如果客户端IP通过了iptables防火墙后想访问我们的服务器资源,这时将会按照以下步骤判断:

当某个ip想访问你的Linux下的特定服务时,系统首先会检查/etc/hosts.alllow文件,如是有的话就放行,

没有的话继续检查/etc/hosts.deny文件,有的话拒绝,没有的就放行,不过一般的做法就直接在/etc/hosts.allow里放允许通行的ip,/etc/hosts.deny里放不允许通行的ip。

检查一个服务是否受tcp wrapper控制,如telent:

#ldd `which in.telnetd` | grep “libwrap.so”

有些程序在编译时是通过静态的方式链接库,用如下命令检查:

#strings `which in.telnetd` | grep hosts

如果要控制访问,编辑/etc/hosts.allow,/etc/hosts.deny文件,格式为,程序名:主机网络。

如对telnet,允许192.168.1.网段访问,但是主机192.168.1.100除外

in.telnetd: 192.168.1. EXCEPT 192.168.1.100

还可以记录访问日志

in.telnetd: 192.168.1. :spawn echo “connect `date`” >>/var/log/tcpwrapper.log

记住规则生效顺序:

/etc/hosts.allow –> /etc/hosts.deny –> 默认规则(allow)

3.Xinetd超级守护进程访问控制

在linux中服务有两类:独立守护进程和瞬时守护进程。

独立守护进程,自己管理自己,不受其他的限制与影响,响应速度快。比如httpd。

瞬时守护进程又称非独立守护进程:按需启动,无需关闭,节省资源。比如Xinetd。

当客户端试图连接到由xinetd控制的网络服务,超级服务接收请求,并检查是否有TCP封装的访问控制规则。

通过编辑两个配置文件,以telnet为例:

/etc/xinetd.conf — 全局配置文件

defaults

{

instances               = 60                   ; 能处理的最大的并发请求数

log_type                = SYSLOGauthpriv     ; 记录日志类型

log_on_success     = HOST PID           ; 记录成功连接的主机iP和进程id

log_on_failure       = HOST                   ; 记录失败连接的主机ip

cps                         = 25 30              ; 允许任何给定服务每秒25次连接,超过则禁用30秒

}

includedir /etc/xinetd.d

/etc/xinetd.d/ —  对应服务的配置文件

service telnet

{

disable           = no                      ; 启用

flags               = REUSE               ; 连接属性为REUSE套接字

socket_type    = stream           ; 套接字类型为strem

wait                 = no                    ; 指定服务为多线程,yes为单线程

user                 = root                ; 指定服务的用户为root

server              = /usr/sbin/in.telnetd   ; 服务的可执行程序

only_from       = 172.16.0.0/16           ; 仅允许176.16网段访问

log_on_failure  += USERID                 ; 登陆失败记录用户id

no_access        = 172.16.45.0/24        ; 不允许访172.16.45网段访问

log_on_success  += PID HOST EXIT    ; 登陆成功记录主机ID,主机名,直到登出信息

access_times    = 09:45-16:15           ; 可以访问的时间段

bind                  = 172.16.100.1            ; 只允许网卡ip为172.16.100.1访问

per_source        = 1                      ; 每个ip每次只能访问一个服务

cps                     = 10 60                 ; 每秒10次,超过禁用60秒,和全局那个范围小取那个

banner              =/etc/telnet.banner      ; 设置登陆欢迎信息

}

通过防火墙,即TCP wrapper访问过滤,加上SELinux安全控制机制,加上文件权限等访问控制,让Linux系统安全性得到极大的提升!

已有 0 条评论 新浪微博
滚动至顶部