Я использую сервер Centos 6.0 с Apache 2 / MySQL. У меня запущены iptables. Сегодня вечером я выполнил следующие шаги, чтобы заблокировать весь трафик с IP-адреса с помощью iptables:
iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP
iptables -A OUTPUT -d xxx.xxx.xxx.xxx -j DROP
service iptables save
service iptables restart
Но я все еще постоянно вижу обращения с этого IP в моих журналах доступа Apache, даже после перезапуска Apache. iptables определенно запущен, и это определенно правильный IP-адрес.
Это остальные записи в iptables:
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- anywhere anywhere
2 REJECT all -- anywhere loopback/8 reject-with icmp-port-unreachable
3 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
4 ACCEPT tcp -- anywhere anywhere tcp dpt:http
5 ACCEPT tcp -- anywhere anywhere tcp dpt:https
6 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:30000
7 ACCEPT icmp -- anywhere anywhere icmp echo-request
8 REJECT all -- anywhere anywhere reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- anywhere anywhere reject-with icmp-port-unreachable
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- anywhere anywhere
Что мне не хватает?
Ваше первое правило iptables разрешает именно тот трафик, который вы пытаетесь заблокировать.
1 ACCEPT all -- anywhere anywhere
Порядок имеет значение.
Сначала я предлагаю вам использовать system-config-firewall
или system-config-firewall-tui
. Есть раздел с «собственными правилами», который сделает это за вас.
Если вы хотите делать такие вещи вручную, вам нужно вставить правило перед «ACCEPT» для tcp dpt: http. Самый простой способ: iptables -I INPUT 1 -s xxx.xxx.xxx.xxx -j DROP
(Вставить в позицию 1 вместо Добавить)
Поскольку ваша проблема уже решена, позвольте мне добавить отступление: в вашей цепочке INPUT уже задана политика ACCEPT. Правило ПРИНЯТЬ весь трафик не только мешает работе вашего брандмауэра, оно также является избыточным, поскольку работает иначе, чем политика (в зависимости от того, где в цепочке размещено правило ПРИНЯТИЯ), что делает его бесполезным и сложным для отладки. Не закрывайте одно и то же дважды своим брандмауэром.
Вы можете видеть этот IP-адрес, потому что у вас есть правило для принятия СВЯЗАННЫХ и УСТАНОВЛЕННЫХ сеансов:
3 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
Вам нужно убить соединение с заблокированного IP-адреса va tcpkill, и этот IP-адрес больше не будет подключаться :)