iptables的链接跟踪表最大容量为/proc/sys/net/ipv4/ip_conntrack_max,链接碰到各种状态的超时后就会从表中删除。

所以解決方法一般有两个:

(1) 加大 ip_conntrack_max 值

vi /etc/sysctl.conf

net.ipv4.ip_conntrack_max = 393216

net.ipv4.netfilter.ip_conntrack_max = 393216

(2): 降低 ip_conntrack timeout时间

vi /etc/sysctl.conf

net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 300

net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120

net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60

net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120

iptables -t nat -L -n



练习:INPUT和OUTPUT默认策略为DROP;

1、限制本地主机的web服务器在周一不允许访问;新请求的速率不能超过100个每秒;web服务器包含了admin字符串的页面不允许访问;web服务器仅允许响应报文离开本机;

2、在工作时间,即周一到周五的8:30-18:00,开放本机的ftp服务给172.16.0.0网络中的主机访问;数据下载请求的次数每分钟不得超过5个;

3、开放本机的ssh服务给172.16.x.1-172.16.x.100中的主机,x为你的座位号,新请求建立的速率一分钟不得超过2个;仅允许响应报文通过其服务端口离开本机;

4、拒绝TCP标志位全部为1及全部为0的报文访问本机;

5、允许本机ping别的主机;但不开放别的主机ping本机;


练习:判断下述规则的意义:

# iptables -N clean_in   //创建一个新的自定义规则连clean_in

# iptables -A clean_in -d 255.255.255.255 -p icmp -j DROP   //目标地址是4个255,协议是icmp,就拒绝,这是广播ping

# iptables -A clean_in -d 172.16.255.255 -p icmp -j DROP    //也是广播ping

# iptables -A clean_in -p tcp ! --syn -m state --state NEW -j DROP  //tcp协议,tcp标志位非syn,但状态却为NEW,对tcp来讲是莫名其妙的,是invlude的

# iptables -A clean_in -p tcp --tcp-flags ALL ALL -j DROP    //检查所有标志位,所有标志位都为1,奇葩报文

# iptables -A clean_in -p tcp --tcp-flags ALL NONE -j DROP  //检查所有标志位,所有标志位都为0,奇葩报文

# iptables -A clean_in -d 172.16.100.7 -j RETURN     //如果目标地址172.16.100.7,就返回

# iptables -A INPUT -d 172.16.100.7 -j clean_in  //所有来自于外网中的主机对本地主机请求的所有报文都转给自定义链clean_in,有上面的自定义链匹配报文

# iptables -A INPUT  -i lo -j ACCEPT     //从本地回环接口进来的报文全部接受

# iptables -A OUTPUT -o lo -j ACCEPT   //从本机出去的报文全部允许

# iptables -A INPUT  -i eth0 -m multiport -p tcp --dports 53,113,135,137,139,445 -j DROP

# iptables -A INPUT  -i eth0 -m multiport -p udp --dports 53,113,135,137,139,445 -j DROP

# iptables -A INPUT  -i eth0 -p udp --dport 1026 -j DROP

# iptables -A INPUT  -i eth0 -m multiport -p tcp --dports 1433,4899 -j DROP

# iptables -A INPUT  -p icmp -m limit --limit 10/second -j ACCEPT   //对icmp协议的报文做速率限制,每秒钟不能超过10个


ssh: 远程连接,

iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j DROP

iptables -I INPUT  -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH

iptables -I INPUT  -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j LOG --log-prefix "SSH Attach: "

iptables -I INPUT  -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP

1.利用connlimit模块将单IP的并发设置为3;会误杀使用NAT上网的用户,可以根据实际情况增大该值;

2.利用recent和state模块限制单IP在300s内只能与本机建立2个新连接。被限制五分钟后即可恢复访问。

下面对最后两句做一个说明:

1.第二句是记录访问tcp 22端口的新连接,记录名称为SSH

--set 记录数据包的来源IP,如果IP已经存在将更新已经存在的条目

2.第三句是指SSH记录中的IP,300s内发起超过3次连接则拒绝此IP的连接。

--update 是指每次建立连接都更新列表;

--seconds必须与--rcheck或者--update同时使用

--hitcount必须与--rcheck或者--update同时使用

3.iptables的记录:/proc/net/xt_recent/SSH

也可以使用下面的这句记录日志:

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --name SSH --second 300 --hitcount 3 -j LOG --log-prefix "SSH Attack"


tcp_wrapper:tcp包装器

只对本机有效,不能做网络防火墙,只能对本机内部的服务对控制,跟网络没有关系

