User-Profile-Image
hankin
  • 5
  • centos7
  • docker
  • mysql
  • PostgreSQL
  • git/gitlab
  • ELK
  • python
    • python-Tornado
    • python-django
  • redis
  • nginx
  • kvm
  • proxmox
  • mongo
  • kubernetes
  • prometheus
  • GlusterFs
  • nfs
  • freeswitch
  • httpd
  • shell脚本
  • linux
  • fastdfs
  • nextcloud
  • openssl
  • openvpn
  • rabbitmq
  • sqlite
  • svn
  • java
  • ubuntu
  • vue2
  • wordpress
  • php
  • IOT物联网
  • 项目
  • 故障处理
  • 树莓派
  • 博客存档
  • 未分类
  • 杂项
  • #1742(无标题)
  • 新视野
  • 分类
    • 项目
    • 树莓派
    • 杂项
    • 未分类
    • 新视野
    • 故障处理
    • 博客存档
    • 交换机
    • wordpress
    • vue2
    • ubuntu
    • svn
    • sqlite
    • shell脚本
    • redis
    • rabbitmq
    • python-django
    • python
    • proxmox
    • prometheus
    • PostgreSQL
    • php
    • openvpn
    • openssl
    • nginx
    • nfs
    • nextcloud
    • mysql
    • mongo
    • linux
    • kvm
    • kubernetes
    • java
    • IOT物联网
    • httpd
    • GlusterFs
    • git/gitlab
    • freeswitch
    • fastdfs
    • ELK
    • docker
    • centos7
  • 页面
    • #1742(无标题)
  • 友链
      请到[后台->主题设置->友情链接]中设置。
Help?

Please contact us on our email for need any support

Support
    首页   ›   centos7   ›   正文
centos7

iptables

2022-12-20 15:22:56
893  0 0

Linux的防火墙是内核中的netfilter模块在起作用
iptables优先级最高,是内核级别的,firewalld 防火墙策略优先级次之
主要参考自https://blog.csdn.net/Liang_GaRy/article/details/127383878

centos7安装
yum install iptables
yum install iptables-services
参数
-A 在指定链的末尾添加(append)一条新的规则
-D 删除(delete)指定链中的某一条规则,可以按规则序号和内容删除
-I 在指定链中插入(insert)一条新的规则,默认在第一行添加
-R 修改、替换(replace)指定链中的某一条规则,可以按规则序号和内容替换
-L 列出(list)指定链中所有的规则进行查看
-E 重命名用户定义的链,不改变链本身
-F 清空(flush)
-N 新建(new-chain)一条用户自己定义的规则链
-X 删除指定表中用户自定义的规则链(delete-chain)
-P 设置指定链的默认策略(policy),通常结合sport和dport使用
-Z 将所有表的所有链的字节和数据包计数器清零
-n 使用数字形式(numeric)显示输出结果
-v 查看规则表详细信息(verbose)的信息
-V 查看版本(version)
-h 获取帮助(help)

-m: module_name

-t<表>:指定要操纵的表;filter、nat、mangle、raw,不指定默认使用的是filter表

匹配条件parameter:
    -p:指定要匹配的数据包协议类型;tcp udp ICMP 等
    -s:指定要匹配的数据包源ip地址;
    -j<目标>:指定要跳转的目标;
    -d:<匹配目的地址>–>可以是 IP、 网段、域名,也可以空
    -sport:源端口
        –sport 1000 匹配源端口是1000的数据包
        –sport 1000:1005 匹配源端口是1000-1005的数据包
        –sport 1000: 匹配源端口从1000开始的流量
        –sport :1005 匹配源端口从1005端口结束的流量
    -dport:目的端口
        –dport 80 匹配目的端口是 80 的数据包
        –dport 6000:8000 匹配目的端口是 6000-8000 的数据包(含6000、8000)
        –dport :3000 匹配目的端口是 3000 以下的数据包(含 3000)
        –dport 1000: 匹配目的端口是 1000 以上的数据包(含 1000)
    注意:–sport 和 --dport 必须配合 -p 参数使用

    -i<网络接口>:指定数据包进入本机的网络接口;
    -o<网络接口>:指定数据包要离开本机所使用的网络接口。
