<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Knowledge Base (Posts about block)</title><link>https://bgstack15.ddns.net/blog/</link><description></description><atom:link href="https://bgstack15.ddns.net/blog/categories/block.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><copyright>Contents © 2023 &lt;a href="mailto:bgstack15@gmail.com"&gt;bgstack15&lt;/a&gt; 
&lt;a rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/"&gt;
&lt;img alt="Creative Commons License BY-SA"
style="border-width:0; margin-bottom:12px;"
src="https://bgstack15.ddns.net/.images/l_by-sa_4.0_88x31.png"&gt;&lt;/a&gt;</copyright><lastBuildDate>Sat, 25 Feb 2023 14:30:35 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Blocking outbound dns</title><link>https://bgstack15.ddns.net/blog/posts/2023/02/25/blocking-outbound-dns/</link><dc:creator>bgstack15</dc:creator><description>&lt;p&gt;The overall goal is to have all dns requests possible go to my recursive servers.&lt;/p&gt;
&lt;h3&gt;List of my dns servers&lt;/h3&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;$ dig -t NS ipa.internal.com
&lt;span class="p"&gt;;;&lt;/span&gt; ANSWER SECTION:
ipa.internal.com.   &lt;span class="m"&gt;604800&lt;/span&gt;  IN  NS  dns2.ipa.internal.com.
ipa.internal.com.   &lt;span class="m"&gt;604800&lt;/span&gt;  IN  NS  dns1.ipa.internal.com.
&lt;span class="p"&gt;;;&lt;/span&gt; ADDITIONAL SECTION:
dns1.ipa.internal.com.  &lt;span class="m"&gt;604800&lt;/span&gt;  IN  A   &lt;span class="m"&gt;192&lt;/span&gt;.168.1.50
dns2.ipa.internal.com.  &lt;span class="m"&gt;604800&lt;/span&gt;  IN  A   &lt;span class="m"&gt;192&lt;/span&gt;.168.1.51
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Dns3 host is a freeipa domain replica but does not have dns+dhcp on it as of 2023-02.&lt;/p&gt;
&lt;h2&gt;Experiment 1&lt;/h2&gt;
&lt;p&gt;Just redirect all outbound dns requests to my dns servers. This is done by setting a command on router1.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;DNS="192.168.1.50"
iptables -t nat -I PREROUTING -i br0 -p udp --dport 53 -j DNAT --to "&lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;DNS&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt;:53"
iptables -t nat -I PREROUTING -i br0 -p udp -s "&lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;DNS&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt;" --dport 53 -j ACCEPT
test -f /jffs/doh-ipv4 &lt;span class="err"&gt;&amp;amp;&amp;amp;&lt;/span&gt; sh /jffs/doh-ipv4
test -f /jffs/doh-ipv6 &lt;span class="err"&gt;&amp;amp;&amp;amp;&lt;/span&gt; sh /jffs/doh-ipv6
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Added this to the "firewall command" of the router, web ui -&amp;gt; tab Administration -&amp;gt; tab Commands.&lt;/p&gt;
&lt;p&gt;I modified dns1 named.conf to include some logging of queries:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="n"&gt;channel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;queries_log&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/var/named/queries"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;versions&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;600&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;yes&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;category&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;yes&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;severity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;yes&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;severity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="n"&gt;category&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;queries&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;queries_log&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Inside the logging{} section. &lt;a href="https://kb.isc.org/docs/aa-01526"&gt;Reference 6&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This experiment was successful. On dns1, /var/named/queries shows the queries being submitted.&lt;/p&gt;
&lt;h2&gt;Experiment 2: see if I can get extra, permanent storage with usb drive&lt;/h2&gt;
&lt;p&gt;I grabbed a 128MB USB flash drive (yes, MB). I enabled usb support in the web ui: tab Services -&amp;gt; tab USB -&amp;gt; core USB Support is enabled, mount this partition to /jffs: 581af4db-8dfc-41af-9e8b-f612bd32508c&lt;/p&gt;
&lt;p&gt;I also enabled jffs2 stuff in web ui: tab Administration -&amp;gt; tab Management -&amp;gt; section JFFS2 Support -&amp;gt; Intenal flash storage enabled&lt;/p&gt;
&lt;p&gt;Some commands I ran on router1:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;fdisk -l
# i already had a partition on msdos label, but it was not formatted yet
mkfs.ext4 /dev/sda1
modprobe ext4
mount /dev/sda1 /jffs
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This appears to work persistently after reboots.&lt;/p&gt;
&lt;h2&gt;Experiment 3: manual DoH block functionality&lt;/h2&gt;
&lt;p&gt;I set up the blocking script and run it on the dd-wrt router.
goal: manually copy up the IPv4 (and IPv6?) servers to be blocked, add routing rules to disallow connections to those&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;echo '#!/bin/sh' &amp;gt; ~/doh-ipv4
for ip in $( &lt;span class="nt"&gt;&amp;lt;doh&lt;/span&gt;&lt;span class="err"&gt;-ipv4.txt&lt;/span&gt; &lt;span class="err"&gt;awk&lt;/span&gt; &lt;span class="err"&gt;'{print&lt;/span&gt; &lt;span class="err"&gt;$1}'&lt;/span&gt; &lt;span class="err"&gt;)&lt;/span&gt; &lt;span class="err"&gt;;&lt;/span&gt; &lt;span class="err"&gt;do&lt;/span&gt; &lt;span class="err"&gt;echo&lt;/span&gt; &lt;span class="err"&gt;"iptables&lt;/span&gt; &lt;span class="err"&gt;-I&lt;/span&gt; &lt;span class="err"&gt;FORWARD&lt;/span&gt; &lt;span class="err"&gt;-p&lt;/span&gt; &lt;span class="err"&gt;tcp&lt;/span&gt; &lt;span class="err"&gt;-d&lt;/span&gt; &lt;span class="err"&gt;${ip}&lt;/span&gt; &lt;span class="err"&gt;--dport&lt;/span&gt; &lt;span class="err"&gt;443&lt;/span&gt; &lt;span class="err"&gt;-j&lt;/span&gt; &lt;span class="err"&gt;REJECT&lt;/span&gt; &lt;span class="err"&gt;--reject-with&lt;/span&gt; &lt;span class="err"&gt;tcp-reset"&lt;/span&gt; &lt;span class="err"&gt;;&lt;/span&gt; &lt;span class="err"&gt;done&lt;/span&gt; &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&amp;gt; ~/doh-ipv4
# copy it to router1
&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;~/doh-ipv4 ssh root@router1 'cat &amp;gt; /jffs/doh-ipv4'
ssh root@router1 chmod +x /jffs/doh-ipv4
&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Experiment 4: ipv6 doh blocking&lt;/h2&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;echo '#!/bin/sh' &amp;gt; ~/doh-ipv6
for ip in $( &lt;span class="nt"&gt;&amp;lt;doh&lt;/span&gt;&lt;span class="err"&gt;-ipv6.txt&lt;/span&gt; &lt;span class="err"&gt;awk&lt;/span&gt; &lt;span class="err"&gt;'{print&lt;/span&gt; &lt;span class="err"&gt;$1}'&lt;/span&gt; &lt;span class="err"&gt;)&lt;/span&gt; &lt;span class="err"&gt;;&lt;/span&gt; &lt;span class="err"&gt;do&lt;/span&gt; &lt;span class="err"&gt;echo&lt;/span&gt; &lt;span class="err"&gt;"ip6tables&lt;/span&gt; &lt;span class="err"&gt;-I&lt;/span&gt; &lt;span class="err"&gt;FORWARD&lt;/span&gt; &lt;span class="err"&gt;-p&lt;/span&gt; &lt;span class="err"&gt;tcp&lt;/span&gt; &lt;span class="err"&gt;-d&lt;/span&gt; &lt;span class="err"&gt;${ip}&lt;/span&gt; &lt;span class="err"&gt;--dport&lt;/span&gt; &lt;span class="err"&gt;443&lt;/span&gt; &lt;span class="err"&gt;-j&lt;/span&gt; &lt;span class="err"&gt;REJECT&lt;/span&gt; &lt;span class="err"&gt;--reject-with&lt;/span&gt; &lt;span class="err"&gt;tcp-reset"&lt;/span&gt; &lt;span class="err"&gt;;&lt;/span&gt; &lt;span class="err"&gt;done&lt;/span&gt; &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&amp;gt; ~/doh-ipv6
# copy it to router1; scp was acting weird so use a stream
&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;~/doh-ipv6 ssh root@router1 'cat &amp;gt; /jffs/doh-ipv6'
ssh root@router1 chmod +x /jffs/doh-ipv6
&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Improve&lt;/h2&gt;
&lt;p&gt;I still need to set up a cron job script for doing all this automatically. For now, I have to run these steps manually. I suppose the script would pull the latest contents from the doh list git repo, generate the script, upload it, and optionally run it. I have not pondered how to prevent duplicate entries yet.&lt;/p&gt;
&lt;h2&gt;Dependencies&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Upstream doh list at &lt;a href="https://github.com/dibdot/DoH-IP-blocklists"&gt;reference 2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Alternatives&lt;/h2&gt;
&lt;p&gt;Just allow all dns traffic to outside, which loses control of my network.&lt;/p&gt;
&lt;h2&gt;References&lt;/h2&gt;
&lt;h3&gt;Weblinks&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://old.reddit.com/r/pihole/comments/gicwex/making_a_doh_blocklist_for_ddwrt_routers/"&gt;https://old.reddit.com/r/pihole/comments/gicwex/making_a_doh_blocklist_for_ddwrt_routers/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dibdot/DoH-IP-blocklists"&gt;https://github.com/dibdot/DoH-IP-blocklists&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wiki.dd-wrt.com/wiki/index.php/USB_storage"&gt;https://wiki.dd-wrt.com/wiki/index.php/USB_storage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wiki.dd-wrt.com/wiki/index.php/JFFS_File_System#Add_USB_Storage"&gt;https://wiki.dd-wrt.com/wiki/index.php/JFFS_File_System#Add_USB_Storage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;test DoH to specifically cloudflare: &lt;a href="https://cloudflare-dns.com/help"&gt;https://cloudflare-dns.com/help&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.isc.org/docs/aa-01526"&gt;https://kb.isc.org/docs/aa-01526&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Internal files&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;file:&gt;&lt;/file:&gt;&lt;/li&gt;
&lt;/ol&gt;</description><category>block</category><category>dns</category><category>experiment</category><category>firewall</category><category>network</category><category>routing</category><guid>https://bgstack15.ddns.net/blog/posts/2023/02/25/blocking-outbound-dns/</guid><pubDate>Sat, 25 Feb 2023 14:26:06 GMT</pubDate></item></channel></rss>