tcp_wrapper是能够对哪些借助于tcp协议传输其报文的应用层服务实施访问控制的一套机制,但是tcp_wrapper仅对哪些在程序员开发时明确指明开发的程序受tcp_wrapper控制的程序做控制,不接受的就无法做控制。

tcp_wrapper可以理解为工作在内核中的tcp/ip协议栈上的tcp层的一个库,用户访问所有用户时,都会首先经由此库,这个库就会检查库文件中是否定义了这个服务允许用户访问,只要此用户访问的程序链接到了libwrap库上,就一定受tcp的控制,tcp控制这个服务,是通过读取配置文件中的规则来判断这个服务是否可以访问。这个文件有两个:/etc/hosts.allow  /etc/hosts.deny

tcp_wrapper是在内核中使用tcpd的模块实现对于某些服务的访问控制,但并不是所有的服务都能被tcp_wrapper控制

tcp_wrapper对基于tcp协议开发并提供服务的应用程序,提供的一层访问控制工具;

tcp_wrapper是基于库调用实现其功能:只有在开发时基于tcp协议,还必须是基于tcp开发提供服务,并且在开发时调用了tcp_wrapper相关库的,这个库叫libwrap,tcp_wrapper才会生效

tcp_wrapper无需自己写规则,而是自己读取配置文件来实现的

判断服务是否能够由tcp_wrapper进行访问控制:(读取配置文件)

(1) 动态编译:ldd命令来检测其所依赖的库是否有libwrap;

(2) 静态编译:strings /path/to/program   strings命令查看应用程序文件,其结果中必须出现

hosts.allow

hosts.deny

服务检查逻辑:

client --> /etc/hosts.allow -->(Y) --> ALLOW  //先检查allow文件,有匹配则直接放行,不再检查deny文件

client --> /etc/hosts.allow -->(N) --> /etc/hosts.deny -->(Y) --> DENY      先检查allow文件,如果没有匹配条件,则检查deny文件,如果deny中有匹配则DENY,

-->(N) -->ALLOW    如果deny文件中也没有匹配到(即allow文件deny文件都没有匹配),则放行

判断动态编译的应用程序是否受tcp_wrapper控制?
查看ssh服务是否支持tcp_wrapper控制?
首先ssh服务是基于tcp协议的,用命令查看 如何实现基于tcp_wrapper对服务做访问控制?
在配置文件在为各服务分别定义访问控制规则实现访问控制:
/etc/hosts.allow   //写在allow中就能实现某个服务有哪些客服端主机进行访问,写进去的规则即时生效
/etc/hosts.deny
配置文件语法:
daemon_list: client_list [:options] 下面基于allow文件和deny文件控制服务的访问。
daemon_list: client_list [:options]
daemon_list:  (如何在配置文件中写这些规则)守护进程列表
1、应用程序的文件名称,而非服务名;(是文件通过链接至libwrapper库文件来完成访问控制的,比如要控制应用程序named,不能写成DNS)
2、应用程序文件名称列表,彼此间使用逗号分隔; 
例如:sshd, vsftpd:
  ALL表示所有服务; 
client_list:  客户端列表 IP地址;
主机名;
网络地址:必须使用完整格式的掩码,不使用前缀格式掩码(例如格式:255.255.0.0);所以类似于172.16.0.0/16不合法;
简短格式的网络地址:例如172.16. 表示 172.16.0.0/255.255.0.0;
ALL:所有主机;
KNOWN:所有可以解析到的主机
UNKNOWN:所有无法解析到的主机 
PARANOID:主机名正反解不匹配/主机名和IP地址各自的正反解析结果不匹配 ALL、KNOWN、UNKNOWN、PARANOID属于tcp_wrapper内置的宏,
 
例如:vsftpd服务不允许172.16.100.1访问
# vim /etc/hosts.deny   //添加如下,先禁掉vsftpd
#vsftpd:  192.168.    //hosts.deny是个库,不是服务,但是会被调用
# yum install vsftpd -y //安装vsftpd服务
# systemctl start vsfptd  //开启服务
# ss -tunl                 //查看是否监听了21号端口
在浏览器中查看vsftpd是否启动成功 # vim /etc/hosts.deny   //启用之前添加的选项
   vsftpd:192.168.   
