服务器
1.1 iptables防火墙简介
netfilter/iptables(以下简称iptables)是unix/linux自带的一款优秀且开放源代码的安全自由的基于包过滤的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入和流出服务器的数据包进行很精细的控制。特别是它可以在一台非常低的硬件配置下跑的非常好
iptables是linux2.4及2.6内核中集成的服务。其功能与安全性比其ipfwadm,ipchains强大的多,iptables主要工作在osi七层的二、三、四层,如果重新编译内核,iptables也可以支持7层控制(squid代理 iptables)
1.2 iptables 名词和术语
容器:包含和被包含的关系
iptables是表的容器
iptables包含表 (4张表)表是链的容器,每个表都包含若干个链
链是规则的容器,真正过滤规则是属于链里面的
级别介绍
iptables 国家
表 省
链 市
规则 县
1.3 iptables工作流程
iptables是采用数据包过滤机制工作的,所以它会对请求的数据包的包头数据进行分析,并根据我们预先设定的规则来进行匹配是否可以进入到主机。
iptables工作流程小结
防火墙是一层层过滤的。实际是按照配置规则的顺序从上到下,从前到后进行过滤的。
如果匹配上规则,即明确表是阻止还是通过,此时数据包就不在向下匹配新规则了。
如果所有规则中没有明确是阻止还是通过这个数据包,也就是么有匹配上新规则,向下进行匹配,直到匹配默认规则得到明确的组织还是通过
防火墙的默认规则是对应链的所有规则执行完才会执行的。
1.4 iptables表(tables)和链(chains)
iptables根据功能和表的定义划分包含三个表,filter,nat,mangle,其每个表又包含不同的操作链(chains)
filter表 是真正的防火墙功能
input 进服务器 output出服务器 forward 流经服务器
nat 表 负责数据包改写 网关共享上网、ip和端口映射
output
prerouting
postrouting
mangle表 路由标记 用的不多
####所有链全有
raw 表 用处很少和mangle一样
我们可以通过man iptables 来获取
1.5 表介绍
对于filter表的控制是我们实现本机防火墙的重要手段,特别是对input链的控制
1.6 iptables表和链工作流程图
提示: iptables主要由2个作用,第一是防火墙,第二是路由。
nat功能:
企业案例:1)局域网上网共享(路由和网关)nat postrouting
2)外部ip和端口映射为内部ip和端口(dmz功能),nat prerouting
filter功能:
即防火墙filter input forward
企业案例:主要应用于服务器防火墙
2.1 配置iptables
iptables默认已经安装[root@web02 ~]# iptables -viptables v1.4.7[root@web02 ~]# rpm -qa iptablesiptables-1.4.7-16.el6.x86_64[root@web02 ~]# /etc/init.d/iptables statusiptables: firewall is not running.查看iptables规则
[root@web02 ~]# iptables -nlchain input (policy accept)表示针对input链 accept是默认规则,默认是运行通过的
target prot opt source destinationinput链下面具体的规则accept all -- 0.0.0.0/0 0.0.0.0/0 state related,establishedaccept icmp -- 0.0.0.0/0 0.0.0.0/0accept all -- 0.0.0.0/0 0.0.0.0/0accept tcp -- 0.0.0.0/0 0.0.0.0/0 state new tcp dpt:22reject all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibitedchain forward (policy accept)target prot opt source destinationreject all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibitedchain output (policy accept)target prot opt source destination如果没有指定表,默认就是filfer表
iptables默认加载的内核模块[root@web02 ~]# lsmod |egrep nat|filter|iptipt_reject 2351 2iptable_filter 2793 1ip_tables 17831 1 iptable_filter加载如下模块到linux内核
modprobe ip_tablesmodprobe iptable_filtermodprobe iptable_natmodprobe ip_conntrack 连接跟踪modprobe ip_conntrack_ftp 连接跟踪modprobe ip_nat_ftpmodprobe ipt_state再次过滤,查看生效情况
[root@web02 ~]# lsmod |egrep nat|filter|iptnf_nat_ftp 3443 0nf_conntrack_ftp 11953 1 nf_nat_ftpiptable_nat 5923 0nf_nat 22676 2 nf_nat_ftp,iptable_natipt_reject 2351 2nf_conntrack_ipv4 9154 5 iptable_nat,nf_natnf_conntrack 79206 6 nf_nat_ftp,nf_conntrack_ftp,iptable_nat,nf_nat,nf_conntrack_ipv4,xt_stateiptable_filter 2793 1ip_tables 17831 2 iptable_nat,iptable_filter 清空所有的规则,只留下默认规则
[root@web02 ~]# iptables -f[root@web02 ~]# iptables -x[root@web02 ~]# iptables -ziptables -f 清除所有规则
iptables -x 删除用户自定义规则
iptables -z 链的计数器清零
2.2 禁止规则
查看端口
[root@web02 ~]# netstat -lntup|grep sshtcp 0 0 0.0.0.0:22 0.0.0.0:* listen 1329/sshdtcp 0 0 :::22 :::* listen 1329/sshd命令如下:
iptables -t filter -a input -p tcp --dport 22 -j drop-a 添加规则到指定链的结尾,最后一条
-i 添加规则到指定链的开头,第一条
-t 指定表,也可以不指定默认是filter
-p 指定协议(all.tcp,udp.icmp)默认all
–dport 指定端口
-j 处理的行为
accpet接收、drop丢弃、reject拒绝
最好使用accpet和drop,因为拒绝会返回给用户信息。
清除规则可以使用iptables -f
还可以使用iptables -d input 1
-d指定删除的链
–line-number 显示序列号
iptables -nl –line-number
提示:需要写上链和序列号
温馨提示:恢复刚才断掉的ssh连接
1)去机房重启系统或登录服务器删除