Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Witam,
Posiadam serwer na platformie proxmox. Zrobiłem sobie firewalla na przykładzie:
http://toniemy.org.pl/2009/12/14/firewall-dla-proxmox-a/
Działa poprawnie, na serwerze zainstalowanego mam najnowszego nginxa, config podstawowy, przesiadłem się na niego z apache2 ponieważ "gasili" mi strone. Nie wiem dokładnie w jaki sposób ale wiem napewno że to od strony serwera a nie skryptów php, na nginixie jest to samo, wiec moje pytanie jak zabezpieczyć strone (nginx'a) przed niepożądanymi pakietami?
Offline







Podobno człowiek...;)








Zależy, co to znaczy "gasili mi stronę".
Jakieś logi byłyby mile widziane (z tego gaszenia strony).
I w miarę możliwości opis samego zdarzenia, czy klęka sam Nginx, czy cały VPS (maszyna virtualna, którą dzierżawisz.).
Tak na goraco, Nginx ma limity per/IP, do tego w iptables są takie narzędzia, jak limit, connlimit i hashlimit.
Tu masz conieco o zabezpieczaniu Nginxa:
http://www.cyberciti.biz/tips/linux-unix-bsd-nginx- … security.html
http://wiki.nginx.org/HttpLimitConnModule
http://wiki.nginx.org/HttpLimitReqModule
http://wiki.nginx.org/Modules
Dodatkowo - żaden serwer po samej instalacji nie jest całkowicie bezpieczny, każdy trzeba skonfigurować, i z każdym jest przy tym trochę roboty.
Tak samo firewall:
http://pl.wikibooks.org/wiki/Sieci_w_Linuksie/Netfilter/iptables
A tutaj elementarz (do Gentoo, ale 85% treści jest wspólne we wszystkich Linuxach):
http://www.gentoo.org/doc/pl/security/security-handbook.xml
Pozdrawiam
;-)
Ostatnio edytowany przez Jacekalex (2012-04-13 01:02:12)
Offline
dzieki wielkie #Jacekalex ;) takich materiałów właśnie trzeba mi było, jak się z nimi uporam i dalej będzie coś nie tak bedę pisał dalej ;)
Offline
mam następny problem z firewallem, gdy go uruchamiam nie mam możliwości ściągania niczego na serwer wgetem itd.
odszukałem w google że należy edytować plik /etc/sysctl.conf i tak też zrobiłem, ustawiłem:
net.ipv4.ip_local_port_range = 60000 65000
w firewallu odblokowałem zakres portów od 60000 do 65000 dla maszyny głównej i wirtualnych VPS, ale niestety ściągać wget mogę tylko na głównej maszynie a na wirtualnych nadal nie, gdy ten sam plik edytuje na wirtualnych wyskakuje mi:
"error:permission deniedonkey 'net.ipv4.ip_local_port_range'"
znalazłem na maszynie głównej /etc/sysctl/vzctl.conf i tam także dodałem ip_loal_port_range ale to nic nie pomaga ;/
firewall:
#!/bin/bash
source /etc/firewall.d/hostnode.conf
purge() {
echo -n "Firewall: czyszczenie ustawien"
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P INPUT ACCEPT
iptables -F
iptables -Z
iptables -X
iptables -F -t mangle
echo
}
setup() {
echo -n "Firewall: ustawienie polityki"
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -I INPUT -p icmp -j ACCEPT
iptables -I FORWARD -p icmp -j ACCEPT
# Przepuszczamy ruch DNS
iptables -I FORWARD -j ACCEPT --protocol tcp --destination-port 53
iptables -I FORWARD -j ACCEPT --protocol udp --destination-port 53
iptables -I INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED
iptables -I FORWARD -j ACCEPT -m state --state ESTABLISHED,RELATED
# Dajemy pełny dostęp dla wirtualek KVM
#####################################
echo -n "KVM!!!!!!!!!!!!!!!!"
iptables -I FORWARD -j ACCEPT --source xx
iptables -I FORWARD -j ACCEPT --destination xx
#####################################
# Dajemy pełny dostęp dla wirtualek KVM
iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT
iptables -I INPUT -j ACCEPT -i lo
echo "Firewall: ustawianie mastera"
for port in $TCPPORTS ; do
echo -n " tcp port $port"
iptables -I INPUT -j ACCEPT -d $IP --protocol tcp --destination-port $port
echo
done
for port in $UDPPORTS ; do
echo -n " upd port $port"
iptables -I INPUT -j ACCEPT -d $IP --protocol udp --destination-port $port
echo
done
for ip in $DMZS ; do
echo -n " DMZ $ip"
iptables -I INPUT -i vmbr0 -j ACCEPT -s $ip
iptables -I FORWARD -i vmbr0 -j ACCEPT -s $ip
echo
done
#ograniczenie logowan ssh
iptables -N ssh_blocked
iptables -A ssh_blocked -d $IP -m recent --name sshd --rcheck --hitcount 2 --seconds 60 -j REJECT --reject-with icmp-host-unreachable
iptables -A ssh_blocked -d $IP -m recent --name sshd --update
iptables -A ssh_blocked -d $IP -m recent --name sshd --rcheck -j ACCEPT
iptables -A ssh_blocked -d $IP -m recent --name sshd --set
iptables -A ssh_blocked -d $IP -j ACCEPT
iptables -A INPUT -d $IP -p tcp --dport 22 --syn -m state --state NEW -j ssh_blocked
#SNAT dla virtualek (mozemy sobie walnac jakas wewnetrzna siec dla potrzeb np HAProxy)
echo 'snat odpalony'
iptables -t nat -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source $IP
#awk '/IP_ADDRESS/ {print substr($1,13,length($1)-13)}' /etc/firewall.d/*.fw > firewall.txt
#awk '/IP_ADDRESS/ {print substr($0,13,length($0)-13)}' /etc/vz/conf/*.conf > temp.txt
#for i in `cat firewall.txt`
#do
#egrep -v ^$i$ temp.txt > newfile2.txt
#cat newfile2.txt | sort -u > temp1.txt
#rm -f firewall.txt
#rm -f newfile2.txt
#mv temp1.txt temp.txt
#done
#echo
#echo "ustawienia pelnego dostepu dla virtualek"
#for i in `cat temp.txt`
#do
#echo " Pelny dostep dla $i"
#iptables -I FORWARD -j ACCEPT --source $i
#iptables -I FORWARD -j ACCEPT --destination $i
#rm -f temp.txt
#done
CTSETUPS=`echo /etc/firewall.d/*.fw`
if [ "$CTSETUPS" != "/etc/firewall.d/*.fw" ] ; then
echo
echo "Firewall: ustawienia polityki dla vitualek"
for i in $CTSETUPS ; do
. $i
echo -n " $CTNAME CT$CTID"
if [ -n "$BANNED" ]; then
for source in $BANNED ; do iptables -I FORWARD -j DROP --destination $IP_ADDRESS --source $source ; done
fi
if [ -n "$TCPPORTS" ]; then
for port in $TCPPORTS ; do iptables -I FORWARD -j ACCEPT --protocol tcp --destination $IP_ADDRESS --destination-port $port ; done
fi
if [ -n "$UPDPORTS" ]; then
for port in $UDPPORTS ; do iptables -I FORWARD -j ACCEPT --protocol udp --destination $IP_ADDRESS --destination-port $port ; done
fi
if [ -n "$DMZS" ]; then
for source in $DMZS ; do iptables -I FORWARD -j ACCEPT --protocol tcp --destination $IP_ADDRESS --source $source ; done
for source in $DMZS ; do iptables -I FORWARD -j ACCEPT --protocol udp --destination $IP_ADDRESS --source $source ; done
fi
#Limity dla polaczen (mozna przerobic pod porty)
if [ -n "$LIMITS" ]; then
for limity in $LIMITS ; do iptables -t filter -I FORWARD -p tcp -d $IP_ADDRESS -m connlimit --connlimit-above $limity --connlimit-mask 32 -j REJECT ; done
fi
#Limity DNS
iptables -t filter -I FORWARD -p tcp --dport 53 -d $IP_ADDRESS -m connlimit --connlimit-above 10 --connlimit-mask 32 -j REJECT
[ $? -eq 0 ]
echo
done
fi
}
case "$1" in
start)
echo "Fiewall wlaczony"
purge
setup
;;
stop)
echo "Firewall wylaczony"
purge
;;
restart)
$0 stop
$0 start
;;
status)
iptables -n -L
;;
*)
echo "Usage: $0 "
;;
esacsysctl.conf:
# Avoid a smurf attack net.ipv4.icmp_echo_ignore_broadcasts = 1 # Turn on protection for bad icmp error messages net.ipv4.icmp_ignore_bogus_error_responses = 1 # Turn on syncookies for SYN flood attack protection net.ipv4.tcp_syncookies = 1 # Turn on and log spoofed, source routed, and redirect packets net.ipv4.conf.all.log_martians = 1 net.ipv4.conf.default.log_martians = 1 # No source routed packets here net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.default.accept_source_route = 0 # Turn on reverse path filtering net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 # Make sure no one can alter the routing tables net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.all.secure_redirects = 0 net.ipv4.conf.default.secure_redirects = 0 # Don't act as a router net.ipv4.ip_forward = 1 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 # Turn on execshild kernel.exec-shield = 1 kernel.randomize_va_space = 1 # Tuen IPv6 net.ipv6.conf.default.router_solicitations = 0 net.ipv6.conf.default.accept_ra_rtr_pref = 0 net.ipv6.conf.default.accept_ra_pinfo = 0 net.ipv6.conf.default.accept_ra_defrtr = 0 net.ipv6.conf.default.autoconf = 0 net.ipv6.conf.default.dad_transmits = 0 net.ipv6.conf.default.max_addresses = 1 # Optimization for port usefor LBs # Increase system file descriptor limit fs.file-max = 65535 # Allow for more PIDs (to reduce rollover problems); may break some programs 32768 kernel.pid_max = 65536 # Increase system IP port limits net.ipv4.ip_local_port_range = 60000 65000 # Increase TCP max buffer size setable using setsockopt() net.ipv4.tcp_rmem = 4096 87380 8388608 net.ipv4.tcp_wmem = 4096 87380 8388608 # Increase Linux auto tuning TCP buffer limits # min, default, and max number of bytes to use # set max to at least 4MB, or higher if you use very high BDP paths # Tcp Windows etc net.core.rmem_max = 8388608 net.core.wmem_max = 8388608 net.core.netdev_max_backlog = 5000 net.ipv4.tcp_window_scaling = 1
Ostatnio edytowany przez zomb (2012-04-19 16:44:29)
Offline







