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/.





Szczawiożerca






Huk napisał(-a):
1. Firewall - standardowo odrzucać wszystko, poza portami dla HTTP/HTTPS oraz SSH
Na początek tyle ci wystarczy.
wyłączyć logowanie root'a, włączyć tylko protokół mk. 2 itd.
To jest w standardzie.
To w zasadzie tyle co mi do głowy przychodzi jako taka podstawa zabezpieczeń - o czymś jeszcze powinienem pamiętać?
Klucze zamiast hasła? W ogóle po skonfigurowaniu kilku rządzeń (kilka niezależnych opcji logowania przy użyciu kluczy) ja bym całkiem wyłączył logowanie po haśle.
Jeszcze się tak zastanawiam, czy jest sens jakoś próbować dodawać czasowy banning IP, w przypadku iluś tam nieudanych prób logowania? Do tego jest chyba trzeba użyć Fail2Ban lub czegoś podobnego?
Sam firewall to lepsze rozwiązanie niż takie zabawki jak fail2ban. Iptables może od razu wycinać i banować intruzów.
Może poświeć jakiś tydzień na różne tego typu eksperymenty z konfiguracją i zabezpieczeniami, gdzieś sobie zapisuj procedury, a potem wszystko zaoraj i postaw od nowa poprawnie, wiedząc mniej więcej co i jak chcesz osiągnąć.
Offline







Podobno człowiek...;)








@Huk
Usługi typu SSH radziłbym zbroić tak:
iptables -N SSH iptables -A INPUT -p tcp --dport 11343 -m connlimit --connlimit-upto 20 --connlimit-mask 0 --connlimit-saddr -j SSH iptables -A SSH -m hashlimit --hashlimit 15/min --hashlimit-burst 5 --hashlimit-mode srcip --hashlimit-name SSH -j ACCEPT iptables -A SSH -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT iptables -A SSH -j LOG --log-prefix "SSH - zablokowany" iptables -A SSH -j DROP
Gdzie 11343 to port SSH.
Identycznie, ale oczywiście z różnymi limitami connlimita i hashlimita radzę zbroić wszystkie usługi.
PS:
A tu mała pułapka na skanery portów:
https://forum.dug.net.pl/viewtopic.php?pid=269383#p269383
Pozdro
Ostatnio edytowany przez Jacekalex (2017-09-11 09:38:16)
Offline



Smoleńsk BULWA!




Dobra panowie, na razie naskrobałem sobie coś takiego jako firewall:
#! /bin/sh
# /etc/init.d/firewall
#
# Some things that run always
touch /var/lock/firewall
# Carry out specific functions when asked to by the system
case "$1" in
start)
echo "Starting firewall "
# Clear everything
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
# Change the default policy of all three chains to DROP
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Accept input from loopback device
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# Accept input from already established connections
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Drop input from not defined connections
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP
# Accept SSH connections
iptables -N SSH
iptables -A INPUT -p tcp --dport 11343 -m connlimit --connlimit-upto 20 --connlimit-mask 0 --connlimit-saddr -j SSH
iptables -A SSH -m hashlimit --hashlimit 15/min --hashlimit-burst 5 --hashlimit-mode srcip --hashlimit-name SSH -j ACCEPT
iptables -A SSH -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A SSH -j LOG --log-prefix "SSH - zablokowany"
iptables -A SSH -j DROP
# Accept HTTP and HTTPS connections
iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
;;
stop)
echo "Stopping firewall"
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -P INPUT ACCEPT
;;
*)
echo "Usage: /etc/init.d/firewall {start|stop}"
exit 1
;;
esac
exit 0I pożeniłem z systemd żeby włączało się na starcie - o ile dobrze myślę to chyba powinno wystarczyć? Dopuszczam tylko ssh po innym porcie + http/https - nic innego na razie nie trzeba...
@Jacekalex:
W sumie to połączyłem swój stary skrypt z tym co zapodałeś do SSH - czytając jakieś poradniki na necie wydaje się że podejście chyba poprawne...
@yossarian:
Planuję zrobić tak jak mówisz - na razie rozczajam i zapisuję sobie co i jak, a potem dam reinstall VPS'a i postawię już 'bo Bożemu' ...
W sumie to pozostaje kwestia bezpieczeństwa samej strony. Generalnie jeżeli chodzi o .NET Core (ale pewnie też o inne ustrojstwa) MS podszedł do tematu tak że napisali mini-server o nazwie Kestrel na którym odpala się aplikacja, ale zalecają przed niego ustawić jakiś 'normalny' serwer (nginx'a, Apach'a, czy w przypadku Windos - IIS) i zrobić reverse proxy.
Czy dobrze myślę że tutaj wypadało by utworzyć sobie usera systemowego typowo pod stronę, pozabierać mu wszelkie uprawnienia poza niezbędnym minimum i na jego koncie odpalać samą stronę (na Kestrel'u) a nginx'a czy Apatcha normalnie na kontach domyślnych na których się poinstalują?
Dodam tyko że ja tutaj nie potrzebuję jakichś 'bankowych' zabezpieczeń... celuję bardziej w jakieś podstawy, żeby nie pozostawiać jakichś oczywistych luk - jak to mówią 'nikt z tego strzelać nie będzie' :P
Offline







Podobno człowiek...;)








