zoukankan      html  css  js  c++  java
  • iptables 扩展模式

    扩展模块需要调用模块,每个模块前缀都是一样的所以就可以省略不写。

    扩展匹配条件:需要加载扩展模块(/usr/lib64/xtables/*.so),方可生效

    显式扩展:必须显式地指明使用的扩展模块进行的扩展
    使用帮助:
    CentOS 6: man iptables
    CentOS 7: man iptables-extensions

    (1)隐式扩展:在使用-p选项指明了特定的协议时,无需再用-m选项指明扩展模块的扩展机制,不需要手动加载扩展模块

    先使用普通模式允许两个本机和Windows电脑的IP地址访问

    iptables -A INPUT -s 192.168.1.1,127.0.0.1 -j ACCEPT

    拒绝所有IP地址访问(A 是追加呀,就是表示在之前的命令后添加的,也就意味着,这个拒绝所有IP地址的命令,不包括上面的两个IP地址)

    iptables -A INPUT -j REJECT
    

    tcp协议的扩展选项
    [!] --source-port, --sport port[:port]:匹配报文源端口,可为端口范围
    [!] --destination-port,--dport port[:port]:匹配报文目标端口,可为范围
    [!] --tcp-flags mask comp

    在iptables防火墙策略中,在第二条钱插入一条允许192.168.1.6访问本机的80端口,--dport 目的地址

    iptables -I INPUT 2 -s 192.168.1.6 -p tcp --dport 80 -j ACCEPT

    显式扩展:必须使用-m选项指明要调用的扩展模块的扩展机制,要手动加载扩展模块
    [-m matchname [per-match-options]]

    1、针对端口的扩展    multiport扩展

    以离散方式定义多端口匹配,最多指定15个端口
    [!] --source-ports,--sports port[,port|,port:port]...
    指定多个源端口
    [!] --destination-ports,--dports port[,port|,port:port]...
    指定多个目标端口
    [!] --ports port[,port|,port:port]...多个源或目标端口

    dprots是目标端口,sport是源端口 ,prots 是目标地址和源地址

    一次允许或拒绝多个tcp端口地址(-m 指定模块,multiport 可以用逗号隔开不超过15个端口)(可以减少规则的数量)

    iptables -A INPUT -p tcp -m multiport --dports 139,445 -j ACCEPT
    

    一次允许udp的137,138两个端口,连着一起的端口可以用冒号隔开

    iptables -A INPUT -p udp --dport 137:138 -j ACCEPT

    也可以表示连续的端口加不连续的端口

    iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp -m multiport --dports 20:22,80 -j ACCEPT

    2、针对IP地址的 iprange扩展

    指明连续的(但一般不是整个网络)ip地址范围
    [!] --src-range from[-to] 源IP地址范围
    [!] --dst-range from[-to] 目标IP地址范围
    !表示取反

    拒绝192.168.1.8,192.168.1.9,192.168.1.10这多个IP地址访问192.168.1.7

    iptables -A INPUT -d 192.16.1.7 -p tcp -m iprange --src-range 192.168.1.8-192.168.1.10 -j DROP
    

    3、mac扩展

    指明源MAC地址
    适用于:PREROUTING, FORWARD,INPUT chains
    [!] --mac-source XX:XX:XX:XX:XX:XX

    允许00:0c:29:4f:e0:9e这个Mac访问本机,这里不需要定义自己的Mac,除了广播,不是本机的信息是不会到本机的

    iptables -A INPUT -m mac --mac-source 00:0c:29:4f:e0:9e -j ACCEPT
    

    4、string扩展

    对报文中的应用层数据做字符串模式匹配检测
    --algo {bm|kmp} 字符串匹配检测算法
    bm:Boyer-Moore
    kmp:Knuth-Pratt-Morris
    --from offset 开始偏移
    --to offset 结束偏移
    [!] --string pattern 要检测的字符串模式
    [!] --hex-string pattern要检测字符串模式,16进制格式
    示例

    访问主页可以,当访问特定的网页不可以,如test.com,内容包含google

    请求报文里不一定有google,回应报文里有,所以要针对OUTPUT 设置拒绝策略,(不定义源地址和目标地址)使用bm算法,sport 源端口

    iptables -A OUTPUT  -p tcp --sport 80 -m string --algo bm --string "google" -j REJECT
    
    iptables -A OUTPUT -s 192.168.1.7 -d 0/0 -p tcp --sport 80 -m string --algo bm --string "google" -j REJECT
     #定义源地址和目标地址

    一般某些地方访问不了淘宝,优酷之类的,就是这种方式拒绝的,加密就不能分析了,也就不能被这个控制,不过一般都不在本机,而是FORWARD上设置,可以用centos做个防火墙,然后转发上网

    5、time扩展

    根据将报文到达的时间与指定的时间范围进行匹配
    --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 日期
    --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
    --timestart hh:mm[:ss] 时间
    --timestop hh:mm[:ss]
    [!] --monthdays day[,day...] 每个月的几号
    [!] --weekdays day[,day...] 星期几,1 – 7 分别表示星期一到星期日
    --kerneltz:内核时区,不建议使用,CentOS7系统默认为UTC(需要使用当地时间+8)
    注意: centos6 不支持kerneltz ,--localtz指定本地时区(默认)

    定义9点到18点可以访问(-I 插入在INPUT d的第三条前面,因为我第四条定义的是拒绝所有访问)

    timestart 开始时间,timestop结束时间,定义9点-16点不能,这里要定义1.点-8点,因为用的时间是utc时间,需要定义的时间utc+8才是本地时间

    iptables -I INPUT 3 -m time --timestart 1:00 --timestop 10:00 -j ACCEPT
    

    6、connlimit扩展

    根据每客户端IP做并发连接数数量匹配
    可防止Dos(Denial of Service,拒绝服务)攻击 --connlimit-upto #:连接的数量小于等于#时匹配
    --connlimit-above #:连接的数量大于#时匹配
    通常分别与默认的拒绝或允许策略配合使用

    限制连接数

    iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j REJECT

    7、limit扩展

    基于收发报文的速率做匹配
    令牌桶过滤器
    --limit #[/second|/minute|/hour|/day]
    --limit-burst number
    示例:
    iptables -I INPUT -d 172.16.100.10 -p icmp --icmp-type 8 -m limit --limit 10/minute --limit-burst 5 -j ACCEPT
    iptables -I INPUT 2 -p icmp -j REJECT

    针对ICMP协议,每分钟只能通过10个,前五个是不限制的达到这个条件满足

    iptables -I INPUT -p icmp --icmp-type 8 -m limit --limit 10/minute --limit-burst 5 -j ACCEPT
    

    配合下面这条,没满足上面这个条件的全部拒绝

    iptables -I INPUT 2 -p icmp -j REJECT

    8、state扩展

    根据”连接追踪机制“去检查连接的状态,较耗资源
    conntrack机制:追踪本机上的请求和响应之间的关系
    状态有如下几种:
    NEW:新发出请求;连接追踪信息库中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求
    ESTABLISHED:NEW状态之后,连接追踪信息库中为其建立的条目失效之前期间内所进行的通信状态
    RELATED:新发起的但与已有连接相关联的连接,如:ftp协议中的数据连接与命令连接之间的关系
    INVALID:无效的连接,如flag标记不正确
    UNTRACKED:未进行追踪的连接,如raw表中关闭追踪

    允许正在连接我的tcp80端口的继续连接,

    iptables -A INPUT  -p tcp --dport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT
    

    配合下面的命令除了正在连接的,其他都拒绝,在连接状态可以正常使用,断开在连接的话就不行

    iptables -A INPUT -j REJECT
    

    [!] --state state
    示例:
    iptables -A INPUT -d 172.16.1.10 -p tcp -m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -s 172.16.1.10 -p tcp -m multiport --sports 22,80 -m state --state ESTABLISHED -j ACCEPT
    已经追踪到的并记录下来的连接信息库
    /proc/net/nf_conntrack
    调整连接追踪功能所能够容纳的最大连接数量(可以修改)
    /proc/sys/net/nf_conntrack_max
    直接修改这个文件是临时的

    不同的协议的连接追踪时长
    /proc/sys/net/netfilter/
    注意:CentOS7 需要加载模块: modprobe nf_conntrack_ipv4

    解决方iptables的链接跟踪表最大容量为/proc/sys/net/nf_conntrack_max,各种状态的超时链接会从表中删除;当模板满载时,后续连接可能会超时法两个:

    (1) 加大nf_conntrack_max 值
    vi /etc/sysctl.conf
    net.nf_conntrack_max = 393216
    net.netfilter.nf_conntrack_max = 393216
    两个值是相同的

    (2) 降低 nf_conntrack timeout时间
    vi /etc/sysctl.conf
    net.netfilter.nf_conntrack_tcp_timeout_established = 300
    net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
    net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
    net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
    iptables -t nat -L -n

    开放被动模式的ftp服务(只需执行代码块中的代码
    (1) 装载ftp连接追踪的专用模块:
    跟踪模块路径:/lib/modules/kernelversion/kernel/net/netfilter
    vim /etc/sysconfig/iptables-config 配置文件
    IPTABLES_MODULES=“nf_conntrack_ftp"
    modproble nf_conntrack_ftp

    (2) 放行请求报文:
    命令连接:NEW, ESTABLISHED
    数据连接:RELATED, ESTABLISHED
    iptables –I INPUT -d LocalIP -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A INPUT -d LocalIP -p tcp --dport 21 -m state --state NEW -j ACCEPT
    (3) 放行响应报文:
    iptables -I OUTPUT -s LocalIP -p tcp -m state --state ESTABLISHED -j ACCEPT

    1、加载模块

    modprobe nf_conntrack_ftp

    2、针对state协议,ESTABLISHED,RELATED,相关的端口,21端口相关的就是被动端口,只要相关就允许

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

    将上面这个放在允许21端口的前面更好,

    iptables -A INPUT -p tcp --dport 21 -j ACCEPT

    LOG:

    非中断target,本身不拒绝和允许,放在拒绝和允许规则前
    并将日志记录在/var/log/messages系统日志中
    --log-level level 级别: debug,info,notice, warning, error, crit, alert,emerg
    --log-prefix prefix 日志前缀,用于区别不同的日志,最多29个字符
    示例:
    iptables -I INPUT -s 10.0.1.0/24 -p tcp -m multiport --dports 80,21,22,23 -m state --state NEW -j LOG --log-prefix "new connections: "

    只要192.168.1.7这个IP地址访问我,我就记录日志,添加前缀,from 1.6 access

    iptables -A INPUT -s 192.168.1.6 -j LOG --log-prefix "from 1.6 access:"
    

    任何不允许的访问,应该在请求到达时给予拒绝
    规则在链接上的次序即为其检查时的生效次序
    基于上述,规则优化
    1 安全放行所有入站和出站的状态为ESTABLISHED状态连接
    2 谨慎放行入站的新请求
    3 有特殊目的限制访问功能,要在放行规则之前加以拒绝
    4 同类规则(访问同一应用),匹配范围小的放在前面,用于特殊处理
    5 不同类的规则(访问不同应用),匹配范围大的放在前面
    6 应该将那些可由一条规则能够描述的多个规则合并为一条
    7 设置默认策略,建议白名单(只放行特定连接)
    1) iptables -P,不建议
    2) 建议在规则的最后定义规则做为默认策略

    保护iptables 规则,默认重启iptables策略失效

    一、

    iptables-save 保存iptables

    将iptables策略存放在data下

    iptables-save > /data/iptables.rules
    

    通过iptables-restore 将之前保存的规则在重定向到iptables中

    iptables-restore < /data/iptables.rules 

    开机策略不会丢失

    vim /etc/rc.d/rc.local 
    
    iptables-restore < /data/iptables.rules    
    

    添加执行权限,开机自启的文件是没有执行权限的

    chmod +x /etc/rc.d/rc.local 
    

    二、安装服务

    yum install iptables-services -y
    

    这个包和centos7上带的Firewalld 冲突。做之前需要把Firewalld停掉(不建议使用这个)

    启动iptables服务

    systemctl start iptables
    

    规则文件来自

    /etc/sysconfig/iptables

    将自己的规则覆盖掉服务带个规则文件

    iptables-save >/etc/sysconfig/iptables

    将iptables 服务设置为开机自启

    systemctl enable iptables
    

    CentOS 6

    service iptables save

    将规则覆盖保存至/etc/sysconfig/iptables文件中

    ------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------- 博客均为个人笔记,无所追求,仅供参考~~~ QQ--2382990774
  • 相关阅读:
    hadoop学习笔记(一):hadoop集群搭建
    CITA 快速入门
    Oracle数据库常用十一大操作指令
    Shutdown Abort :亚马逊成功迁移物流业务中最后一个Oracle数据库
    从B站源码泄露事件入手,说一下团队协作中版本管理的安全意识
    Docker三剑客:Compose、Machine和Swarm
    TensorFlow学习笔记之图像大小调整(最全可运行的代码)
    面试Python工程师,这几道编码题有必要背背,Python面试题No8
    WFP之位图效果
    使用ScriptX控件进行Web横向打印
  • 原文地址:https://www.cnblogs.com/alexlv/p/14943124.html
Copyright © 2011-2022 走看看