当一个系统被用作公开网络的服务器时,这个系统就成为被攻击的目标。对网络服务进行访问控制,是一个服务器管理员面临的最重要的安全任务之一,例如,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系统安全性得到极大的提升! (责任编辑:IT) |