zoukankan      html  css  js  c++  java
  • Linux学习笔记(17)Linux防火墙配置详解

    【1】简单实例

    【1.1】查看修改目前防火墙状态

    service iptables status 

    修改防火墙规则

      下面的配置是让端口为80 和8080 的设备放行,不用过防火墙

      输入  vim  /etc/sysconfig/iptables

    【2】实例分析

    -A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT

    【2.1】基本释义

    参数 释义
    -A 追加,在当前链的最后新增一个规则
    input

    input =>filter #目的ip是本机的数据包
    ouput =>filer #从本机出去的数据包
    forward =>filter #穿过本机的数据包
    prerouting =>nat #修改目的地址(DNAT)
    postrouting =>nat #修改源地址(SNAT)

    -p 使用某种协议,比如:-p icmp --icmp-type #协议类型
    --dport  指定目标端口,不能指定多个非连续端口,只能指定单个端口,比如: --dport 21  或者 --dport 21-23 (此时表示21,22,23)
    --sport 指定源端口,同上
    --tcp-fiags

    TCP的标志位(SYN,ACK,FIN,PSH,RST,URG),一般跟2个参数(1.检查的标志位  2.必须为1的标志位)

    比如:--tcpflags syn,ack,fin,rst syn   =    --syn 表示检查这4个位,这4个位中syn必须为1,其他的必须为0。

    所以这个意思就是用于检测三次握手的第一次包的。对于这种专门匹配第一包的SYN为1的包,还有一种简写方式,叫做--syn

    -m 表示启用多端口扩展,之后我们就可以启用比如 --dports 21,23,80   
    --state 指定要匹配数据包的状态,一共有4种状态可以使用:INVALID、ESTABLISHED、NEW和RELATED。这个匹配操作必须由-m state明确指定才能使用
    ACCEPT | REJECT 允许符合条件的数据包通过 | 拒绝复合条件的数据包通过
    -s 来源地址,比如:-s 192.168.1.0/24 
    -d 目标地址,比如:-d 127.0.0.1/24
    -j 选项指定规则的目标, 目标可以是用户自定义链;内建目标;或扩展

    【2.2】最佳实践案例

    功能实现 代码
    # 允许包从22端口进入 iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    # 允许从22端口进入的包返回 iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
    # 允许包用udp协议从53端口返回 iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
    # 允许包用udp协议从源53端口进入 iptables -A INPUT -p udp --sport 53 -j ACCEPT
    # 允许本机访问本机

    iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

    iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

    #允许所有IP访问80端口

    iptables -A INPUT -p tcp -s 0/0 --dport 80 -j ACCEPT

    iptables -A OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

       
       
       

    【2.3】防火墙常用命令

    Centos6 使用的是iptables ,Centos7 使用的是filewalld

    命令 释义
    /etc/sysconfig/iptables | /etc/firewalld/ 防火墙的配置文件位置
    service iptables status | systemctl status firewalld 查看防火墙服务进程状态
       
       
       
       
       
       
       

    【3】Centos7常用操作

    centos7系统使用firewalld服务替代了iptables服务,但是依然可以使用iptables来管理内核的netfilter. 事实上firewall rules 防火墙的规则 其实就是保存在 /etc/sysconfig/iptables。

    查看防火墙状态

    # firewall-cmd --state

    running

    默认情况下,firewalld 处于运行状态,并拒绝所有传入流量,但有几个例外,如 SSH。

    在centos 7下启用iptables
    
    systemctl stop firewalld.service
    
    systemctl disable firewalld.service
    
    yum install iptables-services -y
    
    systemctl enable iptables
    
    systemctl start iptables
    
    编辑ipatbles的规则
    
    vim /etc/sysconfig/iptables
    
    重启iptables服务
    
    service iptables restart

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------

    备注:持久化修改规则可以直接改iptables文件也可以使用iptables命令添加然后使用service iptables save命令保存。由于iptables规则是自上而下匹配,所以添加的所有的规则都必须在以下两个默认规则之前,理想方法是修改/etc/sysconfig/iptables文件,直接添加规则 。

    -A INPUT -j REJECT --reject-with icmp-host-prohibited
    -A FORWARD -j REJECT --reject-with icmp-host-prohibited
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------

    查看状态: /etc/init.d/iptables status
    关闭: /etc/rc.d/init.d/iptables stop
    启动: /etc/rc.d/init.d/iptables start
    重启: /etc/rc.d/init.d/iptables restart

    iptables -I 和 iptables -A 区别:防火墙由上往下匹配,-A 会将后执行的策略添加到已有策略后,而-I 则会插入到已有策略的前(既成为第一条策略)。

    屏蔽接入请求流量 //test OK

    ptables -I INPUT -s 124.115.0.199 -j DROP      
    是屏蔽124.115.0.199这个IP 
    
    iptables -I INPUT -s 124.115.0.0/16 -j DROP      
    是屏蔽124.115.*.*这段IP 就是124.115开头的IP 
    
    iptables -I INPUT -s 61.37.80.0/24 -j DROP      
    是屏蔽61.37.80.*这段IP  意思就是61.37.80开头的IP 
    
    iptables -I INPUT -s 124.0.0.0/8 -j DROP      
    是屏蔽124.*.*.*这段IP  意思就是124开头的IP
    
    取消屏蔽
    iptables -D INPUT -s 124.0.0.0/8 -j DROP  //test OK
       只要把I 改为 D就好了,然后后面可以写IP或者IP段
       希望这个linux屏蔽IP的命令教程可以帮助到大家


    1、安装iptables防火墙

    CentOS执行:yum install iptables
    Debian/Ubuntu执行:apt-get install iptables

    2、清除已有iptables规则  //test OK

    iptables -F 清除预设表filter中的所有规则链的规则
    iptables -X 清除预设表filter中使用者自定链中的规则
    iptables -Z

    3、开放指定的端口

    #开放一个IP的特定端口
    iptables -A INPUT -s 192.168.0.5 -p tcp --dport 1024:65535 -j ACCEPT
    #允许本地回环接口(即运行本机访问本机) 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
    # 允许访问22端口 iptables
    -A INPUT -p tcp –dport 22 -j ACCEPT
    #允许访问80端口 iptables
    -A INPUT -p tcp –dport 80 -j ACCEPT
    #允许FTP服务的21和20端口 iptables
    -A INPUT -p tcp –dport 21 -j ACCEPT iptables -A INPUT -p tcp –dport 20 -j ACCEPT
    #如果有其他端口的话,规则也类似,稍微修改上述语句就行
    #禁止其他未允许的规则访问 iptables
    -A INPUT -j REJECT iptables -A FORWARD -j REJECT

    4、屏蔽IP

    #如果只是想屏蔽IP的话3、“开放指定的端口”可以直接跳过。
    #屏蔽单个IP的命令是
    iptables -I INPUT -s 123.45.6.7 -j DROP
    #封整个段即从123.0.0.1到123.255.255.254的命令
    iptables -I INPUT -s 123.0.0.0/8 -j DROP
    #封IP段即从123.45.0.1到123.45.255.254的命令
    iptables -I INPUT -s 124.45.0.0/16 -j DROP
    #封IP段即从123.45.6.1到123.45.6.254的命令是
    iptables -I INPUT -s 123.45.6.0/24 -j DROP

    4、查看已添加的iptables规则

    iptables -L -n
    v:显示详细信息,包括每条规则的匹配包数量和匹配字节数
    x:在 v 的基础上,禁止自动单位换算(K、M)
    n:只显示IP地址和端口号,不将ip解析为域名

    5、删除已添加的iptables规则

    将所有iptables以序号标记显示,执行:
    
    iptables -L INPUT --line-number
    比如要删除INPUT里序号为1的规则,执行:
    iptables -D INPUT 1

    6、iptables的开机启动及规则保存

    chkconfig –level 345 iptables on
    CentOS上可以执行:service iptables save保存规则
    
    1、永久生效
    开启:chkconfig iptables on
    关闭:chkconfig iptables off
    2、即时生效,重启后失效
    开启:service iptables start
    关闭:service iptables stop

    --------------------- 
    作者:Lion Li 
    来源:CSDN 
    原文:https://blog.csdn.net/weixin_40461281/article/details/83008976 
    版权声明:本文为博主原创文章,转载请附上博文链接!
    ————————————————
    版权声明:本文为CSDN博主「roshy」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/roshy/article/details/88972148

    【4】其他参考

    打开终端
    cd /java/tomcat
    #执行
    bin/startup.sh #启动tomcat
    bin/shutdown.sh #停止tomcat
    tail -f logs/catalina.out #看tomcat的控制台输出;

    #看是否已经有tomcat在运行了
    ps -ef |grep tomcat
    #如果有,用kill;
    kill -9 pid #pid 为相应的进程号

    例如 ps -ef |grep tomcat 输出如下

    ------------------
    input =>filter #目的ip是本机的数据包
    forward =>filter #穿过本机的数据包
    prerouting =>nat #修改目的地址(DNAT)
    postrouting =>nat #修改源地址(SNAT)

    iptables -t 要操作的表 操作命令 要操作的链 规则号码 匹配条件 -j 匹配到以后的命令
    iptables -I INPUT -j DROP #-t 默认为filter
    iptables -I INPUT 3 -j DROP #链接里插入一条规则(插入第三条)

    iptables -D INPUT 3 #按号码匹配删除
    iptables -D INPUT -s 192.168.0.1 -j DROP #按内容匹配删除

    iptables -R INPUT 3 -j ACCEPT #将原来3的规则改为-j ACCEPT

    iptables -P INPUT DROP #设置默认规则

    iptables -F INPUT #清空filter表INPUT链中的所有规则
    iptables -t nat -F PREROUTING
    iptables -t nat vxnL PREROUTING
    --# v: 显示详细信息
    --# x: 在v的基础上,禁止自动单位换算
    --# n: 只显示IP地址和端口号码,不显示域名和服务名称
    ========匹配条件
    -i -i eth0 #流入接口(是否从网口eth0进来)
    -o #流出接口
    -s -s 192.168.1.0/24 #来源地址
    -d #目的地址
    -p -p icmp --icmp-type #协议类型
    --sport --sport 1000:3000 #来源的端口
    --dport --dport 1000: :3000 #目的的端口1000:(1000端口以上) :3000(3000端口以下)

    -s 192.168.0.1 -dwww.sina.com-p tcp -dport 80
    ================================
    iptables -A INPUT -j ACCEPT #允许所有访问本机IP的数据包通过
    iptables -A FORWARD -s 192.168.0.1 -j DROP #阻止来源地址为192.168.80.39的数据包通过本机

    -j DNAT #目的地址转换,DNAT支持转换为单IP,也支持转换到IP址


    iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.0.3:80
    #把从ppp0进来的要访问tcp/80的数据包的地址改为192.168.0.3

    -j SNAT #源地址转换
    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1
    #将内网192.168.0.0/24的源地址改为1.1.1.1,用于nat表
    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1-1.1.1.10
    #修改成为一个地址池

    -j MASQUERADE #动态源地址转换
    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
    #将源地址为192.168.0.0/24的数据包进行地址伪装

    ===================附加模块
    state #按包状态匹配
    mac #按来源mac匹配
    limit #按包速率匹配
    multiport #多端口匹配

    --state
    -m state #new,related,established,invalid
    iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    #包状态 RELATED(衍生态),ESTABLISHED(连接态),NEW(有别于tcp的syn),INVALID(不被识别的)
    iptables -A FORWARD -m mac --mac-source XX:XX:XX:XX:XX:XX -j DROP
    #阻断来自某MAC地址的数据包通过本机
    iptables -A FORWARD -d 192.168.0.1 -m limit --limit 50/s -j ACCEPT
    #用一定速率去匹配数据包
    iptables -A INPUT -p tcp -m multiport --dports 21,22,25,80,110 -j ACCEPT
    #一次匹配多个端口


    =======================================实例分析===================================
    单服务器的防护:
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A INPUT -p tcp -m multiport --dport 22,80 -j ACCEPT
    iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    iptables -P INPUT DROP
    制作网关:
    echo "1" > /proc/sys/net/ipv4/ip_forward #启用路由转发
    iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE
    限制内网用户:filter->forward
    iptables -A FORWARD -s 192.168.0.3 -j DROP
    iptables -A FORWARD -m mac --mac-source 11:22:33:44:55:66 -j DROP
    iptables -A FORWARD -dwww.163.com-j DROP
    内网做对外服务器:
    iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.1.1
    iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 81 -j DNAT --to 192.168.1.2:80

    ========================================连接追踪模块=================================
    主动模式(ACTIVE)
    使用连接追踪模块(打开tcp/20,防火墙打开高范围端口,配置ftp,减小被动模式端口范围)
    modprobe ip_nat_ftp
    iptables -A INPUT -p tcp --dport 21 -j ACCEPT
    iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    iptables -P INPUT DROP
    被动模式(PASSIVE)

    =============================网关策略=================================
    echo "1" > /proc/sys/net/ipv4/ip_forward
    echo "1" > /proc/sys/net/ipv4/tcp_syncookies
    echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
    modprobe ip_nat_ftp

    堵:
    iptables -A FORWARD -p tcp --dport 80 -j DROP
    iptables -A FORWARD -p tcp --dport yyy:zzz -j DROP
    通:
    iptables -A FORWARD -p tcp --dport xxx -j ACCEPT
    iptables -A FORWARD -p tcp --dport yyy:zzz -j ACCEPT
    iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
    iptables -P FORWARD DROP

    ==========================三大纪律五项注意=============================
    3: filter nat mangle
    5: prerouting,input,forward,output,postrouting

    ==========================注意事项==============================
    #养车好的习惯
    iptables -vnL
    iptables -t nat -vnL
    iptables-save
    #注意逻辑顺序
    iptables -A INPUT -p tcp --dport xxx -j ACCEPT
    iptables -I INPUT -p tcp --dport yyy -j ACCEPT

    ==========================FAQ======================================
    iptables -m 模块名 -h
    /lib/modules/`uname -r`/kernel/net/ipv4/netfilter #模块存放的路径
    modprobe ip_nat_ftp #加载模块

    =========================实战======================================
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A INPUT -i eth1 -p tcp --dport 22 -j ACCEPT
    iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    iptables -P INPUT DROP
    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 j SNAT --to 202.106.0.254

    iptables -t nat -A POSTROUTING -d 202.106.0.254 -p tcp --dport 80 -j DNAT --to 172.17.0.1
    iptables -A FORWARD -i eth2 -p eth1 -m state --state NEW -j DROP

  • 相关阅读:
    A magic method allowing a third variable used in comparison function of std::sort
    Create a wireframe box in rviz but not using any other extra tools (unfinished)
    Three methods to iterate every point in pointcloud of PCL(三种遍历点云的方式)
    Environment Perception: 3D Truss Environment Mapping and Parametric Expression Extraction
    shell脚本练习02--求字符串的长度
    shell脚本练习01
    shell脚本,循环的记录
    linux 备份最近一天的文件
    mybatis和java一些知识记录
    第8章
  • 原文地址:https://www.cnblogs.com/gered/p/12329291.html
Copyright © 2011-2022 走看看