netfilter组件也称为内核空间(KernelSpace),是内核的一部分,由一些“表”(table)组成,每个表由若干“链”(chains)组成,而每条链中可以有一条或数条规则(rule).我们可以这样理解,netfilter是表的容器,表是链的容器,而链又是规则的容器。
用户使用iptables命令在用户空间设置过滤规则,根据规则所处理的信息包的类型,可以将规则分组在链中。
处理入站信息包的规则被添加到INPUT链中。
处理出站信息包的规则被添加到OUTPUT链中。
处理正在转发的信息包的规则被添加到FORWARD中。
这三个链是系统默认的表(filter表)中内置的3个默认主链。每个链都有一个默认操作,当信息包与链中的任何规则都不匹配时,执行此操作。
框架图:
--->PREROUTING-->[ROUTE]--->FORWARD------------->POSTROUTING-->
mangle | mangle mangle
nat | filter |nat
| |
| |
V V
INPUT OUTPUT
| mangle | mangle
| filter |nat
V------>local----------->filter
表:
filter:用于过滤的时候
nat:用于做NAT的时候
链:
INPUT 位于filter表,匹配目的IP是本机的数据包
FORWARD 位于filter表,匹配穿过本机的数据包
PREROUTING 位于nat表,用于修改目的地址(DNAT)
POSTROUTING 位于nat表,修改源地址(SNAT)
iptalles 语法概述
iptables [-t 要操作的表] <操作命令> [要操作的链] [规则号码] [匹配条件] [-j 匹配到以后的动作]
#iptables -A INPUT -p icmp -j DROP
Target
ACCETP
REJECT
LOG
操作命令:
-A add
追加一条规则(放在最后 )
iptables -t filter -A INPUT -j DROP //在filter表的INPUT链里追加一条规则
-I <链名>[规则号码]
iptables -I INPUT -j DROP
在filter表中的INPUT链中插入一条规则(插入成第一条)
iptables -I INPUT 3 -j DROP 插入成第三条
-D <链名><规则号码|具体规则内容>
DELETE
iptables -D INPUT 3
iptalbes -D INPUT -s 192.168.0.1 -j DROP
-R <链名><规则号码><具体内容>
replace
iptables -R INPUT 3 -j ACCEPT
-P <链名><动作>
POLICY 设置某个链的默认规则
iptables -P INPUT DROP 动作前不加-j,唯一一种匹配动作前不加-j的情况
-F [链名]
FLUSH,清空规则
-L -[vxn]L
iptables -L
iptables -t nat -vnL
iptables -t nat -vxnL PREROUTING
匹配条件
流入 流出接口
数据流入的网络接口 -i eth0
数据流出的网络接口 -o ppp0
来源目的地址
-s <匹配来源地址>
-s 192.168.0.1
-s 192.168.1.0/24
-d<匹配目的地址>
-d 202.106.0.20
-d 202.106.0.0/16
-d www.baidu.com
协议类型
-p <匹配协议类型>
-p tcp
-p udp
-p icmp --icmp-type类型
来源 目的端口
--sport <匹配源地址>
--sport 1000
--sport 1000:30000 1000--3000
--sport :3000 <3000
--sport 1000: >1000
--dport <匹配目的端口>
同上
动作:
-j
ACCEPT
DROP
SNAT
DNAT
state
iptables -A OUTPUT -p tcp --sort 22 -m state --state ESTABLISHED -j ACCPT
日志
#iptables -A INPUT -p tcp --dport 22 -j LOG --log-level 5 --log-prefix "IPTABLES"
#/etc/syslog.conf
kern.=notice /var/log/firewall.log
FORWOARD:
iptables -A FORWARD -s 10.0.0.0/24 -j ACCEPT
iptables -A FORWARD -d 10.0.0.0/24 -j ACCEPT
cat /proc/sys/net/ipv4/ip_forward
/etc/sysctl.conf
NAT
SNAT
-----PREROUTING---------->FORWARED-------->POSTROUTING
destion:11.22.33.1:22 destionation:11.22.33.1:22
source:10.0.0.1: source: 11.22.33.44:
proto:tcp proto:tcp
本地地址:
eth0:10.0.0.254
eth1:11.22.33.44
DNAT
-----PREROUTING---------->FORWARED-------->POSTROUTING
destion:11.22.33.44:22 destionation:10.0.0.1:22
source:11.22.33.1: source: 11.22.33.1:
proto:tcp proto:tcp
本地地址:
eth0:10.0.0.254
eth1:11.22.33.44
SNAT应用
10.0.0.241------->eth0:10.0.0.254-------->192.168.0.1
eth1:192.168.0.254
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source 192.168.0.254
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j MASQUERADE
DNAT应用
10.0.0.241------->eth0:10.0.0.254-------->192.168.0.1
eth1:192.168.0.254
iptables -t nat -A PREROUTING -d 10.0.0.254 -p tcp -dport 80 -j DNAT --to-destination 192.168.0.1
#iptable -L -n 查看防火墙
#iptable -F 清空
#iptables -A INPUT -p tcp -d 192.168.1.30 --dport 21 -j DROP
ssh:
#iptables -A INPUT -p tcp -d 192.168.1.30 --dport 22 -j ACCEPT
#iptables -A OUTPUT -p tcp -s 192.168.1.30 --sport 22 -j ACCEPT
http:
#iptable -A INPUT -p tcp --dport 80 -j ACCEPT
#iptable -A OUTPUT -p tcp --sport 80 -j ACCEPT
#iptables -L -n --line-numbers
增加一个DNS通道
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --sport 53 -j ACCEPT
自己是自己的DNS服务器
host--->named
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp --sport 53 -j ACCEPT
保存
/etc/sysconfig/iptaboles
server iptables save
iptables-save>/etc/sysconfig/iptales
iptables-save
随机文章:
Tags: iptables
The best information i have found exactly here. Keep going Thank you