Odpowiedzi:
Wypróbuj to z dostępem roota:
# Set default chain policies
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Accept on localhost
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# Allow established sessions to receive traffic
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Pamiętaj, że spowoduje to brutalne odcięcie wszystkich działających połączeń - dotyczy to między innymi połączenia SSH, którego możesz użyć do administrowania serwerem. Używaj tego tylko, jeśli masz dostęp do lokalnej konsoli.
Zobacz odpowiedź Miphixa, aby dowiedzieć się, jak dodać wyjątek dla SSH.
Jeśli pracujesz zdalnie przez SSH, możesz dodać to ( -I
wstawia przed wszystkimi innymi regułami INPUT
):
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
Jeśli usługa SSH nasłuchuje na innym porcie, będziesz musiał użyć tego portu zamiast 22
.
W przeciwnym razie możesz przypadkowo utracić dostęp.
Pamiętaj, że inne odpowiedzi nie obejmują IPv6! Jeśli twój system akceptuje ruch IPv6, żadna reguła iptables nie będzie miała zastosowania do ruchu ipv6.
zamiast bezpośrednio używać iptables / ip6tables, zalecam użycie iptables-restore i zapisywanie. Narzędzia te pozwalają określić konfigurację iptables z wieloma regułami i łatwo załadować ją za pomocą jednego polecenia.
utwórz plik (nazwałem go iptables.rules) o następującej treści:
*filter
# drop forwarded traffic. you only need it of you are running a router
:FORWARD DROP [0:0]
# Accept all outgoing traffic
:OUTPUT ACCEPT [623107326:1392470726908]
# Block all incoming traffic, all protocols (tcp, udp, icmp, ...) everything.
# This is the base rule we can define exceptions from.
:INPUT DROP [11486:513044]
# do not block already running connections (important for outgoing)
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# do not block localhost
-A INPUT -i lo -j ACCEPT
# do not block icmp for ping and network diagnostics. Remove if you do not want this
# note that -p icmp has no effect on ipv6, so we need an extra ipv6 rule
-4 -A INPUT -p icmp -j ACCEPT
-6 -A INPUT -p ipv6-icmp -j ACCEPT
# allow some incoming ports for services that should be public available
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
# commit changes
COMMIT
Uwaga: dodałem dodatkowy przykład, jeśli chcesz zezwolić ICMP i ruch na określone porty.
teraz możesz załadować go za pomocą następujących poleceń:
iptables-restore < iptables.rules
ip6tables-restore < iptables.rules
Teraz Twoje zasady obejmują również IPv6 i są łatwe w zarządzaniu.
Dodatkowa uwaga dla użytkowników Debiana: jeśli jesteś zadowolony ze swoich reguł, możesz je apt install iptables-persistent
przywrócić po ponownym uruchomieniu. Reguły nie są automatycznie zapisywane podczas zamykania, więc uruchom, netfilter-persistent save
aby zaktualizować trwałe reguły.
Obie powyższe odpowiedzi są w jakiś sposób poprawne, ale nie są wystarczająco dokładne, aby udzielić odpowiedzi. (Przepraszam, nie mam wystarczającej reputacji, aby dodać komentarz, więc napisanie pełnej odpowiedzi).
W moim przypadku spotkałem przeciążony serwer apache, przepełniony zadaniami cron, nadmiernie wykorzystujący procesor. Limity wątków były przechowywane w bazie danych SQL, ale osiągnąłem limit połączeń. Chciałem ograniczyć przychodzące połączenia apache z lokalnego hosta (ta część jest opcjonalna), ale wszystkie pozostałe połączenia są możliwe. W tym te, które zostały faktycznie ustanowione.
Zrobiłem to z rozkazem
sudo iptables -I INPUT -p tcp --dport 80 -m state --state NEW -j REJECT
Oznacza to: dla każdego przychodzącego pakietu tcp na porcie 80, załaduj state
moduł, a jeśli jest to pierwszy pakiet (połączenie przychodzące), odrzuć go. Do localhost możesz po prostu użyć-s 127.0.0.0/8
A do użytku w świecie rzeczywistym, w niektórych przypadkach możesz dodać „NIEPRAWIDŁOWE” do stanów NEW,INVALID
, ponieważ można wysyłać „złośliwe” pakiety, próbując ominąć regułę. A także zamień na, -j DROP
aby zaoszczędzić ruch wychodzący (nie wyśle sygnału nawigacyjnego odrzucenia)