感谢支持
我们一直在努力

iptables 入门教程

iptables 中的指令,均需区分大小写。


ipchains 和 iptables 在语法上的主要的差异,注意如下∶


1. 在 ipchains 中,诸如 input 链,是使用小写的 chains 名,在 iptables 中,要改用大写 INPUT。


2. 在 iptables 中,要指定规则是欲作用在那一个规则表上(使用 -t 来指定,如 -t nat),若不指定,则预设是作用在 filter 这个表。


3. 在 ipchains 中, -i 是指介面(interface),但在 iptables 中,-i 则是指进入的方向,且多了 -o,代表出去的方向。


4. 在 iptables 中,来源 port 要使用关键字 –sport 或 –source-port


5. 在 iptables 中,目的 port 要使用关键字 –dport 或 –destination-port


6. 在 iptables 中,”丢弃” 的处置动作,不再使用 DENY 这个 target,改用 DROP。


7. 在 ipchains 的记录档功能 -l,已改为目标 -j LOG,并可指定记录档的标题。


8. 在 ipchains 中的旗标 -y,在 iptables 中可用 –syn 或 –tcp-flag SYN,ACK,FIN SYN


9. 在 iptables 中,imcp messages 型态,要加上关键字 –icmp-type,如∶


iptables -A OUTPUT -o eth0 -p icmp -s $FW_IP –icmp-type 8 -d any/0 -j ACCEPT


iptables 使用时的样板


在设定 iptables 的封包过滤规则时,有几个样板的动作,若先熟に牵缶涂勺孕刑子茫来死嗤疲芸斓兀涂梢越胝飧鎏斓刂小?/P>


观察目前的设定


作法如下∶


iptables -L -n


iptablse -t nat -L -n


定义变数


FW_IP=”163.26.197.8″


打开核心 forward 功能


作法如下∶


###—————————————————–###


# 打开 forward 功能


###—————————————————–###


echo “1” > /proc/sys/net/ipv4/ip_forward


清除所有的规则


一开始要先清除所有的规则,重新开始,以免旧有的规则影响新的设定。作法如下∶


###—————————————————–###


# 清除先前的设定


###—————————————————–###


# 清除预设表 filter 中,所有规则链中的规则


iptables -F


# 清除预设表 filter 中,使用者自订链中的规则


iptables -X


# 清除mangle表中,所有规则链中的规则


iptables -F -t mangle


# 清除mangle表中,使用者自订链中的规则


iptables -t mangle -X


# 清除nat表中,所有规则链中的规则


iptables -F -t nat


# 清除nat表中,使用者自订链中的规则


iptables -t nat -X


选定预设的政策


接着,要选定各个不同的规则链,预设的政策为何。作法如下∶


预设全部丢弃∶


###—————————————————–###


# 设定 filter table 的预设政策


###—————————————————–###


iptables -P INPUT DROP


iptables -P OUTPUT DROP


iptables -P FORWARD DROP


或者预设全部接受∶


###—————————————————–###


# 设定 filter table 的预设政策


###—————————————————–###


iptables -P INPUT ACCEPT


iptables -P OUTPUT ACCEPT


iptables -P FORWARD ACCEPT


各个规则链的预设政策可独立自主的设定,不必受其它链的影响。


以下练习,若目标为 DROP,则 policy 请设为 ACCEPT;若目标为 ACCEPT,则 policy 请设为 DROP,如此方可看出效果。


开放某一个介面


作法如下∶


iptables -A INPUT -i lo -j ACCEPT


iptables -A OUTPUT -o lo -j ACCEPT


注∶IPFW 或 Netfilter 的封包流向,local process 不会经过 FORWARD Chain,


因此 lo 只在 INPUT 及 OUTPUT 二个 chain 作用。


iptables -A INPUT -i eth1 -j ACCEPT


iptables -A OUTPUT -o eth1 -j ACCEPT


iptables -A FORWARD -i eth1 -j ACCEPT


iptables -A FORWARD -o eth1 -j ACCEPT


IP 伪装


使内部网路的封包经过伪装之后,使用对外的 eth0 网卡当作代表号,对外连线。作法如下∶


###—————————————————–###


# 启动内部对外转址


###—————————————————–###


iptables -t nat -A POSTROUTING -o eth0 -s 172.16.0.0/16 -j SNAT –to-source $FW_IP


上述指令意指∶把 172.16.0.0/16 这个网段,伪装成 $FW_IP 出去。

虚拟主机


利用转址、转 port 的方式,使外部网路的封包,可以到达内部网路中的伺服主机,俗称虚拟主机。这种方式可保护伺服主机大部份的 port 不被外界存取,只开放公开服务的通道(如 Web Server port 80),因此安全性甚高。


作法如下∶


###—————————————————–###


# 启动外部对内部转址


###—————————————————–###


# 凡对 $FW_IP:80 连线者, 则转址至 172.16.255.2:80


iptables -t nat -A PREROUTING -i eth0 -p tcp -d $FW_IP –dport 80 -j DNAT –to-destination 172.16.255.2:80


开放内部主机可以 telnet 至外部的主机


开放内部网路,可以 telnet 至外部主机。


作法如下∶(预设 policy 为 DROP)


###—————————————————–###


# open 外部主机 telnet port 23


###—————————————————–###


iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP –sport 1024:65535 -d any/0 –dport 23 -j ACCEPT


iptables -A INPUT -i eth0 -p tcp ! –syn -s any/0 –sport 23 -d $FW_IP –dport 1024:65535 -j ACCEPT


开放邮包转递通道


开放任意的邮件主机送信包给你的 Mail Server,而你的 Mail Server 也可以送信包过去。


