# CentOS的iptables防火墙

  1. # 安装iptables服务

    yum install iptables-services
    
  2. # 启动服务

    systemctl start iptables
    #或
    servcie iptables start
    
  3. # 设置开机启动

    systemctl enable iptables
    

    注意:如果有firewalld已开机启动,先禁用firewalld,systemctl disable firewalld

  4. # 定义规则(方法一)

    • # 命令定义常规规则

      #删除所有规则(最好先备份) -F(flush)
      iptables -F
      #删除用户定义的规则(delete-chain)
      iptables -X
      #重置规则计数器(zero)
      iptables -Z
      
      #允许本机访问规则(常规)
      iptables -A INPUT -i lo -j ACCEPT 
      #或 iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
      
      #允许已建立或相关连的访问
      iptables -A INPUT -m state --state RELATED,ESTABLISHED -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 20 -j ACCEPT
      iptables -A INPUT -p tcp --dport 21 -j ACCEPT
      
      #禁止未允许的规则访问
      iptables -A INPUT -j REJECT
      iptables -A FORWARD -j REJECT
      
      #限制某个IP访问
      iptables -I INPUT -s 192.168.2.7 -j DROP
      #限制192.168.2.1-192.168.2.254IP段
      iptables -I INPUT -s 192.168.2.0/24 -j DROP
      
      

      注意

      1. iptables -A :A选项,即是append,一般只在第一次定义规则时用,会在尾部追加。
      2. iptables -I:增加规则要用I,即是insert,会在头部插入。
    • # 显示所有的规则

      iptables -L -n
      
    • # 根据序号删除规则

      #先用带序号方式显示规则
      iptables -L -n --line-numbers
      #删除INPUT里13序号的规则
      iptables -D INPUT 13
      
    • # 持久化规则

      注:即把规则写入文件,用iptables命令修改的规则只在内存里,重启后会失效。

      #把规则从内存里写入/etc/sysconfig/iptables
      service iptables save
      #或者用以下命令写入
      iptable-save >/etc/sysconfig/iptables
      
  5. # 定义规则(方法二)

    • # 直接修改规则文件

      规则保存在/etc/sysconfig/iptables文件里

      vim /etc/sysconfig/iptables
      

    1564625803929

    • # 重启iptables

      systemctl restart iptables.service
      #或
      service iptables restart
      

      注意:如果防火墙规则保存在其它文件,例如保存在/etc/sysconfig/iptables.old,则用以下命令恢复iptables-restore < /etc/sysconfig/iptables.old

  6. # 最佳实践

    • iptables running

      #把内存里的规则写到一个文件里
      iptables-save > /etc/sysconfig/iptables.now
      #编辑新规则文件
      vim /etc/sysconfig/iptables.now
      #加载新规则文件
      iptables-restore < /etc/sysconfig/iptables.now
      
    • iptables stop

      #备份旧的规则
      cp /etc/sysconfig/iptables /etc/sysconfig/iptables.old_stop
      #编辑规则文件
      vim /etc/sysconfig/iptables
      #重启加载规则文件
      systemctl restart iptables
      

      总结:

      1. 把规则写在一个新文件里,用iptables-restore加载。
      2. 或者把旧的规则文件先备份,编辑规则文件,重启 iptables