| 217 | | /* |
|---|
| 218 | | * |
|---|
| 219 | | * Everything in the MANGLE table |
|---|
| 220 | | * |
|---|
| 221 | | */ |
|---|
| 222 | | |
|---|
| 223 | | /* Create new chains */ |
|---|
| 224 | | iptables_do_command("-t mangle -N " TABLE_WIFIDOG_TRUSTED); |
|---|
| 225 | | iptables_do_command("-t mangle -N " TABLE_WIFIDOG_OUTGOING); |
|---|
| 226 | | iptables_do_command("-t mangle -N " TABLE_WIFIDOG_INCOMING); |
|---|
| 227 | | |
|---|
| 228 | | /* Assign links and rules to these new chains */ |
|---|
| 229 | | iptables_do_command("-t mangle -I PREROUTING 1 -i %s -j " TABLE_WIFIDOG_OUTGOING, gw_interface); |
|---|
| 230 | | iptables_do_command("-t mangle -I PREROUTING 1 -i %s -j " TABLE_WIFIDOG_TRUSTED, gw_interface);//this rule will be inserted before the prior one |
|---|
| 231 | | iptables_do_command("-t mangle -I POSTROUTING 1 -o %s -j " TABLE_WIFIDOG_INCOMING, gw_interface); |
|---|
| 232 | | |
|---|
| 233 | | for (p = config->trustedmaclist; p != NULL; p = p->next) |
|---|
| 234 | | iptables_do_command("-t mangle -A " TABLE_WIFIDOG_TRUSTED " -m mac --mac-source %s -j MARK --set-mark %d", p->mac, FW_MARK_KNOWN); |
|---|
| 235 | | |
|---|
| 236 | | /* |
|---|
| 237 | | * |
|---|
| 238 | | * Everything in the NAT table |
|---|
| 239 | | * |
|---|
| 240 | | */ |
|---|
| 241 | | |
|---|
| 242 | | /* Create new chains */ |
|---|
| 243 | | iptables_do_command("-t nat -N " TABLE_WIFIDOG_OUTGOING); |
|---|
| 244 | | iptables_do_command("-t nat -N " TABLE_WIFIDOG_WIFI_TO_ROUTER); |
|---|
| 245 | | iptables_do_command("-t nat -N " TABLE_WIFIDOG_WIFI_TO_INTERNET); |
|---|
| 246 | | iptables_do_command("-t nat -N " TABLE_WIFIDOG_GLOBAL); |
|---|
| 247 | | iptables_do_command("-t nat -N " TABLE_WIFIDOG_UNKNOWN); |
|---|
| 248 | | iptables_do_command("-t nat -N " TABLE_WIFIDOG_AUTHSERVERS); |
|---|
| 249 | | |
|---|
| 250 | | /* Assign links and rules to these new chains */ |
|---|
| 251 | | iptables_do_command("-t nat -A PREROUTING -i %s -j " TABLE_WIFIDOG_OUTGOING, gw_interface); |
|---|
| 252 | | |
|---|
| 253 | | iptables_do_command("-t nat -A " TABLE_WIFIDOG_OUTGOING " -d %s -j " TABLE_WIFIDOG_WIFI_TO_ROUTER, gw_address); |
|---|
| 254 | | iptables_do_command("-t nat -A " TABLE_WIFIDOG_WIFI_TO_ROUTER " -j ACCEPT"); |
|---|
| 255 | | |
|---|
| 256 | | iptables_do_command("-t nat -A " TABLE_WIFIDOG_OUTGOING " -j " TABLE_WIFIDOG_WIFI_TO_INTERNET); |
|---|
| 257 | | iptables_do_command("-t nat -A " TABLE_WIFIDOG_WIFI_TO_INTERNET " -m mark --mark 0x%u -j ACCEPT", FW_MARK_KNOWN); |
|---|
| 258 | | iptables_do_command("-t nat -A " TABLE_WIFIDOG_WIFI_TO_INTERNET " -m mark --mark 0x%u -j ACCEPT", FW_MARK_PROBATION); |
|---|
| 259 | | iptables_do_command("-t nat -A " TABLE_WIFIDOG_WIFI_TO_INTERNET " -j " TABLE_WIFIDOG_UNKNOWN); |
|---|
| 260 | | |
|---|
| 261 | | iptables_do_command("-t nat -A " TABLE_WIFIDOG_UNKNOWN " -j " TABLE_WIFIDOG_AUTHSERVERS); |
|---|
| 262 | | iptables_do_command("-t nat -A " TABLE_WIFIDOG_UNKNOWN " -j " TABLE_WIFIDOG_GLOBAL); |
|---|
| 263 | | iptables_do_command("-t nat -A " TABLE_WIFIDOG_UNKNOWN " -p tcp --dport 80 -j REDIRECT --to-ports %d", gw_port); |
|---|
| 264 | | |
|---|
| 265 | | |
|---|
| 266 | | /* |
|---|
| 267 | | * |
|---|
| 268 | | * Everything in the FILTER table |
|---|
| 269 | | * |
|---|
| 270 | | */ |
|---|
| 271 | | |
|---|
| 272 | | /* Create new chains */ |
|---|
| 273 | | iptables_do_command("-t filter -N " TABLE_WIFIDOG_WIFI_TO_INTERNET); |
|---|
| 274 | | iptables_do_command("-t filter -N " TABLE_WIFIDOG_AUTHSERVERS); |
|---|
| 275 | | iptables_do_command("-t filter -N " TABLE_WIFIDOG_LOCKED); |
|---|
| 276 | | iptables_do_command("-t filter -N " TABLE_WIFIDOG_GLOBAL); |
|---|
| 277 | | iptables_do_command("-t filter -N " TABLE_WIFIDOG_VALIDATE); |
|---|
| 278 | | iptables_do_command("-t filter -N " TABLE_WIFIDOG_KNOWN); |
|---|
| 279 | | iptables_do_command("-t filter -N " TABLE_WIFIDOG_UNKNOWN); |
|---|
| 280 | | |
|---|
| 281 | | /* Assign links and rules to these new chains */ |
|---|
| 282 | | |
|---|
| 283 | | /* Insert at the beginning */ |
|---|
| 284 | | iptables_do_command("-t filter -I FORWARD -i %s -j " TABLE_WIFIDOG_WIFI_TO_INTERNET, gw_interface); |
|---|
| 285 | | |
|---|
| 286 | | |
|---|
| 287 | | iptables_do_command("-t filter -A " TABLE_WIFIDOG_WIFI_TO_INTERNET " -m state --state INVALID -j DROP"); |
|---|
| 288 | | |
|---|
| 289 | | /* XXX: Why this? it means that connections setup after authentication |
|---|
| 290 | | stay open even after the connection is done... |
|---|
| 291 | | iptables_do_command("-t filter -A " TABLE_WIFIDOG_WIFI_TO_INTERNET " -m state --state RELATED,ESTABLISHED -j ACCEPT");*/ |
|---|
| 292 | | |
|---|
| 293 | | //Won't this rule NEVER match anyway?!?!? benoitg, 2007-06-23 |
|---|
| 294 | | //iptables_do_command("-t filter -A " TABLE_WIFIDOG_WIFI_TO_INTERNET " -i %s -m state --state NEW -j DROP", ext_interface); |
|---|
| 295 | | |
|---|
| 296 | | /* TCPMSS rule for PPPoE */ |
|---|
| 297 | | iptables_do_command("-t filter -A " TABLE_WIFIDOG_WIFI_TO_INTERNET " -o %s -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu", ext_interface); |
|---|
| 298 | | |
|---|
| 299 | | iptables_do_command("-t filter -A " TABLE_WIFIDOG_WIFI_TO_INTERNET " -j " TABLE_WIFIDOG_AUTHSERVERS); |
|---|
| 300 | | iptables_fw_set_authservers(); |
|---|
| 301 | | |
|---|
| 302 | | iptables_do_command("-t filter -A " TABLE_WIFIDOG_WIFI_TO_INTERNET " -m mark --mark 0x%u -j " TABLE_WIFIDOG_LOCKED, FW_MARK_LOCKED); |
|---|
| 303 | | iptables_load_ruleset("filter", "locked-users", TABLE_WIFIDOG_LOCKED); |
|---|
| 304 | | |
|---|
| 305 | | iptables_do_command("-t filter -A " TABLE_WIFIDOG_WIFI_TO_INTERNET " -j " TABLE_WIFIDOG_GLOBAL); |
|---|
| 306 | | iptables_load_ruleset("filter", "global", TABLE_WIFIDOG_GLOBAL); |
|---|
| 307 | | iptables_load_ruleset("nat", "global", TABLE_WIFIDOG_GLOBAL); |
|---|
| 308 | | |
|---|
| 309 | | iptables_do_command("-t filter -A " TABLE_WIFIDOG_WIFI_TO_INTERNET " -m mark --mark 0x%u -j " TABLE_WIFIDOG_VALIDATE, FW_MARK_PROBATION); |
|---|
| 310 | | iptables_load_ruleset("filter", "validating-users", TABLE_WIFIDOG_VALIDATE); |
|---|
| 311 | | |
|---|
| 312 | | iptables_do_command("-t filter -A " TABLE_WIFIDOG_WIFI_TO_INTERNET " -m mark --mark 0x%u -j " TABLE_WIFIDOG_KNOWN, FW_MARK_KNOWN); |
|---|
| 313 | | iptables_load_ruleset("filter", "known-users", TABLE_WIFIDOG_KNOWN); |
|---|
| 314 | | |
|---|
| 315 | | iptables_do_command("-t filter -A " TABLE_WIFIDOG_WIFI_TO_INTERNET " -j " TABLE_WIFIDOG_UNKNOWN); |
|---|
| 316 | | iptables_load_ruleset("filter", "unknown-users", TABLE_WIFIDOG_UNKNOWN); |
|---|
| 317 | | iptables_do_command("-t filter -A " TABLE_WIFIDOG_UNKNOWN " -j REJECT --reject-with icmp-port-unreachable"); |
|---|
| 318 | | |
|---|
| 319 | | free(gw_interface); |
|---|
| 320 | | free(gw_address); |
|---|
| 321 | | |
|---|
| 322 | | return 1; |
|---|
| | 243 | /* |
|---|
| | 244 | * |
|---|
| | 245 | * Everything in the MANGLE table |
|---|
| | 246 | * |
|---|
| | 247 | */ |
|---|
| | 248 | |
|---|
| | 249 | /* Create new chains */ |
|---|
| | 250 | iptables_do_command("-t mangle -N " TABLE_WIFIDOG_TRUSTED); |
|---|
| | 251 | iptables_do_command("-t mangle -N " TABLE_WIFIDOG_OUTGOING); |
|---|
| | 252 | iptables_do_command("-t mangle -N " TABLE_WIFIDOG_INCOMING); |
|---|
| | 253 | |
|---|
| | 254 | /* Assign links and rules to these new chains */ |
|---|
| | 255 | iptables_do_command("-t mangle -I PREROUTING 1 -i %s -j " TABLE_WIFIDOG_OUTGOING, config->gw_interface); |
|---|
| | 256 | iptables_do_command("-t mangle -I PREROUTING 1 -i %s -j " TABLE_WIFIDOG_TRUSTED, config->gw_interface);//this rule will be inserted before the prior one |
|---|
| | 257 | iptables_do_command("-t mangle -I POSTROUTING 1 -o %s -j " TABLE_WIFIDOG_INCOMING, config->gw_interface); |
|---|
| | 258 | |
|---|
| | 259 | for (p = config->trustedmaclist; p != NULL; p = p->next) |
|---|
| | 260 | iptables_do_command("-t mangle -A " TABLE_WIFIDOG_TRUSTED " -m mac --mac-source %s -j MARK --set-mark %d", p->mac, FW_MARK_KNOWN); |
|---|
| | 261 | |
|---|
| | 262 | /* |
|---|
| | 263 | * |
|---|
| | 264 | * Everything in the NAT table |
|---|
| | 265 | * |
|---|
| | 266 | */ |
|---|
| | 267 | |
|---|
| | 268 | /* Create new chains */ |
|---|
| | 269 | iptables_do_command("-t nat -N " TABLE_WIFIDOG_OUTGOING); |
|---|
| | 270 | iptables_do_command("-t nat -N " TABLE_WIFIDOG_WIFI_TO_ROUTER); |
|---|
| | 271 | iptables_do_command("-t nat -N " TABLE_WIFIDOG_WIFI_TO_INTERNET); |
|---|
| | 272 | iptables_do_command("-t nat -N " TABLE_WIFIDOG_GLOBAL); |
|---|
| | 273 | iptables_do_command("-t nat -N " TABLE_WIFIDOG_UNKNOWN); |
|---|
| | 274 | iptables_do_command("-t nat -N " TABLE_WIFIDOG_AUTHSERVERS); |
|---|
| | 275 | |
|---|
| | 276 | /* Assign links and rules to these new chains */ |
|---|
| | 277 | iptables_do_command("-t nat -A PREROUTING -i %s -j " TABLE_WIFIDOG_OUTGOING, config->gw_interface); |
|---|
| | 278 | |
|---|
| | 279 | iptables_do_command("-t nat -A " TABLE_WIFIDOG_OUTGOING " -d %s -j " TABLE_WIFIDOG_WIFI_TO_ROUTER, config->gw_address); |
|---|
| | 280 | iptables_do_command("-t nat -A " TABLE_WIFIDOG_WIFI_TO_ROUTER " -j ACCEPT"); |
|---|
| | 281 | |
|---|
| | 282 | iptables_do_command("-t nat -A " TABLE_WIFIDOG_OUTGOING " -j " TABLE_WIFIDOG_WIFI_TO_INTERNET); |
|---|
| | 283 | iptables_do_command("-t nat -A " TABLE_WIFIDOG_WIFI_TO_INTERNET " -m mark --mark 0x%u -j ACCEPT", FW_MARK_KNOWN); |
|---|
| | 284 | iptables_do_command("-t nat -A " TABLE_WIFIDOG_WIFI_TO_INTERNET " -m mark --mark 0x%u -j ACCEPT", FW_MARK_PROBATION); |
|---|
| | 285 | iptables_do_command("-t nat -A " TABLE_WIFIDOG_WIFI_TO_INTERNET " -j " TABLE_WIFIDOG_UNKNOWN); |
|---|
| | 286 | |
|---|
| | 287 | iptables_do_command("-t nat -A " TABLE_WIFIDOG_UNKNOWN " -j " TABLE_WIFIDOG_AUTHSERVERS); |
|---|
| | 288 | iptables_do_command("-t nat -A " TABLE_WIFIDOG_UNKNOWN " -j " TABLE_WIFIDOG_GLOBAL); |
|---|
| | 289 | iptables_do_command("-t nat -A " TABLE_WIFIDOG_UNKNOWN " -p tcp --dport 80 -j REDIRECT --to-ports %d", gw_port); |
|---|
| | 290 | |
|---|
| | 291 | |
|---|
| | 292 | /* |
|---|
| | 293 | * |
|---|
| | 294 | * Everything in the FILTER table |
|---|
| | 295 | * |
|---|
| | 296 | */ |
|---|
| | 297 | |
|---|
| | 298 | /* Create new chains */ |
|---|
| | 299 | iptables_do_command("-t filter -N " TABLE_WIFIDOG_WIFI_TO_INTERNET); |
|---|
| | 300 | iptables_do_command("-t filter -N " TABLE_WIFIDOG_AUTHSERVERS); |
|---|
| | 301 | iptables_do_command("-t filter -N " TABLE_WIFIDOG_LOCKED); |
|---|
| | 302 | iptables_do_command("-t filter -N " TABLE_WIFIDOG_GLOBAL); |
|---|
| | 303 | iptables_do_command("-t filter -N " TABLE_WIFIDOG_VALIDATE); |
|---|
| | 304 | iptables_do_command("-t filter -N " TABLE_WIFIDOG_KNOWN); |
|---|
| | 305 | iptables_do_command("-t filter -N " TABLE_WIFIDOG_UNKNOWN); |
|---|
| | 306 | |
|---|
| | 307 | /* Assign links and rules to these new chains */ |
|---|
| | 308 | |
|---|
| | 309 | /* Insert at the beginning */ |
|---|
| | 310 | iptables_do_command("-t filter -I FORWARD -i %s -j " TABLE_WIFIDOG_WIFI_TO_INTERNET, config->gw_interface); |
|---|
| | 311 | |
|---|
| | 312 | |
|---|
| | 313 | iptables_do_command("-t filter -A " TABLE_WIFIDOG_WIFI_TO_INTERNET " -m state --state INVALID -j DROP"); |
|---|
| | 314 | |
|---|
| | 315 | /* XXX: Why this? it means that connections setup after authentication |
|---|
| | 316 | stay open even after the connection is done... |
|---|
| | 317 | iptables_do_command("-t filter -A " TABLE_WIFIDOG_WIFI_TO_INTERNET " -m state --state RELATED,ESTABLISHED -j ACCEPT");*/ |
|---|
| | 318 | |
|---|
| | 319 | //Won't this rule NEVER match anyway?!?!? benoitg, 2007-06-23 |
|---|
| | 320 | //iptables_do_command("-t filter -A " TABLE_WIFIDOG_WIFI_TO_INTERNET " -i %s -m state --state NEW -j DROP", ext_interface); |
|---|
| | 321 | |
|---|
| | 322 | /* TCPMSS rule for PPPoE */ |
|---|
| | 323 | iptables_do_command("-t filter -A " TABLE_WIFIDOG_WIFI_TO_INTERNET " -o %s -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu", ext_interface); |
|---|
| | 324 | |
|---|
| | 325 | iptables_do_command("-t filter -A " TABLE_WIFIDOG_WIFI_TO_INTERNET " -j " TABLE_WIFIDOG_AUTHSERVERS); |
|---|
| | 326 | iptables_fw_set_authservers(); |
|---|
| | 327 | |
|---|
| | 328 | iptables_do_command("-t filter -A " TABLE_WIFIDOG_WIFI_TO_INTERNET " -m mark --mark 0x%u -j " TABLE_WIFIDOG_LOCKED, FW_MARK_LOCKED); |
|---|
| | 329 | iptables_load_ruleset("filter", "locked-users", TABLE_WIFIDOG_LOCKED); |
|---|
| | 330 | |
|---|
| | 331 | iptables_do_command("-t filter -A " TABLE_WIFIDOG_WIFI_TO_INTERNET " -j " TABLE_WIFIDOG_GLOBAL); |
|---|
| | 332 | iptables_load_ruleset("filter", "global", TABLE_WIFIDOG_GLOBAL); |
|---|
| | 333 | iptables_load_ruleset("nat", "global", TABLE_WIFIDOG_GLOBAL); |
|---|
| | 334 | |
|---|
| | 335 | iptables_do_command("-t filter -A " TABLE_WIFIDOG_WIFI_TO_INTERNET " -m mark --mark 0x%u -j " TABLE_WIFIDOG_VALIDATE, FW_MARK_PROBATION); |
|---|
| | 336 | iptables_load_ruleset("filter", "validating-users", TABLE_WIFIDOG_VALIDATE); |
|---|
| | 337 | |
|---|
| | 338 | iptables_do_command("-t filter -A " TABLE_WIFIDOG_WIFI_TO_INTERNET " -m mark --mark 0x%u -j " TABLE_WIFIDOG_KNOWN, FW_MARK_KNOWN); |
|---|
| | 339 | iptables_load_ruleset("filter", "known-users", TABLE_WIFIDOG_KNOWN); |
|---|
| | 340 | |
|---|
| | 341 | iptables_do_command("-t filter -A " TABLE_WIFIDOG_WIFI_TO_INTERNET " -j " TABLE_WIFIDOG_UNKNOWN); |
|---|
| | 342 | iptables_load_ruleset("filter", "unknown-users", TABLE_WIFIDOG_UNKNOWN); |
|---|
| | 343 | iptables_do_command("-t filter -A " TABLE_WIFIDOG_UNKNOWN " -j REJECT --reject-with icmp-port-unreachable"); |
|---|
| | 344 | |
|---|
| | 345 | UNLOCK_CONFIG(); |
|---|
| | 346 | return 1; |
|---|