Я немного застрял с iptables, чтобы иметь дело с двумя портами Ethernet.
Порт eth0 для использования в локальной сети (частный IP-адрес 192.168.1.50).
Порт eth1 подключен к Интернету через кабельный модем (публичный IP-адрес 80.0.xxx.xxx).
eth0 Link encap:Ethernet HWaddr 00:19:99:C1:86:BB
inet addr:192.168.1.50 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:137532 errors:0 dropped:0 overruns:0 frame:0
TX packets:55658 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:99968969 (95.3 MiB) TX bytes:10403525 (9.9 MiB)
Interrupt:50 Memory:fe700000-fe720000
eth1 Link encap:Ethernet HWaddr 00:19:99:C1:61:3B
inet addr:80.0.xxx.xxx Bcast:255.255.255.255 Mask:255.255.252.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:144558 errors:0 dropped:0 overruns:0 frame:0
TX packets:70347 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:34500131 (32.9 MiB) TX bytes:27893843 (26.6 MiB)
Interrupt:177 Memory:fe600000-fe620000
Я хотел заблокировать весь входящий маршрут до eth1
но разрешить только порт 21. Чтобы внешний IP-адрес не мог получить доступ к нашему веб-серверу, ftp-серверу и т. д. Разрешить только порт 21 для доступа по SSH. Пинг тоже должен работать.
В локальной сети (eth0) любой должен иметь доступ к чему угодно, кроме как заблокировать доступ к серверу 192.168.1.50 локальным IP-адресам 192.168.1.20 и 192.168.1.30.
Как это можно сделать с помощью iptables?
Я хотел заблокировать весь входящий маршрут к eth1, но разрешить только порт 21. Чтобы внешний IP-адрес не мог получить доступ к нашему веб-серверу, ftp-серверу и т.д. Разрешить только порт 21 для доступа по SSH. Пинг тоже должен работать.
Самый простой способ - настроить web / ftp-серверы на прослушивание только внутреннего интерфейса. Таким образом, вам вообще не придется беспокоиться о каких-либо сетевых технологиях.
Если вы не можете этого сделать по какой-либо причине, примените следующие правила:
iptables -A INPUT -i eth1 -p icmp -j ACCEPT # allow ping
iptables -A INPUT -i eth1 -p tcp --dport 21 -j ACCEPT # allow SSH
iptables -A INPUT -i eth1 -j DROP # drop everything else
(Кстати, порт SSH по умолчанию - 22, но я думаю, вы лучше знаете, где ваш SSH прослушивает.)
В локальной сети (eth0) любой должен иметь доступ к чему угодно, кроме как заблокировать доступ к серверу 192.168.1.50 локальным IP-адресам 192.168.1.20 и 192.168.1.30.
Просто:
iptables -A INPUT -i eth0 -s 192.168.1.20 -j DROP
iptables -A INPUT -i eth0 -s 192.168.1.30 -j DROP
Это отбрасывает все пакеты с этих хостов. Если вы хотите, чтобы здесь также разрешался пинг, используйте аналогичное правило для icmp, как и для eth1.