Я клиент / сервер-IPC-iptables почти новичок. Я сделал большую домашнюю работу в течение одного года и подумал, что это должно сработать:
# cat /root/firewall/iptable | nocomment
iptables -F
iptables -F -t nat
iptables -P FORWARD DROP
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -I INPUT 1 -s 127.0.0.0/24 -p tcp --dport 80:65535 -j ACCEPT
iptables -I INPUT 1 -s 127.0.0.0/24 -p udp --dport 80:65535 -j ACCEPT
iptables -A INPUT -s 192.168.0.0/24 -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A INPUT -s 127.0.0.0/24 -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A INPUT -s 192.168.0.0/24 -p udp -m udp --dport 631 -j ACCEPT
iptables -A INPUT -s 192.168.0.0/24 -p tcp -m tcp --dport 631 -j ACCEPT
iptables -A INPUT -p tcp -i eth0 -j REJECT --reject-with tcp-reset
iptables -A INPUT -p udp -i eth0 -j REJECT --reject-with icmp-port-unreachable
iptables -L -v -n
/etc/init.d/iptables save
# /root/firewall/iptable
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT udp -- * * 127.0.0.0/24 0.0.0.0/0 udp dpts:80:65535
0 0 ACCEPT tcp -- * * 127.0.0.0/24 0.0.0.0/0 tcp dpts:80:65535
0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT icmp -- * * 192.168.0.0/24 0.0.0.0/0 icmptype 0
0 0 ACCEPT icmp -- * * 127.0.0.0/24 0.0.0.0/0 icmptype 0
0 0 ACCEPT udp -- * * 192.168.0.0/24 0.0.0.0/0 udp dpt:631
0 0 ACCEPT tcp -- * * 192.168.0.0/24 0.0.0.0/0 tcp dpt:631
0 0 REJECT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 reject-with tcp-reset
0 0 REJECT udp -- eth0 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
* Saving iptables state ...
# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.10 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 xxxx::xxxx:xxxx:xxxx:xxxx prefixlen 64 scopeid 0x20<link>
inet6 xxxx::xxxx:xxxx:xxxx:xxxx::xxxx:xxxx:xxxx prefixlen 64 scopeid 0x0<global>
inet6 xxxx::xxxx:xxxx:xxxx::10 prefixlen 64 scopeid 0x0<global>
ether xx:xx:xx:xx:xx:xx txqueuelen 1000 (Ethernet)
RX packets 204122 bytes 114225536 (108.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 230083 bytes 27756306 (26.4 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 17
# ifconfig lo
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 16436
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 0 (Boucle locale)
RX packets 443796 bytes 25809111 (24.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 443796 bytes 25809111 (24.6 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ping 127.0.0.1
не работает.Что я делаю не так, пожалуйста?
РЕДАКТИРОВАТЬ 2013-08-12 08:28 CET
# netstat -a | grep 9000 getnameinfo failed tcp6 0 0 [::]:9000 [::]:* LISTEN
Итак, что-то уже привязано к порту 9000, что, как я полагаю, является причиной моей проблемы. У вас есть идея, как я могу определить этот процесс? ps aux | grep 9000
ничего не выводит.
tcp6 0 0 [::]:9000 [::]:* LISTEN
- Когда я возвращаю правила 127.0.0.0/24, он снова работает с портом 5555.Я читаю вот пост # 3 который :
Linux не позволяет процессу прослушивать один и тот же порт как на IPv4, так и на IPv6 (подключения IPv4 будут передаваться в приложение как сопоставленные подключения IPv4-in-6).
Но из этого нельзя сделать вывод, что когда сокет открывается с помощью ipv6, невозможно открыть тот же порт с помощью ipv4. Собственно, мое тестовое приложение может подключаться к тому же порту на ipv4, и его клиент тоже может подключаться.
Мой вывод таков клиент может получить ответ от процесса, привязанного к ipv6, до того, как ответ его сопутствующего сервера привязан к ipv4. Это объясняет, почему тестовая программа терпит неудачу, когда пытается использовать тот же порт.
Более того, я мог найти хорошие варианты для netstat для идентификации похитителя портов:
# netstat -tlp | grep 9000
tcp6 0 0 [::]:9000 [::]:* LISTEN 15382/java
# ps aux | grep 15382
root 5459 0.0 0.0 110788 960 pts/21 S+ 08:56 0:00 grep --colour=auto 15382
laurent 15382 1.7 2.8 5479456 465744 ? Sl août09 74:30 /usr/lib/jvm//sun-jdk-1.6/bin/java -Dosgi.requiredJavaVersion=1.6 -XX:MaxPermSize=256m -Xms40m -Xmx384m -jar /usr/opt/eclipse-CDT/eclipse//plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar -os linux -ws gtk -arch x86_64 -showsplash -launcher /usr/opt/eclipse-CDT/eclipse/eclipse -name Eclipse --launcher.library /usr/opt/eclipse-CDT/eclipse//plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.100.v20110505/eclipse_1407.so -startup /usr/opt/eclipse-CDT/eclipse//plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar --launcher.overrideVmargs -exitdata f28017 -product org.eclipse.epp.package.linuxtools.product -nl en_US -vm /usr/bin/java -vmargs -Dosgi.requiredJavaVersion=1.6 -XX:MaxPermSize=256m -Xms40m -Xmx384m -jar /usr/opt/eclipse-CDT/eclipse//plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
После закрытия Eclipse, # netstat -tlp | grep 9000
ничего не возвращает.
..... и мое тестовое приложение работает на порту 9000.
Первое: вы должны быть очень осторожны с использованием «iptables -F» при входе в систему, например, через SSH, особенно если правилом по умолчанию (policy, iptables -P) для входной цепочки было DROP, как вы его здесь установили. Вы заблокируете себя.
Теперь по теме:
1) Я бы не стал определять 127.0.0.0/8 (да! / 8 не / 24) в правилах брандмауэра. Убери их. Эти адреса являются локальными, зачем вам блокировать их? Вы ищете неприятностей.
2) «Обмен сокетов (?) На порт 9000». Отсюда? Из сети 192.168.0.0/24? Какой именно хост? Это не может работать, потому что у вас есть только
0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT udp -- * * 192.168.0.0/24 0.0.0.0/0 udp dpt:631
0 0 ACCEPT tcp -- * * 192.168.0.0/24 0.0.0.0/0 tcp dpt:631
там, что означает, что он будет принимать новые соединения только через порт 631.
Вы узнали, что тоже используете IPv6. (Слушатель на порту 9000 - tcp6)
Значение: правила брандмауэра ipv4 не являются проблемой (на самом деле, они вообще не обеспокоены): вы должны сделать так, чтобы все, что слушает tcp6: 9000, также слушало tcp: 9000. И ЗАТЕМ настройте правила брандмауэра ipv4, чтобы разрешить доступ к порту 9000. Но если вы подключаетесь с localhost, это будет работать из коробки.
Примечание: