iptables
概述
防火墙有:netfilter和iptables可以有效控制进出服务器的流量和流经服务器的流量。今天主要掌握墙的结构,匹配流程和编写规则。
netfilter:内核态,即不以文件和形式存在(kernal space)的防火墙。
iptables:用户态,在/sbin/iptables存在(User space)的防火。操作上二者没有区分。
linux-iptables主机型防火墙工作在2,3,4层,对TCP/IP数据包进行过滤和限制。属于包过滤型防火墙。(除非编译内核才可以使iptables支持7层)
缺点
(1)防火墙虽然可以过滤互联网的数据包,但却无法过滤内部网络的数据包。因此若有人从内部网络攻击时,防火墙没有作用。
(2)电脑本身的操作系统亦可能因一些系统漏洞,使入侵者可以利用这些漏洞绕过防火墙过滤,从而入侵电脑。
(3)防火墙无法有效阻挡病毒攻击,尤其是隐藏在数据中的病毒。
(4)正常状况下,所有互联网的数据包软件都应经过防火墙的过滤,这将造成网络交通的瓶颈。例如在攻击性数据包出现时,攻击者会不时寄出数据包,让防火墙疲于过滤数据包,而使一些合法数据包软件亦无法正常进出防火墙。
PS:没有绝对安全的操作系统,虽然防火墙有这些缺点,但还是能阻挡大多数来自于外网的攻击!
四表
filter过滤/nat装换/mangle碾压/raw生的
PREROUTING预路由,POSTROUTING已路由,INPUT入站,OUTPUT出站,FORWARD**
安装
yum install -y iptables
查看规则
iptables -nL
iptables-save
模板
iptables [-t表] [-AI 链] [-io 网络接口] [-p tcp,udp] [-s 来源 IP/网段] [–sport 端口范围] [-d 目标 IP/网段] [–dport 端口范围] -j [ACCEPT;DROP;REJECT]
-A 添加 -I 插入 -P 需改INPUT 后 的状态
先执行如下命令,添加规则:开放22端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
选项与参数:
-t :后面接 table ,例如 nat 或 filter ,若省略此项目,则使用预设的 filter
-L :列出目前的 table 的规则
-n :不进行 IP 与 HOSTNAME 的反查,显示结果的速度会快很多!
-v :列出更多的信息,包括通过该规则的数据包总位元数、相关的网路接口等
- Chain 就是链
- policy 就是默认的规则
- target:代表进行的动作, ACCEPT 是放行,而 REJECT 则是拒绝,此外,还有 DROP (丢弃) 的项目!
- prot:代表使用的数据包协议,主要有 tcp, udp 及 icmp 三种数据包格式;
- opt:额外的选项说明
- source :代表此规则是针对哪个『来源 IP』进行限制
- destination :代表此规则是针对哪个『目标 IP』进行限制
[root@jenkins ~]# iptables-save
Generated by iptables-save v1.4.7 on Fri Jul 22 15:51:52 2011
*filter <==星号开头的指的是表格,这里为 filter
:INPUT ACCEPT [0:0] <==冒号开头的指的是链,三条内置的链
:FORWARD ACCEPT [0:0] <==三条内置链的政策都是 ACCEPT
:OUTPUT ACCEPT [680:100461]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT <==针对 INPUT 的规则
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT <==这条很重要!针对本机内部接口开放!
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited <==针对 FORWARD 的规则
COMMIT
Completed on Fri Jul 22 15:51:52 2011
修改
iptables [-t tables] [-FXZ]
选项与参数:
-F :清除所有的已设置的规则;
-X :杀掉所有用户 “自定义” 的 chain;
-Z :将所有的 chain 的计数与流量统计都归零
tcp udp 规则
iptables [-AI 链] [-io 网络接口] [-p tcp,udp]
[-s 来源 IP/网段] [–sport 端口范围]
[-d 目标 IP/网段] [–dport 端口范围]
-j [ACCEPT;DROP;REJECT]
关于状态的规则
iptables -A INPUT [-m state] [–state 状态]
选项与参数:
-m :一些 iptables 的外挂模块,主要常见的有:
state :TCP 状态模块
mac :网卡的 mac 地址 (hardware address)
–state :一些数据包的状态,主要有:
INVALID :无效的数据包,例如资料破损的数据包状态
ESTABLISHED:已经连线成功的连线状态;
NEW :想要新建立连线的数据包状态;
RELATED :这个最常用!表示这个数据包是与我们主机发送出去的数据包有关
转地址
首先保障其他主机能访问到本地的 80 端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
设置本地端口转发
iptables -t nat -A PREROUTING-p tcp --dport 90 -j REDIRECT --to-ports 80
iptables -t nat -A OUTPUT -p tcp --dport 90 -j REDIRECT --to-ports 80
转IP 并装IP
iptables -t nat -A PREROUTING -p tcp --dport 2525 -j DNAT --to-destination 192.168.122.94:22
删除
iptables -t nat -F