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/.
Po przeczytaniu kilku przykładów konfiguracji zapory ustawiłem reguły Iptables. Ogólnie wszystko mi działa internet, ale nie mam pewności czy dobrze wszystko zrobiłem, w sumie to "posklejałem" kilka przykładów i taki oto wynik skryptu:
sudo iptables -F sudo iptables -P INPUT DROP sudo iptables -P FORWARD DROP sudo iptables -P OUTPUT DROP sudo iptables -A INPUT -i lo -j ACCEPT sudo iptables -A INPUT -m state --state INVALID -j DROP sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT sudo iptables -A INPUT -p tcp -i eth0 -j REJECT --reject-with tcp-reset sudo iptables -A INPUT -p udp -i eth0 -j REJECT --reject-with icmp-port-unreachable sudo iptables -A INPUT -p icmp --icmp-type echo-request -j REJECT --reject-with icmp-host-unreachable sudo iptables -A INPUT -m conntrack --ctstate INVALID -p tcp ! --tcp-flags SYN,RST,ACK,FIN,PSH,URG SYN,RST sudo iptables -N syn-flood sudo iptables -A INPUT -p tcp --syn -j syn-flood sudo iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN sudo iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j LOG --log-prefix "SYN-flood: " sudo iptables -A syn-flood -j DROP; sudo iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j LOG --log-prefix "Ping: " sudo iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT # Ping of death sudo iptables -A INPUT -p icmp --icmp-type echo-request -j REJECT --reject-with icmp-host-unreachable sudo iptables -A OUTPUT -p tcp --dport telnet -j REJECT sudo iptables -A INPUT -p tcp --dport telnet -j REJECT sudo iptables -A FORWARD -m state --state INVALID -j DROP sudo iptables -A OUTPUT -m state --state INVALID -j DROP sudo iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT sudo iptables -A OUTPUT -p tcp -m multiport --dports 20,21,22,25,43,53,80,443,465,587,1935,4321,5579,7634,8074 --syn -m state --state NEW -j ACCEPT sudo iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT sudo iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
Pewnie ktoś bardziej obeznany w temacie dopatrzy się jakichś błędów, ja się za bardzo nie znam tak na tym, dlatego proszę o ewentualne korekty co można by poprawić jeśli gdzieś tkwi błąd.
Offline
To zależy do czego służy ta maszyna.
Ja na desktopie OUTPUT mam ACCEPT.
Offline
Jako Desktop, do normalnego domowego użytku, przeglądanie neta, muzyka, filmy. Żeby był poprostu bezpieczniejszy.
Offline
Najprostszy firewall dla desktopa:
iptables -F iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -s 127.0.0.0/8 -d 127.0.0.0/8 -i lo -j ACCEPT
https://wiki.debian.org/DebianFirewall
A jak chcesz szybko bez studiowania co każda regułka oznacza to:
apt-get install ufw ufw enable
Ostatnio edytowany przez arecki (2019-02-02 14:47:09)
Offline
Iptables jest pase. xD
O tu jest dobry przykład fw (ogarnia ipv6 i ipv4):
#!/usr/sbin/nft -f flush ruleset create table inet filter create chain inet filter INPUT { type filter hook input priority 0; policy drop; } create chain inet filter FORWARD { type filter hook forward priority 0; policy drop; } create chain inet filter OUTPUT { type filter hook output priority 0; policy accept; } create chain inet filter state-check add rule inet filter state-check ct state { established, related } counter accept add rule inet filter state-check ct state invalid counter drop add rule inet filter INPUT counter jump state-check add rule inet filter INPUT iifname "lo" counter accept add rule inet filter INPUT counter drop add rule inet filter OUTPUT counter jump state-check
Offline
Morfik jak zwykle jest na bieżąco z przyszłymi rozwiązaniami :)
Offline
To nie są przyszłe rozwiązania, tylko już od pół roku obecne: xD
http://ral-arturo.org/2018/06/16/nfws2018.html
Choć jak się dosiałem do tego całego nftables, to całą masę błędów tam znalazłem. Najbardziej poważne dotyczą list adresów, coś jak ipset, który teraz natywnie niby ma w nftables działać, a działa tak, że gorzej to chyba nie mogli tego zrobić. xD Pozgłaszałem im tam szereg problemów i parę rzeczy poprawili, niektóre już mają oficjalne pacze ale jeszcze zajmie to trochę czasu zanim nftables będzie używalnym dla power userów i bardziej zaawansowanych sys/network adminów. Ja myślę, że się pospieszyli znacznie z tym przejściem na nftables ale taki podstawowy filter na desktopa bez problemu można sobie wrzucić -- nie trzeba robić 4 tablic dla ipv4 i kolejnych 4 dla ipv6, nie trzeba dublować reguł, tylko wystarczy stworzyć sobie w sumie jedną tablicę w niej dwa łańcuchy (ten forward też zbędny w sumie i można go nie tworzyć) i parę reguł na krzyż. xD Nawet counter'y można ominąć by cykle procka zaoszczędzić. xD
Offline
To tak na chłopski rozum i łopatologicznie.. netfilter czy iptables? I jak skonfigurować?
Offline
Dla Ciebie wystarczy na początek ufw ;)
@Morfik, bardziej mi chodziło o przyszłe rozwiązania w Debianie, chyba mi to umknęło.
Ostatnio edytowany przez arecki (2019-02-02 19:49:57)
Offline
arecki napisał(-a):
Dla Ciebie wystarczy na początek ufw ;)
@Morfik, bardziej mi chodziło o przyszłe rozwiązania w Debianie, chyba mi to umknęło.
Chodzi mi o to, że jeśli Iptables, to czy te reguły są poprawne czy mają jakieś błędy? Jeśli coś nie tak to skorygujcie kto się na tym zna.
Offline
Jeśli chodzi o Twoje reguły iptables to wyglądają poprawnie.
Offline
Witam wszystkich.
Pozwolę się podpiąć pod ten temat z moim problemem, żeby nie zakładać nowego...
Od kilku dni próbuję się uporać z konfiguracją firewalla, co nie wychodzi mi zbyt dobrze - właściwie to w ogóle mi nie wychodzi :).
Mam dokładniej na myśli przekierowanie portów.
Z uwagi, że w mojej okolicy jedyna sensowna opcja dostępu do internetu to LTE, a co za tym idzie podwójny NAT zmuszony zostałem do zakupu VPS'a celem uruchomienia kilku usług które miały być dostępne z zewnątrz.
VPS jest na OpenVZ (najtańsza opcja ;]), na nim Debian 9.
VPS z moim domowym serwerkiem (SRV) połączony jest tunelem OpenVPN.
Konfiguracja sieciowa wygląda tak:
VPS <publiczne_ip> na interfejsie venet0
VPS 10.0.0.1/24 na interfejsie tun0
SRV 10.0.0.2/24 na interfejsie tun0
Tunel działa prawidłowo.
Mogę łączyć się z VPS'a z usługani na SRV, np:
#ssh user@10.0.0.2
i odwrotnie (SSH na VPS jest na porcie 57185)
#ssh -p 57185 user@10.0.0.1 #ssh -p 57185 user@<publiczne_ip>
Więc jak napisałem wyżej tunel działa.
Połączenia z zewnątrz z VPS'em też oczywiście działają.
Chciałbym jako pierwsze przekierować na SRV 10.0.0.2:22 port VPS <publiczne_ip>:57186
dla uproszczenia, do momentu uruchomienia działającego przekierowania SSH ustawiłem iptables na VPS na akceptowanie wszystkiego:
iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT iptables -t nat -F iptables -t mangle -F iptables -F iptables -X
w /proc/sys/net/ipv4/ip_forward oczywiście znajduje się 1
następnie iptables dodaję do tablic NAT następujące wpisy:
-A PREROUTING -i venet0 -p tcp -d <publiczne_ip> --dport 57186 -j DNAT --to-destination 10.0.0.2:22 -A POSTROUTING -s 10.0.0.0/24 -j MASQUERADE
Niestety przekierowanie nie działa - nie da się połączyć z <publiczne_ip>:57186
Edit:
Po wyzerowaniu liczników i próbie połączenia z zewnątrz jeśli dobrze to odczytuję, reguła POSTROUTING nie zostaje wykonana ani razu
# iptables -Z -t nat # iptables -t nat -vL Chain PREROUTING (policy ACCEPT 3 packets, 120 bytes) pkts bytes target prot opt in out source destination 1 60 DNAT tcp -- venet0 any anywhere anywhere tcp dpt:57186 to:10.0.0.2:22 Chain POSTROUTING (policy ACCEPT 3 packets, 194 bytes) pkts bytes target prot opt in out source destination 0 0 MASQUERADE all -- any any 10.0.0.0/24 anywhere Chain OUTPUT (policy ACCEPT 2 packets, 134 bytes) pkts bytes target prot opt in out source destination
W jaki sposób powinienem to zrealizować? Co robię nie tak?
Bardzo proszę o pomoc.
Ostatnio edytowany przez marpi82 (2019-02-04 12:36:26)
Offline
Ja mam taki o to skrypt z możliwością włączania i wyłączania:
#!/bin/bash ### BEGIN INIT INFO # Provides: firewall # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: firewall # Description: firewall ### END INIT INFO #----------------------------------------------------- # Firewall #----------------------------------------------------- # # ------ Czyszczenie tablic i zmiana polityki -------- function clean() { # Czyszczenie tablic iptables -F iptables -X iptables -Z # Zmiana domyslnej polityki na DROP iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP } # --------------- Dostep do serwera ----------------- function access() { # Interfejs lokalny iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # Ruch wychodzacy iptables -A OUTPUT -j ACCEPT # Polaczenia nawiazane iptables -A INPUT -p tcp -j ACCEPT -m state --state ESTABLISHED,RELATED iptables -A INPUT -p udp -j ACCEPT -m state --state ESTABLISHED iptables -A INPUT -p icmp -j ACCEPT -m state --state ESTABLISHED,RELATED } # ---------------- Wylaczanie firewalla -------------- function clean_off() { # Czyszcenie tablic iptables -F iptables -X iptables -Z # Zmiana domyslnej polityki iptables -P FORWARD ACCEPT iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT } # ------------- { start | stop } --------------- set -e case "$1" in 'start') echo "Starting Firewall ..." clean access echo "ok..." ;; 'stop') echo "Stopping Firewall ..." clean_off ;; *) echo -e "Usage: firewall { start | stop }" ;; esac
Offline
Nie bardzo rozumiem jaki jest sens tej regułki:
iptables -A OUTPUT -o lo -j ACCEPT
skoro i tak ustawiasz:
iptables -A OUTPUT -j ACCEPT
Nie prościej ustawić domyślną politykę na ACCEPT?
Ostatnio edytowany przez arecki (2019-02-04 13:25:27)
Offline
Fakt, reguły się dublują ale to nie jest problem, to był mocno rozbudowany gotowiec, z którego na szybko wyrzuciłem wszystko co niepotrzebne.
Ostatnio edytowany przez loms (2019-02-04 14:09:42)
Offline
arecki napisał(-a):
Nie bardzo rozumiem jaki jest sens tej regułki:
Kod:
iptables -A OUTPUT -o lo -j ACCEPTskoro i tak ustawiasz:
Kod:
iptables -A OUTPUT -j ACCEPTNie prościej ustawić domyślną politykę na ACCEPT?
Nie prościej, bo politykę domyślną OUTPUT można czasem zmieniać.
Ja np kiedyś miałem na OUTPUT na ACCEPT, ale potem OUTPUT poszedł do Cgroup
a domyślna na DROP.
Poza tym polityka domyślna jest realizowana jako ostatnia, a nie czaję w jakim celu połączenie na localhosta musi frunąć przez wszystkie reguły FW zamiast zakończyć jej przetwarzanie w FW na pierwszym dopasowaniu.
Żeby oceniać konfigurację FW, to trzeba najpierw zrozumieć, które targety kończą przetwarzanie pakietu, a które nie kończą.
To jest kluczowa sprawa w każdym FW.
Mój aktualny OUTPUT w nftables:
chain output { type filter hook output priority 200; policy drop; oifname "lo" accept ip daddr @systemdns counter packets 2898 bytes 247078 accept ip6 daddr @systemdns6 counter packets 0 bytes 0 accept ip protocol icmp counter packets 4 bytes 1432 accept ip6 nexthdr ipv6-icmp counter packets 1 bytes 72 accept cgroup 1 counter packets 4329 bytes 1142359 accept cgroup 2 counter packets 5512 bytes 290499 accept cgroup 3 counter packets 68802 bytes 7906782 accept cgroup 4 counter packets 19810 bytes 1480715 accept cgroup 5 counter packets 0 bytes 0 accept cgroup 6 counter packets 0 bytes 0 accept cgroup 7 counter packets 0 bytes 0 accept cgroup 8 counter packets 7572 bytes 792441 accept cgroup 9 counter packets 1027 bytes 124076 accept cgroup 11 counter packets 24 bytes 1999 accept }
Pozdro
Ostatnio edytowany przez Jacekalex (2019-02-04 17:46:40)
Offline
Ok, w sumie patrząc na to pod kątem dobrych praktyk administratora lepiej stosować Twoją metodę.
Mimo wszystko ten przykład loms został niezbyt umiejętnie okrojony do podstawowego FW, przez co może trochę utrudniać zrozumienie zasady działania autorowi.
Offline
Podsumowując, pozostaję na razie przy Iptables. Co do nftables to na razie się wstrzymam dopóki dopóki go choć trochę nie obeznam.
W sumie chyba powinno wystarczyć to co kolega @arecki zaproponował:
arecki napisał(-a):
Najprostszy firewall dla desktopa:
Kod:
iptables -F iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -s 127.0.0.0/8 -d 127.0.0.0/8 -i lo -j ACCEPT
Więc te reguły umieściłem już w /etc/iptables/iptables.rules, a mój skrypt konfiguracyjny - część odnośnie własnie zapory miewa się następująco:
firewall () { echo -en '\x1b[H\x1b[2J' echo echo -e "\\033[1;31mKonfiguracja zapory\\033[0m" echo "===================" echo echo -e "\\033[1;36mTwój numer ip: \033[1;94m`hostname -i`\\033[0m" echo echo -e "\033[1;94m1"\\033[0m - Firewall "\033[1;94mSTOP"\\033[0m echo -e "\033[1;94m2"\\033[0m - Firewall "\033[1;94mstatus"\\033[0m echo -e "\033[1;94m3"\\033[0m - Firewall "\033[1;94mSTART"\\033[0m echo -e "\033[1;94m4"\\033[0m - Firewall - zablokuj internet echo -e "\033[1;94m0"\\033[0m - "\033[1;31m<=="\\033[0m Powrót do "\033[1;94mMenu główne"\\033[0m read -s key case "$key" in 1) echo -e "\\033[1;36mFirewall Iptables STOP...\\033[0m" sudo iptables -F sudo iptables -X sudo iptables -P INPUT ACCEPT sudo iptables -P OUTPUT ACCEPT echo $fin read firewall;; 2) echo -e "\\033[1;36mFirewall Iptables status...\\033[0m" sudo iptables -L -n -v echo $fin read firewall;; 3) echo -e "\\033[1;36mFirewall Iptables START...\\033[0m" sudo iptables -F sudo iptables-restore < /etc/iptables/iptables.rules echo $fin read firewall;; 4) echo -e "\\033[1;36mFirewall - zablokowanie całego internetu\\033[0m" sudo iptables -F sudo iptables -P INPUT DROP sudo iptables -P FORWARD DROP sudo iptables -P OUTPUT DROP echo $fin read firewall;; 0) menu;; *) echo $choice read firewall;; esac }
Offline
A ile trzeba się narobić żeby ten OUTPUT wyfiltrować, to normlanie masakra. xD
Podstawowe regułki
# nft list chain inet filter OUTPUT table inet filter { chain OUTPUT { type filter hook output priority filter; policy drop; jump check-state udp dport { 53 } counter packets 3435 bytes 217906 jump check-dns tcp dport { 53 } counter packets 3 bytes 180 jump check-dns oifname { "lo" } counter packets 680 bytes 40800 accept meta l4proto icmp counter packets 18 bytes 1512 accept ip6 nexthdr ipv6-icmp counter packets 36 bytes 2224 accept ip6 saddr fe80::/64 ip6 hoplimit 1 counter packets 159 bytes 12056 accept comment "link local address ipv6" ip saddr 169.254.0.0/16 ip ttl 1 counter packets 0 bytes 0 accept comment "link local address ipv4" udp dport { 67 } udp sport { 68 } counter packets 4 bytes 1312 accept comment "DHCP renew" ip6 daddr ff00::/8 ip6 hoplimit 1 counter packets 16 bytes 1840 accept comment "all multicasting addresses ipv6" ip daddr 224.0.0.0/4 ip ttl 1 counter packets 120 bytes 13556 accept comment "all multicasting addresses ipv4" tcp dport { 8080 } ip daddr 10.2.37.78 counter packets 16 bytes 960 accept comment "aero2 captcha code" meta cgroup { 0-4095 } counter packets 8367 bytes 536184 jump check-cgroup limit rate 30/minute burst 1 packets log prefix "* IPTABLES:OUTPUT * " flags all counter packets 0 bytes 0 counter packets 0 bytes 0 drop } }
Łańcuch od sprawdzania stanu połączenia:
# nft list chain inet filter check-state table inet filter { chain check-state { ct state { established, related } accept ct state { invalid } counter packets 61 bytes 9676 drop } }
Łańcuch od DNS, technicznie niby zbędny przy takiej konfiguracji ale trzymam go dla statów:
# nft list chain inet filter check-dns table inet filter { chain check-dns { oifname { "lo" } counter packets 3456 bytes 219155 accept comment "local dns" ip daddr 9.9.9.9 counter packets 1 bytes 82 accept comment "dnscrypt check" limit rate 30/minute burst 1 packets log prefix "* IPTABLES:DNS * " flags all counter packets 0 bytes 0 counter packets 0 bytes 0 drop } }
I jeszcze łańcuch od appek:
# nft list chain inet filter check-cgroup table inet filter { chain check-cgroup { meta cgroup { 147 } tcp dport { 443 } counter packets 2426 bytes 145560 accept comment "dnscrypt-proxy" meta cgroup { 1 } tcp dport { 80, 443 } counter packets 1178 bytes 70680 accept comment "browser firefox-main" meta cgroup { 2 } tcp dport { 80, 443 } counter packets 50 bytes 3000 accept comment "browser firefox-1" meta cgroup { 3 } tcp dport { 80, 443 } counter packets 0 bytes 0 accept comment "browser firefox-2" meta cgroup { 4 } tcp dport { 80, 443 } counter packets 166 bytes 9960 accept comment "browser google-chrome" meta cgroup { 5 } tcp dport { 80, 443 } counter packets 141 bytes 8460 accept comment "browser chromium" meta cgroup { 6 } tcp dport { 80, 443 } counter packets 88 bytes 5280 accept comment "browser opera" meta cgroup { 4-6 } udp dport { 443 } counter packets 8 bytes 11024 drop comment "google quic protocol" meta cgroup { 4-6 } tcp dport { 5228 } counter packets 10 bytes 600 drop comment "google services cloud messaging sync" meta cgroup { 4-6 } tcp dport { 8443 } counter packets 25 bytes 1500 drop comment "google search appliance admin console" meta cgroup { 4-6 } tcp dport { 9942 } counter packets 0 bytes 0 drop comment "google search appliance version vanager" meta cgroup { 7 } tcp dport { 80, 443 } counter packets 56 bytes 3360 accept comment "browser wget" meta cgroup { 8 } tcp dport { 80, 443 } counter packets 80 bytes 4800 accept comment "browser curl" meta cgroup { 17 } tcp dport { 80, 443, 465, 587, 993, 995 } counter packets 474 bytes 28440 accept comment "mail thunderbird" meta cgroup { 33 } tcp dport { 80, 443 } counter packets 1102 bytes 66120 accept comment "telegram" meta cgroup { 34 } tcp dport { 80, 443 } counter packets 1045 bytes 62700 accept comment "telegram-p1" meta cgroup { 35 } tcp dport { 80, 443 } counter packets 0 bytes 0 accept comment "telegram-p2" meta cgroup { 36 } tcp dport { 443 } counter packets 4 bytes 240 accept comment "signal" meta cgroup { 37 } tcp dport { 6697 } counter packets 1 bytes 60 accept comment "hexchat" meta cgroup { 38 } counter packets 46 bytes 1929 accept comment "mumble" meta cgroup { 39 } tcp dport { 5222, 5223 } counter packets 71 bytes 4260 accept comment "psi-plus" meta cgroup { 40 } tcp dport { 80, 443 } counter packets 0 bytes 0 accept comment "conky" meta cgroup { 41 } tcp dport { 80, 443 } counter packets 17 bytes 1020 accept comment "ruby gem" meta cgroup { 49 } counter packets 815 bytes 73103 accept comment "qbittorrent" meta cgroup { 50 } tcp dport { 443 } counter packets 2 bytes 120 accept comment "megasync" meta cgroup { 51 } tcp dport { 443 } counter packets 16 bytes 960 accept comment "dropbox" meta cgroup { 65 } counter packets 0 bytes 0 drop comment "vlc" meta cgroup { 66 } counter packets 0 bytes 0 drop comment "smplayer" meta cgroup { 67 } tcp dport { 80, 443 } counter packets 2 bytes 120 accept comment "mpv" meta cgroup { 68 } tcp dport { 80, 443 } counter packets 12 bytes 720 accept comment "minitube" meta cgroup { 70 } tcp dport { 80, 443, 9418 } counter packets 26 bytes 1560 accept comment "git" meta cgroup { 71 } counter packets 130 bytes 7800 accept comment "ip-utils" meta cgroup { 82 } tcp dport { 443 } counter packets 13 bytes 780 accept comment "calibre" meta cgroup { 83 } tcp dport { 21, 990 } counter packets 38 bytes 2280 accept comment "filezilla" meta cgroup { 84 } counter packets 0 bytes 0 accept comment "libreoffice" meta cgroup { 86 } counter packets 0 bytes 0 accept comment "rsync" meta cgroup { 87 } tcp dport { 1935 } counter packets 20 bytes 1200 accept comment "rtmpdump" meta cgroup { 97 } tcp dport { 80, 443 } counter packets 12 bytes 720 accept comment "debian-tools-net" meta cgroup { 98 } tcp dport { 443 } counter packets 0 bytes 0 accept comment "gpg only used when tor disabled" meta cgroup { 99 } tcp dport { 80, 443 } counter packets 10 bytes 600 accept comment "synaptic" meta cgroup { 129 } tcp dport { 4713 } counter packets 0 bytes 0 drop comment "pulseaudio" meta cgroup { 145 } meta l4proto tcp counter packets 182 bytes 10920 accept comment "tor" meta cgroup { 146 } tcp dport { 80, 443 } counter packets 9 bytes 540 accept comment "ddclient" meta cgroup { 148 } meta l4proto tcp counter packets 20 bytes 1200 accept comment "ssh" meta cgroup { 149 } udp dport { 161 } counter packets 8 bytes 568 accept comment "cups" meta cgroup { 149 } tcp dport { 9100-9102 } counter packets 4 bytes 240 accept comment "cups" meta cgroup { 257 } udp dport { 123 } counter packets 10 bytes 760 accept comment "systemd-timesyncd" meta cgroup { 513 } counter packets 2 bytes 120 accept comment "kde" meta cgroup { 1792 } limit rate 10/second burst 1 packets log prefix "* IPTABLES:urxvt * " flags all counter packets 0 bytes 0 comment "urxvt log" meta cgroup { 1792 } counter packets 0 bytes 0 drop comment "urxvt" meta cgroup { 2048 } limit rate 30/minute burst 1 packets log prefix "* IPTABLES:block-apps * " flags all counter packets 0 bytes 0 comment "block-apps log" meta cgroup { 2048 } counter packets 0 bytes 0 drop comment "block-apps" } }
Pierw myślałem, że sobie zrobię taki prosty filtr na appki na zasadzie przepuść albo nie przepuść ale doszedłem do wniosku, że można im w sumie jeszcze porty dorobić i wyszło coś takiego. Oczywiście ten cały filtr polega na cgroups i potrzebne są oznaczenia aplikacji, a to już osobna bajka. Jjeszcze lekka optymalizacja by się przydała by te częściej używane reguły były na początku. No i tam jeszcze parę appek mi zostało do wyłapania ale z auditd, to idzie nawet całkiem znośnie. xD
Offline
macios4x napisał(-a):
Po przeczytaniu kilku przykładów konfiguracji zapory ustawiłem reguły Iptables. Ogólnie wszystko mi działa internet, ale nie mam pewności czy dobrze wszystko zrobiłem, w sumie to "posklejałem" kilka przykładów i taki oto wynik skryptu:
Kod:
sudo iptables -F
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT DROP
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m state --state INVALID -j DROP
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp -i eth0 -j REJECT --reject-with tcp-reset
sudo iptables -A INPUT -p udp -i eth0 -j REJECT --reject-with icmp-port-unreachable
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j REJECT --reject-with icmp-host-unreachable
sudo iptables -A INPUT -m conntrack --ctstate INVALID -p tcp ! --tcp-flags SYN,RST,ACK,FIN,PSH,URG SYN,RST
sudo iptables -N syn-flood
sudo iptables -A INPUT -p tcp --syn -j syn-flood
sudo iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
sudo iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j LOG --log-prefix "SYN-flood: "
sudo iptables -A syn-flood -j DROP;
sudo iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j LOG --log-prefix "Ping: "
sudo iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT # Ping of death
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j REJECT --reject-with icmp-host-unreachable
sudo iptables -A OUTPUT -p tcp --dport telnet -j REJECT
sudo iptables -A INPUT -p tcp --dport telnet -j REJECT
sudo iptables -A FORWARD -m state --state INVALID -j DROP
sudo iptables -A OUTPUT -m state --state INVALID -j DROP
sudo iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A OUTPUT -p tcp -m multiport --dports 20,21,22,25,43,53,80,443,465,587,1935,4321,5579,7634,8074 --syn -m state --state NEW -j ACCEPT
sudo iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT
sudo iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
przeważnie na desktopie politykę domyślną OUTPUT ustawia się na ACCEPT, potem ewentualnie filtrujesz co ci tam potrzeba, przykładowo:
iptables -A OUTPUT -d 192.168.0.0/16 -j DROP iptables -A OUTPUT -d 244.0.0.0/4 -j DROP iptables -A OUTPUT -d 10.0.0.0/8 -j DROP
poza tym jak przytniesz takie kwiatki jak:
iptables -A FORWARD -m state --state INVALID -j DROP
gdzie masz jak byk:
iptables -P FORWARD DROP
btw. w regułach INPUT masz tego więcej
to będzie ok
Ostatnio edytowany przez hi (2019-02-18 00:05:19)
Offline