Iptables2

linux下 iptables实战
2010-01-04 01:34
环境:
centos5.1

http://hi.baidu.com/xiutuo/blog

------------------------------------------------------------------------------
防火墙启动关闭重启
# service iptables stop | start | restart

保存所以规则到/etc/sysconfig/iptables
# service iptables save

相当于清空所以规则
# service iptables panic

加载iptables的额外模块: ip_conntrack_netbios_n
# service iptables condrestart

------------------------------------------------------------------------------

查看规则号码id,插入新规则的时候非常管用
# iptables -t 表名(mangle,filter,nat) -L 链名(每个表下对应的链) --line-numbers
插入一条规则
# iptables -t 表名(mangle,filter,nat)-I 链名 rulenum(--line-number得到的id+1) ******** -j 动作
删除一条规则
# iptables -t 表名(mangle,filter,nat) -D 链名 rulenum(--line-numbers得到的id)

命令中:链名和操作命令(链名前的那个参数)以及动作都是大写,其他小写

大小逻辑关系:表table>链chain>规则rule

表名                  作用                 对应链名               
filter(默认表)        过滤                 input,output,forword
nat                   地址转换             preroute,output,postroute
mangle                高级路由             preroute,output

------------------------------------------------------------------------------

基本命令
iptables [-t 要操作的表] <操作命令> [要操作的链] [规则号码] [匹配条件] [-j 匹配到以后的动作]

其中:操作命令 -A -I -D -R -P -F -X -Z
规则内容是指(在删除和替换规则内容的时候用到):[要操作的链] [规则号码] [匹配条件] [-j 匹配到以后的动作]

-----------------------------------
-A <链名>

APPEND,追加一条规则(放到最后)
例如:
iptables -t filter -A INPUT -j DROP
在 filter 表的 INPUT 链里追加一条规则(作为最后一条规则)
匹配所有访问本机 IP 的数据包,匹配到的丢弃

-----------------------------------
-I <链名> [规则id]

INSERT,插入一条规则
例如:
iptables -t filter -I INPUT -j DROP
在 filter 表的 INPUT 链里插入一条规则(插入成第 1 条)
iptables -I INPUT 3 -j DROP
在 filter 表的 INPUT 链里插入一条规则(插入成第 3 条)
注意:
1、-t filter 可不写,不写则自动默认是 filter 表
2、-I 链名 [规则id],如果不写规则号码,则默认是 1
3、确保规则号码 ≤ (已有规则id + 1),否则报错
4.规则id通过
# iptables -t 表名(mangle,filter,nat) -L 链名(每个表下对应的链) --line-numbers
得到的规则id

-----------------------------------
-D <链名> <规则号码 | 具体规则内容>

DELETE,删除一条规则
例如:
iptables -D INPUT 3(按号码匹配删除规则)
删除 filter 表 INPUT 链中的第三条规则(不管它的内容是什么)
注意:-t filter 可不写,不写则自动默认是 filter 表
iptables -D INPUT -s 192.168.0.1 -j DROP(按内容匹配删除规则)

-----------------------------------
-R <链名> <规则号码> <具体规则内容>

REPLACE,替换一条规则
例如:
iptables -R INPUT 3 -j ACCEPT
注意:-t filter 可不写,不写则自动默认是 filter 表
将原来编号为 3 的规则内容替换为 "-j ACCEPT"

-----------------------------------
-P <链名> <动作>

POLICY,设置某个链的默认规则
例如:
iptables -P INPUT DROP
设置 filter 表 INPUT 链的默认规则是 DROP

-----------------------------------
-F [链名]

FLUSH,清空规则
例如:
iptables -F INPUT
清空 filter 表 INPUT 链中的所有规则
iptables -t nat -F PREROUTING
清空 nat 表 PREROUTING 链中的所有规则

-X [链名]
删除自定义链

-Z [链名]
ZERO,链计数器清零


如清空所有防火墙配置
# iptables -F
# iptables -X
# iptables -Z

