[arch-general] iptables script
I'm newbie about iptables. I use this script <http://pastebin.ca/2447430> for my system. It is based on <http://wiki.archlinux.org/index.php/Simple_stateful_firewall>. Now I want to add an iptables log chain and others. What is the correct line to start adding the following? <script> ## Logging $IPT -N LOGDROP $IPT -A LOGDROP -m limit --limit 5/m --limit-burst 8 -j LOG --log-prefix "IPTables-Dropped: " $IPT -A LOGDROP -j DROP # log and drop packets that hit this rule $IPT -A INPUT -m conntrack --ctstate INVALID -j LOGDROP </script> Supposing I want to add the following lines as well, is there any rules that is superfluous? These rules have to place after or before the rule "$IPT -A INPUT -m conntrack --ctstate INVALID -j DROP"? <script> # SSH bruteforce attacks $IPT -N IN_SSH $IPT -A INPUT -p tcp --dport ssh -m conntrack --ctstate NEW -j IN_SSH $IPT -A IN_SSH -m recent --name sshbf --rttl --rcheck --hitcount 3 --seconds 10 -j DROP $IPT -A IN_SSH -m recent --name sshbf --rttl --rcheck --hitcount 4 --seconds 1800 -j DROP $IPT -A IN_SSH -m recent --name sshbf --set -j ACCEPT $IPT -A INPUT -p tcp --dport ssh -m conntrack --ctstate NEW -j IN_SSH ## Local Area Network Denial (LAND) attack # Block all packets from your own IP $IPT -A INPUT -s 192.168.201.2/32 -j DROP # Block any packet from local network $IPT -A INPUT -s 127.0.0.0/8 -j DROP # SYN Flood $IPT -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT # SYN packets # Drop any tcp packet that does not start a connection with a syn flag $IPT -A INPUT -p tcp ! --syn -m conntrack --ctstate NEW -j DROP # NULL packets $IPT -A INPUT -p tcp --tcp-flags ALL NONE -j DROP # XMAS packets $IPT -A INPUT -p tcp --tcp-flags ALL ALL -j DROP # Fragments Packet $IPT -A INPUT -f -j DROP # ping of death $IPT -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT # Furtive port scanner $IPT -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT </script>
On 10.09.13 at 13:27, F. Gr. wrote:
I'm newbie about iptables. I use this script <http://pastebin.ca/2447430> for my system. It is based on <http://wiki.archlinux.org/index.php/Simple_stateful_firewall>. Now I want to add an iptables log chain and others. What is the correct line to start adding the following?
<script> ## Logging $IPT -N LOGDROP $IPT -A LOGDROP -m limit --limit 5/m --limit-burst 8 -j LOG --log-prefix "IPTables-Dropped: " $IPT -A LOGDROP -j DROP The position of these lines in script does not matter much, place it anywhere below line 27.
# log and drop packets that hit this rule $IPT -A INPUT -m conntrack --ctstate INVALID -j LOGDROP
This should replace '$IPT -A INPUT -m conntrack --ctstate INVALID -j DROP' (line 47 in the script)
</script>
Supposing I want to add the following lines as well, is there any rules that is superfluous? These rules have to place after or before the rule "$IPT -A INPUT -m conntrack --ctstate INVALID -j DROP"?
<script> # SSH bruteforce attacks $IPT -N IN_SSH For consistency, place it below the definition on other chains, line 32.
$IPT -A INPUT -p tcp --dport ssh -m conntrack --ctstate NEW -j IN_SSH The ssh connections should be handled before it falls into TCP chain, so place this rule before '$IPT -A INPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP' (line 50).
$IPT -A IN_SSH -m recent --name sshbf --rttl --rcheck --hitcount 3 --seconds 10 -j DROP $IPT -A IN_SSH -m recent --name sshbf --rttl --rcheck --hitcount 4 --seconds 1800 -j DROP $IPT -A IN_SSH -m recent --name sshbf --set -j ACCEPT Same as the LOGDROP chain (see above), anywhere below line 27.
$IPT -A INPUT -p tcp --dport ssh -m conntrack --ctstate NEW -j IN_SSH You don't have to duplicate the rules.
## Local Area Network Denial (LAND) attack # Block all packets from your own IP $IPT -A INPUT -s 192.168.201.2/32 -j DROP # Block any packet from local network $IPT -A INPUT -s 127.0.0.0/8 -j DROP
# SYN Flood $IPT -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
# SYN packets # Drop any tcp packet that does not start a connection with a syn flag $IPT -A INPUT -p tcp ! --syn -m conntrack --ctstate NEW -j DROP
# NULL packets $IPT -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
# XMAS packets $IPT -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
# Fragments Packet $IPT -A INPUT -f -j DROP
# ping of death $IPT -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
# Furtive port scanner $IPT -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT </script>
I'm not sure about the rest, I think it should go before any rule in INPUT chain with target ACCEPT (in the script that is '$IPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT' on line 43, icmp echo-request (line 41) does not count - it is already handled). The Simple Stateful Firewall article on ArchWiki states that "Dropping all traffic and specifying what is allowed is the best way to make a secure firewall.", so at least some of these rules might be superfluous.
I don't know how you use the script, but you might consider using the 'iptables-restore' command to switch between multiple iptables configurations. If you still want to use the iptables.service, you can make the file /etc/iptables/iptables.rules a symlink and change its target to change the configuration. You can run 'iptables-save > foo.rules' to save current iptables configuration, edit the file to your liking (adding comments etc.), and finally run 'iptables-restore < foo.rules' to load the saved configuration. Regards, Jakub Klinkovský (Lahwaacz)
Jakub Klinkovský [2013-09-10 20:01:01+0200]: [...]
I don't know how you use the script, but you might consider using the 'iptables-restore' command to switch between multiple iptables configurations. If you still want to use the iptables.service, you can make the file /etc/iptables/iptables.rules a symlink and change its target to change the configuration. You can run 'iptables-save > foo.rules' to save current iptables configuration, edit the file to your liking (adding comments etc.), and finally run 'iptables-restore < foo.rules' to load the saved configuration.
I did that.
Regards, Jakub Klinkovský (Lahwaacz)
Thanks, your explanation was clear.
On Wed, Sep 11, 2013 at 1:20 PM, F. Gr. <frgroccia@gmail.com> wrote:
Jakub Klinkovský [2013-09-10 20:01:01+0200]:
[...]
I don't know how you use the script, but you might consider using the 'iptables-restore' command to switch between multiple iptables configurations. If you still want to use the iptables.service, you can make the file /etc/iptables/iptables.rules a symlink and change its target to change the configuration. You can run 'iptables-save > foo.rules' to save current iptables configuration, edit the file to your liking (adding comments etc.), and finally run 'iptables-restore < foo.rules' to load the saved configuration.
I did that. Even better, you can use ferm[1].
[1] https://www.archlinux.org/packages/community/any/ferm/ Cheers, -- Sébastien "Seblu" Luttringer https://www.seblu.net GPG: 0x2072D77A
participants (3)
-
F. Gr.
-
Jakub Klinkovský
-
Sébastien Luttringer