Rozglądałem się w sieci w poszukiwaniu skryptu, który zrzuci cały ruch na wszystkie porty z wyjątkiem portów http (80) i https (443), a następnie zezwoli tylko na ruch na wszystkich innych portach z kraju x (gdzie w moim przypadek kraju x to USA).
Nie chcę dodawać wszystkich adresów IP z każdego kraju, chcę tylko zezwolić Ips z mojego kraju, a następnie zablokować prawie cały inny ruch ze świata zewnętrznego. Nikt poza moim krajem nie powinien mieć dostępu do ssh, ftp, smtp, ect. inny niż ja. Jeśli to się kiedykolwiek zmieni, dodam specjalny przypadek, gdy się to zbliży.
Dygresja
Muszę zauważyć, że znalazłem pytanie, które zawiera skrypt blokujący ip według kraju za pomocą tabel ip, ale to jest wiele dodatkowych wstawek, które musiałbym zrobić.
Skrypt oznaczony jako najlepsza odpowiedź zablokuje cały ruch z tych adresów IP. Chcę tylko zablokować dostęp do wszystkich portów oprócz 80 i 443.
Aktualizacja
Zgodnie z następującą zasadą
iptables -A OUTPUT -m geoip --dst-cc CN -j DROP
czy mógłbym to zmodyfikować i zrobić coś takiego
iptables -A OUTPUT -m geoip --dst-cc CN --dport 80 -j ACCEPT
iptables -A OUTPUT -m geoip --dst-cc CN --dport 443 -j ACCEPT
iptables -A OUTPUT -m geoip --dst-cc CN -j DROP
Zakładam, że pozwoliłoby to IPS z Chin na dostęp do portu 80 i portu 443, a resztę pozostawiłoby. Czy to założenie byłoby słuszne? Jeśli nie, dlaczego nie?
Aktualizacja 2
Po pewnym zamieszaniu okazało się, że moja wersja Ubuntu nie lubi tego --dport
atrybutu. Więc zamiast korzystać z tego, że użytkownicy systemu Ubuntu 14+ (przynajmniej mam tylko Ubuntu 14.04, 14.10 i 15.04 zainstalowane na niektórych komputerach) będą musieli użyć-p PORT_NUMBER_OR_NAME
Tak by to wyglądało
iptables -A OUTPUT -m geoip --dst-cc CN -p 443 -j ACCEPT
lub dla ruchu przychodzącego,
iptables -A INPUT -m geoip --src-cc CN -p 443 -j ACCEPT