Security Professionals - ipfw add deny all from eindgebruikers to any

iptables

29-07-2018, 20:47 door Anoniem, 11 reacties
Wat is de betere set iptablesopdrachtregels voor een MX server en waarom?

(1)
$sudo iptables -A INPUT -p tcp --dport 25 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$sudo iptables -A OUTPUT -p tcp --sport 25 -m conntrack --ctstate ESTABLISHED -j ACCEPT

of

(2)
$sudo iptables -A INPUT -p tcp --dport 25 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$sudo iptables -A OUTPUT -p tcp -m conntrack --ctstate ESTABLISHED -j ACCEPT

of

(3)
Iets ander, graag voorbeeld en uitleg.

Dank voor de reacties.
Reacties (11)
29-07-2018, 21:52 door Bitwiper
In de meeste distro's is de default IPv4 policy "ACCEPT" (en bovendien staat IPv6 meestal wagenwijd open). ACCEPT rules toevoegen is dan hooguit zelfbevrediging.

Dit is niet het meest geschikte forum voor iptables nitty gritty. Wat is precies het doel van jouw vraag, een soort poll of zo?
29-07-2018, 22:02 door Anoniem
Door Anoniem: Wat is de betere set iptablesopdrachtregels voor een MX server en waarom?

(1)
$sudo iptables -A INPUT -p tcp --dport 25 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$sudo iptables -A OUTPUT -p tcp --sport 25 -m conntrack --ctstate ESTABLISHED -j ACCEPT

of

(2)
$sudo iptables -A INPUT -p tcp --dport 25 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$sudo iptables -A OUTPUT -p tcp -m conntrack --ctstate ESTABLISHED -j ACCEPT

of

(3)
Iets ander, graag voorbeeld en uitleg.

Dank voor de reacties.

Het leest als een huiswerk vraag .
Heb je zelf al iets bedacht ?

Het verschil is dat regel set (1) precies matched op inkomende mail, en de OUTPUT regel alleen het retour verkeer van de inkomende sessie match.
(vanwege sport == 25 )

set (2) matched alle retourverkeer, ook van niet-mail sessies.

