标签: Iptables

  • Debian/Ubuntu/Centos 设置防火墙仅允许Cloudflare的ip访问80 443端口 脚本解决方案 图文教程

    Debian/Ubuntu/Centos 设置防火墙仅允许Cloudflare的ip访问80 443端口 脚本解决方案 图文教程

    背景

    最近网站被疯狂CC,很不幸的源站IP被暴露。在使用了cloudflare防护盾的情况下,攻击者直接打IP:443端口导致VPS资源被耗尽。

    解决方案

    配置UFW防火墙,只放行cloudflare的IP。其余的一律禁止。

    使用下面的脚本可以方便的将cloudflare IP加入VPS的防火墙白名单中。

    github下载地址:https://raw.githubusercontent.com/okoklai/studes/master/cfip.sh

    #!/bin/bash
    if !command -v ufw >/dev/null 2>&1; then
    echo "UFW not found! please install it from your package manager!"
    echo "For RHEL/CentOS/Fedora, use yum install ufw."
    echo "For Ubuntu/Debian/Proxmox VE, use apt install ufw."
    echo "Don't forgot to allow your ssh port before enable UFW!"
    echo "When you finished it, just use command ufw enable to enable it!"
    exit 1
    fi
    for line in `curl https://www.cloudflare.com/ips-v4`
    do
      echo "Reading $line from CloudFlare's offical ip list."
      ufw allow from $line to any port 80
      ufw allow from $line to any port 443
    done
    for line in `curl https://www.cloudflare.com/ips-v6`
    do
      echo "Reading $line from CloudFlare's offical ip list."
      ufw allow from $line to any port 80
      ufw allow from $line to any port 443
    done

    此脚本只会设置固定ip允许访问80、443端口,其他的ufw设置不会修改。

  • Vultr VPS 安装了Debian系统后如何修改iptables规则配置 图文教程

    Vultr VPS 安装了Debian系统后如何修改iptables规则配置 图文教程

    前面的文章我们讲述了Debian9系统如何修改SSH端口 图文教程,这里讲述一下我们在购买Vultr(Vultr 优惠活动 注册即送$50美金,16个机房可选,按时计费)之后如何修改完了SSH之后将规则添加到iptables中。

    我们这里就将ssh修改成19521然后如何将规则添加到iptables中为例。

    下面我们用iptables-save命令将配置好的iptables的规则保存到/etc/local/iptables/rules.v4.1.save文件

    导出现有的规则

    iptables-save > /etc/iptables/rules.v4.save

    修改规则配置文件

    vi /etc/iptables/rules.v4.save

    Firewall configuration written by system-config-securitylevel
    Manual customization of this file is not recommended.
    *filter
    :INPUT DROP [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    :syn-flood – [0:0]
    -A INPUT -i lo -j ACCEPT
    -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
    -A INPUT -p tcp -m state –state NEW -m tcp –dport 22 -j ACCEPT
    -A INPUT -p tcp -m state –state NEW -m tcp –dport 19521 -j ACCEPT
    -A INPUT -p tcp -m state –state NEW -m tcp –dport 80 -j ACCEPT
    -A INPUT -p tcp -m state –state NEW -m tcp –dport 443 -j ACCEPT
    -A INPUT -p icmp -m icmp –icmp-type 8 -j ACCEPT
    COMMIT

    我们这里已将19521端口添加到了规则中。

    重新导入新的iptables规则

    iptables-resotre < /etc/iptables/rules.v4.save

    查看新的iptables规则

    iptables -L -n
  • nginx 反向代理配置实例 及 CC防护iptables配置 教程

    nginx反向代理实例

    一、nginx 反向代理配置文件示例:

    server
    {
    listen          80;
    server_name     jiloc.com;
    location / {
    proxy_pass          http://cache.jiloc.com/;
    proxy_redirect      off;
    proxy_set_header    X-Real-IP       $remote_addr;
    proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    }
    

    二、最简单的前端全缓存+反向代理脚本

    mkdir /home/cache/path -p #新建2个目录,放置缓存文件
    mkdir /home/cache/temp -p

    修改 /usr/local/nginx/conf/nginx.conf 新增以下代码,主要是缓存相关设置,请放置于 http{ ##这里 } 中,一般加在 log_format 上面或下面均可:

    client_body_buffer_size  512k;
    proxy_connect_timeout    5;
    proxy_read_timeout       60;
    proxy_send_timeout       5;
    proxy_buffer_size        16k;
    proxy_buffers            4 64k;
    proxy_busy_buffers_size 128k;
    proxy_temp_file_write_size 128k;
    proxy_temp_path   /home/cache/temp;
    proxy_cache_path  /home/cache/path levels=1:2 keys_zone=jiloc:500m inactive=7d max_size=30g;
    #500m是内存占用,7d是7天无访问删除,30g是缓存占具硬盘空间

    以下为虚拟主机配置文件,可另存成 .conf 放置于 vhost 下面:

    server
    {
    listen          80;
    server_name     jiloc.com; #主机名
    location / {
    proxy_cache cache_one;
    proxy_cache_valid  200 304 3d; #正常状态缓存时间3天
    proxy_cache_key $host$uri$is_args$args;
    proxy_pass          http://cache.jiloc.com/; #反代的网站
    proxy_redirect      off;
    proxy_set_header    X-Real-IP       $remote_addr;
    proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    expires 10d; #默认10天缓存
    access_log  /home/wwwlogs/jiloc.log  access; #日志文件
    }
    }

    点击几下网站,df -sh 命令,查看 /home/cache 目录大小,即可测试是否缓存成功。此脚本为前端全缓存,后端动态更新后,前端不会自动修改。可手动清理cache目录下文件。这个方法,可以用纯静态的形式来防CC,如果你的动态博客,受到CC攻击,可以尝试一下。

    三、LNMP简单的一些防CC的办法

    观看生成的.log日志文件,判断来路,直接301百度:

    if ($http_referer ~* mi5.gov ) {
    rewrite ^(.*)$ http://www.baidu.com/ permanent;
    }

    观看生成的.log日志文件,判断浏览器特征码,直接301百度:

    if ($http_user_agent ~* firefox4.0 ) {
    rewrite ^(.*)$ http://www.baidu.com/ permanent;
    }

    根据特征码,直接查找.log文件,并iptables封死相应IP:

    cat com.log | grep 'Mozilla/5.0' | awk '{print "iptables -I INPUT -p tcp --dport 80 -s ", $1, "-j DROP"}'| sort -n | uniq | sh
  • Iptables日记模块LOG使用 记录攻击来源IP

    Iptables匹配相应规则后会触发一个动作,filter和nat表一般常用的有以下目标操作。

    ACCEPT #允许数据包通过
    DROP #丢弃数据包,不对该数据包进一步处理
    REFECT #丢弃数据包,同时发送响应报文
    –reject-with tcp-reset 返回tcp重置
    –reject-with icmp-net-unreachable 返回网络不可达
    –reject-with icmp-host-unreachable? 返回主机不可达
    RETURN #转到其它链处理
    LOG #将数据包信息记录到syslog

    本文就记录下LOG规则的使用,示例:进入的tcp端口为80的数据包记录到日记,错误级别err,描述前缀为INPUT,记录IP/TCP相关信息。

    modprobe ipt_LOG #加载模块
    iptables -A INPUT -p tcp –dport 80 -j LOG –log-level err? –log-prefix “INPUT” –log-ip-options –log-tcp-sequence
    –log-level #错误级别
    –log-prefix “INPUT” #描述前缀
    –log-ip-options #记录IP信息
    –log-tcp-sequence #记录TCP序列号

    然后访问服务器80端口测试,通过dmesg查看记录的信息如下:
    INPUTIN=eth0 OUT= MAC=00:0c:29:73:e0:19:8c:89:a5:65:3a:4a:08:00 SRC=192.168.1.16 DST=192.168.1.2
    LEN=522 TOS=0x00 PREC=0x00 TTL=128 ID=27499 DF PROTO=TCP SPT=5430 DPT=80 SEQ=3847892455 ACK=3435733082 WINDOW=16344 RES=0x00 ACK PSH URGP=0
    还可以修改rsyslog将日志写入到文件。

    vim /etc/rsyslog.conf #添加以下内容
    kern.err?????????? /var/log/iptables.log?#日志文件路径

    /etc/init.d/rsyslog restart #重启rsyslog服务

WeChat