------------------------------------------------------------------------------

附录iptables样本,默认策略均为drop
防火墙主机环境
centos5.1
iptables-1.3.5-1.2.1
防火墙主机配置samba ssh mysql apache 服务,
(防火墙内部机器访问外网,本机,局域网内部的iptables设置;
一些ddos,arp flood等防护措施
没有加入,有兴趣的朋友再扩展扩展)

vi /etc/sysconfig/iptables 内容如下

# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]

# iptable所在机器
# 允许外面主机ping该防火墙
-A INPUT -p icmp --icmp-type 8 -s 0/0 -j ACCEPT
-A OUTPUT -p icmp --icmp-type 0 -s 0/0 -j ACCEPT

# 允许ping外面主机
-A INPUT -p icmp --icmp-type 0 -s 0/0 -j ACCEPT
-A OUTPUT -p icmp --icmp-type 8 -s 0/0 -j ACCEPT

# 允许ping自己
-A INPUT -p icmp -i lo -j ACCEPT
-A OUTPUT -p icmp -o lo -j ACCEPT

#允许ssh到该防火墙
-A INPUT -p tcp --dport 22 -j ACCEPT
-A OUTPUT -p tcp --sport 22 -j ACCEPT

# 允许ssh到其他机器
-A INPUT -p tcp --sport 22 -j ACCEPT
-A OUTPUT -p tcp --dport 22 -j ACCEPT

# 允许访问防火墙的smb
# 允许访问防火墙的smb-139
-A INPUT -p tcp --dport 139 -j ACCEPT
-A OUTPUT -p tcp --sport 139 -j ACCEPT

# 允许访问防火墙的smb-445
-A INPUT -p tcp --dport 445 -j ACCEPT
-A OUTPUT -p tcp --sport 445 -j ACCEPT


# 允许访问防火墙的mysql数据库
-A INPUT -p tcp --dport 3306 -j ACCEPT
-A OUTPUT -p tcp --sport 3306 -j ACCEPT

# 允许防火墙访问外面的mysql数据库
-A INPUT -p tcp --sport 3306 -j ACCEPT
-A OUTPUT -p tcp --dport 3306 -j ACCEPT


#允许www到该防火墙
-A INPUT -p tcp --dport 80 -j ACCEPT
-A OUTPUT -p tcp --sport 80 -j ACCEPT

#允许该防火墙访问www (结合dns那句)
-A INPUT -p tcp --sport 80 -j ACCEPT
-A OUTPUT -p tcp --dport 80 -j ACCEPT

# 允许访问防火墙上的dns服务
#-A INPUT -p udp --dport 53 -j ACCEPT
#-A OUTPUT -p udp --sport 53 -j ACCEPT

#当dns采用udp协议时
# 允许访问防火墙访问外面的dns,允许防火墙解析外面域名
#(允许防火墙访问域名时能解析到域名的ip,)
# 如访问http://www.baidu.com 能解析到ip,而不是host not found
-A INPUT -p udp --sport 53 -j ACCEPT
-A OUTPUT -p udp --dport 53 -j ACCEPT
# 当dns采用tcp协议时
-A INPUT -p tcp --sport 53 -j ACCEPT
-A OUTPUT -p tcp --dport 53 -j ACCEPT
# 允许防火墙内部通信(很重要的一句)
-A OUTPUT -p all -s 127.0.0.1 -j ACCEPT

#检查到达外部网络接口的封包状态.属于已有TCP连接的封包都允许通过
# 从WAN到LAN的封包仅放行回应封包(eth0为外网网口)
-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

COMMIT

-----------
错误
# iptables -A INPUT -s 192.168.8.121 -p icmp -j reject
iptables v1.3.5: Couldn't load target `reject':/lib/iptables/libipt_reject.so: cannot open shared object file: No such file or directory

把reject大写(drop和accept大写即可)
# iptables -A INPUT -s 192.168.8.121 -p icmp -j reject

你可能感兴趣的:(iptables)