按照模块来匹配
按包状态匹配 (state)
按来源 MAC 匹配(mac)
按包速率匹配 (limit)
多端口匹配 (multiport)
按照包袱状态匹配(state)
-m state --state 状态
 #iptables -A INPUT -m state --state PELATED,ESTABLISHED -j ACCEPT
状态:NEW、RELATED、ESTABLISHED、INVALID
NEW:有别于 tcp 的 syn ;如果我们发送一个流的初始化包,状态就会在OUTPUT链 里被设置为NEW,当我们收到回应的包时,状态就会在PREROUTING链里被设置为ESTABLISHED。如果第一个包不是本地产生的,那就会在PREROUTING链里被设置为NEW状 态。
ESTABLISHED:连接态
RELATED:衍生态,与 conntrack 关联(FTP)
INVALID:不能被识别属于哪个连接或没有任何状态

四个状态的讲解:

    NEW NEW说明这个包是我们看到的第一个包。意思就是,这是conntrack模块看到的某个连接第一个包,它即将被匹配了。比如,我们看到一个SYN 包,是我们所留意的连接的第一个包,就要匹配它。第一个包也可能不是SYN包,但它仍会被认为是NEW状态。这样做有时会导致一些问题,但对某些情况是有非常大的帮助的。例如,在 我们想恢复某条从其他的防火墙丢失的连接时,或者某个连接已经超时,但实际上并未关闭时。
    ESTABLISHED ESTABLISHED已经注意到两个方向上 的数据传输,而且会继续匹配这个连接的包。处于ESTABLISHED状态的连接是非常容易理解的。只要发送并接到应答,连接就是ESTABLISHED的了。一个连接要从NEW变 为ESTABLISHED,只需要接到应答包即可,不管这个包是发往防火墙的,还是要由防 火墙转发的。ICMP的错误和重定向等信息包也被看作是ESTABLISHED,只要它们是我 们所发出的信息的应答。
    RELATED RELATED是个比较麻烦的状态。当一 个连接和某个已处于ESTABLISHED状态的连接有关系时,就被认为是RELATED的了。换句话说,一个连接要想是RELATED的,首先要有一个ESTABLISHED的连接。这个ESTABLISHED连接再产生一个主连接之外的连接,这 个新的连接就是RELATED的了,当然前提是conntrack模块要能理解RELATED。ftp是个很好的例子,FTP-data 连接就是和FTP-control有RELATED的。还有其他的例子,比如,通过IRC的DCC连接。有了这个状态,ICMP应答、FTP传输、DCC等才能穿过防火墙正常工作。注意,大部分还有一些UDP协议都依赖这个机制。这些协议是很复杂的,它们把连接信息放在数据包里,并且要求这些信息能被正确理解。
    INVALID INVALID说明数据包不能被识别属于 哪个连接或没有任何状态。有几个原因可以产生这种情况,比如,内存溢出,收到不知属于哪个连接的ICMP 错误信息。一般地,我们DROP这个状态的任何东西。
按来源MAC匹配(mac)
-m mac –mac-source MAC
匹配某个MAC地址

iptables -A FORWARD -m mac --mac-source xxxxxxxx -j DROP
#阻断某个来自某MAC地址的数据包,通过本机
注意:
    报文经过路由后,数据包中原有的 mac 信息会被替换,所以在路由后的 iptables 中使用 mac 模块是没有意义的;
按照包的速率来匹配(limit)
-m limit –limit 匹配速率【–burst 缓冲数量】
用一定速率去匹配数据包
iptables -A FORWARD -d 192.168.75.131 -m limit --limit 50/s -j ACCEPT

注意:
limit 英语上看是限制的意思,但实际上只是按一定速率去匹配而已,50/s表示1秒中转发50个数据包,要想限制的话后面要再跟一条 DROP
多端口匹配(multiport)
-m multiport < –sports| -dports|–ports> 端口1【端口2…端口n】
一次性匹配多个端口,可以区分源端口、目的端口或者不指定端口
iptables -A INPUT -p tcp -m multiport --dports 192.168.75.131 -j ACCEPT

注意:
    如果使用-m multiport参数的话一定要和-p指定协议使用
iptables命令选项输入顺序
iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作

不知道表名时,默认为filter表

