table command chain parameters action
iptables -t filter -A(追加在表尾) PREROUTING -p tcp(协议) -j ACCEPT
nat -I(追加在表头) POSTROUTING -s ip(源ip) DROP(丢弃且不响应)
-D(删除一条) INPUT -d ip(宿ip) REJECT(拒绝且会给客户端响应)
-L(列举) OUTPUT --sport sp DNAT(修改宿地址)
-n FORWARD --dport dp SNAT(修改源地址)
-F(清空) -m
systemctl stop firewalld
systemctl mask firewalld
centos 默认使用的是firewall,因此需要先关闭它
yum install iptables-services
安装iptables service
systemctl enable iptables
开机启动iptables-service
systemctl start iptables
启动iptables
-A INPUT -i lo -j ACCEPT
允许本地访问
-A INPUT -p icmp -j ACCEPT
允许所有的ICMP协议的报文(即允许被ping)
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
允许已经建立的连接进行回包
-A INPUT -p tcp --dport 35628 -j ACCEPT
允许ssh(改了端口的ssh)被所有机器访问
-A INPUT -p tcp -s 10.47.86.0/24 --dport 9200 -m limit --limit 10/m --limit-burst 100 -j ACCEPT
允许 10.47.86.198/24 这个网段的机器访问这台机器的9200端口
(并发控制)9200端口的最大连接数是100,超过的话就限制每分钟只能10个连接
// 注意, -A 和 -I 都是追加一条规则,区别为 :
// -A 是追加在原有规则表的最后
// -I 是追加在原有规则表的开头
-A INPUT -p tcp --dport 9200 -j DROP
没有满足上述的并发控制的话,访问9200端口的请求就直接丢弃
-A OUTPUT -p tcp --sport 9200 -j ACCEPT
允许这台机器的9200端口,向任何机器返回数据
-A INPUT -p tcp --dport 8081:8089 -j ACCEPT
允许任何机器访问这台机器的8081~8089端口
-A INPUT -j REJECT
拒绝所有额外的数据包(无论什么协议的)
// 注意,必须是 -A,即在规则表的表尾;如果是 -I,则会导致所有应该接受的数据包也被拒绝掉
// 注意,一般的配置思路是accept的在表头,拒绝的次之
改写源地址(作用在PostRouting链上,即向外发出数据包的时候)
应用场景 :
有一台HttpServer是A网段的,B网段的一台客户机想要访问A网段里的HttpSserver
需要在A网段和B网段之间架设一台nat服务器,通过iptables配置nat转发
具体做法 :
1. nat服务器,修改 /etc/sysctl.conf
添加 net.ipv4.ip_forward = 1
然后执行 sysctl -p 命令来使之生效
2. nat服务器,修改 /etc/sysconfig/iptables
添加 iptables -t nat -A POSTROUTING -p tcp -s B网段地址 -j SNAT --to A网段地址
然后执行 service iptables restart
3. 一定要确保客户机的网关地址,是这台nat服务器的地址
可以通过修改客户机的 /etc/sysconfig/network 来达到目的
否则的话,如果客户机的请求不巧发给了别的一台网关,那台网关上没有配置nat转发,就访问不了HttpServer了
// 这样一来,客户机就可以直接访问HttpServer(直接的意思是输入的url不变,就是HttpServer的地址)
改写宿地址(作用在PreRouting链上,即接收数据包的时候)
应用场景 :
同上,还是B网段的客户机想要访问A网段上的http服务
但是稍微做些改动,客户机不是直接去访问server的地址,而是去访问nat服务器的地址,nat服务器再做转发
// 即,客户机访问nat服务器,但是实际上数据包被偷偷转发给了A网段的server
具体做法 :
1. nat服务器,修改 /etc/sysctl.conf
添加 net.ipv4.ip_forward = 1
然后执行 sysctl -p 命令来使之生效
2. nat服务器,修改 /etc/sysconfig/iptables
添加 iptables -t nat -A PREROUTING -p tcp -d 与客户机相连的网卡地址 --dport 80 -j DNAT --to HttpServer地址:端口
然后执行 service iptables restart
// 这样一来,客户机就可以间接访问HttpServer(间接的意思是客户机并不访问HttpServer的地址,而是使用nat的地址做url)