作法如下∶(预设 policy 为 DROP)


###—————————————————–###


# open SMTP port 25


###—————————————————–###


# 以下是∶别人可以送信给你


iptables -A INPUT -i eth0 -p tcp -s any/0 –sport 1024:65535 -d $FW_IP –dport 25 -j ACCEPT


iptables -A OUTPUT -o eth0 -p tcp ! –syn -s $FW_IP –sport 25 -d any/0 –dport 1024:65535 -j ACCEPT


# 以下是∶你可以送信给别人


iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP –sport 1024:65535 -d any/0 –dport 25 -j ACCEPT


iptables -A INPUT -i eth0 -p tcp ! –syn -s any/0 –sport 25 -d $FW_IP –dport 1024:65525 -j ACCEPT


开放对外离线下载信件的通道


开放内部网路可以对外部网路的 POP3 server 取信件。


作法如下∶(预设 policy 为 DROP)


###—————————————————–###


# open 对外部主机的 POP3 port 110


###—————————————————–###


iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP –sport 1024:65535 -d any/0 –dport 110 -j ACCEPT


iptables -A INPUT -i eth0 -p tcp ! –syn -s any/0 –sport 110 -d $FW_IP –dport 1024:65535 -j ACCEPT


开放观看网页的通道


开放内部网路可以观看外部网路的网站。


作法如下∶(预设 policy 为 DROP)


###—————————————————–###


# open 对外部主机的 HTTP port 80


###—————————————————–###


iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP –sport 1024:65535 -d any/0 –dport 80 -j ACCEPT


iptables -A INPUT -i eth0 -p tcp ! –syn -s any/0 –sport 80 -d $FW_IP –dport 1024:65535 -j ACCEPT

开放查询外部网路的 DNS 主机


开放内部网路,可以查询外部网路任何一台 DNS 主机。


作法如下∶(预设 policy 为 DROP)


###—————————————————–###


# open DNS port 53


###—————————————————–###


# 第一次会用 udp 封包来查询


iptables -A OUTPUT -o eth0 -p udp -s $FW_IP –sport 1024:65535 -d any/0 –dport 53 -j ACCEPT


iptables -A INPUT -i eth0 -p udp -s any/0 –sport 53 -d $FW_IP –dport 1024:65535 -j ACCEPT


# 若有错误,会改用 tcp 封包来查询


iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP –sport 1024:65535 -d any/0 –dport 53 -j ACCEPT


iptables -A INPUT -i eth0 -p tcp ! –syn -s any/0 –sport 53 -d $FW_IP –dport 1024:65535 -j ACCEPT


# 开放这台主机上的 DNS 和外部的 DNS 主机互动查询∶使用 udp


iptables -A OUTPUT -o eth0 -p udp -s $FW_IP –sport 53 -d any/0 –dport 53 -j ACCEPT


iptables -A INPUT -i eth0 -p udp -s any/0 –sport 53 -d $FW_IP –dport 53 -j ACCEPT


# 开放这台主机上的 DNS 和外部的 DNS 主机互动查询∶使用 tcp


iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP –sport 53 -d any/0 –dport 53 -j ACCEPT


iptables -A INPUT -i eth0 -p tcp ! -y -s any/0 –sport 53 -d $FW_IP –dport 53 -j ACCEPT


开放内部主机可以 ssh 至外部的主机


开放内部网路,可以 ssh 至外部主机。


作法如下∶(预设 policy 为 DROP)


###—————————————————–###


# open 外部主机 ssh port 22


###—————————————————–###


iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP –sport 1024:65535 -d any/0 –dport 22 -j ACCEPT


iptables -A INPUT -i eth0 -p tcp ! –syn -s any/0 –sport 22 -d $FW_IP –dport 1024:65535 -j ACCEPT


# 以下是 ssh protocol 比较不同的地方


iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP –sport 1020:1023 -d any/0 –dport 22 -j ACCEPT


iptables -A INPUT -i eth0 -p tcp ! –syn -s any/0 –sport 22 -d $FW_IP –dport 1020:1023 -j ACCEPT


开放内部主机可以 ftp 至外部的主机


开放内部网路,可以 ftp 至外部主机。


作法如下∶(预设 policy 为 DROP)


###—————————————————–###


# open 对外部主机 ftp port 21


###—————————————————–###


# 以下是打开命令 channel 21


iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP –sport 1024:65535 -d any/0 –dport 21 -j ACCEPT


iptables -A INPUT -i eth0 -p tcp ! –syn -s any/0 –sport 21 -d $FW_IP –dport 1024:65535 -j ACCEPT


# 以下是打开资料 channel 20


iptables -A INPUT -i eth0 -p tcp -s any/0 –sport 20 -d $FW_IP –dport 1024:65535 -j ACCEPT


iptables -A OUTPUT -o eth0 -p tcp ! –syn -s $FW_IP –sport 1024:65535 -d any/0 –dport 20 -j ACCEPT


# 以下是打开 passive mode FTP 资料通道


iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP –sport 1024:65535 -d any/0 –dport 1024:65535 -j ACCEPT


iptables -A INPUT -i eth0 -p tcp ! –syn -s any/0 –sport 1024:65535 -d $FW_IP –dport 1024:65535 -j ACCEPT


开放 ping


可以对外 ping 任何一台主机。


作法如下∶(预设 policy 为 DROP)


iptables -A OUTPUT -o eth0 -p icmp -s $FW_IP –icmp-type 8 -d any/0 -j ACCEPT


iptables -A INPUT -i eth0 -p icm -s any/0 –icmp-type 0 -d $FW_IP -j ACCEPT

赞(0) 打赏
转载请注明出处:服务器评测 » iptables 入门教程
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