Podobno człowiek...;)








OpenVZ to nie jest samodzielny serwer, ani nawet wirtualka z własnym jajem, żebyś sam sobie ustawiał sysctl.
To jest zwykły chroot na sterydach, tam jajem zarządza admin maszyny głównej, a nie userzy wirtualek.
A jak wget nie działa, to znaczy, że coś przekombinowałeś, pokaż:
iptables -S iptables -t nat -S iptables -t mangle -S
To by było na tyle
;-)
Offline
Prosze:
root@:~# iptables -S -P INPUT DROP -P FORWARD DROP -P OUTPUT ACCEPT -N ssh_blocked -A INPUT -d (IP_GLOWNE)/32 -p udp -m udp --dport 53 -j ACCEPT -A INPUT -d (IP_GLOWNE)/32 -p tcp -m tcp --dport 60000:65000 -j ACCEPT -A INPUT -d (IP_GLOWNE)/32 -p tcp -m tcp --dport 443 -j ACCEPT -A INPUT -d (IP_GLOWNE)/32 -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -d (IP_GLOWNE)/32 -p tcp -m tcp --dport 53 -j ACCEPT -A INPUT -d (IP_GLOWNE)/32 -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -d (IP_GLOWNE)/32 -p tcp -m tcp --dport 21 -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -d (IP_GLOWNE)/32 -p tcp -m tcp --dport 22 --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j ssh_blocked -A FORWARD -d (IP_VPS1)/32 -p tcp -m tcp --dport 53 -m connlimit --connlimit-above 10 --connlimit-mask 32 -j REJECT --reject-with icmp-port-unreachable -A FORWARD -d (IP_VPS1)/32 -p tcp -m connlimit --connlimit-above 40 --connlimit-mask 32 -j REJECT --reject-with icmp-port-unreachable -A FORWARD -d (IP_VPS1)/32 -p tcp -m tcp --dport 22 -j ACCEPT -A FORWARD -d (IP_VPS1)/32 -p tcp -m tcp --dport 60000:65000 -j ACCEPT -A FORWARD -d (IP_VPS1)/32 -p tcp -m tcp --dport 21 -j ACCEPT -A FORWARD -m physdev --physdev-is-bridged -j ACCEPT -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT -A FORWARD -p udp -m udp --dport 53 -j ACCEPT -A FORWARD -p tcp -m tcp --dport 53 -j ACCEPT -A FORWARD -p icmp -j ACCEPT -A ssh_blocked -d (IP_GLOWNE)/32 -m recent --rcheck --seconds 60 --hitcount 2 --name sshd --rsource -j REJECT --reject-with icmp-host-unreachable -A ssh_blocked -d (IP_GLOWNE)/32 -m recent --update --name sshd --rsource -A ssh_blocked -d (IP_GLOWNE)/32 -m recent --rcheck --name sshd --rsource -j ACCEPT -A ssh_blocked -d (IP_GLOWNE)/32 -m recent --set --name sshd --rsource -A ssh_blocked -d (IP_GLOWNE)/32 -j ACCEPT root@:~# iptables -t nat -S -P PREROUTING ACCEPT -P POSTROUTING ACCEPT -P OUTPUT ACCEPT -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source (IP_GLOWNE) -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source (IP_GLOWNE) -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source (IP_GLOWNE) -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source (IP_GLOWNE) -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source (IP_GLOWNE) -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source (IP_GLOWNE) -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source (IP_GLOWNE) -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source (IP_GLOWNE) -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source (IP_GLOWNE) -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source (IP_GLOWNE) -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source (IP_GLOWNE) -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source (IP_GLOWNE) -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source (IP_GLOWNE) -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source (IP_GLOWNE) -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source (IP_GLOWNE) -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source (IP_GLOWNE) -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source (IP_GLOWNE) -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source (IP_GLOWNE) -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source (IP_GLOWNE) -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source (IP_GLOWNE) -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source (IP_GLOWNE) -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source (IP_GLOWNE) -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source (IP_GLOWNE) -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source (IP_GLOWNE) -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source (IP_GLOWNE) -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source (IP_GLOWNE) -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source (IP_GLOWNE) -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source (IP_GLOWNE) -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source (IP_GLOWNE) -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source (IP_GLOWNE) -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source (IP_GLOWNE) -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source (IP_GLOWNE) -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source (IP_GLOWNE) root@:~# iptables -t mangle -S -P PREROUTING ACCEPT -P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -P POSTROUTING ACCEPT
zauważyłem jedną rzecz, jeżeli dodam do firewalla:
iptables -I FORWARD -j ACCEPT --source (IP_VPS)
wtedy wget itd dziala prawidłowo i ogólnie wszystko tak jak ma być poza małym wyjątkiem, wszystkie maszyny wirtualne "widzą siebie nawzajem" i mają do siebie pełny dostęp, czyli np blokuje port 80 na VPS1 i nie ma do niego dostępu z zewnątrz serwera, ale już z VPS2 jest dostęp ;/
Offline







