2014-06-17 09:06:40 +0000 2014-06-17 09:06:40 +0000
15
15

Jak zablokować wszystkie porty oprócz 80,443 za pomocą iptables?

Blokowanie wszystkich portów (in i out) jest proste, ale jest trudne z wyjątkiem słowa “except”. Nie znam żadnej reguły, która spełniałaby ten warunek.

PS: Wiem, że to pytanie nie jest niczym nowym. Ale w rzeczywistości nie znalazłem nic pomocnego. Więc, pomóż mi pls!

Odpowiedzi (3)

25
25
25
2014-06-18 01:46:30 +0000

Po pierwsze ! to symbol NOT.

iptables -A INPUT -p tcp -m tcp -m multiport ! --dports 80,443 -j DROP

Po drugie, reguły, które napisałeś mogą nie przynieść oczekiwanych rezultatów. Zrzucasz wszystko łącznie z odpowiedzią na połączenie na porcie 80. Dlatego nie będziesz mógł się z nim połączyć mówi o tym, że jest to serwer WWW.

Te reguły pozwalają na RELATED i ESTABLISHED połączenia, więc serwer WWW powinien działać, jeśli to jest w rzeczywistości to, co próbujesz zrobić.

iptables -A INPUT -p tcp -m tcp -m multiport --dports 80,443 -j ACCEPT
<insert further allowed list here>
iptables -A INPUT -m conntrack -j ACCEPT --ctstate RELATED,ESTABLISHED
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j DROP
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -j DROP
5
5
5
2014-06-17 09:12:54 +0000
# Set the default policy of the INPUT chain to DROP
iptables -P INPUT DROP

# Accept incomming TCP connections from eth0 on port 80 and 443
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT

To powinno dać ci to, czego potrzebujesz

3
3
3
2014-06-17 09:11:51 +0000

Możesz ustawić domyślną akcję na DROP, a następnie stworzyć reguły wyjątków zezwalające na 80 i 443, na przykład tak:

# Setting default policies:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Exceptions to default policy
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP
iptables -A INPUT -p tcp --dport 443 -j ACCEPT # HTTPS

iptables przejdzie przez listę ‘wyjątków’, aż znajdzie dopasowanie. Wtedy wykona akcję określoną przez parametr -j (w tym przypadku ACCEPT). Jeśli nie znajdzie dopasowania, powróci do domyślnej polityki i porzuci pakiet.

Uwaga, że przy tym obejściu wszelkie subdomeny zostaną zablokowane. Na przykład, dzięki tej metodzie będziesz miał działającą domenę www.mydomain.com, ale twoja subdomena, powiedzmy www.sub.mydomain.com nie otworzy się z powodu błędów DNS.