LINUX 16.04 блокировка портов и блокировка ip
Мое состояние есть локальная сеть с 3 компьютерами
- Comp A (10.1.1.7 и 172.16.1.12 и 192.168.0.4)(фактически Comp A имеет 3 сетевых интерфейса)
- Комп Б (10.1.1.13)
- Комп C (172.16.1.5)
Comp A имеет два сетевых интерфейса, и я использую NAT connect Comp C, который является сервером Tomcat, за Comp A. Кроме того, NAT является 172.16.1.5:8080<->10.1.1.7:80
Теперь я попытался использовать iptables в Comp A (10.1.1.7):
sudo iptables -A INPUT -s 10.1.1.13 -j DROP; sudo iptables -A INPUT -p tcp --dport 80 -j REJECT;
После этого Comp B (10.1.1.13) не может пропинговать Comp A (10.1.1.7), но я все еще могу получить доступ к странице Tomcat. Я даже пытался использовать 2-ю команду (REJECT port 80), чтобы заблокировать порт 80.
Могу ли я заблокировать Comp B (10.1.1.13), чтобы Comp B не мог получить доступ к странице Tomcat. Если я только блокирую порт, могу ли я только не разрешить доступ к Tomcat, но все равно могу пропинговать 10.1.1.7? Спасибо
Мой iptables -v -x -n -L:
pkts bytes target prot opt in out source destination
0 0 DROP all -- * * 147.8.179.216 0.0.0.0/0
0 0 DROP all -- * * 14.0.154.45 0.0.0.0/0
0 0 DROP all -- * * 10.1.1.13 0.0.0.0/0
0 0 REJECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 reject-with icmp-port-unreachable
и мой iptables -v -x -n -L -t -nat:
Chain PREROUTING (policy ACCEPT 35032 packets, 1969104 bytes)
pkts bytes target prot opt in out source destination
386 19820 DNAT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 to:172.16.1.5:8080
Chain INPUT (policy ACCEPT 34737 packets, 1955948 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 312260 packets, 19072061 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 312260 packets, 19072061 bytes)
pkts bytes target prot opt in out source destination
385 19780 SNAT tcp -- * * 0.0.0.0/0 172.16.1.5 tcp dpt:8080 to:172.16.1.12
2 ответа
Поскольку пакеты, которые вы хотите отбросить или отклонить, в противном случае были бы перенаправлены на компьютер C, они фактически не попадают в обычную цепочку INPUT. Кроме того, таблица nat не предназначена для фильтрации, поэтому ее нельзя сделать там. Таблица mangle PREROUTING просматривается перед таблицей nat PREROUTING, поэтому там можно разместить правила фильтрации.
sudo iptables -t mangle -A PREROUTING -i $EXTIF -p tcp -s 10.1.1.13 --dport 80 -j DROP
Где $EXTIF - имя сетевого интерфейса.
Вышеуказанное правило было протестировано на моем тестовом компьютере с использованием разных IP-адресов и имен интерфейсов.
Используйте эту диаграмму, чтобы помочь отследить поток пакетов iptables.
Не видя остальных ваших столов, сложно сказать. Вы можете посмотреть на все свои iptables
используя -L
флаг, чтобы перечислить их:
sudo iptables -L
Пожалуйста, обновите ваш вопрос этим выводом, особенно если этот ответ не дает решения для вас.
Читая этот вывод, вы должны начать сверху вниз и двигаться вниз. Существуют ли какие-либо правила, которые бы отклоняли, отбрасывали или принимали ваш трафик перед этой линией? Поскольку вы пытаетесь заблокировать доступ, скорее всего, у вас есть строка ПРИНЯТЬ выше REJECT на порту 80.
Когда используешь iptables
команда, вы можете добавлять правила -A
или вставьте их с -I
, Это означает, что правила добавлены с -A
будет в нижней части существующих правил. Это может создать проблемы на лету, и вместо этого вы загружаете список правил из файла:
sudo iptables -L # Look at tables, test that they work correctly
sudo iptables-save > /etc/iptables # Save tables to a file
....
sudo iptables-restore < /etc/iptables # Restore tables after a reboot or something
Вы также можете sudo iptables --flush
начать заново с новым набором правил, которые ПРИНИМАЮТ все соединения.