Я пытался настроить брандмауэр на своем шлюзе debian с помощью iptables. Шлюз подключен к сети 12.120.0.0/24 на eth0 за NAT, а подсеть за ним - 12.120.4.0/24 eth1. Я провел много исследований, и большинство статей, которые я прочитал, посвящены настройке шлюза как NAT, а все остальное просто не работает для меня. Шлюз не должен действовать как NAT для подсети, потому что он может найти любой другой компьютер в сети с помощью ping и ssh, если брандмауэр сброшен, поэтому пересылка между интерфейсами работает.
Во-первых, я хотел бы, чтобы изнутри подсети на eth1 ssh принимался от всех для всех, но никто снаружи не должен быть доступен для ssh внутри сети и интерфейса eth0 на шлюзе.
Это мой файл sh, чтобы сначала очистить брандмауэр и применить новые наборы правил.
#Flush prevous rules
iptables -F
iptables -X
iptables -Z
#Default policies
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
#Enable loopback
#iptables -A INPUT -i lo -j ACCEPT
#iptables -A OUTPUT -o lo -j ACCEPT
#Enable statefull rules
iptables -A INPUT -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT
#SSH
iptables -I INPUT -p tcp -j ACCEPT
iptables -I INPUT -p tcp -m conntrack --ctstate NEW,RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD -p tcp --dport 22 -m conntrack --ctstate NEW,RELATED,ESTABLISHED -j ACCEPT
iptables -I OUTPUT -p tcp -j ACCEPT
iptables -A OUTPUT -o eth0 -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT
###LOGGING
iptables -N LOGGING
iptables -A OUTPUT -j LOGGING
iptables -A LOGGING -m limit --limit 60/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -A LOGGING -j DROP
Команда iptables -L -v дает следующий вывод
root@gateway:~# iptables -L -v
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
801 99796 ACCEPT tcp -- any any anywhere anywhere ctstate NEW,RELATED,ESTABLISHED
0 0 ACCEPT tcp -- any any anywhere anywhere
5331 853K ACCEPT all -- any any anywhere anywhere ctstate NEW,RELATED,ESTABLISHED
Chain FORWARD (policy DROP 5 packets, 200 bytes)
pkts bytes target prot opt in out source destination
688 122K ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh ctstate NEW,RELATED,ESTABLISHED
7219 1989K ACCEPT all -- any any anywhere anywhere ctstate NEW,RELATED,ESTABLISHED
Chain OUTPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
1175 125K ACCEPT tcp -- any any anywhere anywhere
1378 105K ACCEPT all -- any any anywhere anywhere ctstate NEW,RELATED,ESTABLISHED
0 0 ACCEPT all -- any eth0 anywhere anywhere ctstate NEW,RELATED,ESTABLISHED
0 0 LOGGING all -- any any anywhere anywhere
Chain LOGGING (1 references)
pkts bytes target prot opt in out source destination
0 0 LOG all -- any any anywhere anywhere limit: avg 1/sec burst 5 LOG level warning prefix "IPTables-Dropped: "
0 0 DROP all -- any any anywhere anywhere
Даже попробуйте этот файл, чтобы проверить, могу ли я вместо этого включить ssh извне в подсеть за шлюзом, чтобы увидеть, работает ли это.
#Flush firewall rules and chains
iptables -F
iptables -X
iptables -Z
#Set policy table
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
#Rules
iptables -I INPUT -p tcp -j ACCEPT
Это должно работать, но не пропускает трафик ssh.
Надеюсь, вы мне поможете, спасибо.