Podobno człowiek...;)








-A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source (IP_GLOWNE)
Jedna regułka nie wystarzczy?
Jeśli
iptables -I FORWARD -j ACCEPT --source (IP_VPS)
Otwiera wyjście, ale daje za duże uprawnienia, to może:
iptables -I FORWARD --source (IP_VPS) -o {interfejs-zewn} -j ACCEPTzałatwi sprawę?
Offline
Jacekalex napisał(-a):
Kod:
-A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source (IP_GLOWNE)Jedna regułka nie wystarzczy?
wystarczy i przecież w sumie w firewallu mam jedna, nie wiem dlaczego tak sie to robi.
zamieniłem na
iptables -I FORWARD --source (IP_VPS) -o {interfejs-zewn} -j ACCEPTale blokuje wgeta, za {interfejs-zewn} próbowałem eth0 i venet0
Offline







Podobno człowiek...;)








Reguł firewalla masz z pól metra, i coś blokuje połączenia?
Ciekawe, co?
Spróbuj debugować firewalla przez moduł TRACE (tablica raw) i zobacz w logach, na którym łańcuchu/reugule się to blokuje.
Tu masz przykład, jak to zrobić:
http://serverfault.com/questions/78240/debugging-rules-in-iptables
Poza tym, jak stawiasz firewalla, to dodajesz po dwie/trzy regułki, i patrzyssz, czy działa jak powinno.
Bo masz w tych regułach taką choinkę, że trza by wróżki, żeby wyczaić, co się w tej choince dzieje. ;)
Ostatnio edytowany przez Jacekalex (2012-04-19 20:50:54)
Offline
okej, zrobię tak jak mówisz, zacznę sklejać tego firewalla linijka po linijce i zobaczymy co z tego wyjdzie,
mówisz że
iptables -I FORWARD --source (IP_VPS) -o {interfejs-zewn} -j ACCEPTpowinno śmigać? co powinienem umieścić w interfejsie zewnętrznym? eth0 czy venet0 ?
Offline







