安装
关闭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