iptables:
ipchains iptables 的前身 2.2内核
iptables 基于数据包过滤的 2.4内核
硬件防火墙,价格相对于高。linux内核+iptables实现ui界面就可以实现。
iptables -t filter -A INPUT -P TCP --dport 23 -j ACCEPT
命令 指定表 指定链 对数据包的描述 处理方式
4个表5个链,表是链的容器,链是规则的容器。
表
filter 过滤表 对数据包进行过滤 3个链 INPUT OUTPUT FORWARD(路过的) 默认表是filter。
nat SNAT DNAT 转换表 PREROUTING=路由前 POSTROUTING=路由后 OUTPUT=输出(很少用到)
mangle 矫正表 打标记 INPUT OUTPUT FORWARD PREOUTING POSTROUTING
raw
mangle > nat >filter PREROUTING > (INPUT > OUTPUT)/FORWARD) > POSTROUTING
规则的顺序
包进入
#mangle PREROUTING
nat PREROUTING
路由判断
mangle INPUT mangle FORWARD
filter INPUT filter FORWARD
本地进程
路由判断
mangle OUTPUT
nat OUTPUT
filter OUTPUT
#mangle POSTROUTING
nat POSTROUTING
包送出
以本地为目标的包
mangle PREROUTING 标记,TTL,TOS
NAT PREROUTING DNAT
路由判断 决定包的去向
mangle INPUT 矫正
filter INPUT 过滤
到达本地程序
以本地为源的包
本地程序产生数据包
路由判断 决定包使用的源地址,外出接口
mangle OUTPUT 矫正
nat OUTPUT DNAT操作
filter OUTPUT 过滤
mangle POSTROUTING 矫正
nat POSTROUTING SNAT
离开本地
被转发的包
nat PREROUTING DNAT
路由判断 数据包是发往本地还是转发
filter FORWARD 过滤
NAT POSTROUTING SNAT
ACCEPT 允许
DROP 丢弃
REJECT 拒绝
command
-A 在所选的链末尾添加规则,如果源地址或目的地址是以名字而不是ip的形式指定的,如果名字会被解析成多个地址,则此规则会和所有的可用地址结合
-D 在所选的链中删除规则
iptables -D INPUT --dport 80 -j DROP (通过规则内容删除)
iptables -D INPUT 3(通过编号删除)
-R 在所选的链中替换规则,必须指定条数
iptables -R INPUT 1 -s 192.168.0.1 -j DROP
-I 插入规则 iptables -I INPUT 1 --dport 80 -j ACCEPT 不指定条数的话,默认是1.
-L list 查看规则 没有指定表,默认是filter ,没有指定链,默认是列出所有链。
-F 清空规则。没有指定链,则清空指定表中的所有链,没有指定表,则清空默认表的。
-Z 清空计数器。
-N 新建一个链
-X 删除一个链。前提是链是空的,没有别的链指向(调用)它。 没有指定的话,删除所有自定义链。
-P 修改默认规则
iptables -P FORWARD DROP 。
-E 对自定义的链改名。
options
-v 显示详细信息 一般结合L A D I R 使用
-x 精确的
-n 数值形式显示内容
--line-numbers 显示规则序号
-c 指定计数器的值
--modeprobe 指定加载的模块
通用匹配
-p 匹配指定的协议 协议名不区分大小写,可以使用对应的整数值(icmp=1 tcp=6 udp=17)默认all=0= (tcp udp icmp) 可以是协议列表udp,tcp加 !表示取反, ! 两边有空格
iptables -A INPUT -p 6(tcp)
-s 匹配源地址 iptables -A -s ! 192.168.1.0/24
-d 匹配目的地址
-i 以包进入本地的接口来匹配 INPUT FORWARD PREROUTING
iptables -A INPUT -i eth0/+ (+ 匹配所有接口 ! eth0)
-o 以包离开本地的接口来匹配
-f 匹配ip碎片 iptables -A INPUT ! -f
隐含匹配
TCP
--sport 匹配源端口 不加选项的话,默认是所有端口 iptables -A INPUT -p tcp --sprot 22:80
--dport 匹配目的端口
--tcp-flags 匹配TCP标记 iptables -A INPUT -p tcp --tcp-flags ! SYN,FIN,ACK SYN
--syn iptables -A INPUT -p tcp --tcp-flags SYN,RST,ACK SYN
--tcp-option iptables -A INPUT -p tcp --tcp-option 16
UDP
--sport
--dport
ICMP
--icmp-type iptables -A INPUT -p icmp --icmp-type 8
使得只有192.168.0.x 和192.168.0.y 的机器可以连接您的pop3服务器。但同一网段的其他人不行。
设置缺省策略为INPUT 和OUTPUT拒绝全部,但:允许你对你自己的ip地址(192.168.0.11和127.0.0.1)进行任何访问.
只允许某2人即两台主机可以telnet 你,例如其中一台为192.168.0.123
允许某2人每秒钟ping你1次
允许您主动访问任何人
Test01 用户可以使用自己的ip地址作测试用途,但不能访问其他的任何ip
Test02 用户可以访问任意地址
定义一个自定义规则,对所有访问您23端口的动作进行日志