iptables命令用于linux下防火墙规则管理,可以对指定协议、来源、端口的访问数据进行放行或丢弃
1、添加iptables规则
iptables -A INPUT -p tcp -s 192.168.0.104 --dport 3306 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j DROP
#-A INPUT or OUT 进还是出的规则
#-p tcp or udp协议
#-s 源ip地址
#--dport 端口号
#-j ACCEPT 允许 REJECT 拒绝 DROP 丢弃
2、删除iptables规则
#查看规则行号
iptables -L -n INPUT --line-numbers
#-L --list 显示规则
#-n 端口显示数字
#--line-numbers 显示规则编号,用于删除
#删除规则
iptables -D INPUT 3
3、保存iptables规则,使之重启后有效
centos6
service iptables save #或 #修改/etc/sysconfig/iptables配置文件中的规则后重启服务 service iptables restart
centos7(默认使用firewall,停用firewall后安装iptables,就与centos6相同)
#停用firewall systemctl stop firewall .service #停止firewall systemctl disable firewall.service #禁止开机启动firewall firewall-cmd --status #查看firewall状态 #安装iptables yum install iptables-service systemctl enable iptables systemctl start iptables
ubuntu(使用iptables-save和iptables-restore)
手动保存
#1.保存iptables规则到文件 #sudo iptables-save > /etc/iptables.rules会报错 sudo bash -c 'iptables-save > /etc/iptables.rules' #2.设置网络配置文件中加载该文件 vim /etc/network/interfaces 加入pre-up iptables-restore < /etc/iptables.up.rules
重启自动生效
#1.新增网络关闭自动执行脚本 vim /etc/network/if-post-down.d/iptables 内容为 #!/bin/bash iptables-save > /etc/iptables.rules #2.新增网络开启自动执行脚本 sudo vim /etc/network/if-pre-up.d/iptables 内容为 #!/bin/bash iptables-restore < /etc/iptables.rules #3.给两个脚本执行权限 sudo chmod +x /etc/network/if-post-down.d/iptables sudo chmod +x /etc/network/if-pre-up.d/iptables
4、常用功能
白名单规则
比如开通本机的22端口,允许192.168.1.0网段的服务器访问(-t filter表配置可以省略,默认就是这种表的配置)
iptables -A INPUT -s 192.168.1.0/24 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
或者
iptables -t filter -A INPUT -s 192.168.1.0/24 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
开通本机的80端口,只允许192.168.1.150机器访问(32位掩码表示单机,单机指定时可以不加掩码)
iptables -t filter -A INPUT -s 192.168.1.150/32 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
然后保存规则,重启iptables
service iptables save
service iptables restart
或者在/etc/sysconfig/iptables文件里设置如下(其实上面在终端命令行里设置并save和restart防火墙后,就会自动保存规则到/etc/sysconfig/iptables这个文件中的):
cat /etc/sysconfig/iptables
......
*filter
:INPUT ACCEPT [442620:173026884]
:FORWARD ACCEPT [118911:23993940]
:OUTPUT ACCEPT [8215384:539509656]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -s 192.168.1.0/24 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -s 192.168.1.150/32 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
service iptables restart
NAT转发设置
比如访问本机(192.168.1.7)的8088端口转发到192.168.1.160的80端口;访问本机的33066端口转发到192.168.1.161的3306端口
准备工作:
本机打开ip_forword路由转发功能;192.168.1.160/161的内网网关要和本机网关一致!如果没有内网网关,就将网关设置成本机内网ip,并且关闭防火墙(防火墙要是打开了,就设置对应端口允许本机访问)
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8088 -j DNAT --to-destination 192.168.1.160:80
iptables -t nat -A POSTROUTING -d 192.168.1.160/32 -p tcp -m tcp --sport 80 -j SNAT --to-source 192.168.1.7
iptables -t filter -A INPUT -p tcp -m state --state NEW -m tcp --dport 8088 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 33066 -j DNAT --to-destination 192.168.1.161:3306
iptables -t nat -A POSTROUTING -d 192.168.1.161/32 -p tcp -m tcp --sport 3306 -j SNAT --to-source 192.168.1.7
iptables -t filter -A INPUT -p tcp -m state --state NEW -m tcp --dport 33066 -j ACCEPT
service iptables save
service iptables restart
或者在/etc/sysconfig/iptables文件里设置如下
cat /etc/sysconfig/iptables
......
*nat
:PREROUTING ACCEPT [60:4250]
:INPUT ACCEPT [31:1973]
:OUTPUT ACCEPT [3:220]
:POSTROUTING ACCEPT [3:220]
-A PREROUTING -p tcp -m tcp --dport 8088 -j DNAT --to-destination 192.168.1.160:80 //PREROUTING规则都放在上面
-A PREROUTING -p tcp -m tcp --dport 33066 -j DNAT --to-destination 192.168.1.161:3306
-A POSTROUTING -d 192.168.1.160/32 -p tcp -m tcp --sport 80 -j SNAT --to-source 192.168.1.7 //POSTROUTING规则都放在下面
-A POSTROUTING -d 192.168.1.161/32 -p tcp -m tcp --sport 3306 -j SNAT --to-source 192.168.1.7
.....
*filter
:INPUT ACCEPT [16:7159]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [715:147195]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8088 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 33066 -j ACCEPT
.....
service iptables restart
查看规则列表
iptables -L //列出设置的规则,默认列出的是filter表下的规则
iptables -L -t nat //如果列出nat表下规则,就加-t参数