Aangenomen dat het een huiswerk (of een of andere certificatie vraag) betreft zullen ze dan wel (1) willen horen.
29-07-2018, 23:29 door Anoniem
// Een andere benadering is de volgende
sudo apt-get install iptables ipset wget ; apt-get install unbound ; /etc/unbound/unbound.conf.d/ACCOUNT.conf[
// dab hieronder een aantal "preludes"op dit thema, pas aan naar behoefte en bevinden en de eigen situatie:
# Update variables in setupVars.conf file
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -j LOG --log-prefix "ipt-input: "
I PTABLES="/usr/sbin/iptables"
/sbin/depmod -a
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_tables
/sbin/modprobe iptable_filter
/sbin/modprobe iptable_mangle
/sbin/modprobe iptable_nat
/sbin/modprobe ipt_LOG
/sbin/modprobe ipt_limit
/sbin/modprobe ipt_MASQUERADE
echo "1" > /proc/sys/net/ipv4/ip_forward
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -N bad_tcp_packets
$IPTABLES -N allowed
$IPTABLES -N tcp_packets
$IPTABLES -N udp_packets
$IPTABLES -N icmp_packets
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK \
-m state --state NEW -j REJECT --reject-with tcp-reset
$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG \
--log-prefix "New not syn:"
$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP
$IPTABLES -A allowed -p TCP --syn -j ACCEPT
$IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A allowed -p TCP -j DROP
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 21 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 22 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 80 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 113 -j allowed
$IPTABLES -A udp_packets -p UDP -s 0/0 --source-port 53 -j ACCEPT
if [ $DHCP == "yes" ] ; then
$IPTABLES -A udp_packets -p UDP -s $DHCP_SERVER --sport 67 \
--dport 68 -j ACCEPT
fi
#$IPTABLES -A udp_packets -p UDP -s 0/0 --source-port 53 -j ACCEPT
#$IPTABLES -A udp_packets -p UDP -s 0/0 --source-port 123 -j ACCEPT
#$IPTABLES -A udp_packets -p UDP -s 0/0 --source-port 2074 -j ACCEPT
#$IPTABLES -A udp_packets -p UDP -s 0/0 --source-port 4000 -j ACCEPT
#$IPTABLES -A udp_packets -p UDP -i $INET_IFACE \
#--destination-port 135:139 -j DROP
#$IPTABLES -A udp_packets -p UDP -i $INET_IFACE -d 255.255.255.255 \
#--destination-port 67:68 -j DROP
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT
$IPTABLES -A INPUT -p tcp -j bad_tcp_packets
$IPTABLES -A INPUT -p ALL -i $LAN_IFACE -s $LAN_IP_RANGE -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -j ACCEPT
$IPTABLES -A INPUT -p UDP -i $LAN_IFACE --dport 67 --sport 68 -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $INET_IFACE -m state --state ESTABLISHED,RELATED \
-j ACCEPT
$IPTABLES -A INPUT -p TCP -i $INET_IFACE -j tcp_packets
$IPTABLES -A INPUT -p UDP -i $INET_IFACE -j udp_packets
$IPTABLES -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets
#$IPTABLES -A INPUT -i $INET_IFACE -d 224.0.0.0/8 -j DROP
$IPTABLES -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG \
--log-level DEBUG --log-prefix "IPT INPUT packet died: "
$IPTABLES -A FORWARD -p tcp -j bad_tcp_packets
$IPTABLES -A FORWARD -i $LAN_IFACE -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $LO_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $LAN_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -o $INET_IFACE -j ACCEPT
$IPTABLES -A OUTPUT -m limit --limit 3/minute --limit-burst 3 -j LOG \
--log-level DEBUG --log-prefix "IPT OUTPUT packet died: "
if [ $PPPOE_PMTU == "yes" ] ; then
$IPTABLES -t nat -A POSTROUTING -p tcp --tcp-flags SYN,RST SYN \
-j TCPMSS --clamp-mss-to-pmtu
if
$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE
//Kijk eens rond op github, zoals Bitwiper al aangeeft..maar cut & paste niet de errors van een andere bron.
//Ook NetOverflow is een goede resource bron.

luntrus
30-07-2018, 01:38 door Anoniem
Topic start hier, dit is maar een deel van de opdrachtregels uit een script. Ga uit van een block all (zoals dat zou moeten) als laatste set opdrachtregels. Geen IPv6.

[iptables werkt met first match. Het is daarom nutteloos om na een block all nog een ACCEPT regel toe te voegen.]

Het gaat me met name om het effectief verschil tussen OUTPUT bij (1) en (2). Per poort of voor alle tcp ineens? Wat zijn de voor en nadelen? Welke scenario's zijn er te bedenken waar per poort nauwkeuriger is?

Dit is het forum voor Security Professionals - ipfw add deny all from eindgebruikers to any. Prima geschikt!
30-07-2018, 09:56 door Anoniem
Door Anoniem: Topic start hier, dit is maar een deel van de opdrachtregels uit een script. Ga uit van een block all (zoals dat zou moeten) als laatste set opdrachtregels. Geen IPv6.

[iptables werkt met first match. Het is daarom nutteloos om na een block all nog een ACCEPT regel toe te voegen.]

Het gaat me met name om het effectief verschil tussen OUTPUT bij (1) en (2). Per poort of voor alle tcp ineens? Wat zijn de voor en nadelen? Welke scenario's zijn er te bedenken waar per poort nauwkeuriger is?

Per poort is _altijd_ nauwkeuriger. Waarom/wanneer je dat wilt doen is de vraag .

Ik gebruik het (wel eens) als teller van verkeer - met per-poort gebaseerde iptables kun je onderscheiden hoeveel verkeer elke service doet .
Samen met 'een beetje scripten' is dat mooi te grafieken . Je kunt zo ook goed zien of een backup (of secondary) server gebruikt wordt.

Als je heel strak wilt kijken wat je server doet kun je elke service die je gebruikt expliciet matchen. Op hetgeen overblijft kun je een LOG zetten, en dan denk je dat die leeg blijft .
Soms ontdek je dan dat je iets vergeten hebt bv een cronjob die wekelijk draait .
30-07-2018, 11:01 door Anoniem
Iedereen bedankt voor de reacties en het delen van rulesets.

Waarom ik dit vraag is gewoon vakmatige nieuwsgierigheid. Geen huiswerk.

Aparte logging/teller is een goede reden om het per poort te doen.

Is er ook een veiligheidsrisico voor "per tcp" te bedenken, al dan niet theoretisch? Welke scenarios zijn er waarbij een ESTABLISHED tcp verbinding bestaat zonder een poort match? Ik kan er zelf geen bedenken.

Zelfs bij een aanval waarbij pakketten gematcht worden (althans een poging daartoe), zoals een RSET zie ik geen voordeel voor de aanvaller. Want waarom zou daarbij een servicepoort niet hoeven te matchen, het gaat immers over publieke services met vaste poorten en het poortnummer staat verplicht in het tcp packet. De tcp nummers (sequence number/ACK number) zijn wel geheim, en die moet worden geschat of onderschept.

Met andere woorden: zie ik iets over hoofd? Is er een mogelijkheid voor een aanvaller een "per tcp" regel te benutten t.o.v. een "per poort"?
30-07-2018, 11:55 door Anoniem
Door Anoniem:

Waarom ik dit vraag is gewoon vakmatige nieuwsgierigheid. Geen huiswerk.


Waarom dan iptables en niet gelijk de betere nftables (de opvolger van iptables) ?

Daarnaast ga je er nu van uit dat je iptables met het handje bewerkt, op menig rpm gebaseerd systeem wordt firewalld al enkele jaren gebruikt ( onderwater op dit moment nog iptables, maar binnenkort is dat nftables )
30-07-2018, 13:00 door Anoniem
Door Anoniem:
Door Anoniem:

Waarom ik dit vraag is gewoon vakmatige nieuwsgierigheid. Geen huiswerk.


Waarom dan iptables en niet gelijk de betere nftables (de opvolger van iptables) ?

Daarnaast ga je er nu van uit dat je iptables met het handje bewerkt, op menig rpm gebaseerd systeem wordt firewalld al enkele jaren gebruikt ( onderwater op dit moment nog iptables, maar binnenkort is dat nftables )

Of meteen een echte firewall gebruiken: pf op OpenBSD
30-07-2018, 16:40 door Anoniem
Door Anoniem:
Door Anoniem:
Door Anoniem:

Waarom ik dit vraag is gewoon vakmatige nieuwsgierigheid. Geen huiswerk.


Waarom dan iptables en niet gelijk de betere nftables (de opvolger van iptables) ?

Daarnaast ga je er nu van uit dat je iptables met het handje bewerkt, op menig rpm gebaseerd systeem wordt firewalld al enkele jaren gebruikt ( onderwater op dit moment nog iptables, maar binnenkort is dat nftables )

Of meteen een echte firewall gebruiken: pf op OpenBSD

Die kan er nog voor of tussen staan ;-) dit topic kan enkel gaan over de lokale hostbased firewall die volgens diverse beveiligings richtlijnen verplicht zijn ipv een linux firewall die ergens tussen staat.
In dat laatste geval zou ik een FW kiezen die minstens 1 asic heeft :P
30-07-2018, 17:39 door Anoniem
@anoniem van 11:55

Juist hiervoor is firehol ontwikkeld, zie: https://n0where.net/iptables-firewall-generator-firehol
Voor nftables en firehol: https://github.com/firehol/firehol/issues/48

luntrus
31-07-2018, 12:57 door Anoniem
@de OP,

Nu moet je het ook nog gaan personaliseren, daarmee bedoel ik dit alles instellen naar je eigen specifieke behoeften.

Niet direct AWS overal blokkeren, in feite een slecht idee,
maar bijvoorbeeld regels om te komen tot wel overdachte "bad bot blocker" regels.

Of integreer met dingen, die je vindt via Snyk, waar nog geen protectie voor gevonden is.

Wees in ieder geval steeds orgineel en ga bij anderen te rade, wanneer je de finesses ergens van ontgaan is.
We staan namelijk allemaal op elkaars schouders, zoals een Ku-beeld aan de kust van het Paaseiland.

"Let the Force be with you",

luntrus
Reageren

Deze posting is gelocked. Reageren is niet meer mogelijk.