Netfilter Tables and Chains
有五条链分别是:
INPUT,FORWARD,OUTPUT,PREROUTING,POSTROUTING
四个表:
filter:INPUT,OUTPUT,FORWARD
nat:OUTPUT,PREROUTING,POSTROUTING
mangle:INPUT,FORWARD,OUTPUT,PREROUTING,POSTROUTING
iptables [-t table] command CHAIN number critioti(匹配条件) -j target
command
rules:
-A (append)
-I [num](insert)
-D [num](delete) 如: iptables -D FOEWARD 1
-R [num](replace)
chains:
-N chain_name (new)
-X chain_name (删除用户自定义的空链)
-F [chain_name] (若没指chain_name则是清空filter表中的链)
-P chain_name {DROP,ACCEPT}(默认策略policy)
-Z chain_name (清空计数器为0)
-E old_chain_name new_chain_name
规则查看:
-L (list)
-v (verbose)显示更详细的信息,还有-vv,-vv...
-n (以数字的方式显示匹配条件)
-x(精确值包体积之和)
--line-numbers (把规则前面编号)
-j DROP,REJECT,ACCEPT,DNAT,SNAT(此是指定静态地址,若是动态则为MASQUEBADE),LOG,REDITECT(端口重定向)
匹配条件:a:common matching(通用匹配)
-s,-source(指定原地址)
-d,-destination(指定目标地址)
-i [interface] (流入的接口)
-o [interface] (从哪个网卡出去的接口)
-p {tcp,udp,icmp}
b:extended matching(扩展匹配)
#显示扩展
-m state --state {NEW,ESTABLISHED,RELATED,INVALID(不可识别的)}
#隐式扩展
-p tcp
--sport (源端口)
--dport(目标端口)
--tcp-flags syn,ack,rst,fin syn (指定syn为1,其他为0,就是建立一个NEW,新连接)
-p udp
--sport
--dport
-p icmp
--icmp_type (标定icmp数据包的)
下面为一些iptables的例子:
主机防火墙:
这个是http服务的
#iptables -A INPUT -d 192.168.0.52 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
#iptables -A OUTPUT -s 192.168.0.52 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
ftp服务
#iptables -A INPUT -d 192.168.0.155 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
#iptables -A OUTPUT -s 192.168.0.155 -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
#iptables -A INPUT -d 192.168.0.52 -m state --state ESTABLISHED,RELATED -j ACCEPT
#iptables -A OUTPUT -s 192.168.0.52 -m state --state ESTABLISHED -j ACCEPT
我们用iptables时的ftp服务时,还要配置此文件/etc/sysconfig/iptables-config,在里面加入"ip_conntrack_ftp,ip_nat_ftp",看这两个模块是否加入进去,查看可以用lsmod | grep ip
网络防火墙:
首先这个防火墙主机得有路由功能:
/proc/sys/net/ipv4/ip-forward=1(此关机就失效)或在此文件/etc/sysctl.conf(永久有效)中配置ipv4-forward=1,可以用命令sysctl -p 来查看。
增加训练难度,#iptables -P FORWARD DROP
#iptables -A FORWARD -s 192.168.0.0/24 -d 192.168.10.2 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
#iptables -A FORWARD -s 192.168.10.2 -d 192.168.0.0/24 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
这个是http服务的,我们可以通过查看文件/var/log/httpd来查看访问的日志。
也可以用iptables来记录日志:(须在所有iptables定义的规则前加此命令)
如:#iptables -I FORWARD 1 -s 192.168.0.0/24 -d 192.168.10.2 -p tcp --dport 80 -j LOG --log-prefix "web server" (--log-prefix是在日志前面加个web server的)
ftp服务可以在防火墙内通过:
#iptables -A INPUT -d 192.168.0.155 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
#iptables -A OUTPUT -s 192.168.0.155 -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
#iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
通过NAT转换来实现http服务:
#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 192.168.10.2 -p tcp --dport 80 -j SNAT --to-source 192.168.10.1
#iptables -A FORWARD -s 192.168.0.0/24 -d 192.168.10.2 -p tcp --dport 80 -m state --state NEW,ESTABLESHED -j ACCEPT
#iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT
通过DNAT转换来实现http服务:
#iptables -t nat -A PREROUTING -s 192.168.0.0/24 -d 192.168.0.52 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.2
#iptables -A FORWARD -s 192.168.0.0/24 -d 192.168.10.2 -p tcp --dport 80 -m state --state NEW,ESTABLESHED -j ACCEPT
#iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT
iptables还有其他用法:
如: #iptables -A FORWARD -s 192.168.10.0/24 -m connlimit !--connlimit-above 6 -j ACCEPT (connlimit意思是并发连接数的限制,这里是不能超过六个)
#iptables -A INPUT -d 192.168.0.155 -m string --string "text" -alog {bm|kmp} -j DROP (过滤含有字符串text的内容)
其中把INPUT改成FORWARD这个只能过滤含有text的链接。如: www.text.com
#iptables -A FORWARD -s 192.168.10.0/24 -p tcp --dport 80 -m time --timesstart 12:00 --timestop 19:00 -j DROP
(这个是指80端口不能再12:00-19:00被访问)
#iptables -A FORWARD -s 192.168.10.0/24 -p tcp -m multiport --destination-ports 21,80 -j DROP (multiport指定多端口的)
用过滤7层的iptables来防止p2p式的服务:
如: #iptables -A FORWARD -m layer7 --l7proto qq -j DROP