zoukankan      html  css  js  c++  java
  • Linux iptables常用命令的使用

    为什么会有本文

    因为最近帮一个朋友布署一个上网梯子,他那边本来用的是v2ray,但是他想用ssr,但是安装配置ssr过程中出了很多问题,比如linux内核版本4.9有点老,不支持bbr加速、无法连接socket、启动了连接不上等一系列问题,趁着有时间,就帮他看看,帮他升级了内核,改的防火墙…… 在修改防火墙的时候,发现iptables中的知识点好多,既然碰到了,就稍微记一点常用的用法,以待查验。

    主要内容

    语法:

    iptables (选项) (参数)
    

    iptables命令选项输入顺序:

    iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作
    

    参数说明:

    表名包括

    • raw:高级功能,如:网址过滤。
    • mangle:数据包修改(QOS),用于实现服务质量。
    • net:地址转换,用于网关路由器。
    • filter:包过滤,用于防火墙规则。

    规则链名包括

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

    动作包括

    • ACCEPT:接收数据包。

    • DROP:丢弃数据包。

    • REDIRECT:重定向、映射、透明代理。

    • SNAT:源地址转换。

    • DNAT:目标地址转换。

    • MASQUERADE:IP伪装(NAT),用于ADSL。

    • LOG:日志记录。

    常用命令

    查看现在iptables规则:

    iptables -L -n -v
    

    清空配置:

    iptables -F #清楚规则链中已有的条目;使用iptables -F 要小心,搞不好,你就马上同服务器断开连接了
    iptables -X #删除没有用户配置文件相关的chain
    iptables -Z #清空规则链中的数据包计算器和字节计数器;
    

    使用清空配置要小心,可参考https://blog.csdn.net/ingiaohi/article/details/70559425

    用规则配置:

    #配置,禁止进,允许出,允许回环网卡
    iptables -P INPUT DROP
    iptables -A OUTPUT -j ACCEPT
    iptables -A INPUT -i lo -j ACCEPT
    #允许ping
    iptables -A INPUT -p icmp -j ACCEPT
    #允许ssh
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    #允许ftp
    iptables -A INPUT -p tcp --dport 21 -j ACCEPT
    iptables -A INPUT -p tcp --dport 20 -j ACCEPT
    #允许ftp被动接口范围,在ftp配置文件里可以设置
    iptables -A INPUT -p tcp --dport 20000:30000 -j ACCEPT
    #学习felix,把smtp设成本地
    iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT -s 127.0.0.1
    iptables -A INPUT -p tcp -m tcp --dport 25 -j REJECT
    #允许DNS
    iptables -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
    iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT
    #允许http和https
    iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    iptables -A INPUT -p tcp --dport 443 -j ACCEPT
    #允许已建立的或相关连的通行
    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    #禁止其他未允许的规则访问
    iptables -A INPUT -j REJECT #(注意:如果22端口未加入允许规则,SSH链接会直接断开。)
    iptables -A FORWARD -j REJECT
    

    屏蔽ip——使用-I参数

    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到123.255.255.254的命令
    iptables -I INPUT -s 124.45.0.0/16 -j DROP    #封IP段即从123.45.0.1到123.45.255.254的命令
    iptables -I INPUT -s 123.45.6.0/24 -j DROP    #封IP段即从123.45.6.1到123.45.6.254的命令是
    

    删除已添加的iptables规则——使用-D参数

    #假设之前用iptables -A INPUT -s 192.168.1.4 -j DROP 添加的规则
    iptables -D INPUT -s 192.168.1.4 -j DROP
    #或者
    #查出当前规则的列表,使用当前列表下的序号:由下至下顺序
    iptables -D INPUT 3 #这里是删除第三条
    

    修改规则——使用-R参数

    #假设之前用iptables -A INPUT -s 192.168.1.4 -j DROP 添加的规则
    iptables -R INPUT -s 192.168.1.4 -j DROP
    #或者
    #查出当前规则的列表,使用当前列表下的序号:由下至下顺序
    iptables -R INPUT 3 -j ACCEPT
    

    规则永久生效:包括重启

    service iptables save #保存
    service iptables restart #重启iptables防火墙
    

    备份与还原

    #保存配置
    iptables-save > /etc/iptables #(注意:后边这个文件路径可以自选)
    #还原配置
    iptables-restore < /etc/iptables #(注意:后边这个文件路径可以自选,要是前边备份文件的位置)
    

    关于不重启规则不生效的解决

    使用iptables命令操作的规则仅对当前会话有效,规则存在于内存中,如果重启就会丢失规则,上边提到永久生效的方法,经测试debian下没有成功,所以这里额外记述一些解决方案

    本方法的原理是使用重启后系统会扫描并执行指定文件夹下的脚本,在脚本内执行还原之前保存的规则文件

    step1

    #保存规则
    iptables-save > /etc/iptables/iptables-script
    

    step2

    #在/etc/network/if-pre-up.d目录下创建脚本
    vim /etc/network/if-pre-up.d/auto_restore_iptables
    

    step3

    #添加如下内容,其中后边的路径为保存的规则文件路径
    #!/bin/sh
    /sbin/iptables-restore < /etc/iptables/iptables-script
    #保存退出
    

    step4

    #为脚本添加可执行权限
    sudo chmod +x /etc/network/if-pre-up.d/auto_restore_iptables
    

    至此,已经完成开机自动还原规则的操作了


    那么增、删、改等操作就简单了

    #1.使用命令修改规则
    #2.保存规则
    iptables-save > /etc/iptables/iptables-script
    

    --End--

    本文内容来自网络,如有雷同,不胜荣幸

  • 相关阅读:
    选择排序
    转:ASP.NET MVC中Unobtrusive Ajax的妙用
    转:MVC 下导航超链接本页面高亮的一种解决方案
    转载:iOS 推送的服务端实现
    转载:Unobtrusive JavaScript in ASP.NET MVC 3 隐式的脚本在MVC3
    待实践三:MVC3下 路由的测试 使用 RouteDebug.dll 来测试判断路由是否符合
    待实践二:MVC3下的3种验证 (1)前台 jquery validate验证 (2)MVC实体验证 (3)EF生成的/自己手写的 自定义实体校验(伙伴类+元素据共享)
    待实践一:仿造博客园后台上传头像并切图生成缩略图fine uploader.js jcrop.js
    Jquery 模板插件 jquery.tmpl.js 的使用方法(1):基本语法,绑定,each循环,ajax获取json数据
    Linq 时间对比陷阱坑
  • 原文地址:https://www.cnblogs.com/hellxz/p/9688044.html
Copyright © 2011-2022 走看看