<?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 firewall)</title><link>https://bgstack15.ddns.net/blog/</link><description></description><atom:link href="https://bgstack15.ddns.net/blog/categories/firewall.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><item><title>firewalld service file for dhcpd-failover</title><link>https://bgstack15.ddns.net/blog/posts/2017/04/27/firewalld-service-file-for-dhcpd-failover/</link><dc:creator>bgstack15</dc:creator><description>&lt;h2&gt;The problem&lt;/h2&gt;
&lt;p&gt;I have been practicing with ISC dhcp in preparation for overhauling my
network. While working with dhcp failover peers, I have run into a problem. My
peers couldn't talk to each other. I eventually figured out it was the
firewall. Some of the errors I got included:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Apr 05 17:56:55 centos7-01a.vm.example.com dhcpd[956]: failover peer allvm: I move from recover to startup
Apr 05 17:56:55 centos7-01a.vm.example.com systemd[1]: Started DHCPv4 Server Daemon.
Apr 05 17:57:10 centos7-01a.vm.example.com dhcpd[956]: failover peer allvm: I move from startup to recover
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;The solution&lt;/h2&gt;
&lt;p&gt;With the help of a post on the World Wide Web, I have shamelessly ripped off a
firewalld service file. Loading this file into the firewall daemon solved my
dhcp failover peer communication problem. Do this on both servers.&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;tf=/usr/lib/firewalld/services/dhcpd-failover.xml
touch "&lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt;"; chmod 0644 "&lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt;"
cat &lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;EOF&lt;/span&gt; &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;"&lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt;"
&lt;span class="cp"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;/span&gt;
&lt;span class="c"&gt;&amp;lt;!-- Reference: https://www.centos.org/forums/viewtopic.php?t=54348 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;service&lt;/span&gt; &lt;span class="na"&gt;version=&lt;/span&gt;&lt;span class="s"&gt;"1.0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;short&amp;gt;&lt;/span&gt;DHCPD Failover&lt;span class="nt"&gt;&amp;lt;/short&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;description&amp;gt;&lt;/span&gt;This allows a DHCP server to communicate with a failover peer.&lt;span class="nt"&gt;&amp;lt;/description&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;port&lt;/span&gt; &lt;span class="na"&gt;protocol=&lt;/span&gt;&lt;span class="s"&gt;"tcp"&lt;/span&gt; &lt;span class="na"&gt;port=&lt;/span&gt;&lt;span class="s"&gt;"647"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/service&amp;gt;&lt;/span&gt;
EOF
systemctl reload firewalld.service
firewall-cmd --permanent --add-service=dhcpd-failover
firewall-cmd --reload
&lt;/code&gt;&lt;/pre&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://www.centos.org/forums/viewtopic.php?t=54348"&gt;https://www.centos.org/forums/viewtopic.php?t=54348&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;DHCP failover guide &lt;a href="http://geekyadmins.com/dhcp-server-setup-with-failover-in-centos-7/"&gt;http://geekyadmins.com/dhcp-server-setup-with-failover-in-centos-7/&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description><category>dhcp</category><category>firewall</category><guid>https://bgstack15.ddns.net/blog/posts/2017/04/27/firewalld-service-file-for-dhcpd-failover/</guid><pubDate>Thu, 27 Apr 2017 13:09:58 GMT</pubDate></item><item><title>firewalld open nfs</title><link>https://bgstack15.ddns.net/blog/posts/2016/12/14/firewalld-open-nfs/</link><dc:creator>bgstack15</dc:creator><description>&lt;h2&gt;Overview&lt;/h2&gt;
&lt;p&gt;Joining the many other www pages about opening up your host firewall to allow
nfs is this one! On CentOS 7, which went systemd for better or for worse,
firewalld is the default firewall solution. I like how everything is a file,
so you can just use xml to make things extensible. &lt;code&gt;firewall-cmd --permanent
--add-service=nfs --add-service=rpc-bind --add-service=mountd firewall-cmd
--reload&lt;/code&gt; That's it! You just need to open up the predefined services nfs,
rpc-bind, and mountd. Thanks to all the countless posts out there that helped
me research this. I didn't save any of the links, because this time I'm
assuming it's such general knowledge it doesn't need special credits. Bonus:
if you want to read the definitions of the predefined services and other
elements for firewalld, check out directory /usr/lib/firewalld/. I know I've
written my own service definitions (for Plex Media Server) in the past.&lt;/p&gt;</description><category>firewall</category><category>linux</category><guid>https://bgstack15.ddns.net/blog/posts/2016/12/14/firewalld-open-nfs/</guid><pubDate>Wed, 14 Dec 2016 15:12:46 GMT</pubDate></item></channel></rss>