iptables防火墙重点简单总结
1.iptables防火墙简介(4表5链)
iptables的4表:(filter表,nat表,mangle表,raw表,最常用的是前面两个)
iptables的5链:(INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING,所有的链名字要大写。)
filter表的作用:主要和主机自身有关,负责主机防火墙功能过滤的,过滤流入流出主机的数据包.
nat表的作用:负责网络地址转换,来源与目的IP地址和port的转换。
2.iptables常用的命令总结
[root@bogon ~]# iptables -V #查看版本号
[root@bogon ~]# iptables -nL #查看当前状态filter表的防火墙规则
[root@bogon ~]# iptables -t nat -nL #查看当前状态nat表的防火墙规则
[root@bogon ~]# iptables (-t filter)-F #清除filter表中所有的规则
[root@bogon ~]# iptables -t nat -F #清除nat表中所有的规则
[root@bogon ~]# /etc/init.d/iptables save #保持防火墙规则
[root@bogon ~]# /etc/init.d/iptables restart #重启iptables
[root@bogon ~]# iptables -nL --line-numbers #查看链并带序号
[root@bogon ~]# iptables -t filter -I INPUT 2 -p tcp --dport 70 -j DROP #在第2条规则位置插入一条规则
[root@bogon ~]# iptables -t filter -D INPUT 3 #删除指定序号的链(删除第3条序号的链)
[root@bogon ~]# iptables -N chain #创建自定义链,很少用
[root@bogon ~]# iptables -X #删除自定义的链,很少用
[root@bogon ~]# iptables -Z #把曾经的链的计数器清零,很少用
3.iptables常用语法 iptables -t [表] -选项 链 规则 -j 处理方式
表:filter,nat(主要),manngle,raw
选项:A增加(在末尾添加),D删除,I增加(在开头添加)
链:INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING
规则:-p 协议等,如:-p tcp
处理方式:DROP,ACCEPT,REJECT(丢弃、接受、拒绝)
常见规则:
-p 协议(tcp,udp,icmp) #匹配协议
--dport 目的端口 或: --sport 源端口 #匹配端口
-i eth0(入口网卡) 或: -o eth1(出口网卡) #匹配网卡接口
-s 源ip 或: -d 目标ip #匹配ip
-m multiport --dport 端口1,端口2,端口3,... #匹配多端口,也可换成--sport(很少用)
-m state --state NEW/ESTABLISHED/RELATED(也可逗号匹配多个) #匹配网络状态
NEW:已经或将启动新的连接,ESTABLISHED:已建立的连接,RELATED:正在启用的新连接,INVALID:非法或无法识别的
例子:iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
4.其他常见的匹配规则 (一般源端口一般很少封)
注意:下面的-A换成-D是删除规则
1)禁止所有客户端访问我本机指定的服务,其他服务不受影响
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP #封22端口,客户端无法ssh连接服务器
iptables -t filter -A INPUT -p tcp --dport 80 -j DROP #封80端口,禁止用户访问80端口,客户端访问不了web
iptables -t filter -A INPUT -p tcp --dport 3306 -j DROP #封3306端口,禁止用户访问3306端口,客户端访问不了mysql
iptables -t filter -A INPUT -p tcp -m multiport --dport 80,3306 -j DROP #一次封多个端口
2)禁止某一个客户端(192.168.4.205)访问我本机指定的服务,其他服务不受影响
iptables -t filter -A INPUT -p tcp -s 192.168.4.205 --dport 22 -j DROP #封22端口
iptables -t filter -A INPUT -p tcp -s 192.168.4.205 --dport 80 -j DROP #封80端口
iptables -t filter -A INPUT -p tcp -s 192.168.4.205 --dport 3306 -j DROP #封3306端口
iptables -t filter -A INPUT -p tcp -s 192.168.4.205 -m multiport --dport 80,3306 -j DROP #一次封多个端口
3)禁止某个网段(192.168.4.0)访问我本机指定的服务,其他服务不受影响
iptables -t filter -A INPUT -p tcp -s 192.168.4.0/24 --dport 22 -j DROP #封22端口
iptables -t filter -A INPUT -p tcp -s 192.168.4.0/24 --dport 80 -j DROP #封80端口
iptables -t filter -A INPUT -p tcp -s 192.168.4.0/24 --dport 3306 -j DROP #封3306端口
iptables -t filter -A INPUT -p tcp -s 192.168.4.0/24 -m multiport --dport 80,3306 -j DROP #一次封多个端口
4)禁止所有客户端访问我本机所有的服务
iptables -t filter -A INPUT -p tcp -j DROP
5)禁止某一个客户端(192.168.4.205)访问我本机所有的服务
iptables -t filter -A INPUT -p tcp -s 192.168.4.205 -j DROP
6)禁止某个网段(192.168.4.0)访问我本机所有的服务
iptables -t filter -A INPUT -p tcp -s 192.168.4.0/24 -j DROP
7)禁止不是某个客户端(192.168.4.205)访问我所有的服务(也可指定端口) #其他非网段等类似
iptables -t filter -A INPUT -p tcp ! -s 192.168.4.205 -j DROP #!表示非该客户端的禁止
8)服务器禁止客户端ping,但其他服务没事(以限制某个客户端为例,其他都类似)
iptables -t filter -I INPUT -p icmp --icmp-type 8 -i eth0 -s 192.168.4.205 -j DROP
#--icmp-type 8表示:源主机被隔离
5.SNAT和DNAT作用和使用
SNAT作用:改变数据包的源地址、源端口等。(不改变目标地址、目标端口)
注意:之前的思维老是认为是:内网出去的时候才配置SNAT,外网进来的时候配置DNAT,这是一个误区,SNAT和DNAT既可以出去也可进来,我们只是要根据作用和需要进行相应规则配置。
DNAT作用:改变数据包的目标地址、目标端口等。(不改变源地址、源端口)
6.企业配置规则案例:
(注意:案例2和3本质是一样的,只是一个是内网配网关可以少打一条规则,一个是内网没配网关,需要多打一条规则)
1)企业案例1:企业内部主机实现共享上网 SNAT规则
在A机器(外网web服务器) (10.0.0.6上(eth0(vmnet2))
在B机器上(防火墙机器):外网10.0.0.19(eth0(vmnet2)),内网192.168.1.19(eth1(vmnet1))
a)网卡配置: 外网卡配网关: 10.0.0.254 内网卡: 不配网关
b)开启路由转发 #vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
# sysctl –p
c)配置snat规则
# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.19
#-o eth0 从eth0网卡出去,网关的外网卡接口,--to-source后面是B机器的公网地址
注意:当路由的公网是一个变化的IP时,可以用地址欺骗伪装的方式配置,如下:
# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
在C机器192.168.1.17上:eth0(vmnet1)配置网关:192.168.1.19(网关是防火墙机器的内网IP)
# curl http://10.0.0.6 访问外网成功。
2)企业案例2:把外网IP地址及端口映射到内部服务器地址及端口(外网客户端访问内网web机器) DNAT规则
内网web机器(企业内部web机器192.168.1.17) (vmnet1) #内网配置了网关:192.168.1.19(目的能和外网通)
[root@bogon ~]# yum -y install httpd
[root@bogon ~]# /etc/init.d/httpd start
[root@bogon ~]# echo 2222 > /var/www/html/index.html
[root@bogon ~]# /etc/init.d/iptables stop
在防火墙机器上:外网10.0.0.19(eth0(vmnet2)),内网192.168.1.19(eth1(vmnet1))
a)网卡配置: 外网卡配网关: 10.0.0.254 内网卡: 不配网关
b)开启路由转发 #vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
# sysctl -p
c)配置dnat规则
# iptables -t nat -A PREROUTING -d 10.0.0.19 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.17:80
#若C机器没有配置网关,则还需要添加下面一条规则:(此处配了网关,所以可以不加下面的规则)
#iptables -t nat -A POSTROUTING -d 192.168.1.17 -p tcp -m tcp --dport 80 -j SNAT --to-source 192.168.1.19
外网客户端机器:10.0.0.6上(eth0(vmnet2)):访问内网web服务 能访问内网web服务
[root@localhost 桌面]# curl http://10.0.0.19
2222
3)企业案例3:使外网客户端的plsql能连接到内网的oracle服务器案例:(工作案例,iptables机器作为跳板机)
外网客户端机器: 外网的任意IP机器。
iptables机器:外网IP: 124.42.15.118 内网:192.168.15.110 有监听端口:10050(通过配置能和内网192.168.8.151连通)
内网oracle机器: 只有内网: 192.168.8.151:1521 (通过配置能和内网192.168.15.110连通)内网没配网关
在iptables机器上配置规则:(需要开启路由转发)
iptables -t nat -A PREROUTING -d 124.42.15.118 -p tcp -m tcp --dport 10050 -j DNAT --to-destination 192.168.8.151:1521
iptables -t nat -A POSTROUTING -d 192.168.8.151 -p tcp -m tcp --dport 1521 -j SNAT --to-source 192.168.15.110
外网客户端机器操作:
在plsql的tns文件中修改端口和跳板机的IP地址,如下:
A_PRI_CRM =
(DESCRIPTION =
(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 124.42.15.118)(PORT = 10050)))
(CONNECT_DATA =(SERVICE_NAME = orcl))
)
以后登录plsql时候可以如下图登录:
7.一般第一次配置规则后,保存规则后,会把规则自动写入配置文件/etc/sysconfig/iptables中
以后,如果想增加或删除规则,可以直接修改配置文件:vim /etc/sysconfig/iptables,将规则写入或修改即可。
将规则修改或写入后,/etc/init.d/iptables reload 重新加载即可。
8.对攻击服务器的黑客的IP进行封堵案例思路
自动封:先用awk,sort排序等取出攻击服务器的黑客IP, …… > /home/shell/gongjiip,然后写脚本:
/bin/netstat –anptu |grep ESTABLISHED|awk …… > /home/shell/gongjiip
for i in $(cat /home/shell/gongjiip)
do
/sbin/iptables -I INPUT -s $i -j DROP
echo “$i kill at `date`” >>/var/log/ddos
done