<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Firewall on 華鳥風月</title>
    <link>https://blog.9-ch.com/tags/firewall/</link>
    <description>Recent content in Firewall on 華鳥風月</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh-cn</language>
    <lastBuildDate>Mon, 06 Jun 2022 20:29:11 +0800</lastBuildDate><atom:link href="https://blog.9-ch.com/tags/firewall/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>RouterOS 端口扫描防御</title>
      <link>https://blog.9-ch.com/post/homelab-ros-anti-scan/</link>
      <pubDate>Mon, 06 Jun 2022 20:29:11 +0800</pubDate>
      
      <guid>https://blog.9-ch.com/post/homelab-ros-anti-scan/</guid>
      <description>RouterOS 入侵检测</description>
      <content:encoded><![CDATA[<p>通过ROS防火墙检测并屏蔽端口扫描行为,并使用bark将屏蔽事件发送至手机</p>
<h3 id="ros配置">ROS配置</h3>
<h4 id="屏蔽列表ip">屏蔽列表IP</h4>
<p>屏蔽BOT列表中的数据包,建议将这一条的优先级提高到最高(即编号#1)</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">/ip firewall raw
</span></span><span class="line"><span class="cl">add action=drop chain=prerouting comment=ANTI-BOT src-address-list=BOT
</span></span></code></pre></td></tr></table>
</div>
</div><h4 id="指定端口方式">指定端口方式</h4>
<p>对于常见家用环境下不使用的高危TCP端口进行记录,在连续尝试3次(1分钟超时)后拉黑IP 7天</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">/ip firewall raw
</span></span><span class="line"><span class="cl">add action=add-src-to-address-list address-list=BOT address-list-timeout=1w chain=prerouting comment=ANTI-SCAN dst-port=20-23,53,80,135,139,443,445,1433,2049,3389,5900,8080,8089 log=yes log-prefix=ANTI-SCAN protocol=tcp src-address-list=SCAN_S2
</span></span><span class="line"><span class="cl">add action=add-src-to-address-list address-list=SCAN_S2 address-list-timeout=1m chain=prerouting comment=ANTI-SCAN dst-port=20-23,53,80,135,139,443,445,1433,2049,3389,5900,8080,8089 protocol=tcp src-address-list=SCAN_S1
</span></span><span class="line"><span class="cl">add action=add-src-to-address-list address-list=SCAN_S1 address-list-timeout=1m chain=prerouting comment=ANTI-SCAN dst-port=20-23,53,80,135,139,443,445,1433,2049,3389,5900,8080,8089 in-interface-list=WAN protocol=tcp
</span></span></code></pre></td></tr></table>
</div>
</div><h4 id="psd方式">PSD方式</h4>
<p>如果觉得搞一堆端口配置太麻烦,也可以用内置的PSD来实现,默认规则为: 3秒内低位端口计3分,高位端口计1分,合计21分触发</p>
<p>实测默认规则针对端口批量扫描检出率较高,针对定向端口弱口令爆破识别效果稍差,建议自行调整参数,或者结合指定端口方式配置</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">/ip firewall raw
</span></span><span class="line"><span class="cl">add action=add-src-to-address-list address-list=BOT address-list-timeout=1w chain=prerouting comment=ANTI-SCAN in-interface-list=WAN log=yes log-prefix=ANTI-SCAN protocol=tcp psd=21,3s,3,1
</span></span><span class="line"><span class="cl">add action=add-src-to-address-list address-list=BOT address-list-timeout=1w chain=prerouting comment=ANTI-SCAN in-interface-list=WAN log=yes log-prefix=ANTI-SCAN protocol=udp psd=21,3s,3,1
</span></span></code></pre></td></tr></table>
</div>
</div><h4 id="rsyslog配置">Rsyslog配置</h4>
<p>如果不需要推送屏蔽完成上述配置即可</p>
<p>假设接收日志机器ip为192.168.1.100</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">/system logging action
</span></span><span class="line"><span class="cl">set remote=192.168.1.100 remote
</span></span><span class="line"><span class="cl">/system logging
</span></span><span class="line"><span class="cl">add action=remote topics=info
</span></span></code></pre></td></tr></table>
</div>
</div><p>如果不需要其他消息可以在topics中加上firewall,仅过滤并转发防火墙的log</p>
<h3 id="linux配置">Linux配置</h3>
<p>假设接收设备ip为192.168.1.100,ROS ip为192.168.1.1</p>
<p>修改/etc/rsyslog.conf如下部分,去除最前面的&quot;#&ldquo;解除注释,启用udp模式rsyslog接收ros发送过来的日志</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">module(load=&#34;imudp&#34;)
</span></span><span class="line"><span class="cl">input(type=&#34;imudp&#34; port=&#34;514&#34;)                              # 可按需修改端口,需要同步修改ros配置端口
</span></span></code></pre></td></tr></table>
</div>
</div><p>再添加如下规则</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">:msg, contains, &#34;ANTI-SCAN&#34;     ^/opt/bark/router.sh        # 调用脚本处理并发送bark消息
</span></span><span class="line"><span class="cl">:FROMHOST-IP, isequal,&#34;192.168.1.1&#34; /var/log/router.log     # 汇总ros日志
</span></span><span class="line"><span class="cl">:FROMHOST-IP, isequal,&#34;192.168.1.1&#34; ~                       # 防止重复收集到message中
</span></span></code></pre></td></tr></table>
</div>
</div><p>修改/etc/logrotate.d/rsyslog 在花括号前添加一行,配置日志老化</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">/var/log/router.log
</span></span></code></pre></td></tr></table>
</div>
</div><p>创建脚本 /opt/bark/router.sh 并添加权限(chmod +x /opt/bark/router.sh),消息格式可自行按需调整</p>
<p>YOUR_BARK_SERVER 替换为BARK服务器ip/域名</p>
<p>YOUR_DEVICE_ID 替换为接收设备ID</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="cp">#!/usr/bin/bash
</span></span></span><span class="line"><span class="cl"><span class="cp"></span><span class="nv">msg</span><span class="o">=</span><span class="k">$(</span><span class="nb">echo</span> <span class="s2">&#34;</span><span class="nv">$*</span><span class="s2">&#34;</span> <span class="p">|</span>tr <span class="s2">&#34; &#34;</span> <span class="s2">&#34;\n&#34;</span><span class="p">|</span>grep <span class="s1">&#39;\-&gt;&#39;</span><span class="p">|</span>grep -E <span class="s2">&#34;(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)&#34;</span><span class="p">|</span>tr -d <span class="s2">&#34;,&#34;</span><span class="k">)</span>
</span></span><span class="line"><span class="cl">curl -X <span class="s2">&#34;POST&#34;</span> <span class="s2">&#34;https://YOUR_BARK_SERVER/push&#34;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>     -H <span class="s1">&#39;Content-Type: application/json; charset=utf-8&#39;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>     -d <span class="s1">$&#39;{
</span></span></span><span class="line"><span class="cl"><span class="s1">  &#34;body&#34;: &#34;已封禁:\n&#39;</span><span class="nv">$msg</span><span class="s1">&#39;&#34;,
</span></span></span><span class="line"><span class="cl"><span class="s1">  &#34;device_key&#34;: &#34;YOUR_DEVICE_ID&#34;,
</span></span></span><span class="line"><span class="cl"><span class="s1">  &#34;level&#34;: &#34;passive&#34;,
</span></span></span><span class="line"><span class="cl"><span class="s1">  &#34;title&#34;: &#34;IDS&#34;
</span></span></span><span class="line"><span class="cl"><span class="s1">}&#39;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>重启rsyslog与logrotate服务使配置生效</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">systemctl restart rsyslog
</span></span><span class="line"><span class="cl">systemctl restart logrotate
</span></span></code></pre></td></tr></table>
</div>
</div>]]></content:encoded>
    </item>
    
  </channel>
</rss>
