安装

关闭firewall

systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动

安装iptables

yum install iptables-services
systemctl start iptables.service
systemctl enable iptables.service #设置开机启动

关闭SELinux

vi /etc/selinux/config

#SELINUX=enforcing #注释掉
#SELINUXTYPE=targeted #注释掉
SELINUX=disabled #增加

setenforce 0 #使配置立即生效

iptables配置文件位置:/etc/sysconfig/iptables

使用

墙裂推荐这个系列博客,说得很详细:http://www.zsythink.net/archives/tag/iptables/

iptables -t [table] 指定表,不指定默认filter

以下参数后面跟链的名字 比如INPUT

-D [delete] 删除
-I [insert] 添加规则到首部
-A [append] 添加规则到尾部
-L [list] 列出已有规则
-F [flush] 删除所有规则
-P 设置默认规则

数据展示 用于-L命令,使用时可以直接-nvl

-v [verbose] 展示详细信息
--line 显示行号
-n 不要把IP0.0.0.0/0显示成anywhere

配置规则

-s 来源IP,可以是单个IP,也可以是多个IP用逗号隔开,也可以是地址段
-d 目标IP
-p 协议 tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh
-i 流入网卡
-o 流出网卡
-j 操作 ACCEPT DROP REJECT或是自定义链

扩展模块

-m tcp --dport 8080 指定端口,如果指定了-p的话可以省略-m。端口段 8088:8090
-m multiport --dport 8080 可以用逗号隔开多个端口 80,8081:8010
-m iprange --src-range 192.168.0.1-192.168.0.10 IP段
-m string --algo bm --string "OOXX" 匹配字符串
-m connlimit --connlimit-above 2 连接数限制
-m time --timestart 09:00:00 --timestop 16:00:00 --weekdays 6,7 ! --monthdays 29,30,31 ! --datestart 2018-04-01 --datestop 2018-06-01 根据时间限制访问
-m state --state ESTABLISHED,RELATED NEW表示接受主动请求,ESTABLISHED,RELATED表示能够收到响应但是不允许主动发起链接

小技巧:我们如果想要使用”白名单”的机制,最好将链的默认策略保持为”ACCEPT”,然后将”拒绝所有请求”这条规则放在链的尾部,将”放行规则”放在前面,这样做,既能实现”白名单”机制,又能保证在规则被清空时,管理员还有机会连接到主机

自定义链

-N MYCHAIN 创建自定义链
-E MYCHAIN HUGEOCHAIM 改名字
iptables -I input -p tcp --dport 80 -j HUGEOCHAIM 绑定使用
-X HUGEOCHAIN 删除链,必须没有绑定

nat表:网络地址转换

-j SNAT|DNAT
iptables -t nat -I POSTROUTING -s 10.1.0.0/16 -j SNAT –to-source 192.168.1.141
SNAT用于内网机器共享公网IP,可以起到隐藏内网IP的作用。比如上面的命令意思是所有10.1.0.0/16发的请求全部将IP改为192.168.1.141再发出去

iptables -t nat -I PREROUTING -d 192.168.1.1 –dport 3306 -j DNAT –to-destination 10.1.0.1:3306
DNAT用于转发外部请求到内网

本机端口映射

-j REDIRECT --to-ports 8080

通过iptables命令增加修改删除的规则都是暂时的,重启iptables就会失效
永久保存:iptables-save > /etc/sysconfig/iptables
放弃所有修改:iptables-restore < /etc/sysconfig/iptables