Tcp_Wrappers
1.简介
Tcp_Wrappers是一个用来分析TCP/IP封包的软件,linux默认都安装了此软件,作为一个安全的系统,Linux本身有两层安全防火墙,通过IP过滤机制的iptables实现第一层防护,iptables防火墙通过直观地监视系统的运行状况,阻挡网络中的一些恶意攻击,保护整个系统正常运行,免遭攻击和破坏。如果通过了第一层防护,那么下一层防护就是tcp_wrappers了,通过Tcp_Wrappers可以实现对系统中提供的某些服务的开放与关闭、允许和禁止,从而更有效地保证系统安全运行
tcp_wrappers防火墙的局限性:
某个服务是否可以使用tcp_wrappers防火墙,取决于该服务是否应用了libwrapped库文件,如果应用了就可以使用tcp_wrappers防火墙。sendmail、sshd、tcpd、xinetd、gdm、portmap都可以使用
命令: ldd /usr/sbin/httpd | grep libwrap 可用来查看是否支持
2.两个主配置文件
两个配置文件:/etc/hosts.allow和/etc/hosts.deny
(注意:allow和deny冲突时,allow生效)
3.格式:
service:host(s) [:action]
服务名 主机名(或多个) 动作,符合条件后所采取的动作
ALL:ALL EXCEPT 192.168.0.8除了这台机器,所有的执行所有服务时被允许或拒绝。
service代表服务名,就是使用ps -e看到的服务名。
host(s)形式:192.168.0.0 192.168.1. abc.com def.com
action的写法:vsftpd:ALL:spawn /bin/echo date
%c %d >> /var/log/tcp_wrappers 表示在telnet请求时执行特定的命令,通常是向某个日志文件中写入一天信息
spawn代表执行一个命令,%c、%d以及其它参数的用法可以使用man hosts.allow或man host.deny
允许某人访问你的sshd服务,但对该访问进行日志
SSHD:172.16.10.1:spawn echo date
%c %d >> /tmp/aa.log
4 例子:当别人尝试登陆你的sshd服务时将其访问动作记录到日志,并且区分允许和拒绝信息
SSHD:172.16.10.0/255.255.255.0:spawn echo deny date
%c %d >> /tmp/tcp.log
SSHD:172.16.10.0/255.255.255.0:spawn echo deny date
%c %d >> /tmp/tcp.log
iptables
(核心是input SNAT DNAT)
系统新装需要先关闭防火墙。
service iptables -F (清空防火墙)
service iptables save (保存防火墙规则)
service iptables start (启动服务)
永久关闭防火墙 : chkconfig iptables off
永久关闭后启用 : chkconfig iptables on
6的系统 # vi /etc/sysconfig/iptables #编辑防火墙配置文件
(1)规则 iptables [-t TABLE] COMMAND CHAIN [num] 匹配标准 -j 处理办法
Iptables –t filter -A 添加 INPUT -p tcp|udp !tcp(非tcp)
nat -D删除 OUTPUT -s 192.168.1.1 192.168.1.0/24
mangle -I 插入 FORWORD -s ! 192.168.0.0/24 取反
row -R 替换 PREROUTING -d 192.168.1.1
-P 默认 POSTROUTING -i eth0
-N 自定义 -X 删除自定义
-E 自定义重命名
--sport 22 -j ACCEPT
--sport 22:80 DROP
:80 REJECT
22: LOG
!22 USER CHAIN
!22:80 REDRECT
--dport 22
(2)匹配条件 通用匹配
-s, --src: 指定源地址
-d, --dst:指定目标地址
-p {tcp|udp|icmp}:指定协议
-i INTERFACE: 指定数据报文流入的接口
可用于定义标准的链:PREROUTING,INPUT,FORWARD
-o INTERFACE: 指定数据报文流出的接口
可用于标准定义的链:OUTPUT,POSTROUTING,FORWARD
(3)扩展匹配 隐含扩展
-p tcp
--sport PORT[-PORT]: 源端口
--dport PORT[-PORT]: 目标端口
--tcp-flags mask comp: 只检查mask指定的标志位,是逗号分隔的标志位列表;comp:此列表中出现的标记位必须为1,comp中没出现,而mask中出现的,必须为0;
--tcp-flags SYN,FIN,ACK,RST SYN = --syn
--syn
-p icmp
--icmp-type
0: echo-reply
8: echo-request
-p udp
--sport
--dport
-p tcp --dport
显式扩展: 使用额外的匹配机制
-m EXTESTION --spe-opt
state: 状态扩展
结合ip_conntrack追踪会话的状态
NEW: 新连接请求
ESTABLISHED:已建立的连接
INVALID:非法连接
RELATED:相关联的
-m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -d 172.16.100.7 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
multiport: 离散的多端口匹配扩展
--source-ports
--destination-ports
--ports
-m multiport --destination-ports 21,22,80 -j ACCEPT
例:iptables -A INPUT -p tcp -m multiport--sport 20,21,22,23,80
按源端口多端口匹配,最多可以指定15个端口,以英文逗号分隔,注意没有空格。使用时必须指定协议
条件取反:!,-s ! 172.16.100.6
(4)命令:
管理规则
-A:附加一条规则,添加在链的尾部
-I CHAIN [num]: 插入一条规则,插入为对应CHAIN上的第num条;
-D CHAIN [num]: 删除指定链中的第num条规则;
-R CHAIN [num]: 替换指定的规则;
管理链:
-F [CHAIN]:flush,清空指定规则链,如果省略CHAIN,则可以实现删除对应表中的所有链
-P CHAIN: 设定指定链的默认策略;
-N:自定义一个新的空链
-X: 删除一个自定义的空链
-Z:置零指定链中所有规则的计数器;
-E: 重命名自定义的链;
查看类:
-L: 显示指定表中的规则;
-n: 以数字格式显示主机地址和端口号;
-v: 显示链及规则的详细信息
-vv:
-x: 显示计数器的精确值
--line-numbers: 显示规则号码
(5)动作(target):
ACCEPT:放行
DROP:丢弃
REJECT:拒绝
DNAT:目标地址转换
SNAT:源地址转换
REDIRECT:端口重定向
MASQUERADE:地址伪装
LOG:日志
MARK:打标记
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
7的系统 CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙步骤
。
1、关闭firewall:
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
2、安装iptables防火墙
#yum install iptables-services #安装
#vi /etc/sysconfig/iptables #编辑防火墙配置文件
#systemctl restart iptables.service #最后重启防火墙使配置生效
#systemctl enable iptables.service #设置防火墙开机启动
firewall
#yum install firewalld firewall-config –y --安装
查看版本: firewall-cmd --version
查看帮助: firewall-cmd --help
显示状态: firewall-cmd --state
1、查看所有区域
# firewall-cmd --get-zones
2、查看默认区域
# firewall-cmd --get-default-zone
3、修改默认区域
# firewall-cmd --set-default-zone=home
# firewall-cmd --reload
4、查看区域的规则
# firewall-cmd --list-all --zone=work
启动: systemctl start firewalld
查看状态: systemctl status firewalld
禁用: systemctl disable firewalld
停止: systemctl stop firewalld
配置firewalld-cmd
查看所有打开的端口: firewall-cmd --zone=public --list-ports
更新防火墙规则: firewall-cmd --reload
查看指定接口所属区域: firewall-cmd --get-zone-of-interface=eth0
拒绝所有包:firewall-cmd --panic-on
取消拒绝状态: firewall-cmd --panic-off
查看是否拒绝: firewall-cmd --query-panic
开启一个端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent (--permanent永久生效,没有此参数重启后失效)
重新加载生效
firewall-cmd –reload
查看
firewall-cmd --zone= public --query-port=80/tcp
删除
firewall-cmd --zone= public --remove-port=80/tcp –permanent
firewall-cmd --reload
在Public默认区域中放行http服务的访问
# firewall-cmd --permanent --zone=public --add-service=http
# firewall-cmd --reload
在Public默认区域中删除http服务的访问
# firewall-cmd --permanent --zone=public --remove-service=http
# firewall-cmd --reload
将客户端192.168.122.0/24所有访问请求引导到work区域,放行http服务的访问
# firewall-cmd --permanent --add-source=192.168.122.0/24 --zone=work
# firewall-cmd --permanent --add-port=80/tcp --zone=work
# firewall-cmd --reload
selinux
安装管理工具: yum install setools-console -y
SELinux的策略与规则管理相关命令:
seinfo查询SELinux的策略提供多少相关规则
sesearch
getsebool
-a:列出目前系统上面的所有布尔值条款设置为开启或关闭值。
setsebool
setsebool [-P] 布尔值=[0|1]
semanage
-l:查询。
fcontext:主要用在安全上下文方面。
-a:增加,你可以增加一些目录的默认安全上下文类型设置。
-m:修改。
-d:删除。
放行端口
semanage port -a -t http_port_t -p tcp 888
semanage port -a -t mysqld_port_t -p tcp 6606
查看那放行端口:
临时生效:setenforce 0 查看 getenforce
永久生效:vim /etc/selinux/config 修改为disabled
# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config