Podobno człowiek...;)








Musisz trochę popróbować.
Ja z tego firewalla w ogóle nie czaję, czy akcja jest na maszynie wirtualnej, czy na systemie gospodarza.
W każdym razie wyjściowy interfejs to ten, który dostarcza net dla systemu, na którym dodajesz regułę, i na którym to ma działać ("to" oznacza tutaj np wgeta).
wtedy wget itd dziala prawidłowo i ogólnie wszystko tak jak ma być poza małym wyjątkiem, wszystkie maszyny wirtualne "widzą siebie nawzajem" i mają do siebie pełny dostęp, czyli np blokuje port 80 na VPS1 i nie ma do niego dostępu z zewnątrz serwera, ale już z VPS2 jest dostęp ;/
Co to takiego?
Bo ja bym na tych wirtualkach poustawiał firewalle, OpenVZ daje taką możliwość.
Bo jak chcesz ustawić wszystko dla wirtualek na systemie głównym, to już nie będzie firewall tylko rękodzieło artystyczne :D
Ostatnio edytowany przez Jacekalex (2012-04-19 20:48:38)
Offline
firewall działa na systemie gospodarza i to jak dla mnie i zastosowania serwera wygodne rozwiązanie.
wtedy wget itd dziala prawidłowo i ogólnie wszystko tak jak ma być poza małym wyjątkiem, wszystkie maszyny wirtualne "widzą siebie nawzajem" i mają do siebie pełny dostęp, czyli np blokuje port 80 na VPS1 i nie ma do niego dostępu z zewnątrz serwera, ale już z VPS2 jest dostęp ;/
tutaj chodzi o to, że:
załóżmy że dodam: iptables -I FORWARD -j ACCEPT --source (IP_VPS) i włączę firewalla i blokuje np port 21 to z zewnątrz czyli np dla mnie czy dla Ciebie ten port 21 jest zamknięty i nie można się na niego dostać ale np z drugiej maszyny wirtualnej na serwerze już ten port jest otwarty i można nie niego wejść
Offline
poradziłem sobie z firewallem ;) wielkie dzieki za pomoc ;)
Ostatnio edytowany przez zomb (2012-04-22 22:34:48)
Offline