没什么好介绍的!穷屌丝一个~
分类: LINUX
2005-08-16 14:40:32
iptables 入门
iptables 入门
这一节开始说明 iptables 的观念及用法
iptables 中的指令,均需区分大小写。
-i 则是指进入的方向, -o代表出去的方向。
来源 port 要使用关键字 --sport 或 --source-port
目的 port 要使用关键字 --dport 或 --destination-port
"丢弃" 的处置动作用 DROP
记录档功能用-j LOG,并可指定记录档的标题
在 iptables 中可用 --syn 或 --tcp-flag SYN,ACK,FIN SYN
在 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的设定情况
作法如下:
iptables -L -n
iptablse -t nat -L -n
定义以下例子中引用的变数IP
$FW_IP="163.26.197.8"
打开核心 forward 功能,作法如下:
echo "1" > /proc/sys/net/ipv4/ip_forward
或在/etc/sysconfig/network
中添加
FORWARD_IPV4=yes
打开转发功能
清除所有的规则,作法如下:
一开始要先清除所有的规则,重新开始,以免旧有的规则影响新的设定。
# 清除预设表 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
**各个规则链的预设策略可独立自主的设定,不必受其它链的影响。
开放某一个介面
作法如下:
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 伪装(SNAT应用)
使内网的封包经过伪装之后,使用对外的 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 出去。
虚拟主机(DNAT应用)
利用转址、转 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
追加:
问题1:为什么每个功能都用了两条链INPUT和OUTPUT,他们的作用是不是先允许网关机器output,然后再允许局域网到网关机器?
_____
/ .
Incoming-->[Routing ]--->|FORWARD|------->Outgoing
[Decision] _____/ ^
| |
v _____
____ /
/ |OUTPUT|
|INPUT| ______/
____/ ^
| |
----> Local Process ----
分析一下包的在链中的处理流程吧!
其中三个圈代表前述的三个链,当一个包抵达上图其中的一个链时,相应的链就会被检验(examined)以决定如何处理这个包。
如果链认为
应该丢弃(DROP)这个包,则将该包丢弃;
如果链认为应该接受(ACCEPT)该包,那么它将继续在图中穿越。
(1)当一个包进入时,内核首先看包的目的地,如果目的地址为本机,这个包就下行至INPUT链,如果能够通过检测,则进入后面的包处理
程序。
(2)如果目的地址不是本机,但内核没有启动转发功能,或者内核不知道如何转发这个包,那么该包就会被丢弃。
(3)如果目的地址不是本机,转发功能也已经启动,那么这个包将右行至FORWARD链。如果该包被接受,那么它将会被发送出去。
(4)一个在本机运行的程序发送网络包,这时包会直接经过OUTPUT链,如果被接受,该包会继续被发送到它所指定的网络接口。
注:Incoming & Outgoing 可以是内网也可以是外网, Local Process是指提供代理 或 IP过滤的服务器.
现在知道各链的功能,也就能知道同时出现INPUT,OUTPUT规则语句的含义