Ребят,гляньте на этот конфиг,можно ли тут что-то улучшить,может я зря открыл порт 53 в одной из цепочек? Я в этом понимаю мало,делал методом тыка + гугл.
Мне главное,чтобы был полноценный firewall,защита по максимуму,можно ли что-то добавить/убрать,да и вообще,правильно ли там сделано?
#! /bin/sh
IPT=/sbin/iptables
IIFACE=wlan0
OIFACE=wlan0
# Flushing all rules,deleting all chains
$IPT -F
$IPT -t nat -F
$IPT -X
#einfo "Setting default rule to drop"
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT DROP
$IPT -N dns-out
$IPT -F dns-out
$IPT -A dns-out -p udp -o $OIFACE -m udp --dport 53 -j ACCEPT
$IPT -A dns-out -p tcp -o $OIFACE -m tcp --dport 53 -j ACCEPT
$IPT -N dns-in
$IPT -F dns-in
$IPT -A dns-in -p udp -i $IIFACE -m udp --dport 53 -j ACCEPT
$IPT -A dns-in -p tcp -i $IIFACE -m tcp --dport 53 -j ACCEPT
# Creating drop rules for system ports (оно надо вроде,да?)
$IPT -N drop-system-ports-in
$IPT -F drop-system-ports-in
$IPT -A drop-system-ports-in -p tcp -i $IIFACE -d 0/0 -m tcp --dport 0:1023 -j DROP
$IPT -A drop-system-ports-in -p udp -i $IIFACE -d 0/0 -m udp --dport 0:1023 -j DROP
$IPT -N drop-system-ports-out
$IPT -F drop-system-ports-out
$IPT -A drop-system-ports-out -p tcp -o $OIFACE -d 0/0 -m tcp --dport 0:1023 -j DROP
$IPT -A drop-system-ports-out -p udp -o $OIFACE -d 0/0 -m udp --dport 0:1023 -j DROP
#default rule
#einfo "Creating states chain"
$IPT -N allowed-connection-in
$IPT -F allowed-connection-in
$IPT -A allowed-connection-in -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A allowed-connection-in -i $IIFACE -m state --state INVALID -j DROP
$IPT -A allowed-connection-in -j DROP
$IPT -N allowed-connection-out
$IPT -F allowed-connection-out
$IPT -A allowed-connection-out -m state --state ESTABLISHED,RELATED -j ACCEPT
# Это для irc,иначе к фриноду не коннектится,как тут получше сделать?
$IPT -A allowed-connection-out -p tcp -o $OIFACE -m state --state NEW --dport 6667 -j ACCEPT
$IPT -A allowed-connection-out -o $OIFACE -m state --state INVALID -j DROP
$IPT -A allowed-connection-out -j DROP
#ICMP traffic
#einfo "Creating icmp chain"
$IPT -N icmp_deny
$IPT -F icmp_deny
$IPT -A icmp_deny -p icmp -j DROP
#Incoming ssh traffic
#einfo "Creating incoming ssh traffic chain"
$IPT -N deny-ssh-traffic-in
$IPT -F deny-ssh-traffic-in
$IPT -A deny-ssh-traffic-in -i $IIFACE -p tcp -m tcp --dport ssh -j DROP
#einfo "Creating outgoing http/https traffic chain"
$IPT -N allow-www-traffic-out
$IPT -F allow-www-traffic-out
$IPT -A allow-www-traffic-out -p tcp -m tcp --dport www -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A allow-www-traffic-out -p tcp -m tcp --dport https -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#Catch portscanners
#einfo "Creating portscan detection chain"
$IPT -N check-flags
$IPT -F check-flags
$IPT -A check-flags -p tcp --tcp-flags ALL FIN,URG,PSH -m limit --limit 5/minute -j LOG --log-level alert --log-prefix "NMAP-XMAS:"
$IPT -A check-flags -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
$IPT -A check-flags -p tcp --tcp-flags ALL ALL -m limit --limit 5/minute -j LOG --log-level 1 --log-prefix "XMAS:"
$IPT -A check-flags -p tcp --tcp-flags ALL ALL -j DROP
$IPT -A check-flags -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -m limit --limit 5/minute -j LOG --log-level 1 --log-prefix "XMAS-PSH:"
$IPT -A check-flags -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
$IPT -A check-flags -p tcp --tcp-flags ALL NONE -m limit --limit 5/minute -j LOG --log-level 1 --log-prefix "NULL_SCAN:"
$IPT -A check-flags -p tcp --tcp-flags ALL NONE -j DROP
$IPT -A check-flags -p tcp --tcp-flags SYN,RST SYN,RST -m limit --limit 5/minute -j LOG --log-level 5 --log-prefix "SYN/RST:"
$IPT -A check-flags -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
$IPT -A check-flags -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit 5/minute -j LOG --log-level 5 --log-prefix "SYN/FIN:"
$IPT -A check-flags -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
# Apply and add invalid states to the chains
#einfo "Applying chains to INPUT"
$IPT -A INPUT -j check-flags
$IPT -A INPUT -j dns-in
$IPT -A INPUT -j allowed-connection-in
$IPT -A INPUT -j drop-system-ports-in
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A INPUT -p icmp -j icmp_deny
$IPT -A INPUT -j deny-ssh-traffic-in
# А это где должно быть,в начале или в конце?
$IPT -A INPUT -i lo -j ACCEPT
#einfo "Applying chains to OUTPUT"
$IPT -A OUTPUT -j check-flags
$IPT -A OUTPUT -j dns-out
$IPT -A OUTPUT -j allow-www-traffic-out
$IPT -A OUTPUT -j allowed-connection-out
$IPT -A OUTPUT -j drop-system-ports-out
$IPT -A OUTPUT -m state --state INVALID -j DROP
$IPT -A OUTPUT -p icmp -j icmp_deny
# А это где должно быть,в начале или в конце?
$IPT -A OUTPUT -o lo -j ACCEPT
/bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all
/bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
/bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route
/bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
/bin/echo "0" > /proc/sys/net/ipv4/conf/all/secure_redirects
/bin/echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
/bin/echo "1" > /proc/sys/net/ipv4/conf/all/log_martians
/bin/echo "0" > /proc/sys/net/ipv4/ip_forward
for i in /proc/sys/net/ipv4/conf/*; do
/bin/echo "1" > $i/rp_filter
done
exit 0