五表:
    filter表:负责过滤功能,确认是否放行该数据包;内核模块:iptables_filter
    nat表:网络地址转换功能,修改数据包中的源、目标IP或端口;内核模块iptables_nat
    mangle表:拆解报文、做出修改,并重新封装,为数据包设置标记;iptable_mangle
    raw表:确认是否对该数据包进行状态追踪,关闭nat表上启动的连接追踪机制;iptable_raw
    security表:是否定义强制访问控制规则(MAC)。

规则表的优先级:raw->mangle->nat->filter

五链,规则链名包括:
    INPUT链:处理输入数据包。
    OUTPUT链:处理输出数据包。
    PORWARD链:处理转发数据包。
    PREROUTING链:用于目标地址转换(DNAT)。
    POSTOUTING链:用于源地址转换(SNAT)。

动作:
    accept:接收数据包。
    DROP:丢弃数据包。
    reject:拒绝
    REDIRECT:重定向、映射、透明代理。
    SNAT:源地址转换。
    DNAT:目标地址转换。
    MASQUERADE:IP伪装(NAT),用于ADSL。
    LOG:日志记录。
语法示例
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT               #允许本地回环接口(即运行本机访问本机)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT    #允许已建立的或相关连的通行
iptables -A OUTPUT -j ACCEPT         #允许所有本机向外的访问
iptables -A INPUT -p tcp --dport 22 -j ACCEPT    #允许访问22端口
iptables -I INPUT 2 -p tcp --dport 22 -j DROP
iptables -A INPUT -p tcp --dport 80 -j ACCEPT    #允许访问80端口
iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT #允许192.168.0.3访问22端口
iptables -A INPUT -m set --match-set china src -p tcp -m tcp  -j ACCEPT
iptables -A INPUT -m set --match-set china src -p udp -m udp  -j ACCEPT
iptables -I INPUT -m set --match-set china src  -j ACCEPT
iptables -A INPUT -j reject       #禁止其他未允许的规则访问
iptables -A FORWARD -j REJECT     #禁止其他未允许的规则访问

iptables -I INPUT -s 123.45.6.7 -j DROP       #屏蔽单个IP的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP      #封整个段即从123.0.0.1到
iptables -I INPUT -s 192.168.10.1 -p icmp -j REJECT# 拒绝 指定ip 指定协议 ,立即生效
iptables -I INPUT -s 192.168.10.1 -p tcp --dport 22 -j REJECT # 拒绝 指定ip 指定端口号 ,立即生效
iptables -I INPUT -s 192.168.0.0/24 -p tcp --dport 1000:1010 -j REJECT ## 拒绝 指定网段 指定端口范围 ,立即生效

iptables -A INPUT -j DROP #加到最后一条,拒绝所有

iptables -F        清除预设表filter中的所有规则链的规则 #-F 仅仅是清空链中规则,并不影响 -P 设置的默认规则
iptables -X        清除预设表filter中使用者自定链中的规则
iptables -Z        把所有链的包及字节的计数器清空

iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 20022 -j ACCEPT
    iptables -m tcp:表示使用TCP模块的扩展功能(tcp扩展模块提供了 --dport, --tcp-flags, --sync等功能)
保存设置
不保存的话,重启会丢失
iptables-save
service iptables save

#iptables-save > iptables_bckp
#iptables-restore < iptables_bckp

规则保存位置 /etc/sysconfig/iptables

cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak
#手动备份
iptables查看所有规则
因此,要完整展示netfilter规则,您需要
iptables -vL -t filter
iptables -vL -t nat
iptables -vL -t mangle
iptables -vL -t raw
iptables -vL -t security
设置默认策略
-P 设置指定链的默认策略

默认是允许,设置默认拒绝策略,!!!注意设置后会立即丢失远程连接
iptables -P INPUT DROP

设置默认允许策略
iptables -P INPUT ACCEPT
开启iptables,网络明显变慢ssh变慢
iptables -I INPUT -p udp --sport 53 -j ACCEPT
iptables -I INPUT -p tcp --sport 53 -j ACCEPT
或修改/etc/ssh/sshd_config,把UseDNS yes,改为UseDNS no
评论 (0)

点击这里取消回复。

欢迎您 游客  

Copyright © 2025 网站备案号 : 蜀ICP备2022017747号
smarty_hankin 主题. Designed by hankin
主页
页面
  • #1742(无标题)
博主
tang.show
tang.show 管理员
linux、centos、docker 、k8s、mysql等技术相关的总结文档
213 文章 2 评论 202434 浏览
测试
测试