如果vsftpd服务仅允许192.168.184.网络访问, 如何实现?
# vim /etc/hosts.allow
vsftpd:192.168.184.
# vim /etc/hosts.allow
vsftpd:ALL
此时跟之前的网络配置一样:
转发主机node1 外网网卡IP:192.168.184.141   内网网卡IP:172.16.100.10
内网客户端node2:172.16.100.9,网关指向172.16.100.10,访问外网时由192.168.184.141转发出去
vsftpd客户端node3:192.168.184.143,添加一条路由,使来自于172.16.100.0/24网络的请求报文,响应报文网关都指向192.168.184.141送过去
# route add -net 172.16.100.0/24 gw 192.168.184.141
上述网络配置完成后,则使用内网主机访问143的vsftpd服务  daemon_list: client_list [:options]
特殊变量
EXCEPT:除了
host.allow (在这个文件中定义下面选项)
vsftpd:192.16. EXPECT 192.168.184.141   表示允许192.16.网络中的主机访问,除了192.168.184.141这个IP
vsftpd:192.16. EXPECT 192.168.184.0/255.255.255.0 EXPECT 192.168.184.141 
   //vsftpd服务对192.16.这个网络开放,但不包括192.168.184.0这个子网,但是包括192.168.184.141这个IP(双重否定就是肯定)
 
例:在192.168.184.143主机上
# vim /etc/hosts.allow
vsftpd:192.16. EXCEPT 192.168.184.0/255.255.255.0
此时用192.168.184.141主机是无法访问143的vsftpd服务的 # vim /etc/hosts.allow   //再次修改库文件
 vsftpd:192.168. EXCEPT 192.168.184.0/255.255.255.0 EXCEPT 192.168.184.141 例子:如果指向192.168.184.141访问,其他都访问不了,那么只需要在/etc/hosts.deny文件库中定义就可以,/etc/hosts.allow文件中什么都不需要添加
# vim /etc/hosts.deny  
vsftpd:ALL EXCEPT 192.168.184.141   拒绝所有,只允许192.168.184.141 访问
 
[:options]  (上面讲解的是daemon_list和EXCEPT用法,下面是[:options]) deny: 拒绝,主要用于hosts.allow文件中,在允许的文件中实现拒绝的功能
allow:允许,用于hosts.deny文件,实现allow的功能,在拒绝的文件中实现允许的功能
spawn: 启动额外应用程序:可以完成一部分管理或者其他功能   例:在定义某一服务时,如果不允许访问的主机访问了或者允许访问的主机访问了,都可以把它记录到日志中去
vsftpd: ALL :spawn /bin/echo `date` login attempt from %c to %s, %d >> /var/log/vsftpd.deny.log
%c: client ip
%s: server ip
%d: daemon name
 
例子:deny和allow
在允许的文件allow中实现拒绝的功能
# vim /etc/hosts.allow  //此时只在allow文件中定义,/etc/hosts.deny文件中不做任何定义
vsftpd:192.168. :deny   //先检查allow文件,匹配到后发现是对192.168.网络拒绝,非192.168.的功能可以访问  
另一个例子:
# vim /etc/hosts.allow   
vsftpd:192.168. EXCEPT 192.168.184.141 :deny   //
 //vsftpd:192.169. :deny表示拒绝这个网络内所有主机,vsftpd:192.168. EXCEPT 192.168.184.141表示除了141这个主机,即没有匹配到141这个主机,那     么检查完allow就检查deny,deny文件是拒绝所有主机, 即141依然无法访问vsftpd服务
# vim /etc/hosts.deny
vsftpd:ALL
以上表示所有主机都无法访问vsftpd服务 spawn例子:
本机开放了telnet服务,但是不允许任何主机访问,一旦有主机访问就记录到日志中去
库文件/etc/hosts.allow中不定义任何规则
# vim /etc/hosts.deny 
vsftpd: ALL :spawn /bin/echo `date` login attempt from %c to %s, %d >> /var/log/vsftpd.deny.log
//在/etc/hosts.deny定义ALL不允许任何主机访问,然后spawn一个应用程序,记录下来哪个主机在什么时间有登录尝试,
  这里使用到了宏,%c:客户端地址,%s表示服务器端地址,%d表示守护进程daemon
此时用别的主机是无妨访问vsftpd服务的,但是在143中会有日志

练习:控制telnet服务仅允许172.16.0.0网络中的主机访问,但不包括172.16.100.0/255.255.255.0中的主机;

对所有正常登录的主机都记录于/var/log/telnet.allow.log中;

所有未授权访问尝试都记录于/var/log/telnet.deny.log中;

