在我的另一个线程上,我正在谈论有关iptables策略和状态的一些有趣的事情,现在我想了解有关DHCP如何工作以及iptables如何理解的更多信息。
ETH0连接到我的主交换机,该交换机从我的路由器接收动态IP,不仅可以访问Internet,还可以访问我的外部网络。
ETH1是连接到内部交换机的内部卡,X客户端从此服务器接收其IPS
ETH1网络是192.168.1.0/255.255.255.0,其中服务器IP是192.168.1.254。
据我了解,dhcp是一个bootp协议,因此,即使您具有将所有内容都丢弃的防火墙策略,您的网络仍会收到DHCP,在我进行的测试中,这似乎是正确的。
从tcpdump:
root@test:~# tcpdump -i eth1 port 67 or 68
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes
11:34:03.943928 IP 192.168.1.2.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:0c:29:29:52:8b (oui Unknown), length 303
11:34:03.957647 IP 192.168.1.254.bootps > 192.168.1.2.bootpc: BOOTP/DHCP, Reply, length 300
11:34:06.492153 IP 192.168.1.2.bootpc > 192.168.1.254.bootps: BOOTP/DHCP, Request from 00:0c:29:29:52:8b (oui Unknown), length 303
11:34:06.506593 IP 192.168.1.254.bootps > 192.168.1.2.bootpc: BOOTP/DHCP, Reply, length 300
我制定了一个简单的日志规则来查看iptables的作用:
root@test:~# tail -f /var/log/syslog
Oct 15 11:30:58 test kernel: IN=eth1 OUT= MAC=ff:ff:ff:ff:ff:ff:00:0c:29:29:52:8b:08:00 SRC=192.168.1.2 DST=255.255.255.255 LEN=331 TOS=0x00 PREC=0x00 TTL=128 ID=9527 PROTO=UDP SPT=68 DPT=67 LEN=311
Oct 15 11:31:43 test kernel: IN=eth1 OUT= MAC=ff:ff:ff:ff:ff:ff:00:0c:29:29:52:8b:08:00 SRC=192.168.1.2 DST=255.255.255.255 LEN=331 TOS=0x00 PREC=0x00 TTL=128 ID=9529 PROTO=UDP SPT=68 DPT=67 LEN=311
Oct 15 11:33:32 test kernel: IN=eth1 OUT= MAC=ff:ff:ff:ff:ff:ff:00:0c:29:29:52:8b:08:00 SRC=192.168.1.2 DST=255.255.255.255 LEN=331 TOS=0x00 PREC=0x00 TTL=128 ID=9531 PROTO=UDP SPT=68 DPT=67 LEN=311
Oct 15 11:34:03 test kernel: IN=eth1 OUT= MAC=ff:ff:ff:ff:ff:ff:00:0c:29:29:52:8b:08:00 SRC=192.168.1.2 DST=255.255.255.255 LEN=331 TOS=0x00 PREC=0x00 TTL=128 ID=9533 PROTO=UDP SPT=68 DPT=67 LEN=311
这是我当时的iptables规则:
# deny all traffic
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT DROP
# Use stateful inspection feature to only allow incoming connections
# related to connections I have already established myself
$IPT -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# allow all traffic on lo interface
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
因此,即使使用默认策略丢弃所有内容,我仍然可以在网络上获得DHCP,而更新IP等则需要花费更长的时间。
如果我将以下规则添加到防火墙中:
$IPT -I OUTPUT -o $INTIF -p udp --dport 67:68 --sport 67:68 -j ACCEPT
更新所有客户端dhcp都将花费很少的时间。
考虑到上述情况:
- 为什么即使不被阻止,更新它的确需要花费更长的时间呢?
- 是否可以完全关闭dhcp服务器而不关闭它?
- 是否可以通过BOOTP在iptables中接受dhcp服务器?那是怎么做的?
如果您知道好的链接,我不介意花很多时间:)
Are you monitoring the network interface in promiscuous mode
我仍在学习...