Na 80,443 też daj jakieś sensowne wartości connlimit i hashlimit.
Do tego port SSH masz nieprawidłowy, przed chwilką w totolotku wylosowali inny...
Do testowania zbrojeń na porcie SSH radzę puścić SSH równocześnie na dwóch portach, żeby sobie nie odciąć dostępu do serwera przez przypadek.
Dopiero,jak masz pewność, ze wszystko jest optymalne, to ten drugi port usuwasz z sshd_config.
Jeszcze weselej wygląda SSH,kiedy hashlimit umieścisz przed connlimitem, żeby przekierowywał do łańcucha SSH, ale obejmował zakres jakieś +-250 portów od faktycznego.
Wtedy żaden skaner portów ani za pół roku nie znajdzie serwera SSH, bo zawsze będzie dropowany po kilku próbach na portach w okolicy SSH.
Można tam też elegancko wsadzić na sąsiednich portach ipseta, z opcją timeout, sznurka do metody ipset wypad masz tam wyżej.
Ostatnio edytowany przez Jacekalex (2017-09-11 21:55:59)
Offline



Smoleńsk BULWA!




@Jacekalex:
Hmm po kilku godzinach czytania różnych poradników chyba wiem mniej niż zanim zacząłem... dopisałem sobie na dole jeszcze coś takiego, analogicznie do tej Twojej reguły do SSH:
iptables -N HTTP
iptables -A INPUT -p tcp -m multiport --dports 80,443 -m connlimit --connlimit-upto 20 --connlimit-mask 0 --connlimit-saddr -j HTTP
iptables -A HTTP -m hashlimit --hashlimit 1/min --hashlimit-burst 1 --hashlimit-mode srcip --hashlimit-name HTTP -j ACCEPT
iptables -A HTTP -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A HTTP -j LOG --log-prefix "HTTP - zablokowany"
iptables -A HTTP -j DROPWydawało mi się że to powinno teoretycznie ograniczać zwrotki z serwera do jednej na minutę max... tymczasem mogę sobie spokojnie odpytywać stronę i zwraca jakby nigdy nic - no chyba że hashlimit nie działa tak jak mi się wydawało... albo Fiddler napierdziela z jakiegoś cholernego cache...
Tak btw - wszędzie gdzie czytam jakieś odniesienia odnośnie hashlimit na porcie 80 jest zwykle zdanie 'tylko sobie ustaw hashlimit i burst na taki jaki ci trzeba' - co to w praktyce oznacza? Skąd ja mam wiedzieć 'jaki mi trzeba' ? Mam rozumieć że admini stron bankowych codziennie sobie ten limit wyliczają na podstawie ilości połączeń z ostatnich 24 godzin czy coś?
Offline







Podobno człowiek...;)








Kod:
iptables -A HTTP -m hashlimit --hashlimit 1/min --hashlimit-burst 1 --hashlimit-mode srcip --hashlimit-name HTTP -j ACCEPT iptables -A HTTP -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
To nie ma sensu,bo jak limit zadziała w regule 1, to i tak wpuszcza w regule 2.
Do http użyj lepiej SYNPROXY:
https://morfikov.github.io/post/unikanie-atakow-ddos-z-synproxy/
Wcześniej do usług publicznych stosowałem hashlimit i connlimit tak:
https://forums.gentoo.org/viewtopic-p-7081326.html#7081326
Ostatnio edytowany przez Jacekalex (2017-09-13 12:20:33)
Offline