6、tcp_wrapper的更多相关文章

  1. iptables (二) nat & tcp_wrapper

    一.nat 之前网络防火墙的示例中,如果内网是私网地址,那么内网主机如何与外网通信呢? 这时候,iptables要实现内网和外网通信,有两种方式: nat: Network Address Trans ...

  2. Linux中TCP wrapper的使用

    Linux中TCP wrapper的使用 tcpwrapper的目的是对那些访问控制功能较弱的服务提供访问控制功能要想了解访问控制就必须先知道服务监听的概念: 服务监听的两种方式: listen    ...

  3. tcp_wraper&xinetd 和telnet

    一.xinetd简介 1.什么是xinetd xinetd:eXtended InterNET Daemon  扩展的互联网守护程序   xinetd是新一代的网络守护进程服务程序,又叫超级守护进程, ...

  4. Linux 防火墙之TCP Wrappers

      1.TCPWrappers  原理 Telnet.SSH.FTP.POP和SMTP等很多网络服务都会用到TCPWrapper,它被设计为一个介于外来服务请求和系统服务回应的中间处理软件.     ...

  5. 对inetd、xinetd与TCP_Wrapper的基本了解

    在Linux系统中有一个特殊的守护进程inetd(InterNET services Daemon),它用于Internet标准服务,通常在系统启动时启动.通过命令行可以给出inetd的配置文件,该配 ...

  6. 「mysql优化专题」高可用性、负载均衡的mysql集群解决方案(12)

    一.为什么需要mysql集群? 一个庞大的分布式系统的性能瓶颈中,最脆弱的就是连接.连接有两个,一个是客户端与后端的连接,另一个是后端与数据库的连接.简单如图下两个蓝色框框(其实,这张图是我在悟空问答 ...

  7. Linux下TFTP服务的安装、配置和操作

      TFTP是用来下载远程文件的最简单网络协议,它其于UDP协议而实现.嵌入式linux的tftp开发环境包括两个方面:一是linux服务器端的tftp-server支持,二是嵌入式目标系统的tftp ...

  8. Dubbo入门到精通学习笔记(二十):MyCat在MySQL主从复制的基础上实现读写分离、MyCat 集群部署(HAProxy + MyCat)、MyCat 高可用负载均衡集群Keepalived

    文章目录 MyCat在MySQL主从复制的基础上实现读写分离 一.环境 二.依赖课程 三.MyCat 介绍 ( MyCat 官网:http://mycat.org.cn/ ) 四.MyCat 的安装 ...

  9. js-静态、原型、实例属性

    本篇来说一下js中的属性: 1.静态属性 2.原型属性 3.实例属性 静态属性: function klass(){} var obj=new klass(); klass.count=0; klas ...

随机推荐

  1. Eclipse中tomcat更改部署路径 deply path

    默认是部署在项目元数据文件夹.metadata文件夹下,需要更改到tomcat/webapps目录下 Eclipse中tomcat service设置 选择window ----show view-- ...

  2. svn安装使用

    SVN安装使用 获取项目 1.首先新建文件夹.如:测试项目. 2.接着鼠标右键选择:SVN Checkout/SVN 检出 3.在出行的对话框中输入仓库地址.如:svn://198.021.262/2 ...

  3. C# 数值类型和无穷大

    在c#语言中的数字有两个特性要了解.例如:任何数除以0所得的结果是无穷大,不在int long 和decimal类型的范围内.所以计算(一个数除以0会出错),但是在double和float类型中有一个 ...

  4. 微信小程序制作家庭记账本之三

    第三天,学习别人的代码,了解到wxml跟JAVAWEB中的JSP差不太多,可以形成整个页面的轮廓.wxss对每个文本框按钮进行大小颜色修饰.json的作用很是迷惑,也不清楚各种文件是怎样相互作用的.

  5. MyBatis学习(一)简单入门程序

    MyBatis入门学习 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名 ...

  6. Linux基础命令---文本过滤coi

    col 过滤掉影响阅读的控制字符,使用重定向符把说明手册的内容输出到文本文件时,控制字符就成乱码.col指令可以过滤掉控制字符,使文本可读.col从标砖输入读取内容,输出到标准输出.col在读取字符时 ...

  7. 搭建ELK日志分析(亲测无毒!)截图没有附上。。凑合看。搭建出来没有问题

    ( 1 )安装 Logstash 依赖包 JDK Logstash 的运行依赖于 Java 运行环境, Logstash 1.5 以上版本不低于 java 7 推荐使用最新版本的 Java .由于我们 ...

  8. USB概述

    源: USB

  9. 作为php了解一下共享内存的概念及优缺点

    共享内存是一种在相同机器中两个正在运行的进程之间共享和传递数据的有效方式,不同进程之间共享的内存通常安排为同一段物理内存:顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存.一个进程可创建一 ...

  10. 点击button后刷新了页面

    今天遇到一个特别奇怪的事,在页面中使用button标签,添加了点击事件onclic,点击的时候倒是执行了绑定的方法,但页面被刷新了! 什么鬼?我没与提交表单啊! 原来,button默认具有提交表单的动 ...